Files
IoTManager/src/ESPConfiguration.cpp

78 lines
3.4 KiB
C++
Raw Normal View History

2022-01-15 17:41:12 +01:00
#include "ESPConfiguration.h"
#include "classes/IoTGpio.h"
extern IoTGpio IoTgpio;
std::list<IoTItem*> IoTItems;
2022-01-16 13:31:05 +01:00
void* getAPI(String subtype, String params);
void configure(String path) {
File file = seekFile(path);
2024-09-20 12:19:15 +03:00
if (!file) {
SerialPrint(F("E"), F("FS"), F("configure file open error"));
return;
}
file.find("[");
while (file.available()) {
String jsonArrayElement = file.readStringUntil('}') + "}";
if (jsonArrayElement.startsWith(",")) {
jsonArrayElement = jsonArrayElement.substring(1, jsonArrayElement.length()); //это нужно оптимизировать в последствии
}
if (jsonArrayElement == "]}") {
jsonArrayElement = "";
}
if (jsonArrayElement != "") {
String subtype;
if (!jsonRead(jsonArrayElement, F("subtype"), subtype)) { //если нет такого ключа в представленном json или он не валидный
SerialPrint(F("E"), F("Config"), "json error " + subtype);
continue;
} else {
//(IoTItem*) - getAPI вернула ссылку, что бы ее привести к классу IoTItem используем
myIoTItem = (IoTItem*)getAPI(subtype, jsonArrayElement);
if (myIoTItem) {
void* driver;
// пробуем спросить драйвер GPIO
if (driver = myIoTItem->getGpioDriver()) IoTgpio.regDriver((IoTGpio*)driver);
// пробуем спросить драйвер RTC
if (driver = myIoTItem->getRtcDriver()) rtcItem = (IoTItem*)driver;
2023-10-02 21:29:02 +03:00
// пробуем спросить драйвер CAM
//if (driver = myIoTItem->getCAMDriver()) camItem = (IoTItem*)driver;
2024-02-26 23:29:02 +03:00
// пробуем спросить драйвер Benchmark
if (driver = myIoTItem->getBenchmarkTask()) benchTaskItem = ((IoTBench*)driver);
if (driver = myIoTItem->getBenchmarkLoad()) benchLoadItem = ((IoTBench*)driver);
2024-09-20 12:19:15 +03:00
// пробуем спросить драйвер для интеграций
if (driver = myIoTItem->getHOMEdDiscovery()) HOMEdDiscovery = ((IoTDiscovery*)driver);
if (driver = myIoTItem->getHADiscovery()) HADiscovery = ((IoTDiscovery*)driver);
2023-10-02 21:29:02 +03:00
// пробуем спросить драйвер Telegram_v2
if (driver = myIoTItem->getTlgrmDriver()) tlgrmItem = (IoTItem*)driver;
IoTItems.push_back(myIoTItem);
}
}
}
}
file.close();
SerialPrint("i", "Config", "Configured");
}
void clearConfigure() {
Serial.printf("Start clearing config\n");
rtcItem = nullptr;
2023-10-02 21:29:02 +03:00
//camItem = nullptr;
2024-02-26 23:29:02 +03:00
tlgrmItem = nullptr;
IoTgpio.clearDrivers();
for (std::list<IoTItem*>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
Serial.printf("Start delete iotitem %s \n", (*it)->getID().c_str());
if (*it) delete *it;
}
IoTItems.clear();
2024-09-20 12:19:15 +03:00
#ifdef libretiny
valuesFlashJson.remove(0, valuesFlashJson.length());
#else
valuesFlashJson.clear();
2024-09-20 12:19:15 +03:00
#endif
2024-02-26 23:29:02 +03:00
benchTaskItem = nullptr;
benchLoadItem = nullptr;
2024-09-20 12:19:15 +03:00
HOMEdDiscovery = nullptr;
HADiscovery = nullptr;
2022-01-14 20:22:52 +01:00
}