Разделяем понятия регистрации и генерации события

регистрация подразумевает фиксацию изменений и уведомление
WS и MQTT интерфейса
генерация подразумевает добавление факта события в очередь сценария
и отправку на другие устройства
This commit is contained in:
2022-10-29 20:04:02 +03:00
parent 4ddbd97999
commit d9788f96bd
11 changed files with 68 additions and 69 deletions

View File

@@ -171,14 +171,14 @@ public:
return {};
}
void setValue(IoTValue Value, bool generateEvent = true){
void setValue(const IoTValue& Value, bool genEvent = true){
if (!_strip) return;
value = Value;
int b = map(value.valD, 1,1024,1,255);
_strip->setBrightness(b);
_strip->show();
if (generateEvent) regEvent(value.valD, "Ws2812b");
regEvent(value.valD, "Ws2812b", false, genEvent);
}
~Ws2812b(){};

View File

@@ -68,9 +68,9 @@ class ButtonIn : public IoTItem {
_lastButtonState = _reading;
}
void setValue(const IoTValue& Value, bool generateEvent = true) {
void setValue(const IoTValue& Value, bool genEvent = true) {
value = Value;
if (generateEvent) regEvent((String)(int)value.valD, "ButtonIn");
regEvent((String)(int)value.valD, "ButtonIn", false, genEvent);
}
String getValue() {

View File

@@ -37,10 +37,10 @@ class ButtonOut : public IoTItem {
return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
}
void setValue(const IoTValue& Value, bool generateEvent = true) {
void setValue(const IoTValue& Value, bool genEvent = true) {
value = Value;
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() {

View File

@@ -52,12 +52,12 @@ class IoTServo : public IoTItem {
return {};
}
void setValue(const IoTValue& Value, bool generateEvent = true) {
void setValue(const IoTValue& Value, bool genEvent = true) {
value = Value;
if (value.isDecimal & (_oldValue != value.valD)) {
_oldValue = value.valD;
servObj.write(_oldValue);
if (generateEvent) regEvent(value.valD, "IoTServo");
regEvent(value.valD, "IoTServo", false, genEvent);
}
}

View File

@@ -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;
ledcWrite(_ledChannel, value.valD);
if (generateEvent) regEvent(value.valD, "Pwm32");
regEvent(value.valD, "Pwm32", false, genEvent);
}
//=======================================================================================================

View File

@@ -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;
IoTgpio.analogWrite(_pin, value.valD);
if (generateEvent) regEvent(value.valD, "Pwm8266");
regEvent(value.valD, "Pwm8266", false, genEvent);
}
//=======================================================================================================

View File

@@ -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 currentDate = getTodayDateDotFormated();
//отправляем в график данные только когда выбран сегодняшний день
@@ -306,14 +306,14 @@ class Date : public IoTItem {
value.isDecimal = false;
}
void setValue(const String& valStr) {
void setValue(const String& valStr, bool genEvent = true) {
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;
if (generateEvent) regEvent(value.valS, "");
regEvent(value.valS, "", false, genEvent);
//отправка данных при изменении даты
for (std::list<IoTItem *>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
if ((*it)->getSubtype() == "Loging") {

View File

@@ -6,9 +6,9 @@ class VButton : public IoTItem {
public:
VButton(String parameters): IoTItem(parameters) { }
void setValue(const IoTValue& Value, bool generateEvent = true) {
void setValue(const IoTValue& Value, bool genEvent = true) {
value = Value;
if (generateEvent) regEvent((String)(int)value.valD, "VButton");
regEvent((String)(int)value.valD, "VButton", false, genEvent);
}
String getValue() {

View File

@@ -8,11 +8,6 @@ class Variable : public IoTItem {
Variable(String parameters) : IoTItem(parameters) {
}
// особенность данного модуля - просто хранение значения для сценария, нет событий
// void setValue(const IoTValue& Value, bool generateEvent = true) {
// value = Value;
// }
void doByInterval() {
}
};