2022-01-15 17:41:12 +01:00
|
|
|
|
#include "ESPConfiguration.h"
|
2022-02-14 18:33:52 +03:00
|
|
|
|
#include "classes/IoTGpio.h"
|
2025-01-06 20:35:19 +03:00
|
|
|
|
//#include "classes/IoTDiscovery.h"
|
2022-02-14 18:33:52 +03:00
|
|
|
|
|
|
|
|
|
|
extern IoTGpio IoTgpio;
|
2022-01-15 17:10:14 +01:00
|
|
|
|
|
2022-02-25 14:03:30 +03:00
|
|
|
|
std::list<IoTItem*> IoTItems;
|
2022-01-16 13:31:05 +01:00
|
|
|
|
void* getAPI(String subtype, String params);
|
|
|
|
|
|
|
2022-01-15 02:01:22 +01:00
|
|
|
|
void configure(String path) {
|
2022-01-14 20:42:11 +01:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2022-01-15 02:01:22 +01:00
|
|
|
|
file.find("[");
|
2022-01-14 20:42:11 +01:00
|
|
|
|
while (file.available()) {
|
|
|
|
|
|
String jsonArrayElement = file.readStringUntil('}') + "}";
|
2022-01-15 02:01:22 +01:00
|
|
|
|
if (jsonArrayElement.startsWith(",")) {
|
|
|
|
|
|
jsonArrayElement = jsonArrayElement.substring(1, jsonArrayElement.length()); //это нужно оптимизировать в последствии
|
|
|
|
|
|
}
|
2022-02-16 00:53:52 +01:00
|
|
|
|
if (jsonArrayElement == "]}") {
|
|
|
|
|
|
jsonArrayElement = "";
|
|
|
|
|
|
}
|
|
|
|
|
|
if (jsonArrayElement != "") {
|
2025-02-14 17:32:01 +03:00
|
|
|
|
IoTItem* myIoTItem;
|
2022-02-16 00:53:52 +01:00
|
|
|
|
String subtype;
|
|
|
|
|
|
if (!jsonRead(jsonArrayElement, F("subtype"), subtype)) { //если нет такого ключа в представленном json или он не валидный
|
|
|
|
|
|
SerialPrint(F("E"), F("Config"), "json error " + subtype);
|
|
|
|
|
|
continue;
|
|
|
|
|
|
} else {
|
2022-08-12 22:13:50 +02:00
|
|
|
|
//(IoTItem*) - getAPI вернула ссылку, что бы ее привести к классу IoTItem используем
|
2022-02-16 00:53:52 +01:00
|
|
|
|
myIoTItem = (IoTItem*)getAPI(subtype, jsonArrayElement);
|
|
|
|
|
|
if (myIoTItem) {
|
2022-10-01 22:58:27 +03:00
|
|
|
|
void* driver;
|
2022-04-24 23:32:06 +03:00
|
|
|
|
// пробуем спросить драйвер GPIO
|
2022-10-01 22:58:27 +03:00
|
|
|
|
if (driver = myIoTItem->getGpioDriver()) IoTgpio.regDriver((IoTGpio*)driver);
|
2023-02-17 20:26:29 +03:00
|
|
|
|
// пробуем спросить драйвер 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;
|
2022-02-16 00:53:52 +01:00
|
|
|
|
IoTItems.push_back(myIoTItem);
|
|
|
|
|
|
}
|
2022-01-16 12:17:53 +05:00
|
|
|
|
}
|
2022-01-14 20:42:11 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
file.close();
|
2022-02-16 00:53:52 +01:00
|
|
|
|
SerialPrint("i", "Config", "Configured");
|
2025-01-06 20:35:19 +03:00
|
|
|
|
/*
|
|
|
|
|
|
#ifdef ESP32
|
|
|
|
|
|
if(HOMEdDiscovery)
|
|
|
|
|
|
HOMEdDiscovery->mqttSubscribeDiscovery();
|
|
|
|
|
|
if(HADiscovery)
|
|
|
|
|
|
HADiscovery->mqttSubscribeDiscovery();
|
|
|
|
|
|
// оттправляем все статусы
|
|
|
|
|
|
if(HOMEdDiscovery || HADiscovery)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it)
|
|
|
|
|
|
{
|
|
|
|
|
|
if ((*it)->iAmLocal)
|
|
|
|
|
|
{
|
|
|
|
|
|
publishStatusMqtt((*it)->getID(), (*it)->getValue());
|
|
|
|
|
|
(*it)->onMqttWsAppConnectEvent();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
*/
|
2022-02-14 22:20:35 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void clearConfigure() {
|
|
|
|
|
|
Serial.printf("Start clearing config\n");
|
2023-02-17 20:26:29 +03:00
|
|
|
|
rtcItem = nullptr;
|
2023-10-02 21:29:02 +03:00
|
|
|
|
//camItem = nullptr;
|
2024-02-26 23:29:02 +03:00
|
|
|
|
tlgrmItem = nullptr;
|
2023-02-17 20:26:29 +03:00
|
|
|
|
IoTgpio.clearDrivers();
|
|
|
|
|
|
|
2022-08-12 22:13:50 +02:00
|
|
|
|
for (std::list<IoTItem*>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
|
2022-04-28 10:05:28 +03:00
|
|
|
|
Serial.printf("Start delete iotitem %s \n", (*it)->getID().c_str());
|
2022-02-25 14:03:30 +03:00
|
|
|
|
if (*it) delete *it;
|
2022-02-14 22:20:35 +03:00
|
|
|
|
}
|
|
|
|
|
|
IoTItems.clear();
|
2024-09-20 12:45:17 +03:00
|
|
|
|
#ifdef LIBRETINY
|
2024-09-20 12:19:15 +03:00
|
|
|
|
valuesFlashJson.remove(0, valuesFlashJson.length());
|
|
|
|
|
|
#else
|
2022-10-20 11:47:29 +03:00
|
|
|
|
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
|
|
|
|
}
|