Добавляем защиту от отсутствия синхронизации времени

This commit is contained in:
2022-08-23 10:06:45 +03:00
parent 62d6cc586a
commit aa3ba13859
4 changed files with 41 additions and 43 deletions

View File

@@ -131,6 +131,7 @@ struct Time_t {
extern Time_t _time_local; extern Time_t _time_local;
extern Time_t _time_utc; extern Time_t _time_utc;
extern bool _time_isTrust;
// extern DynamicJsonDocument settingsFlashJsonDoc; // extern DynamicJsonDocument settingsFlashJsonDoc;
// extern DynamicJsonDocument paramsFlashJsonDoc; // extern DynamicJsonDocument paramsFlashJsonDoc;

View File

@@ -67,6 +67,7 @@ String mqttRootDevice = "";
// Time // Time
Time_t _time_local; Time_t _time_local;
Time_t _time_utc; Time_t _time_utc;
bool _time_isTrust = false;
// DynamicJsonDocument settingsFlashJsonDoc(JSON_BUFFER_SIZE); // DynamicJsonDocument settingsFlashJsonDoc(JSON_BUFFER_SIZE);
// DynamicJsonDocument paramsFlashJsonDoc(JSON_BUFFER_SIZE); // DynamicJsonDocument paramsFlashJsonDoc(JSON_BUFFER_SIZE);

View File

@@ -25,6 +25,7 @@ void ntpInit() {
jsonWriteStr_(errorsHeapJson, F("timenow"), dateAndTime); jsonWriteStr_(errorsHeapJson, F("timenow"), dateAndTime);
SerialPrint("I", F("NTP"), "" + dateAndTime); SerialPrint("I", F("NTP"), "" + dateAndTime);
} }
_time_isTrust = true; // доверяем значению времени
}, },
nullptr, true); nullptr, true);

View File

@@ -299,7 +299,43 @@ enum SysOp {
}; };
IoTValue sysExecute(SysOp command, std::vector<IoTValue>& param) { IoTValue sysExecute(SysOp command, std::vector<IoTValue>& param) {
IoTValue value; IoTValue value = {};
if (_time_isTrust)
switch (command) {
case sysop_getHours:
value.valD = _time_local.hour;
break;
case sysop_getMinutes:
value.valD = _time_local.minute;
break;
case sysop_getSeconds:
value.valD = _time_local.second;
break;
case sysop_getMonth:
value.valD = _time_local.month;
break;
case sysop_getDay:
value.valD = _time_local.day_of_month;
break;
case sysop_gethhmm:
value.isDecimal = false;
value.valS = getTimeLocal_hhmm();
break;
case sysop_gethhmmss:
value.isDecimal = false;
value.valS = getTimeLocal_hhmmss();
break;
case sysop_getTime:
value.isDecimal = false;
value.valS = getDateTimeDotFormated();
break;
}
else {
value.isDecimal = false;
value.valS = "none";
}
switch (command) { switch (command) {
case sysop_reboot: case sysop_reboot:
ESP.restart(); ESP.restart();
@@ -308,28 +344,24 @@ IoTValue sysExecute(SysOp command, std::vector<IoTValue>& param) {
if (param.size()) { if (param.size()) {
IoTgpio.pinMode(param[0].valD, INPUT); IoTgpio.pinMode(param[0].valD, INPUT);
value.valD = IoTgpio.digitalRead(param[0].valD); value.valD = IoTgpio.digitalRead(param[0].valD);
return value;
} }
break; break;
case sysop_analogRead: case sysop_analogRead:
if (param.size()) { if (param.size()) {
IoTgpio.pinMode(param[0].valD, INPUT); IoTgpio.pinMode(param[0].valD, INPUT);
value.valD = IoTgpio.analogRead(param[0].valD); value.valD = IoTgpio.analogRead(param[0].valD);
return value;
} }
break; break;
case sysop_digitalWrite: case sysop_digitalWrite:
if (param.size() == 2) { if (param.size() == 2) {
IoTgpio.pinMode(param[0].valD, OUTPUT); IoTgpio.pinMode(param[0].valD, OUTPUT);
IoTgpio.digitalWrite(param[0].valD, param[1].valD); IoTgpio.digitalWrite(param[0].valD, param[1].valD);
return {};
} }
break; break;
case sysop_digitalInvert: case sysop_digitalInvert:
if (param.size()) { if (param.size()) {
IoTgpio.pinMode(param[0].valD, OUTPUT); IoTgpio.pinMode(param[0].valD, OUTPUT);
IoTgpio.digitalInvert(param[0].valD); IoTgpio.digitalInvert(param[0].valD);
return {};
} }
break; break;
case sysop_deepSleep: case sysop_deepSleep:
@@ -344,56 +376,19 @@ IoTValue sysExecute(SysOp command, std::vector<IoTValue>& param) {
#endif #endif
} }
break; break;
case sysop_getHours:
value.valD = _time_local.hour;
return value;
break;
case sysop_getMinutes:
value.valD = _time_local.minute;
return value;
break;
case sysop_getSeconds:
value.valD = _time_local.second;
return value;
break;
case sysop_getMonth:
value.valD = _time_local.month;
return value;
break;
case sysop_getDay:
value.valD = _time_local.day_of_month;
return value;
break;
case sysop_gethhmm:
value.isDecimal = false;
value.valS = getTimeLocal_hhmm();
return value;
break;
case sysop_gethhmmss:
value.isDecimal = false;
value.valS = getTimeLocal_hhmmss();
return value;
break;
case sysop_getTime:
value.isDecimal = false;
value.valS = getDateTimeDotFormated();
return value;
break;
case sysop_getIP: case sysop_getIP:
value.valS = jsonReadStr(settingsFlashJson, F("ip")); value.valS = jsonReadStr(settingsFlashJson, F("ip"));
value.isDecimal = false; value.isDecimal = false;
return value;
break; break;
case sysop_mqttPub: case sysop_mqttPub:
if (param.size() == 2) { if (param.size() == 2) {
//Serial.printf("Call from sysExecute %s %s\n", param[0].valS.c_str(), param[1].valS.c_str()); //Serial.printf("Call from sysExecute %s %s\n", param[0].valS.c_str(), param[1].valS.c_str());
value.valD = mqtt.publish(param[0].valS.c_str(), param[1].valS.c_str(), false); value.valD = mqtt.publish(param[0].valS.c_str(), param[1].valS.c_str(), false);
return value;
} }
break; break;
} }
return {}; return value;
} }
/// SysCallExprAST - Класс узла выражения для вызова системных команд. /// SysCallExprAST - Класс узла выражения для вызова системных команд.