Files
IoTManager/src/Main.cpp

202 lines
6.0 KiB
C++
Raw Normal View History

#include "Main.h"
#include <time.h>
#include "classes/IoTDB.h"
#include "utils/Statistic.h"
#include <Wire.h>
2021-12-22 14:09:50 +01:00
IoTScenario iotScen; // объект управления сценарием
String volStrForSave = "";
unsigned long currentMillis;
unsigned long prevMillis;
2021-12-22 14:09:50 +01:00
void setup() {
Serial.begin(115200);
Serial.flush();
Serial.println();
Serial.println(F("--------------started----------------"));
//создание экземпляров классов
// myNotAsyncActions = new NotAsync(do_LAST);
//инициализация файловой системы
2021-12-22 14:09:50 +01:00
fileSystemInit();
Serial.println(F("------------------------"));
Serial.println("FIRMWARE NAME " + String(FIRMWARE_NAME));
Serial.println("FIRMWARE VERSION " + String(FIRMWARE_VERSION));
Serial.println("WEB VERSION " + getWebVersion());
Serial.println(F("------------------------"));
2021-12-22 14:09:50 +01:00
//получение chip id
setChipId();
//синхронизация глобальных переменных с flash
globalVarsSync();
//подключаемся к роутеру
routerConnect();
//инициализация асинхронного веб сервера и веб сокетов
#ifdef ASYNC_WEB_SERVER
asyncWebServerInit();
#endif
#ifdef ASYNC_WEB_SOCKETS
asyncWebSocketsInit();
#endif
//инициализация стандартного веб сервера и веб сокетов
#ifdef STANDARD_WEB_SERVER
standWebServerInit();
#endif
#ifdef STANDARD_WEB_SOCKETS
standWebSocketsInit();
#endif
// NTP
ntpInit();
2022-08-18 14:57:58 +02:00
//инициализация mqtt
mqttInit();
// настраиваем i2c шину
int pinSCL, pinSDA, i2cFreq;
jsonRead(settingsFlashJson, "pinSCL", pinSCL, false);
jsonRead(settingsFlashJson, "pinSDA", pinSDA, false);
jsonRead(settingsFlashJson, "i2cFreq", i2cFreq, false);
if (pinSCL && pinSDA && i2cFreq) {
#ifdef esp32_4mb
Wire.end();
Wire.begin(pinSDA, pinSCL, (uint32_t)i2cFreq);
#else
Wire.begin(pinSDA, pinSCL);
Wire.setClock(i2cFreq);
#endif
}
//настраиваем микроконтроллер
configure("/config.json");
//инициализация задач переодического выполнения
periodicTasksInit();
//синхронизация списка устройств
addThisDeviceToList();
//запуск работы udp
asyncUdpInit();
2022-09-08 00:27:38 +02:00
//подготавливаем сценарии
iotScen.loadScenario("/scenario.txt");
// создаем событие завершения конфигурирования для возможности выполнения блока кода при загрузке
createItemFromNet("onStart", "1", 1);
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---------");
// симуляция добавления внешних событий
// IoTItems.push_back((IoTItem*)new externalVariable("{\"id\":\"rel1\",\"val\":10,\"int\":20}"));
// IoTItems.push_back((IoTItem*)new externalVariable("{\"id\":\"rel4\",\"val\":34,\"int\":30}"));
// пример получения JSON всех Items
// Serial.println(getParamsJson());
//чтение одного параметра
// Serial.println(findIoTItem("t1")->getValue());
//тест перебора пинов из расширения
// for (int i = 109; i < 112; i++) {
// IoTgpio.pinMode(i, OUTPUT);
// IoTgpio.digitalWrite(i, !IoTgpio.digitalRead(i));
// delay(1000);
// IoTgpio.digitalWrite(i, !IoTgpio.digitalRead(i));
// delay(1000);
// }
2021-12-22 14:09:50 +01:00
}
void loop() {
2022-10-12 03:14:55 +02:00
#ifdef LOOP_DEBUG
unsigned long st = millis();
#endif
2021-12-23 17:55:46 +01:00
ts.update();
#ifdef STANDARD_WEB_SERVER
HTTP.handleClient();
#endif
#ifdef STANDARD_WEB_SOCKETS
standWebSocket.loop();
#endif
2022-01-15 19:11:01 +01:00
mqttLoop();
// передаем управление каждому элементу конфигурации для выполнения своих функций
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
(*it)->loop();
//if ((*it)->iAmDead) {
if (!((*it)->iAmLocal) && (*it)->getIntFromNet() == -1) {
delete *it;
IoTItems.erase(it);
break;
}
}
handleOrder();
handleEvent();
2022-10-12 03:14:55 +02:00
#ifdef LOOP_DEBUG
loopPeriod = millis() - st;
if (loopPeriod > 2) Serial.println(loopPeriod);
2022-09-08 00:27:38 +02:00
#endif
2021-12-22 14:09:50 +01:00
}
2022-10-12 03:14:55 +02:00
//отправка json
//#ifdef QUEUE_FROM_STR
// if (sendJsonFiles) sendJsonFiles->loop();
//#endif
// if(millis()%2000==0){
// //watch->settimeUnix(time(&iotTimeNow));
// Serial.println(watch->gettime("d-m-Y, H:i:s, M"));
// delay(1);
// }
// File dir = FileFS.open("/", "r");
// String out;
// printDirectory(dir, out);
// Serial.println(out);
//=======проверка очереди из структур=================
// myDB = new IoTDB;
// QueueItems myItem;
// myItem.myword = "word1";
// myDB->push(myItem);
// myItem.myword = "word2";
// myDB->push(myItem);
// myItem.myword = "word3";
// myDB->push(myItem);
// Serial.println(myDB->front().myword);
// Serial.println(myDB->front().myword);
// Serial.println(myDB->front().myword);
// Serial.println(FileList("lg"));