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,
UPTIME,
UDP, // UDPP
TIMES,
TIMES, // периодические секундные проверки
PTASK,
ST,
END };
END};
//задачи которые надо протащить через loop
enum NotAsyncActions {

View File

@@ -94,6 +94,22 @@ void setup() {
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
Serial.println("-------test start--------");
Serial.println("--------test end---------");
@@ -149,19 +165,6 @@ void loop() {
loopPeriod = millis() - st;
if (loopPeriod > 2) Serial.println(loopPeriod);
#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

View File

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