mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 20:09:14 +03:00
Разделяем понятия регистрации и генерации события
регистрация подразумевает фиксацию изменений и уведомление WS и MQTT интерфейса генерация подразумевает добавление факта события в очередь сценария и отправку на другие устройства
This commit is contained in:
@@ -16,8 +16,8 @@ class IoTItem {
|
|||||||
virtual void doByInterval();
|
virtual void doByInterval();
|
||||||
virtual IoTValue execute(String command, std::vector<IoTValue>& param);
|
virtual IoTValue execute(String command, std::vector<IoTValue>& param);
|
||||||
|
|
||||||
virtual void regEvent(const String& value, const String& consoleInfo, bool error = false);
|
virtual void regEvent(const String& value, const String& consoleInfo, bool error = false, bool genEvent = true);
|
||||||
virtual void regEvent(float value, const String& consoleInfo, bool error = false);
|
virtual void regEvent(float value, const String& consoleInfo, bool error = false, bool genEvent = true);
|
||||||
|
|
||||||
String getSubtype();
|
String getSubtype();
|
||||||
|
|
||||||
@@ -38,8 +38,8 @@ class IoTItem {
|
|||||||
bool enableDoByInt = true;
|
bool enableDoByInt = true;
|
||||||
|
|
||||||
virtual IoTGpio* getGpioDriver();
|
virtual IoTGpio* getGpioDriver();
|
||||||
virtual void setValue(const IoTValue& Value, bool generateEvent = true);
|
virtual void setValue(const IoTValue& Value, bool genEvent = true);
|
||||||
virtual void setValue(const String& valStr, bool generateEvent = true);
|
virtual void setValue(const String& valStr, bool genEvent = true);
|
||||||
String getRoundValue();
|
String getRoundValue();
|
||||||
|
|
||||||
//методы для графиков
|
//методы для графиков
|
||||||
@@ -51,17 +51,17 @@ class IoTItem {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool _needSave = false; // признак необходимости сохранять и загружать значение элемента на flash
|
bool _needSave = false; // признак необходимости сохранять и загружать значение элемента на flash
|
||||||
String _subtype;
|
String _subtype = "";
|
||||||
String _id;
|
String _id = "";
|
||||||
unsigned long _interval;
|
unsigned long _interval = 1000;
|
||||||
|
|
||||||
float _multiply; // умножаем на значение
|
float _multiply; // умножаем на значение
|
||||||
float _plus; // увеличиваем на значение
|
float _plus; // увеличиваем на значение
|
||||||
int _map1;
|
int _map1 = 0;
|
||||||
int _map2;
|
int _map2 = 0;
|
||||||
int _map3;
|
int _map3 = 0;
|
||||||
int _map4;
|
int _map4 = 0;
|
||||||
int _round; // 1, 10, 100, 1000, 10000
|
int _round = 1; // 1, 10, 100, 1000, 10000
|
||||||
|
|
||||||
bool _global = false; // характеристика айтема, что ему нужно слать и принимать события из внешнего мира
|
bool _global = false; // характеристика айтема, что ему нужно слать и принимать события из внешнего мира
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,14 +18,6 @@ IoTItem::IoTItem(const String& parameters) {
|
|||||||
|
|
||||||
if (!jsonRead(parameters, F("global"), _global, false)) _global = false;
|
if (!jsonRead(parameters, F("global"), _global, false)) _global = false;
|
||||||
|
|
||||||
String valAsStr;
|
|
||||||
if (jsonRead(parameters, F("val"), valAsStr, false)) // значение переменной или датчика при инициализации если есть в конфигурации
|
|
||||||
setValue(valAsStr, false);
|
|
||||||
|
|
||||||
jsonRead(parameters, F("needSave"), _needSave, false);
|
|
||||||
if (_needSave && jsonRead(valuesFlashJson, _id, valAsStr, false)) // пробуем достать из сохранения значение элемента, если указано, что нужно сохранять
|
|
||||||
setValue(valAsStr, false);
|
|
||||||
|
|
||||||
String map;
|
String map;
|
||||||
jsonRead(parameters, F("map"), map, false);
|
jsonRead(parameters, F("map"), map, false);
|
||||||
if (map != "") {
|
if (map != "") {
|
||||||
@@ -35,6 +27,14 @@ IoTItem::IoTItem(const String& parameters) {
|
|||||||
_map4 = selectFromMarkerToMarker(map, ",", 3).toInt();
|
_map4 = selectFromMarkerToMarker(map, ",", 3).toInt();
|
||||||
} else
|
} else
|
||||||
_map1 = _map2 = _map3 = _map4 = 0;
|
_map1 = _map2 = _map3 = _map4 = 0;
|
||||||
|
|
||||||
|
String valAsStr = "";
|
||||||
|
if (jsonRead(parameters, F("val"), valAsStr, false)) // значение переменной или датчика при инициализации если есть в конфигурации
|
||||||
|
setValue(valAsStr, false);
|
||||||
|
|
||||||
|
jsonRead(parameters, F("needSave"), _needSave, false);
|
||||||
|
if (_needSave && jsonRead(valuesFlashJson, _id, valAsStr, false)) // пробуем достать из сохранения значение элемента, если указано, что нужно сохранять
|
||||||
|
setValue(valAsStr, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//луп выполняющий переодическое дерганье
|
//луп выполняющий переодическое дерганье
|
||||||
@@ -58,36 +58,39 @@ String IoTItem::getValue() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//определяем тип прилетевшей величины
|
//определяем тип прилетевшей величины
|
||||||
void IoTItem::setValue(const String& valStr, bool generateEvent) {
|
void IoTItem::setValue(const String& valStr, bool genEvent) {
|
||||||
if (value.isDecimal = isDigitDotCommaStr(valStr)) {
|
value.isDecimal = isDigitDotCommaStr(valStr);
|
||||||
|
|
||||||
|
if (value.isDecimal) {
|
||||||
value.valD = valStr.toFloat();
|
value.valD = valStr.toFloat();
|
||||||
} else {
|
} else {
|
||||||
value.valS = valStr;
|
value.valS = valStr;
|
||||||
}
|
}
|
||||||
setValue(value, generateEvent);
|
setValue(value, genEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
void IoTItem::setValue(const IoTValue& Value, bool generateEvent) {
|
void IoTItem::setValue(const IoTValue& Value, bool genEvent) {
|
||||||
value = Value;
|
value = Value;
|
||||||
if (generateEvent)
|
|
||||||
if (value.isDecimal) {
|
if (value.isDecimal) {
|
||||||
regEvent(value.valD, "");
|
regEvent(value.valD, "", false, genEvent);
|
||||||
} else {
|
} else {
|
||||||
regEvent(value.valS, "");
|
regEvent(value.valS, "", false, genEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//когда событие случилось
|
//когда событие случилось
|
||||||
void IoTItem::regEvent(const String& value, const String& consoleInfo, bool error) {
|
void IoTItem::regEvent(const String& value, const String& consoleInfo, bool error, bool genEvent) {
|
||||||
if (_needSave) {
|
if (_needSave) {
|
||||||
jsonWriteStr_(valuesFlashJson, _id, value);
|
jsonWriteStr_(valuesFlashJson, _id, value);
|
||||||
needSaveValues = true;
|
needSaveValues = true;
|
||||||
}
|
}
|
||||||
publishStatusMqtt(_id, value);
|
publishStatusMqtt(_id, value);
|
||||||
publishStatusWs(_id, value);
|
publishStatusWs(_id, value);
|
||||||
SerialPrint("i", "Sensor", consoleInfo + " '" + _id + "' data: " + value + "'");
|
//SerialPrint("i", "Sensor", consoleInfo + " '" + _id + "' data: " + value + "'");
|
||||||
|
|
||||||
|
if (genEvent) {
|
||||||
generateEvent(_id, value);
|
generateEvent(_id, value);
|
||||||
|
|
||||||
//отправка события другим устройствам в сети если не было ошибки==============================
|
//отправка события другим устройствам в сети если не было ошибки==============================
|
||||||
@@ -100,6 +103,7 @@ void IoTItem::regEvent(const String& value, const String& consoleInfo, bool erro
|
|||||||
SerialPrint("i", F("<=MQTT"), "Broadcast event: " + json);
|
SerialPrint("i", F("<=MQTT"), "Broadcast event: " + json);
|
||||||
}
|
}
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String IoTItem::getRoundValue() {
|
String IoTItem::getRoundValue() {
|
||||||
@@ -115,14 +119,14 @@ String IoTItem::getRoundValue() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IoTItem::regEvent(float regvalue, const String& consoleInfo, bool error) {
|
void IoTItem::regEvent(float regvalue, const String& consoleInfo, bool error, bool genEvent) {
|
||||||
value.valD = regvalue;
|
value.valD = regvalue;
|
||||||
|
|
||||||
if (_multiply) value.valD = value.valD * _multiply;
|
if (_multiply) value.valD = value.valD * _multiply;
|
||||||
if (_plus) value.valD = value.valD + _plus;
|
if (_plus) value.valD = value.valD + _plus;
|
||||||
if (_map1 != _map2) value.valD = map(value.valD, _map1, _map2, _map3, _map4);
|
if (_map1 != _map2) value.valD = map(value.valD, _map1, _map2, _map3, _map4);
|
||||||
|
|
||||||
regEvent(getRoundValue(), consoleInfo, error);
|
regEvent(getRoundValue(), consoleInfo, error, genEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IoTItem::doByInterval() {}
|
void IoTItem::doByInterval() {}
|
||||||
|
|||||||
@@ -171,14 +171,14 @@ public:
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void setValue(IoTValue Value, bool generateEvent = true){
|
void setValue(const IoTValue& Value, bool genEvent = true){
|
||||||
if (!_strip) return;
|
if (!_strip) return;
|
||||||
|
|
||||||
value = Value;
|
value = Value;
|
||||||
int b = map(value.valD, 1,1024,1,255);
|
int b = map(value.valD, 1,1024,1,255);
|
||||||
_strip->setBrightness(b);
|
_strip->setBrightness(b);
|
||||||
_strip->show();
|
_strip->show();
|
||||||
if (generateEvent) regEvent(value.valD, "Ws2812b");
|
regEvent(value.valD, "Ws2812b", false, genEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
~Ws2812b(){};
|
~Ws2812b(){};
|
||||||
|
|||||||
@@ -68,9 +68,9 @@ class ButtonIn : public IoTItem {
|
|||||||
_lastButtonState = _reading;
|
_lastButtonState = _reading;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setValue(const IoTValue& Value, bool generateEvent = true) {
|
void setValue(const IoTValue& Value, bool genEvent = true) {
|
||||||
value = Value;
|
value = Value;
|
||||||
if (generateEvent) regEvent((String)(int)value.valD, "ButtonIn");
|
regEvent((String)(int)value.valD, "ButtonIn", false, genEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
String getValue() {
|
String getValue() {
|
||||||
|
|||||||
@@ -37,10 +37,10 @@ class ButtonOut : public IoTItem {
|
|||||||
return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
|
return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
|
||||||
}
|
}
|
||||||
|
|
||||||
void setValue(const IoTValue& Value, bool generateEvent = true) {
|
void setValue(const IoTValue& Value, bool genEvent = true) {
|
||||||
value = Value;
|
value = Value;
|
||||||
IoTgpio.digitalWrite(_pin, _inv?!value.valD:value.valD);
|
IoTgpio.digitalWrite(_pin, _inv?!value.valD:value.valD);
|
||||||
if (generateEvent) regEvent((String)(int)value.valD, "ButtonOut");
|
regEvent((String)(int)value.valD, "ButtonOut", false, genEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
String getValue() {
|
String getValue() {
|
||||||
|
|||||||
@@ -52,12 +52,12 @@ class IoTServo : public IoTItem {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void setValue(const IoTValue& Value, bool generateEvent = true) {
|
void setValue(const IoTValue& Value, bool genEvent = true) {
|
||||||
value = Value;
|
value = Value;
|
||||||
if (value.isDecimal & (_oldValue != value.valD)) {
|
if (value.isDecimal & (_oldValue != value.valD)) {
|
||||||
_oldValue = value.valD;
|
_oldValue = value.valD;
|
||||||
servObj.write(_oldValue);
|
servObj.write(_oldValue);
|
||||||
if (generateEvent) regEvent(value.valD, "IoTServo");
|
regEvent(value.valD, "IoTServo", false, genEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,10 +54,10 @@ class Pwm32 : public IoTItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setValue(const IoTValue& Value, bool generateEvent = true) {
|
void setValue(const IoTValue& Value, bool genEvent = true) {
|
||||||
value = Value;
|
value = Value;
|
||||||
ledcWrite(_ledChannel, value.valD);
|
ledcWrite(_ledChannel, value.valD);
|
||||||
if (generateEvent) regEvent(value.valD, "Pwm32");
|
regEvent(value.valD, "Pwm32", false, genEvent);
|
||||||
}
|
}
|
||||||
//=======================================================================================================
|
//=======================================================================================================
|
||||||
|
|
||||||
|
|||||||
@@ -44,10 +44,10 @@ class Pwm8266 : public IoTItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setValue(const IoTValue& Value, bool generateEvent = true) {
|
void setValue(const IoTValue& Value, bool genEvent = true) {
|
||||||
value = Value;
|
value = Value;
|
||||||
IoTgpio.analogWrite(_pin, value.valD);
|
IoTgpio.analogWrite(_pin, value.valD);
|
||||||
if (generateEvent) regEvent(value.valD, "Pwm8266");
|
regEvent(value.valD, "Pwm8266", false, genEvent);
|
||||||
}
|
}
|
||||||
//=======================================================================================================
|
//=======================================================================================================
|
||||||
|
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ class Loging : public IoTItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void regEvent(const String& value, const String& consoleInfo, bool error = false) {
|
void regEvent(const String& value, const String& consoleInfo, bool error = false, bool genEvent = true) {
|
||||||
String userDate = getItemValue(id + "-date");
|
String userDate = getItemValue(id + "-date");
|
||||||
String currentDate = getTodayDateDotFormated();
|
String currentDate = getTodayDateDotFormated();
|
||||||
//отправляем в график данные только когда выбран сегодняшний день
|
//отправляем в график данные только когда выбран сегодняшний день
|
||||||
@@ -306,14 +306,14 @@ class Date : public IoTItem {
|
|||||||
value.isDecimal = false;
|
value.isDecimal = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setValue(const String& valStr) {
|
void setValue(const String& valStr, bool genEvent = true) {
|
||||||
value.valS = valStr;
|
value.valS = valStr;
|
||||||
setValue(value);
|
setValue(value, genEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setValue(const IoTValue& Value, bool generateEvent = true) {
|
void setValue(const IoTValue& Value, bool genEvent = true) {
|
||||||
value = Value;
|
value = Value;
|
||||||
if (generateEvent) regEvent(value.valS, "");
|
regEvent(value.valS, "", false, genEvent);
|
||||||
//отправка данных при изменении даты
|
//отправка данных при изменении даты
|
||||||
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
|
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
|
||||||
if ((*it)->getSubtype() == "Loging") {
|
if ((*it)->getSubtype() == "Loging") {
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ class VButton : public IoTItem {
|
|||||||
public:
|
public:
|
||||||
VButton(String parameters): IoTItem(parameters) { }
|
VButton(String parameters): IoTItem(parameters) { }
|
||||||
|
|
||||||
void setValue(const IoTValue& Value, bool generateEvent = true) {
|
void setValue(const IoTValue& Value, bool genEvent = true) {
|
||||||
value = Value;
|
value = Value;
|
||||||
if (generateEvent) regEvent((String)(int)value.valD, "VButton");
|
regEvent((String)(int)value.valD, "VButton", false, genEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
String getValue() {
|
String getValue() {
|
||||||
|
|||||||
@@ -8,11 +8,6 @@ class Variable : public IoTItem {
|
|||||||
Variable(String parameters) : IoTItem(parameters) {
|
Variable(String parameters) : IoTItem(parameters) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// особенность данного модуля - просто хранение значения для сценария, нет событий
|
|
||||||
// void setValue(const IoTValue& Value, bool generateEvent = true) {
|
|
||||||
// value = Value;
|
|
||||||
// }
|
|
||||||
|
|
||||||
void doByInterval() {
|
void doByInterval() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user