Merge pull request #222 from biveraxe/ver4dev

Исправляем ошибку с выполнением периодичных секундных операций
This commit is contained in:
2022-10-30 20:51:26 +03:00
committed by GitHub
3 changed files with 20 additions and 17 deletions

View File

@@ -54,10 +54,10 @@ enum TimerTask_t { WIFI_SCAN,
TIME_SYNC, TIME_SYNC,
UPTIME, UPTIME,
UDP, // UDPP UDP, // UDPP
TIMES, TIMES, // периодические секундные проверки
PTASK, PTASK,
ST, ST,
END }; END};
//задачи которые надо протащить через loop //задачи которые надо протащить через loop
enum NotAsyncActions { enum NotAsyncActions {

View File

@@ -94,6 +94,22 @@ void setup() {
stInit(); stInit();
// настраиваем секундные обслуживания системы
ts.add(
TIMES, 1000, [&](void*) {
// сохраняем значения IoTItems в файл каждую секунду, если были изменения (установлены маркеры на сохранение)
if (needSaveValues) {
syncValuesFlashJson();
needSaveValues = false;
}
// проверяем все элементы на тухлость
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
(*it)->checkIntFromNet();
}
},
nullptr, true);
// test // test
Serial.println("-------test start--------"); Serial.println("-------test start--------");
Serial.println("--------test end---------"); Serial.println("--------test end---------");
@@ -149,19 +165,6 @@ void loop() {
loopPeriod = millis() - st; loopPeriod = millis() - st;
if (loopPeriod > 2) Serial.println(loopPeriod); if (loopPeriod > 2) Serial.println(loopPeriod);
#endif #endif
if (millis()%1000 == 0) {
// сохраняем значения IoTItems в файл каждую секунду, если были изменения (установлены маркеры на сохранение)
if (needSaveValues) {
syncValuesFlashJson();
needSaveValues = false;
}
// проверяем все элементы на тухлость
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
(*it)->checkIntFromNet();
}
}
} }
//отправка json //отправка json

View File

@@ -167,11 +167,11 @@ void mqttCallback(char* topic, uint8_t* payload, size_t length) {
String devId = selectFromMarkerToMarker(topicStr, "/", 2); String devId = selectFromMarkerToMarker(topicStr, "/", 2);
String id = selectFromMarkerToMarker(topicStr, "/", 3); String id = selectFromMarkerToMarker(topicStr, "/", 3);
String valAsStr; String valAsStr;
jsonRead(payloadStr, F("val"), valAsStr, false); if (!jsonRead(payloadStr, F("val"), valAsStr, false)) valAsStr = payloadStr;
IoTItem* itemExist = findIoTItem(id); IoTItem* itemExist = findIoTItem(id);
if (itemExist) { if (itemExist) {
unsigned long interval; unsigned long interval = 0;
jsonRead(payloadStr, F("int"), interval); jsonRead(payloadStr, F("int"), interval);
itemExist->setInterval(interval); // устанавливаем такой же интервал как на источнике события itemExist->setInterval(interval); // устанавливаем такой же интервал как на источнике события
itemExist->setValue(valAsStr, false); // только регистрируем изменения в интерфейсе без создания цикла сетевых событий itemExist->setValue(valAsStr, false); // только регистрируем изменения в интерфейсе без создания цикла сетевых событий