From 7c48ca6c5ac5772a3da1e2f69374321ad4804574 Mon Sep 17 00:00:00 2001 From: biver Date: Sat, 19 Feb 2022 10:47:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D1=83=D0=BB=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0?= =?UTF-8?q?=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=84=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D0=B9=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=D1=80=D0=B8=D1=8F=20=D0=B8=20=D1=81=D0=B8=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D0=BC=D1=8B=20=D0=B2=D1=86=D0=B5=D0=BB=D0=BE=D0=BC.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data_svelte/items.json | 14 ++++++++++++ src/modules/API.cpp | 2 ++ src/modules/SysExt.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 src/modules/SysExt.cpp diff --git a/data_svelte/items.json b/data_svelte/items.json index 76ee2b84..c1b7c299 100644 --- a/data_svelte/items.json +++ b/data_svelte/items.json @@ -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 } ] \ 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/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; + } +}