mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 03:49:13 +03:00
Добавляем IoTVariable для дальнейшей доработки
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
class IoTSensor {
|
class IoTSensor {
|
||||||
public:
|
public:
|
||||||
IoTSensor();
|
IoTSensor();
|
||||||
virtual ~IoTSensor();
|
~IoTSensor();
|
||||||
|
|
||||||
void loop();
|
void loop();
|
||||||
virtual void doByInterval();
|
virtual void doByInterval();
|
||||||
|
|||||||
@@ -8,17 +8,17 @@ class IoTVariable {
|
|||||||
~IoTVariable();
|
~IoTVariable();
|
||||||
|
|
||||||
virtual String execute(String command);
|
virtual String execute(String command);
|
||||||
|
virtual void selfExec();
|
||||||
virtual void loop();
|
virtual void loop();
|
||||||
|
|
||||||
void init(String key, String value);
|
void init(String key, String id);
|
||||||
void setValue(String value);
|
|
||||||
void getValue(String value);
|
|
||||||
void regEvent(String value, String consoleInfo);
|
void regEvent(String value, String consoleInfo);
|
||||||
|
|
||||||
String _widgetName; //название виджета на фронтэнде для правильного отображения информации из меременной
|
String getKey();
|
||||||
String _key; //код переменной для идентификации событий, команд в сценариях
|
String getID();
|
||||||
String _title;
|
|
||||||
|
protected:
|
||||||
|
String _key; //имя переменной, для идентификации при работе с несколькими переменными в одном модуле
|
||||||
|
String _id; //код переменной для идентификации событий, команд в сценариях и логах
|
||||||
|
|
||||||
private:
|
|
||||||
String _value; //значение переменной
|
|
||||||
};
|
};
|
||||||
@@ -26,9 +26,11 @@
|
|||||||
|
|
||||||
#include "Class/IoTModule.h"
|
#include "Class/IoTModule.h"
|
||||||
#include "Class/IoTSensor.h"
|
#include "Class/IoTSensor.h"
|
||||||
|
#include "Class/IoTVariable.h"
|
||||||
|
|
||||||
extern std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
|
extern std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
|
||||||
extern std::vector<IoTSensor*> iotSensors; //v3dev: вектор ссылок базового класса IoTSensor - список всех запущенных сенсоров
|
extern std::vector<IoTSensor*> iotSensors; //v3dev: вектор ссылок базового класса IoTSensor - список всех запущенных сенсоров
|
||||||
|
extern std::vector<IoTVariable*> iotVariables; //v3dev: вектор ссылок базового класса IoTVariable - список всех подготовленных переменных
|
||||||
|
|
||||||
void loopCmdAdd(const String& cmdStr) {
|
void loopCmdAdd(const String& cmdStr) {
|
||||||
if (cmdStr.endsWith(",")) {
|
if (cmdStr.endsWith(",")) {
|
||||||
@@ -168,25 +170,24 @@ void csvCmdExecute(String& cmdStr) {
|
|||||||
//del SerialPrint("I", "moduleInfo.name", moduleInfo.name);
|
//del SerialPrint("I", "moduleInfo.name", moduleInfo.name);
|
||||||
//del SerialPrint("I", "order", order);
|
//del SerialPrint("I", "order", order);
|
||||||
if (moduleInfo.name == order) { //проверка вхождения имени искомого модуля в ключе элемента настройки
|
if (moduleInfo.name == order) { //проверка вхождения имени искомого модуля в ключе элемента настройки
|
||||||
if (moduleInfo.type == "Sensor") {
|
myLineParsing.update(); //v3dev: пока используем мостик для совместимости версий, предполагается, что настройки сразу будут в JSON
|
||||||
myLineParsing.update(); //v3dev: пока используем мостик для совместимости версий, предполагается, что настройки сразу будут в JSON
|
String interval = myLineParsing.gint();
|
||||||
String interval = myLineParsing.gint();
|
if (interval == "") interval = "50";
|
||||||
if (interval == "") interval = "50";
|
String pin = myLineParsing.gpin();
|
||||||
String pin = myLineParsing.gpin();
|
String index = myLineParsing.gindex();
|
||||||
String index = myLineParsing.gindex();
|
String addr = myLineParsing.gaddr();
|
||||||
String addr = myLineParsing.gaddr();
|
String c = myLineParsing.gc();
|
||||||
String c = myLineParsing.gc();
|
String id = myLineParsing.gkey();
|
||||||
String id = myLineParsing.gkey();
|
String key = myLineParsing.gfile();
|
||||||
String key = myLineParsing.gfile();
|
String db = myLineParsing.gdb();
|
||||||
String db = myLineParsing.gdb();
|
myLineParsing.clear();
|
||||||
myLineParsing.clear();
|
String strTmp = "{\"key\": \"" + key + "\", \"id\": \"" + id + "\", \"addr\": \"" + addr + "\", \"int\": \"" + interval + "\", \"pin\": \"" + pin + "\", \"index\": \"" + index + "\", \"c\": \"" + c + "\", \"db\": \"" + db + "\"}";
|
||||||
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));
|
iotSensors.push_back((IoTSensor*)iotModules[i]->initInstance(strTmp));
|
||||||
} else if (moduleInfo.type == "Container")
|
} else if (moduleInfo.type == "Variable") {
|
||||||
{
|
iotVariables.push_back((IoTVariable*)iotModules[i]->initInstance(strTmp));
|
||||||
//iot.push_back((IoTSensor*)iotModules[i]->initInstance(moduleInfo.parameters));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,24 +6,26 @@
|
|||||||
IoTVariable::IoTVariable() {}
|
IoTVariable::IoTVariable() {}
|
||||||
IoTVariable::~IoTVariable() {}
|
IoTVariable::~IoTVariable() {}
|
||||||
|
|
||||||
String execute(String command) {}
|
String IoTVariable::execute(String command) { return "";}
|
||||||
|
void IoTVariable::selfExec() {}
|
||||||
void IoTVariable::loop() {}
|
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 = "") {
|
void IoTVariable::regEvent(String value, String consoleInfo = "") {
|
||||||
eventGen2(_key, String(value));
|
eventGen2(_key, String(value));
|
||||||
jsonWriteStr(configLiveJson, _key, String(value));
|
jsonWriteStr(configLiveJson, _key, String(value));
|
||||||
publishStatus(_key, String(value));
|
publishStatus(_key, String(value));
|
||||||
SerialPrint("I", "Sensor", "'" + _key + "' data: " + String(value) + "' " + consoleInfo);
|
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 getApiIoTSensorSHT20();
|
||||||
void getApiIoTSensorButtonIn();
|
void getApiIoTSensorButtonIn();
|
||||||
|
|
||||||
|
void getApiIoTVariableVirtual();
|
||||||
|
|
||||||
//формируем вектор модулей путем вызова из каждого модуля специальной функции
|
//формируем вектор модулей путем вызова из каждого модуля специальной функции
|
||||||
//в дальнейшем предполагается отключать вызов, если модуль не участвует в сборке
|
//в дальнейшем предполагается отключать вызов, если модуль не участвует в сборке
|
||||||
void InitModulesApi() {
|
void InitModulesApi() {
|
||||||
getApiIoTSensorDallasTemp();
|
getApiIoTSensorDallasTemp();
|
||||||
getApiIoTSensorSHT20();
|
getApiIoTSensorSHT20();
|
||||||
getApiIoTSensorButtonIn();
|
getApiIoTSensorButtonIn();
|
||||||
|
|
||||||
|
getApiIoTVariableVirtual();
|
||||||
}
|
}
|
||||||
@@ -37,10 +37,12 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include "Class/IoTSensor.h"
|
#include "Class/IoTSensor.h"
|
||||||
#include "Class/IoTModule.h"
|
#include "Class/IoTModule.h"
|
||||||
|
#include "Class/IoTVariable.h"
|
||||||
|
|
||||||
|
|
||||||
std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
|
std::vector<IoTModule*> iotModules; //v3dev: вектор ссылок базового класса IoTModule - интерфейсы для общения со всеми поддерживаемыми системой модулями
|
||||||
std::vector<IoTSensor*> iotSensors; //v3dev: вектор ссылок базового класса IoTSensor - список всех запущенных сенсоров
|
std::vector<IoTSensor*> iotSensors; //v3dev: вектор ссылок базового класса IoTSensor - список всех запущенных сенсоров
|
||||||
|
std::vector<IoTVariable*> iotVariables; //v3dev: вектор ссылок базового класса IoTVariable - список всех подготовленных переменных
|
||||||
void InitModulesApi(); //v3dev: инициализация модуля при первом вызове .
|
void InitModulesApi(); //v3dev: инициализация модуля при первом вызове .
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user