Добавляем пример написания модуля для расширения функций сценария и системы вцелом.

This commit is contained in:
2022-02-19 10:47:15 +03:00
parent 16a778269c
commit 7c48ca6c5a
3 changed files with 64 additions and 0 deletions

View File

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

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