diff --git a/data_svelte/items.json b/data_svelte/items.json index cec27757..c1b7c299 100644 --- a/data_svelte/items.json +++ b/data_svelte/items.json @@ -163,8 +163,6 @@ "descr": "AHT20 Температура", "int": 15, "addr": "0x38", - "plus": 0, - "multiply": 1, "round": 1 }, { @@ -178,8 +176,6 @@ "descr": "AHT20 Влажность", "int": 15, "addr": "0x38", - "plus": 0, - "multiply": 1, "round": 1 }, { @@ -193,8 +189,6 @@ "descr": "1080 Температура", "int": 15, "addr": "0x40", - "plus": 0, - "multiply": 1, "round": 1 }, { @@ -208,8 +202,6 @@ "descr": "1080 Влажность", "int": 15, "addr": "0x40", - "plus": 0, - "multiply": 1, "round": 1 }, { @@ -221,10 +213,8 @@ "widget": "anydataTmp", "page": "Сенсоры", "descr": "Температура", - "plus": 0, - "multiply": 1, "round": 1, - "int": 1 + "int": 15 }, { "name": "17. Cенсор влажности GY21", @@ -235,10 +225,8 @@ "widget": "anydataHum", "page": "Сенсоры", "descr": "Влажность", - "plus": 0, - "multiply": 1, "round": 1, - "int": 1 + "int": 15 }, { "header": "Экраны" @@ -272,5 +260,19 @@ "size": "16,2", "coord": "0,0", "id2show": "id датчика" + }, + { + "header": "Расширения" + }, + { + "name": "20. Доп. функции системы", + "num": 20, + "type": "Reading", + "subtype": "SysExt", + "id": "SysExt", + "widget": "", + "page": "", + "descr": "", + "int": 15 } ] \ No newline at end of file diff --git a/src/modules/API.cpp b/src/modules/API.cpp index 2cb32ae0..52364d37 100644 --- a/src/modules/API.cpp +++ b/src/modules/API.cpp @@ -12,6 +12,7 @@ void* getAPI_Aht20(String subtype, String params); void* getAPI_Hdc1080(String subtype, String params); void* getAPI_GY21(String subtype, String params); void* getAPI_Lcd2004(String subtype, String params); +void* getAPI_SysExt(String subtype, String params); //============================================================================================ void* getAPI(String subtype, String params) { @@ -28,6 +29,7 @@ void* getAPI(String subtype, String params) { if ((tmpAPI = getAPI_Hdc1080(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_GY21(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Lcd2004(subtype, params)) != nullptr) return tmpAPI; + if ((tmpAPI = getAPI_SysExt(subtype, params)) != nullptr) return tmpAPI; //================================================================================================================ return nullptr; diff --git a/src/modules/Aht20.cpp b/src/modules/Aht20.cpp index 2d5c1956..e59bdf35 100644 --- a/src/modules/Aht20.cpp +++ b/src/modules/Aht20.cpp @@ -22,7 +22,7 @@ class Aht20t : public IoTItem { void doByInterval() { value.valD = temp.temperature; - if (String(value.valD) != "nan") regEvent(value.valD, "Aht20t"); + if (value.valD != -200) regEvent(value.valD, "Aht20t"); // todo: найти способ понимания ошибки получения данных else SerialPrint("E", "Sensor AHTt", "Error"); } @@ -36,7 +36,7 @@ class Aht20h : public IoTItem { void doByInterval() { value.valD = humidity.relative_humidity; - if (String(value.valD) != "nan") regEvent(value.valD, "Aht20t"); + if (value.valD != -200) regEvent(value.valD, "Aht20h"); // todo: найти способ понимания ошибки получения данных else SerialPrint("E", "Sensor AHTt", "Error"); } diff --git a/src/modules/GY-21.cpp b/src/modules/GY-21.cpp index 213f7501..b341fa2e 100644 --- a/src/modules/GY-21.cpp +++ b/src/modules/GY-21.cpp @@ -20,7 +20,7 @@ class GY21t : public IoTItem { void doByInterval() { //wire->read(); value.valD = sensor->GY21_Temperature(); - if (value.valD > -46.85F) regEvent(value.valD, "GY21"); + if (value.valD < 300) regEvent(value.valD, "GY21"); // todo: найти способ понимания ошибки получения данных else SerialPrint("E", "Sensor GY21t", "Error"); } @@ -34,7 +34,7 @@ class GY21h : public IoTItem { void doByInterval() { //sht->read(); value.valD = sensor->GY21_Humidity(); - if (value.valD != -6) regEvent(value.valD, "GY21h"); + if (value.valD != 0) regEvent(value.valD, "GY21h"); // todo: найти способ понимания ошибки получения данных else SerialPrint("E", "Sensor GY21h", "Error"); } diff --git a/src/modules/Hdc1080.cpp b/src/modules/Hdc1080.cpp index 8f728246..721793d8 100644 --- a/src/modules/Hdc1080.cpp +++ b/src/modules/Hdc1080.cpp @@ -21,7 +21,7 @@ class Hdc1080t : public IoTItem { void doByInterval() { value.valD = hdc1080.readTemperature(); - if (value.valD > -46.85F) regEvent(value.valD, "Hdc1080t"); + if (value.valD < 124) regEvent(value.valD, "Hdc1080t"); else SerialPrint("E", "Sensor Hdc1080t", "Error"); } @@ -34,7 +34,7 @@ class Hdc1080h : public IoTItem { void doByInterval() { value.valD = hdc1080.readHumidity(); - if (value.valD > -46.85F) regEvent(value.valD, "Hdc1080h"); + if (value.valD < 99 ) regEvent(value.valD, "Hdc1080h"); else SerialPrint("E", "Sensor Hdc1080h", "Error"); } diff --git a/src/modules/SysExt.cpp b/src/modules/SysExt.cpp new file mode 100644 index 00000000..4c04cc2d --- /dev/null +++ b/src/modules/SysExt.cpp @@ -0,0 +1,48 @@ +#include "Global.h" +#include "classes/IoTItem.h" + +// Пример модуля расширения возможностей системы на примере добавления новых команд в сценарии +// При комбинации использования doByInterval() и execute() можно обеспечить интеграцию с внешними сервисами, такими как Telegram, например. +// + +class SysExt : public IoTItem { + public: + SysExt(String parameters): IoTItem(parameters) { + // инициализация внутренних переменных и объектов для взаимодействия с внешними системами + //jsonRead(parameters, "addr", addr); // получаем параметры из настроек модуля. Наименования могут быть любыми. + } + + void doByInterval() { + // выполнение периодических проверок каждые Int секунд из настроек модуля + + //regEvent(Значение, Описание); // регистрация найденного события после проверок для запуска сценариев и других реакций в системе + } + + //void loop() { + // выполнение необходимых проверок в теле основного цикла программы. + // ВАЖНО: 1. при использовании loop() отключается doByInterval() + // 2. любые заминки в данном цикле повлияют на общую работу системы + //} + + IoTValue execute(String command, std::vector ¶m) { + // реакция на вызов команды модуля из сценария + // String command - имя команды после ID. (ID.Команда()) + // param - вектор ("массив") значений параметров переданных вместе с командой: ID.Команда("пар1", 22, 33) -> param[0].ValS = "пар1", param[1].ValD = 22 + + if (command == "reboot") { // выполняем код при вызове спец команды из сценария: ID.reboot(); + ESP.restart(); + } + + return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки + } + + ~SysExt(){}; +}; + +void* getAPI_SysExt(String subtype, String param) { + if (subtype == F("SysExt")) { + return new SysExt(param); + } else { + return nullptr; + } +}