Merge pull request #135 from biveraxe/ver4dev

Добавляем пример написания модуля для расширения функций сценария и системы в целом.
This commit is contained in:
Dmitry Borisenko
2022-02-19 15:41:21 +01:00
committed by GitHub
6 changed files with 72 additions and 20 deletions

View File

@@ -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
}
]

View File

@@ -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;

View File

@@ -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");
}

View File

@@ -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");
}

View File

@@ -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");
}

48
src/modules/SysExt.cpp Normal file
View File

@@ -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<IoTValue> &param) {
// реакция на вызов команды модуля из сценария
// 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;
}
}