Добавляем IoTVariable для дальнейшей доработки

This commit is contained in:
2021-12-30 11:56:08 +03:00
parent ee94853ad9
commit 6a7653c7ff
7 changed files with 118 additions and 38 deletions

View File

@@ -5,7 +5,7 @@
class IoTSensor {
public:
IoTSensor();
virtual ~IoTSensor();
~IoTSensor();
void loop();
virtual void doByInterval();

View File

@@ -8,17 +8,17 @@ class IoTVariable {
~IoTVariable();
virtual String execute(String command);
virtual void selfExec();
virtual void loop();
void init(String key, String value);
void setValue(String value);
void getValue(String value);
void init(String key, String id);
void regEvent(String value, String consoleInfo);
String _widgetName; //название виджета на фронтэнде для правильного отображения информации из меременной
String _key; //код переменной для идентификации событий, команд в сценариях
String _title;
String getKey();
String getID();
protected:
String _key; //имя переменной, для идентификации при работе с несколькими переменными в одном модуле
String _id; //код переменной для идентификации событий, команд в сценариях и логах
private:
String _value; //значение переменной
};

View File

@@ -26,9 +26,11 @@
#include "Class/IoTModule.h"
#include "Class/IoTSensor.h"
#include "Class/IoTVariable.h"
extern std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
extern std::vector<IoTSensor*> iotSensors; //v3dev: вектор ссылок базового класса IoTSensor - список всех запущенных сенсоров
extern std::vector<IoTVariable*> iotVariables; //v3dev: вектор ссылок базового класса IoTVariable - список всех подготовленных переменных
void loopCmdAdd(const String& cmdStr) {
if (cmdStr.endsWith(",")) {
@@ -168,25 +170,24 @@ void csvCmdExecute(String& cmdStr) {
//del SerialPrint("I", "moduleInfo.name", moduleInfo.name);
//del SerialPrint("I", "order", order);
if (moduleInfo.name == order) { //проверка вхождения имени искомого модуля в ключе элемента настройки
if (moduleInfo.type == "Sensor") {
myLineParsing.update(); //v3dev: пока используем мостик для совместимости версий, предполагается, что настройки сразу будут в JSON
String interval = myLineParsing.gint();
if (interval == "") interval = "50";
String pin = myLineParsing.gpin();
String index = myLineParsing.gindex();
String addr = myLineParsing.gaddr();
String c = myLineParsing.gc();
String id = myLineParsing.gkey();
String key = myLineParsing.gfile();
String db = myLineParsing.gdb();
myLineParsing.clear();
String strTmp = "{\"key\": \"" + key + "\", \"id\": \"" + id + "\", \"addr\": \"" + addr + "\", \"int\": \"" + interval + "\", \"pin\": \"" + pin + "\", \"index\": \"" + index + "\", \"c\": \"" + c + "\", \"db\": \"" + db + "\"}";
myLineParsing.update(); //v3dev: пока используем мостик для совместимости версий, предполагается, что настройки сразу будут в JSON
String interval = myLineParsing.gint();
if (interval == "") interval = "50";
String pin = myLineParsing.gpin();
String index = myLineParsing.gindex();
String addr = myLineParsing.gaddr();
String c = myLineParsing.gc();
String id = myLineParsing.gkey();
String key = myLineParsing.gfile();
String db = myLineParsing.gdb();
myLineParsing.clear();
String strTmp = "{\"key\": \"" + key + "\", \"id\": \"" + id + "\", \"addr\": \"" + addr + "\", \"int\": \"" + interval + "\", \"pin\": \"" + pin + "\", \"index\": \"" + index + "\", \"c\": \"" + c + "\", \"db\": \"" + db + "\"}";
SerialPrint("I", "Строка параметров при инициализации модуля " + moduleInfo.name + ": ", strTmp);
SerialPrint("I", "Строка параметров при инициализации модуля " + moduleInfo.name + ": ", strTmp);
if (moduleInfo.type == "Sensor") {
iotSensors.push_back((IoTSensor*)iotModules[i]->initInstance(strTmp));
} else if (moduleInfo.type == "Container")
{
//iot.push_back((IoTSensor*)iotModules[i]->initInstance(moduleInfo.parameters));
} else if (moduleInfo.type == "Variable") {
iotVariables.push_back((IoTVariable*)iotModules[i]->initInstance(strTmp));
}
}
}

View File

@@ -6,24 +6,26 @@
IoTVariable::IoTVariable() {}
IoTVariable::~IoTVariable() {}
String execute(String command) {}
String IoTVariable::execute(String command) { return "";}
void IoTVariable::selfExec() {}
void IoTVariable::loop() {}
void IoTVariable::init(String key, String value) {
void IoTVariable::init(String key, String id) {
_key = key;
_id = id;
}
void setValue(String value) {
};
void getValue(String value ){
};
void IoTVariable::regEvent(String value, String consoleInfo = "") {
eventGen2(_key, String(value));
jsonWriteStr(configLiveJson, _key, String(value));
publishStatus(_key, String(value));
SerialPrint("I", "Sensor", "'" + _key + "' data: " + String(value) + "' " + consoleInfo);
}
}
String IoTVariable::getKey() {
return _key;
}
String IoTVariable::getID() {
return _id;
};

View File

@@ -0,0 +1,71 @@
#include "Utils/JsonUtils.h"
#include "Utils/SerialPrint.h"
#include "Utils/StringUtils.h"
#include "Class/IoTVariable.h"
#include "Class/IoTModule.h"
extern std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
class IoTVariableVirtual: public IoTVariable {
private:
//описание переменных экземпляра Variable - аналог глобальных переменных из Arduino
String value;
//описание параметров передаваемых из настроек переменной из веба
public:
//аналог setup() из Arduino
IoTVariableVirtual(String parameters) {
//передаем часть базовых параметров в конструктор базового класса для обеспечения работы его методов
init(jsonReadStr(parameters, "key"), jsonReadStr(parameters, "id"));
}
~IoTVariableVirtual() {}
//аналог loop() из Arduino
void loop() {
}
//вызывается при выполнении команды связанной с конкретным экземпляром переменной
String execute(String command) {
return "";
}
//вызывается при любом изменении переменной
void selfExec() {
}
};
//технический класс для взаимодействия с ядром, меняются только названия
class IoTModuleVariable: public IoTModule {
//обязательный метод для инициализации экземпляра переменной, вызывается при чтении конфигурации.
void* initInstance(String parameters) {
return new IoTVariableVirtual(parameters);
};
//обязательный к заполнению метод, если модуль использует свои глобальные переменные. Необходимо сбросить и очистить используемую память.
void clear() {
//и так чисто
}
//обязательный метод для отправки информации о модуле,
ModuleInfo getInfo() {
ModuleInfo MI;
MI.name = "variable";
MI.title = "Переменная для хранения значений пользователя";
MI.parameters = "{\"key\": \"variable\", \"id\": \"var\"}";
MI.type = "Variable";
return MI;
};
};
//точка входа в модуль для заполнения вектора, требуется только изменить имя и прописать в файле api.cpp
void getApiIoTVariableVirtual() {
iotModules.push_back(new IoTModuleVariable());
return;
}

View File

@@ -4,10 +4,14 @@ void getApiIoTSensorDallasTemp();
void getApiIoTSensorSHT20();
void getApiIoTSensorButtonIn();
void getApiIoTVariableVirtual();
//формируем вектор модулей путем вызова из каждого модуля специальной функции
//в дальнейшем предполагается отключать вызов, если модуль не участвует в сборке
void InitModulesApi() {
getApiIoTSensorDallasTemp();
getApiIoTSensorSHT20();
getApiIoTSensorButtonIn();
getApiIoTVariableVirtual();
}

View File

@@ -37,10 +37,12 @@
#include <vector>
#include "Class/IoTSensor.h"
#include "Class/IoTModule.h"
#include "Class/IoTVariable.h"
std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
std::vector<IoTSensor*> iotSensors; //v3dev: вектор ссылок базового класса IoTSensor - список всех запущенных сенсоров
std::vector<IoTVariable*> iotVariables; //v3dev: вектор ссылок базового класса IoTVariable - список всех подготовленных переменных
void InitModulesApi(); //v3dev: инициализация модуля при первом вызове .