mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
Добавляем защиту от отсутствия синхронизации времени
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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 - Класс узла выражения для вызова системных команд.
|
||||||
|
|||||||
Reference in New Issue
Block a user