mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
Добавляем IoTVariable для дальнейшей доработки
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
class IoTSensor {
|
||||
public:
|
||||
IoTSensor();
|
||||
virtual ~IoTSensor();
|
||||
~IoTSensor();
|
||||
|
||||
void loop();
|
||||
virtual void doByInterval();
|
||||
|
||||
@@ -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; //значение переменной
|
||||
};
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
71
src/Modules/Variables/IoTVariableVirtual.cpp
Normal file
71
src/Modules/Variables/IoTVariableVirtual.cpp
Normal 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;
|
||||
}
|
||||
@@ -4,10 +4,14 @@ void getApiIoTSensorDallasTemp();
|
||||
void getApiIoTSensorSHT20();
|
||||
void getApiIoTSensorButtonIn();
|
||||
|
||||
void getApiIoTVariableVirtual();
|
||||
|
||||
//формируем вектор модулей путем вызова из каждого модуля специальной функции
|
||||
//в дальнейшем предполагается отключать вызов, если модуль не участвует в сборке
|
||||
void InitModulesApi() {
|
||||
getApiIoTSensorDallasTemp();
|
||||
getApiIoTSensorSHT20();
|
||||
getApiIoTSensorButtonIn();
|
||||
|
||||
getApiIoTVariableVirtual();
|
||||
}
|
||||
@@ -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: инициализация модуля при первом вызове .
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user