diff --git a/src/Main.cpp b/src/Main.cpp index 7c3ba04a..e015e536 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -1,7 +1,16 @@ #include "Main.h" +#include "classes/IoTRTC.h" +#include IoTScenario iotScen; // объект управления сценарием +IoTRTC *watch; // объект хранения времени, при старте часы 00:00 +time_t iotTimeNow; + +String volStrForSave = ""; +unsigned long currentMillis; +unsigned long prevMillis; + void setup() { Serial.begin(115200); Serial.flush(); @@ -23,6 +32,28 @@ void setup() { //подключаемся к роутеру routerConnect(); + // настраиваем получение времени из сети Интернет + String ntpServer = jsonReadStr(settingsFlashJson, F("ntp")); + int timezone = jsonReadInt(settingsFlashJson, F("timezone")); + configTime(3600*timezone, 0, ntpServer.c_str(), "ru.pool.ntp.org", "pool.ntp.org"); + Serial.print("Syncing NTP time"); + int i = 0; + while (isNetworkActive() && iotTimeNow < 1510592825 && i < 200) + { + time(&iotTimeNow); + delay(300); + Serial.print("."); + i++; + } + Serial.println(); + + // настраиваем локальный RTC + watch = new IoTRTC(0); // создаем объект главного хранилища времени, но с заглушкой (0) для получения системного времени + watch->period(60); // время в минутах для синхронизации с часами реального времени или системным + watch->begin(); + Serial.print(F("Time from Local: ")); + Serial.println(watch->gettime("d-m-Y, H:i:s, M")); + //инициализация асинхронного веб сервера и веб сокетов #ifdef ASYNC_WEB_SERVER asyncWebServerInit(); @@ -83,6 +114,13 @@ void setup() { } void loop() { + // if(millis()%2000==0){ + // //watch->settimeUnix(time(&iotTimeNow)); + // Serial.println(watch->gettime("d-m-Y, H:i:s, M")); + // delay(1); + // } + + //обновление задач таскера ts.update(); @@ -118,5 +156,24 @@ void loop() { handleEvent(); - // iotScen.ExecScenario(); + // сохраняем значения IoTItems в файл каждую секунду, если были изменения (установлены маркеры на сохранение) + currentMillis = millis(); + if (currentMillis - prevMillis >= 1000) { + prevMillis = millis(); + volStrForSave = ""; + for (std::list::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) { + if ((*it)->needSave) { + (*it)->needSave = false; + volStrForSave = volStrForSave + (*it)->getID() + "=" + (*it)->getValue() + ";"; + } + } + + if (volStrForSave != "") { + Serial.print("volStrForSave: "); + Serial.println(volStrForSave.c_str()); + } + } + + + }