From 8a4ca7a6ae1004876058f6bb1b1c29459346e86c Mon Sep 17 00:00:00 2001 From: biver Date: Fri, 28 Oct 2022 16:21:14 +0300 Subject: [PATCH 1/9] =?UTF-8?q?=D0=A3=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D0=BC?= =?UTF-8?q?=20=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD=D1=83=D1=8E?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=83=D1=8E?= =?UTF-8?q?=20=D0=B8=D0=B7=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=20Ads111?= =?UTF-8?q?5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/sensors/Ads1115/Ads1115.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/modules/sensors/Ads1115/Ads1115.cpp b/src/modules/sensors/Ads1115/Ads1115.cpp index 9ac3b98b..b043d8fe 100644 --- a/src/modules/sensors/Ads1115/Ads1115.cpp +++ b/src/modules/sensors/Ads1115/Ads1115.cpp @@ -12,13 +12,12 @@ #include "Wire.h" #include // Библиотека для работы с модулями ADS1115 и ADS1015 -// to do убрать глобальный экземпляр -Adafruit_ADS1115 ads; class Ads1115 : public IoTItem { int _pin; bool _isRaw; bool _isInited = false; + Adafruit_ADS1115 ads; public: Ads1115(String parameters) : IoTItem(parameters) { From 593bebd0deceb2ba0e915dfbb7f9724e8afe3621 Mon Sep 17 00:00:00 2001 From: biver Date: Fri, 28 Oct 2022 16:21:49 +0300 Subject: [PATCH 2/9] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=BA=D0=B8=20=D0=B2=20=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D1=81=D0=BE=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/classes/IoTScenario.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/classes/IoTScenario.cpp b/src/classes/IoTScenario.cpp index bb0a53b2..93534041 100644 --- a/src/classes/IoTScenario.cpp +++ b/src/classes/IoTScenario.cpp @@ -566,7 +566,7 @@ class IfExprAST : public ExprAST { // if (!res_ret) Serial.printf("Call from IfExprAST: Cond result = %f, no body result\n", cond_ret->valD); // else if (res_ret->isDecimal) Serial.printf("Call from IfExprAST: Cond result = %f, result = %f\n", cond_ret->valD, res_ret->valD); // else Serial.printf("Call from IfExprAST: Cond result = %f, result = %s\n", cond_ret->valD, res_ret->valS.c_str()); - Serial.printf("\n"); + //Serial.printf("\n"); return cond_ret; } From 305a5f5ccbc1ba0706c956e0f12708d81f6c44f9 Mon Sep 17 00:00:00 2001 From: biver Date: Fri, 28 Oct 2022 16:22:18 +0300 Subject: [PATCH 3/9] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=20Buffers=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/Buffers.h | 12 +++++------ src/Buffers.cpp | 54 +++++++++++++++++++++++------------------------ 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/include/Buffers.h b/include/Buffers.h index 78026740..4e08a379 100644 --- a/include/Buffers.h +++ b/include/Buffers.h @@ -1,7 +1,7 @@ -#pragma once -#include "Global.h" -#include "MqttClient.h" +//#pragma once +//#include "Global.h" +//#include "MqttClient.h" -void eventGen2(String eventName, String eventValue); -extern void spaceCmdExecute(String &cmdStr); -extern String getValueJson(String &key); \ No newline at end of file +//void eventGen2(String eventName, String eventValue); +//extern void spaceCmdExecute(String &cmdStr); +//extern String getValueJson(String &key); \ No newline at end of file diff --git a/src/Buffers.cpp b/src/Buffers.cpp index d8338cb2..79d31500 100644 --- a/src/Buffers.cpp +++ b/src/Buffers.cpp @@ -1,35 +1,35 @@ -#include "Buffers.h" +//#include "Buffers.h" //генеирует событие -void eventGen2(String eventName, String eventValue) { - if (!jsonReadBool(settingsFlashJson, "scen")) { - return; - } - String event = eventName + " " + eventValue + ","; - eventBuf += event; +// void eventGen2(String eventName, String eventValue) { +// if (!jsonReadBool(settingsFlashJson, "scen")) { +// return; +// } +// String event = eventName + " " + eventValue + ","; +// eventBuf += event; - SerialPrint("i", "Event add", eventName + " " + eventValue); +// SerialPrint("i", "Event add", eventName + " " + eventValue); - if (jsonReadBool(settingsFlashJson, "MqttOut")) { - if (eventName != "timenow") { - publishEvent(eventName, eventValue); - } - } -} +// if (jsonReadBool(settingsFlashJson, "MqttOut")) { +// if (eventName != "timenow") { +// publishEvent(eventName, eventValue); +// } +// } +// } -void spaceCmdExecute(String& cmdStr) { - cmdStr += "\r\n"; - cmdStr.replace("\r\n", "\n"); - cmdStr.replace("\r", "\n"); - while (cmdStr.length()) { - String buf = selectToMarker(cmdStr, "\n"); - if (buf != "") { - sCmd.readStr(buf); - SerialPrint("i", F("Order done W"), buf); - } - cmdStr = deleteBeforeDelimiter(cmdStr, "\n"); - } -} +// void spaceCmdExecute(String& cmdStr) { +// cmdStr += "\r\n"; +// cmdStr.replace("\r\n", "\n"); +// cmdStr.replace("\r", "\n"); +// while (cmdStr.length()) { +// String buf = selectToMarker(cmdStr, "\n"); +// if (buf != "") { +// sCmd.readStr(buf); +// SerialPrint("i", F("Order done W"), buf); +// } +// cmdStr = deleteBeforeDelimiter(cmdStr, "\n"); +// } +// } // String getValueJson(String& key) { // String live = jsonReadStr(paramsHeapJson, key); From dfd24dc1f66622dad2d38c9a90c4115c29511cdc Mon Sep 17 00:00:00 2001 From: biver Date: Fri, 28 Oct 2022 16:26:13 +0300 Subject: [PATCH 4/9] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D1=83=D0=B5=D0=BC=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=20=D0=BE=D1=88=D0=B8?= =?UTF-8?q?=D0=B1=D0=BA=D0=B5=20=D0=B2=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB?= =?UTF-8?q?=D1=8F=D1=85=20=D0=B4=D0=B0=D1=82=D1=87=D0=B8=D0=BA=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=B1=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/sensors/AhtXX/AhtXX.cpp | 18 +++++++++--------- src/modules/sensors/Bme280/Bme280.cpp | 6 +++--- src/modules/sensors/Bmp280/Bmp280.cpp | 4 ++-- src/modules/sensors/Dht1122/Dht1122.cpp | 4 ++-- src/modules/sensors/Ds18b20/Ds18b20.cpp | 2 +- src/modules/sensors/GY21/GY21.cpp | 4 ++-- src/modules/sensors/Hdc1080/Hdc1080.cpp | 4 ++-- src/modules/sensors/Max6675/Max6675.cpp | 2 +- src/modules/sensors/Sht20/Sht20.cpp | 4 ++-- src/modules/sensors/Sht30/Sht30.cpp | 4 ++-- 10 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/modules/sensors/AhtXX/AhtXX.cpp b/src/modules/sensors/AhtXX/AhtXX.cpp index f32487bf..a49e8fe1 100644 --- a/src/modules/sensors/AhtXX/AhtXX.cpp +++ b/src/modules/sensors/AhtXX/AhtXX.cpp @@ -7,30 +7,30 @@ std::map ahts; -void printStatus(AHTxx *aht) { +String getStatus(AHTxx *aht) { switch (aht->getStatus()) { case AHTXX_NO_ERROR: - Serial.println(F("no error")); + return F("no error"); break; case AHTXX_BUSY_ERROR: - Serial.println(F("sensor AHT busy, increase polling time")); + return F("sensor AHT busy, increase polling time"); break; case AHTXX_ACK_ERROR: - Serial.println(F("sensor AHT didn't return ACK, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)")); + return F("sensor AHT didn't return ACK, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)"); break; case AHTXX_DATA_ERROR: - Serial.println(F(" AHT: received data smaller than expected, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)")); + return F(" AHT: received data smaller than expected, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)"); break; case AHTXX_CRC8_ERROR: - Serial.println(F("AHT: computed CRC8 not match received CRC8, this feature supported only by AHT2x sensors")); + return F("AHT: computed CRC8 not match received CRC8, this feature supported only by AHT2x sensors"); break; default: - Serial.println(F("AHT: unknown status")); + return F("AHT: unknown status"); break; } } @@ -49,7 +49,7 @@ class AhtXXt : public IoTItem { if (value.valD != AHTXX_ERROR) { regEvent(value.valD, "AhtXXt"); } else { - printStatus(_aht); //print temperature command status + SerialPrint("E", "Sensor AHTXX", getStatus(_aht), _id); } } @@ -70,7 +70,7 @@ class AhtXXh : public IoTItem { if (value.valD != AHTXX_ERROR) { regEvent(value.valD, "AhtXXh"); } else { - printStatus(_aht); //print temperature command status + SerialPrint("E", "Sensor AHTXX", getStatus(_aht), _id); } } diff --git a/src/modules/sensors/Bme280/Bme280.cpp b/src/modules/sensors/Bme280/Bme280.cpp index aa9050c8..071525c4 100644 --- a/src/modules/sensors/Bme280/Bme280.cpp +++ b/src/modules/sensors/Bme280/Bme280.cpp @@ -26,7 +26,7 @@ class Bme280t : public IoTItem { if (value.valD != NAN && value.valD < 145) regEvent(value.valD, "Bme280t"); else - SerialPrint("E", "Sensor Bme280t", "Error"); + SerialPrint("E", "Sensor Bme280t", "Error", _id); } ~Bme280t(){}; @@ -46,7 +46,7 @@ class Bme280h : public IoTItem { if (value.valD != NAN && value.valD < 100) regEvent(value.valD, "Bme280h"); else - SerialPrint("E", "Sensor Bme280h", "Error"); + SerialPrint("E", "Sensor Bme280h", "Error", _id); } ~Bme280h(){}; @@ -67,7 +67,7 @@ class Bme280p : public IoTItem { value.valD = value.valD / 1.333224 / 100; regEvent(value.valD, "Bme280p"); } else - SerialPrint("E", "Sensor Bme280p", "Error"); + SerialPrint("E", "Sensor Bme280p", "Error", _id); } ~Bme280p(){}; diff --git a/src/modules/sensors/Bmp280/Bmp280.cpp b/src/modules/sensors/Bmp280/Bmp280.cpp index fae4ccfa..d0db6beb 100644 --- a/src/modules/sensors/Bmp280/Bmp280.cpp +++ b/src/modules/sensors/Bmp280/Bmp280.cpp @@ -26,7 +26,7 @@ class Bmp280t : public IoTItem { if (value.valD != NAN && value.valD < 150) regEvent(value.valD, "Bmp280t"); else - SerialPrint("E", "Sensor Bmp280t", "Error"); + SerialPrint("E", "Sensor Bmp280t", "Error", _id); } ~Bmp280t(){}; @@ -47,7 +47,7 @@ class Bmp280p : public IoTItem { value.valD = value.valD / 1.333224 / 100; regEvent(value.valD, "Bmp280p"); } else - SerialPrint("E", "Sensor Bmp280p", "Error"); + SerialPrint("E", "Sensor Bmp280p", "Error", _id); } ~Bmp280p(){}; diff --git a/src/modules/sensors/Dht1122/Dht1122.cpp b/src/modules/sensors/Dht1122/Dht1122.cpp index a9c00ef4..00641724 100644 --- a/src/modules/sensors/Dht1122/Dht1122.cpp +++ b/src/modules/sensors/Dht1122/Dht1122.cpp @@ -26,7 +26,7 @@ class Dht1122t : public IoTItem { if (String(value.valD) != "nan") regEvent(value.valD, "Dht1122t"); else - SerialPrint("E", "Sensor DHTt", "Error"); + SerialPrint("E", "Sensor DHTt", "Error", _id); } ~Dht1122t(){}; @@ -46,7 +46,7 @@ class Dht1122h : public IoTItem { if (String(value.valD) != "nan") regEvent(value.valD, "Dht1122h"); else - SerialPrint("E", "Sensor DHTh", "Error"); + SerialPrint("E", "Sensor DHTh", "Error", _id); } ~Dht1122h(){}; diff --git a/src/modules/sensors/Ds18b20/Ds18b20.cpp b/src/modules/sensors/Ds18b20/Ds18b20.cpp index e6518e03..495c3406 100644 --- a/src/modules/sensors/Ds18b20/Ds18b20.cpp +++ b/src/modules/sensors/Ds18b20/Ds18b20.cpp @@ -71,7 +71,7 @@ class Ds18b20 : public IoTItem { if (value.valD != DEVICE_DISCONNECTED_C) regEvent(value.valD, ""); //обязательный вызов для отправки результата работы else - SerialPrint("E", "Sensor Ds18b20", "Error"); + SerialPrint("E", "Sensor Ds18b20", "Error", _id); } //======================================================================================================= diff --git a/src/modules/sensors/GY21/GY21.cpp b/src/modules/sensors/GY21/GY21.cpp index 4c89722e..5af1923b 100644 --- a/src/modules/sensors/GY21/GY21.cpp +++ b/src/modules/sensors/GY21/GY21.cpp @@ -23,7 +23,7 @@ class GY21t : public IoTItem { if (value.valD < 300) regEvent(value.valD, "GY21"); // TODO: найти способ понимания ошибки получения данных else - SerialPrint("E", "Sensor GY21t", "Error"); + SerialPrint("E", "Sensor GY21t", "Error", _id); } ~GY21t(){}; @@ -39,7 +39,7 @@ class GY21h : public IoTItem { if (value.valD != 0) regEvent(value.valD, "GY21h"); // TODO: найти способ понимания ошибки получения данных else - SerialPrint("E", "Sensor GY21h", "Error"); + SerialPrint("E", "Sensor GY21h", "Error", _id); } ~GY21h(){}; diff --git a/src/modules/sensors/Hdc1080/Hdc1080.cpp b/src/modules/sensors/Hdc1080/Hdc1080.cpp index 6af1eff3..fe595787 100644 --- a/src/modules/sensors/Hdc1080/Hdc1080.cpp +++ b/src/modules/sensors/Hdc1080/Hdc1080.cpp @@ -24,7 +24,7 @@ class Hdc1080t : public IoTItem { if (value.valD < 124) regEvent(value.valD, "Hdc1080t"); else - SerialPrint("E", "Sensor Hdc1080t", "Error"); + SerialPrint("E", "Sensor Hdc1080t", "Error", _id); } ~Hdc1080t(){}; @@ -39,7 +39,7 @@ class Hdc1080h : public IoTItem { if (value.valD < 99) regEvent(value.valD, "Hdc1080h"); else - SerialPrint("E", "Sensor Hdc1080h", "Error"); + SerialPrint("E", "Sensor Hdc1080h", "Error", _id); } ~Hdc1080h(){}; diff --git a/src/modules/sensors/Max6675/Max6675.cpp b/src/modules/sensors/Max6675/Max6675.cpp index 67ece7fd..e351602c 100644 --- a/src/modules/sensors/Max6675/Max6675.cpp +++ b/src/modules/sensors/Max6675/Max6675.cpp @@ -29,7 +29,7 @@ class MAX6675t : public IoTItem { if (String(value.valD) != "nan") { regEvent(value.valD, "Max6675t"); } else { - SerialPrint("E", "Sensor Max6675t", "Error"); + SerialPrint("E", "Sensor Max6675t", "Error", _id); } } diff --git a/src/modules/sensors/Sht20/Sht20.cpp b/src/modules/sensors/Sht20/Sht20.cpp index a9100974..85b0e508 100644 --- a/src/modules/sensors/Sht20/Sht20.cpp +++ b/src/modules/sensors/Sht20/Sht20.cpp @@ -16,7 +16,7 @@ class Sht20t : public IoTItem { if (value.valD > -46.85F) regEvent(value.valD, "Sht20t"); else - SerialPrint("E", "Sensor Sht20t", "Error"); + SerialPrint("E", "Sensor Sht20t", "Error", _id); } ~Sht20t(){}; @@ -32,7 +32,7 @@ class Sht20h : public IoTItem { if (value.valD != -6) regEvent(value.valD, "Sht20h"); else - SerialPrint("E", "Sensor Sht20h", "Error"); + SerialPrint("E", "Sensor Sht20h", "Error", _id); } ~Sht20h(){}; diff --git a/src/modules/sensors/Sht30/Sht30.cpp b/src/modules/sensors/Sht30/Sht30.cpp index d0a927b6..d78947df 100644 --- a/src/modules/sensors/Sht30/Sht30.cpp +++ b/src/modules/sensors/Sht30/Sht30.cpp @@ -26,7 +26,7 @@ class Sht30t : public IoTItem { SerialPrint("E", "Sensor Sht30t", "OK"); if (value.valD < -46.85F) regEvent(value.valD, "Sht30t"); // TODO: найти способ понимания ошибки получения данных - else SerialPrint("E", "Sensor Sht30t", "Error"); + else SerialPrint("E", "Sensor Sht30t", "Error", _id); } } ~Sht30t() {}; @@ -42,7 +42,7 @@ class Sht30h : public IoTItem { SerialPrint("E", "Sensor Sht30h", "OK"); if (value.valD != -6) regEvent(value.valD, "Sht30h"); // TODO: найти способ понимания ошибки получения данных - else SerialPrint("E", "Sensor Sht30h", "Error"); + else SerialPrint("E", "Sensor Sht30h", "Error", _id); } } ~Sht30h() {}; From a292f172851117a97ec2ad9f5f907051fd7d17ff Mon Sep 17 00:00:00 2001 From: biver Date: Fri, 28 Oct 2022 17:16:53 +0300 Subject: [PATCH 5/9] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=80=D1=83=D0=B5=D0=BC=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=83=20=D1=81=D0=BE=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=B2=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=D1=85=20?= =?UTF-8?q?SerialPrint=20=D0=B8=20StringUtils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/utils/SerialPrint.h | 2 +- include/utils/StringUtils.h | 22 +++++++++++----------- src/utils/SerialPrint.cpp | 35 +++++++++++++++++++++-------------- src/utils/StringUtils.cpp | 30 ++++++++++++++---------------- 4 files changed, 47 insertions(+), 42 deletions(-) diff --git a/include/utils/SerialPrint.h b/include/utils/SerialPrint.h index ee3a2d82..73e6c787 100644 --- a/include/utils/SerialPrint.h +++ b/include/utils/SerialPrint.h @@ -3,4 +3,4 @@ #include "utils/TimeUtils.h" #include "classes/IoTItem.h" -void SerialPrint(String errorLevel, String module, String msg, String itemId = ""); \ No newline at end of file +void SerialPrint(const String& errorLevel, const String& module, const String& msg, const String& itemId = ""); \ No newline at end of file diff --git a/include/utils/StringUtils.h b/include/utils/StringUtils.h index 9f2f9d75..7f5b7f90 100644 --- a/include/utils/StringUtils.h +++ b/include/utils/StringUtils.h @@ -8,29 +8,29 @@ void hex2string(byte array[], unsigned int len, char buffer[]); int string2hex(const char* str, unsigned char* bytes); -uint8_t hexStringToUint8(String hex); +uint8_t hexStringToUint8(const String& hex); -uint16_t hexStringToUint16(String hex); +uint16_t hexStringToUint16(const String& hex); -String selectToMarkerLast(String str, String found); +String selectToMarkerLast(String str, const String& found); -String selectToMarker(String str, String found); +String selectToMarker(String str, const String& found); String extractInner(String str); -String deleteAfterDelimiter(String str, String found); +String deleteAfterDelimiter(String str, const String& found); -String deleteBeforeDelimiter(String str, String found); +String deleteBeforeDelimiter(String str, const String& found); -String deleteBeforeDelimiterTo(String str, String found); +String deleteBeforeDelimiterTo(String str, const String& found); -String deleteToMarkerLast(String str, String found); +String deleteToMarkerLast(String str, const String& found); -String selectFromMarkerToMarker(String str, String found, int number); +String selectFromMarkerToMarker(String str, const String& found, int number); size_t itemsCount2(String str, const String& separator); -char* stringToChar(String& str); +char* stringToChar(const String& str); //size_t itemsCount(String& str, const char* delim); @@ -42,4 +42,4 @@ String prettyBytes(size_t size); String uint64ToString(uint64_t input, uint8_t base = 10); -String cleanString(String str); +void cleanString(String& str); diff --git a/src/utils/SerialPrint.cpp b/src/utils/SerialPrint.cpp index 22e8b96c..3e32547a 100644 --- a/src/utils/SerialPrint.cpp +++ b/src/utils/SerialPrint.cpp @@ -1,23 +1,16 @@ #include "utils/SerialPrint.h" -void SerialPrint(String errorLevel, String module, String msg, String itemId) { +void SerialPrint(const String& errorLevel, const String& module, const String& msg, const String& itemId) { String tosend = prettyMillis(millis()); - tosend = tosend + " [" + errorLevel + "] [" + module + "] " + msg; + tosend += " ["; + tosend += errorLevel; + tosend += "] ["; + tosend += module; + tosend += "] "; + tosend += msg; Serial.println(tosend); - if (errorLevel == "E") { - msg = cleanString(msg); - // создаем событие об ошибке для возможной реакции в сценарии - if (itemId != "") { - IoTItems.push_back((IoTItem *)new externalVariable("{\"id\":\"" + itemId + "_onError\",\"val\":\"" + msg + "\",\"int\":1}")); - generateEvent(itemId + "_onError", "1"); - } else { - IoTItems.push_back((IoTItem *)new externalVariable("{\"id\":\"onError\",\"val\":\"" + module + " " + msg + "\",\"int\":1}")); - generateEvent("onError", "1"); - } - } - if (isNetworkActive()) { if (jsonReadInt(settingsFlashJson, F("log")) != 0) { // String pl = "/log|" + tosend; @@ -25,4 +18,18 @@ void SerialPrint(String errorLevel, String module, String msg, String itemId) { sendStringToWs("corelg", tosend, -1); } } + + if (errorLevel == "E") { + cleanString(tosend); + // создаем событие об ошибке для возможной реакции в сценарии + if (itemId != "") { + IoTItems.push_back((IoTItem *)new externalVariable("{\"id\":\"" + itemId + "_onError\",\"val\":\"" + tosend + "\",\"int\":1}")); + generateEvent(itemId + "_onError", "1"); + } else { + IoTItems.push_back((IoTItem *)new externalVariable("{\"id\":\"onError\",\"val\":\"" + module + " " + tosend + "\",\"int\":1}")); + generateEvent("onError", "1"); + } + } + + } \ No newline at end of file diff --git a/src/utils/StringUtils.cpp b/src/utils/StringUtils.cpp index eb869812..a2a425d4 100644 --- a/src/utils/StringUtils.cpp +++ b/src/utils/StringUtils.cpp @@ -8,12 +8,12 @@ void writeUint8tToString(uint8_t* payload, size_t length, size_t headerLenth, St } } -String selectToMarkerLast(String str, String found) { +String selectToMarkerLast(String str, const String& found) { int p = str.lastIndexOf(found); return str.substring(p + found.length()); } -String selectToMarker(String str, String found) { +String selectToMarker(String str, const String& found) { int p = str.indexOf(found); return str.substring(0, p); } @@ -24,32 +24,32 @@ String extractInner(String str) { return str.substring(p1 + 1, p2); } -String deleteAfterDelimiter(String str, String found) { +String deleteAfterDelimiter(String str, const String& found) { int p = str.indexOf(found); return str.substring(0, p); } -String deleteBeforeDelimiter(String str, String found) { +String deleteBeforeDelimiter(String str, const String& found) { int p = str.indexOf(found) + found.length(); return str.substring(p); } -String deleteBeforeDelimiterTo(String str, String found) { +String deleteBeforeDelimiterTo(String str, const String& found) { int p = str.indexOf(found); return str.substring(p); } -String deleteToMarkerLast(String str, String found) { +String deleteToMarkerLast(String str, const String& found) { int p = str.lastIndexOf(found); return str.substring(0, p); } -String selectToMarkerPlus(String str, String found, int plus) { +String selectToMarkerPlus(String str, const String& found, int plus) { int p = str.indexOf(found); return str.substring(0, p + plus); } -String selectFromMarkerToMarker(String str, String tofind, int number) { +String selectFromMarkerToMarker(String str, const String& tofind, int number) { if (str.indexOf(tofind) == -1) { return "not found"; } @@ -98,14 +98,14 @@ int string2hex(const char* str, unsigned char* bytes) { return i; } -uint8_t hexStringToUint8(String hex) { +uint8_t hexStringToUint8(const String& hex) { uint8_t tmp = strtol(hex.c_str(), NULL, 0); if (tmp >= 0x00 && tmp <= 0xFF) { return tmp; } } -uint16_t hexStringToUint16(String hex) { +uint16_t hexStringToUint16(const String& hex) { uint16_t tmp = strtol(hex.c_str(), NULL, 0); if (tmp >= 0x0000 && tmp <= 0xFFFF) { return tmp; @@ -141,7 +141,7 @@ size_t itemsCount2(String str, const String& separator) { // return cnt; // } -char* stringToChar(String& str) { +char* stringToChar(const String& str) { char* mychar = new char[str.length() + 1]; strcpy(mychar, str.c_str()); return mychar; @@ -199,11 +199,9 @@ String uint64ToString(uint64_t input, uint8_t base) { return result; } -String cleanString(String str) { - String clearStr = ""; - const String allowedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя.!-+ "; +void cleanString(String& str) { + const String allowedChars = F("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя.!-+ "); for (size_t i = 0; i < str.length(); i++) { - if (allowedChars.indexOf(str.charAt(i)) != -1) clearStr += str.charAt(i); + if (allowedChars.indexOf(str.charAt(i)) == -1) str.setCharAt(i, ' '); } - return clearStr; } \ No newline at end of file From 7dc21ee91489ae3db90210260f57532b6785d118 Mon Sep 17 00:00:00 2001 From: biver Date: Fri, 28 Oct 2022 22:19:18 +0300 Subject: [PATCH 6/9] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=80=D1=83=D0=B5=D0=BC=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=83=20=D1=81=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B5=D0=B9=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=20=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D1=8B=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/classes/IoTItem.h | 18 +++++++-------- include/utils/JsonUtils.h | 24 ++++++++++---------- src/classes/IoTItem.cpp | 27 +++++++++-------------- src/modules/exec/ButtonIn/ButtonIn.cpp | 2 +- src/modules/exec/ButtonOut/ButtonOut.cpp | 2 +- src/modules/exec/IoTServo/IoTServo.cpp | 2 +- src/modules/exec/Pwm32/Pwm32.cpp | 2 +- src/modules/exec/Pwm8266/Pwm8266.cpp | 2 +- src/modules/virtual/Loging/Loging.cpp | 6 ++--- src/modules/virtual/VButton/VButton.cpp | 2 +- src/modules/virtual/Variable/Variable.cpp | 2 +- src/utils/JsonUtils.cpp | 24 ++++++++++---------- 12 files changed, 54 insertions(+), 59 deletions(-) diff --git a/include/classes/IoTItem.h b/include/classes/IoTItem.h index 00d4a68c..dc42c57a 100644 --- a/include/classes/IoTItem.h +++ b/include/classes/IoTItem.h @@ -10,14 +10,14 @@ struct IoTValue { class IoTItem { public: - IoTItem(String parameters); + IoTItem(const String ¶meters); virtual ~IoTItem() {} virtual void loop(); virtual void doByInterval(); virtual IoTValue execute(String command, std::vector& param); - virtual void regEvent(String value, String consoleInfo, bool error = false); - virtual void regEvent(float value, String consoleInfo, bool error = false); + virtual void regEvent(const String& value, const String& consoleInfo, bool error = false); + virtual void regEvent(float value, const String& consoleInfo, bool error = false); String getSubtype(); @@ -38,8 +38,8 @@ class IoTItem { bool enableDoByInt = true; virtual IoTGpio* getGpioDriver(); - virtual void setValue(IoTValue Value, bool generateEvent = true); - virtual void setValue(String valStr, bool generateEvent = true); + virtual void setValue(const IoTValue& Value, bool generateEvent = true); + virtual void setValue(const String& valStr, bool generateEvent = true); String getRoundValue(); //методы для графиков @@ -66,15 +66,15 @@ class IoTItem { bool _global = false; // характеристика айтема, что ему нужно слать и принимать события из внешнего мира }; -IoTItem* findIoTItem(String name); // поиск экземпляра элемента модуля по имени -String getItemValue(String name); // поиск плюс получение значения -bool isItemExist(String name); // существует ли айтем +IoTItem* findIoTItem(const String& name); // поиск экземпляра элемента модуля по имени +String getItemValue(const String& name); // поиск плюс получение значения +bool isItemExist(const String& name); // существует ли айтем StaticJsonDocument* getLocalItemsAsJSON(); // сбор всех локальных значений Items class externalVariable : IoTItem { // объект, создаваемый при получении информации о событии на другом контроллере для хранения информации о событии указанное время public: - externalVariable(String parameters); + externalVariable(const String& parameters); ~externalVariable(); void doByInterval(); // для данного класса doByInterval+int выполняет роль счетчика обратного отсчета до уничтожения }; \ No newline at end of file diff --git a/include/utils/JsonUtils.h b/include/utils/JsonUtils.h index 3a6912e9..8418163f 100644 --- a/include/utils/JsonUtils.h +++ b/include/utils/JsonUtils.h @@ -10,20 +10,20 @@ extern String jsonWriteInt(String& json, String name, int value, bool e = true); extern String jsonWriteFloat(String& json, String name, float value, bool e = true); extern String jsonWriteBool(String& json, String name, boolean value, bool e = true); -extern bool jsonRead(String& json, String key, unsigned long& value, bool e = true); -extern bool jsonRead(String& json, String key, float& value, bool e = true); -extern bool jsonRead(String& json, String key, String& value, bool e = true); -extern bool jsonRead(String& json, String key, bool& value, bool e = true); -extern bool jsonRead(String& json, String key, int& value, bool e = true); +extern bool jsonRead(const String& json, String key, unsigned long& value, bool e = true); +extern bool jsonRead(const String& json, String key, float& value, bool e = true); +extern bool jsonRead(const String& json, String key, String& value, bool e = true); +extern bool jsonRead(const String& json, String key, bool& value, bool e = true); +extern bool jsonRead(const String& json, String key, int& value, bool e = true); -extern String jsonReadStr(String& json, String name, bool e = true); -extern int jsonReadInt(String& json, String name, bool e = true); -extern boolean jsonReadBool(String& json, String name, bool e = true); +extern String jsonReadStr(const String& json, String name, bool e = true); +extern int jsonReadInt(const String& json, String name, bool e = true); +extern boolean jsonReadBool(const String& json, String name, bool e = true); -extern bool jsonWriteStr_(String& json, String name, String value, bool e = true); -extern bool jsonWriteBool_(String& json, String name, bool value, bool e = true); -extern bool jsonWriteInt_(String& json, String name, int value, bool e = true); -extern bool jsonWriteFloat_(String& json, String name, float value, bool e = true); +extern bool jsonWriteStr_(String& json, const String& name, const String& value, bool e = true); +extern bool jsonWriteBool_(String& json, const String& name, bool value, bool e = true); +extern bool jsonWriteInt_(String& json, const String& name, int value, bool e = true); +extern bool jsonWriteFloat_(String& json, const String& name, float value, bool e = true); void writeUint8tValueToJsonString(uint8_t* payload, size_t length, size_t headerLenth, String& json); extern bool jsonMergeObjects(String& json1, String& json2, bool e = true); extern void jsonMergeDocs(JsonObject dest, JsonObjectConst src); diff --git a/src/classes/IoTItem.cpp b/src/classes/IoTItem.cpp index 37a59850..c63d12a7 100644 --- a/src/classes/IoTItem.cpp +++ b/src/classes/IoTItem.cpp @@ -6,7 +6,7 @@ #include "EventsAndOrders.h" //получение параметров в экземпляр класса -IoTItem::IoTItem(String parameters) { +IoTItem::IoTItem(const String& parameters) { jsonRead(parameters, F("int"), _interval); if (_interval == 0) enableDoByInt = false; _interval = _interval * 1000; @@ -58,7 +58,7 @@ String IoTItem::getValue() { } //определяем тип прилетевшей величины -void IoTItem::setValue(String valStr, bool generateEvent) { +void IoTItem::setValue(const String& valStr, bool generateEvent) { if (value.isDecimal = isDigitDotCommaStr(valStr)) { value.valD = valStr.toFloat(); } else { @@ -68,7 +68,7 @@ void IoTItem::setValue(String valStr, bool generateEvent) { } // -void IoTItem::setValue(IoTValue Value, bool generateEvent) { +void IoTItem::setValue(const IoTValue& Value, bool generateEvent) { value = Value; if (generateEvent) if (value.isDecimal) { @@ -79,22 +79,17 @@ void IoTItem::setValue(IoTValue Value, bool generateEvent) { } //когда событие случилось -void IoTItem::regEvent(String value, String consoleInfo, bool error) { +void IoTItem::regEvent(const String& value, const String& consoleInfo, bool error) { if (_needSave) { jsonWriteStr_(valuesFlashJson, _id, value); needSaveValues = true; } - - generateEvent(_id, value); publishStatusMqtt(_id, value); - publishStatusWs(_id, value); SerialPrint("i", "Sensor", consoleInfo + " '" + _id + "' data: " + value + "'"); - // проверка если global установлен то шлем всем о событии - // if (_global) { - // SerialPrint("i", F("=>ALLMQTT"), "Broadcast event: "); - // } + generateEvent(_id, value); + //отправка события другим устройствам в сети если не было ошибки============================== if (jsonReadBool(settingsFlashJson, "mqttin") && _global && !error) { String json = "{}"; @@ -120,7 +115,7 @@ String IoTItem::getRoundValue() { } } -void IoTItem::regEvent(float regvalue, String consoleInfo, bool error) { +void IoTItem::regEvent(float regvalue, const String& consoleInfo, bool error) { value.valD = regvalue; if (_multiply) value.valD = value.valD * _multiply; @@ -162,7 +157,7 @@ IoTGpio* IoTItem::getGpioDriver() { //сетевое общение==================================================================================================================================== -externalVariable::externalVariable(String parameters) : IoTItem(parameters) { +externalVariable::externalVariable(const String& parameters) : IoTItem(parameters) { prevMillis = millis(); // запоминаем текущее значение таймера для выполения doByInterval после int сек iAmLocal = false; // указываем, что это сущность прилетела из сети //Serial.printf("Call from externalVariable: parameters %s %d\n", parameters.c_str(), _interval); @@ -181,7 +176,7 @@ void externalVariable::doByInterval() { // для данного класса d IoTItem* myIoTItem; // поиск элемента модуля в существующей конфигурации -IoTItem* findIoTItem(String name) { +IoTItem* findIoTItem(const String& name) { for (std::list::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) { if ((*it)->getID() == name) return *it; } @@ -189,7 +184,7 @@ IoTItem* findIoTItem(String name) { return nullptr; } // поиск плюс получение значения -String getItemValue(String name) { +String getItemValue(const String& name) { IoTItem* tmp = findIoTItem(name); if (tmp) return tmp->getValue(); @@ -198,7 +193,7 @@ String getItemValue(String name) { } // существует ли айтем -bool isItemExist(String name) { +bool isItemExist(const String& name) { IoTItem* tmp = findIoTItem(name); if (tmp) return true; diff --git a/src/modules/exec/ButtonIn/ButtonIn.cpp b/src/modules/exec/ButtonIn/ButtonIn.cpp index e968eb18..700edce7 100644 --- a/src/modules/exec/ButtonIn/ButtonIn.cpp +++ b/src/modules/exec/ButtonIn/ButtonIn.cpp @@ -68,7 +68,7 @@ class ButtonIn : public IoTItem { _lastButtonState = _reading; } - void setValue(IoTValue Value, bool generateEvent = true) { + void setValue(const IoTValue& Value, bool generateEvent = true) { value = Value; if (generateEvent) regEvent((String)(int)value.valD, "ButtonIn"); } diff --git a/src/modules/exec/ButtonOut/ButtonOut.cpp b/src/modules/exec/ButtonOut/ButtonOut.cpp index d041f748..2f3005d1 100644 --- a/src/modules/exec/ButtonOut/ButtonOut.cpp +++ b/src/modules/exec/ButtonOut/ButtonOut.cpp @@ -37,7 +37,7 @@ class ButtonOut : public IoTItem { return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки } - void setValue(IoTValue Value, bool generateEvent = true) { + void setValue(const IoTValue& Value, bool generateEvent = true) { value = Value; IoTgpio.digitalWrite(_pin, _inv?!value.valD:value.valD); if (generateEvent) regEvent((String)(int)value.valD, "ButtonOut"); diff --git a/src/modules/exec/IoTServo/IoTServo.cpp b/src/modules/exec/IoTServo/IoTServo.cpp index d995918b..b2340558 100644 --- a/src/modules/exec/IoTServo/IoTServo.cpp +++ b/src/modules/exec/IoTServo/IoTServo.cpp @@ -52,7 +52,7 @@ class IoTServo : public IoTItem { return {}; } - void setValue(IoTValue Value, bool generateEvent = true) { + void setValue(const IoTValue& Value, bool generateEvent = true) { value = Value; if (value.isDecimal & (_oldValue != value.valD)) { _oldValue = value.valD; diff --git a/src/modules/exec/Pwm32/Pwm32.cpp b/src/modules/exec/Pwm32/Pwm32.cpp index 6ad209e8..a1d3cb99 100644 --- a/src/modules/exec/Pwm32/Pwm32.cpp +++ b/src/modules/exec/Pwm32/Pwm32.cpp @@ -54,7 +54,7 @@ class Pwm32 : public IoTItem { } } - void setValue(IoTValue Value, bool generateEvent = true) { + void setValue(const IoTValue& Value, bool generateEvent = true) { value = Value; ledcWrite(_ledChannel, value.valD); if (generateEvent) regEvent(value.valD, "Pwm32"); diff --git a/src/modules/exec/Pwm8266/Pwm8266.cpp b/src/modules/exec/Pwm8266/Pwm8266.cpp index 73c4493d..10cc1b01 100644 --- a/src/modules/exec/Pwm8266/Pwm8266.cpp +++ b/src/modules/exec/Pwm8266/Pwm8266.cpp @@ -44,7 +44,7 @@ class Pwm8266 : public IoTItem { } } - void setValue(IoTValue Value, bool generateEvent = true) { + void setValue(const IoTValue& Value, bool generateEvent = true) { value = Value; IoTgpio.analogWrite(_pin, value.valD); if (generateEvent) regEvent(value.valD, "Pwm8266"); diff --git a/src/modules/virtual/Loging/Loging.cpp b/src/modules/virtual/Loging/Loging.cpp index d9f5fdde..117afead 100644 --- a/src/modules/virtual/Loging/Loging.cpp +++ b/src/modules/virtual/Loging/Loging.cpp @@ -263,7 +263,7 @@ class Loging : public IoTItem { } } - void regEvent(String value, String consoleInfo, bool error = false) { + void regEvent(const String& value, const String& consoleInfo, bool error = false) { String userDate = getItemValue(id + "-date"); String currentDate = getTodayDateDotFormated(); //отправляем в график данные только когда выбран сегодняшний день @@ -306,12 +306,12 @@ class Date : public IoTItem { value.isDecimal = false; } - void setValue(String valStr) { + void setValue(const String& valStr) { value.valS = valStr; setValue(value); } - void setValue(IoTValue Value, bool generateEvent = true) { + void setValue(const IoTValue& Value, bool generateEvent = true) { value = Value; if (generateEvent) regEvent(value.valS, ""); //отправка данных при изменении даты diff --git a/src/modules/virtual/VButton/VButton.cpp b/src/modules/virtual/VButton/VButton.cpp index 44f846ad..b5411af0 100644 --- a/src/modules/virtual/VButton/VButton.cpp +++ b/src/modules/virtual/VButton/VButton.cpp @@ -6,7 +6,7 @@ class VButton : public IoTItem { public: VButton(String parameters): IoTItem(parameters) { } - void setValue(IoTValue Value, bool generateEvent = true) { + void setValue(const IoTValue& Value, bool generateEvent = true) { value = Value; if (generateEvent) regEvent((String)(int)value.valD, "VButton"); } diff --git a/src/modules/virtual/Variable/Variable.cpp b/src/modules/virtual/Variable/Variable.cpp index 0ecd533e..28d495ed 100644 --- a/src/modules/virtual/Variable/Variable.cpp +++ b/src/modules/virtual/Variable/Variable.cpp @@ -9,7 +9,7 @@ class Variable : public IoTItem { } // особенность данного модуля - просто хранение значения для сценария, нет событий - // void setValue(IoTValue Value, bool generateEvent = true) { + // void setValue(const IoTValue& Value, bool generateEvent = true) { // value = Value; // } diff --git a/src/utils/JsonUtils.cpp b/src/utils/JsonUtils.cpp index 141bd8e6..d35eb7d2 100644 --- a/src/utils/JsonUtils.cpp +++ b/src/utils/JsonUtils.cpp @@ -11,7 +11,7 @@ void jsonWriteStrDoc(DynamicJsonDocument& doc, String name, String value) { } // new============================================================================== -bool jsonRead(String& json, String key, unsigned long& value, bool e) { +bool jsonRead(const String& json, String key, unsigned long& value, bool e) { bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); @@ -32,7 +32,7 @@ bool jsonRead(String& json, String key, unsigned long& value, bool e) { return ret; } -bool jsonRead(String& json, String key, float& value, bool e) { +bool jsonRead(const String& json, String key, float& value, bool e) { bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); @@ -53,7 +53,7 @@ bool jsonRead(String& json, String key, float& value, bool e) { return ret; } -bool jsonRead(String& json, String key, String& value, bool e) { +bool jsonRead(const String& json, String key, String& value, bool e) { bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); @@ -74,7 +74,7 @@ bool jsonRead(String& json, String key, String& value, bool e) { return ret; } -bool jsonRead(String& json, String key, bool& value, bool e) { +bool jsonRead(const String& json, String key, bool& value, bool e) { bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); @@ -95,7 +95,7 @@ bool jsonRead(String& json, String key, bool& value, bool e) { return ret; } -bool jsonRead(String& json, String key, int& value, bool e) { +bool jsonRead(const String& json, String key, int& value, bool e) { bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); @@ -117,7 +117,7 @@ bool jsonRead(String& json, String key, int& value, bool e) { } // new============================================================================== -bool jsonWriteStr_(String& json, String key, String value, bool e) { +bool jsonWriteStr_(String& json, const String& key, const String& value, bool e) { bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); @@ -134,7 +134,7 @@ bool jsonWriteStr_(String& json, String key, String value, bool e) { return ret; } -bool jsonWriteBool_(String& json, String key, bool value, bool e) { +bool jsonWriteBool_(String& json, const String& key, bool value, bool e) { bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); @@ -151,7 +151,7 @@ bool jsonWriteBool_(String& json, String key, bool value, bool e) { return ret; } -bool jsonWriteInt_(String& json, String key, int value, bool e) { +bool jsonWriteInt_(String& json, const String& key, int value, bool e) { bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); @@ -168,7 +168,7 @@ bool jsonWriteInt_(String& json, String key, int value, bool e) { return ret; } -bool jsonWriteFloat_(String& json, String key, float value, bool e) { +bool jsonWriteFloat_(String& json, const String &key, float value, bool e) { bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); @@ -220,7 +220,7 @@ void jsonMergeDocs(JsonObject dest, JsonObjectConst src) { } // depricated====================================================================== -String jsonReadStr(String& json, String name, bool e) { +String jsonReadStr(const String& json, String name, bool e) { DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); if (error) { @@ -232,7 +232,7 @@ String jsonReadStr(String& json, String name, bool e) { return doc[name].as(); } -boolean jsonReadBool(String& json, String name, bool e) { +boolean jsonReadBool(const String& json, String name, bool e) { DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); if (error) { @@ -244,7 +244,7 @@ boolean jsonReadBool(String& json, String name, bool e) { return doc[name].as(); } -int jsonReadInt(String& json, String name, bool e) { +int jsonReadInt(const String& json, String name, bool e) { DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); if (error) { From 4ddbd97999113090a99b511c1c4d4cf441e1d291 Mon Sep 17 00:00:00 2001 From: biver Date: Sat, 29 Oct 2022 19:57:09 +0300 Subject: [PATCH 7/9] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=80=D1=83=D0=B5=D0=BC=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=83=20=D1=81=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=D0=BC=D0=B8=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D1=8F=20JSON?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/JsonUtils.cpp | 74 +++++++++++++---------------------------- 1 file changed, 24 insertions(+), 50 deletions(-) diff --git a/src/utils/JsonUtils.cpp b/src/utils/JsonUtils.cpp index d35eb7d2..ab362ac3 100644 --- a/src/utils/JsonUtils.cpp +++ b/src/utils/JsonUtils.cpp @@ -12,108 +12,82 @@ void jsonWriteStrDoc(DynamicJsonDocument& doc, String name, String value) { // new============================================================================== bool jsonRead(const String& json, String key, unsigned long& value, bool e) { - bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); if (error) { - if (e) { - SerialPrint("EE", F("jsonRead"), error.f_str()); - jsonErrorDetected(); - } - ret = false; + SerialPrint("EE", F("jsonRead"), error.f_str()); + jsonErrorDetected(); + return false; } else if (!doc.containsKey(key)) { if (e) { - SerialPrint("EE", F("jsonRead"), "json key '" + key + "' missing"); + SerialPrint("EE", F("jsonRead"), key + " missing"); jsonErrorDetected(); } - ret = false; + return false; } value = doc[key].as(); - return ret; + return true; } bool jsonRead(const String& json, String key, float& value, bool e) { - bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); if (error) { - if (e) { - SerialPrint("EE", F("jsonRead"), error.f_str()); - jsonErrorDetected(); - } - ret = false; + SerialPrint("EE", F("jsonRead"), error.f_str()); + jsonErrorDetected(); + return false; } else if (!doc.containsKey(key)) { if (e) { SerialPrint("EE", F("jsonRead"), key + " missing"); jsonErrorDetected(); } - ret = false; + return false; } value = doc[key].as(); - return ret; + return true; } bool jsonRead(const String& json, String key, String& value, bool e) { - bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); if (error) { - if (e) { - SerialPrint("EE", F("jsonRead"), error.f_str()); - jsonErrorDetected(); - } - ret = false; + SerialPrint("EE", F("jsonRead"), error.f_str()); + jsonErrorDetected(); + return false; } else if (!doc.containsKey(key)) { if (e) { SerialPrint("EE", F("jsonRead"), key + " missing"); jsonErrorDetected(); } - ret = false; + return false; } value = doc[key].as(); - return ret; + return true; } bool jsonRead(const String& json, String key, bool& value, bool e) { - bool ret = true; - DynamicJsonDocument doc(JSON_BUFFER_SIZE); - DeserializationError error = deserializeJson(doc, json); - if (error) { - if (e) { - SerialPrint("EE", F("jsonRead"), error.f_str()); - jsonErrorDetected(); - } - ret = false; - } else if (!doc.containsKey(key)) { - if (e) { - SerialPrint("EE", F("jsonRead"), key + " missing"); - jsonErrorDetected(); - } - ret = false; - } - value = doc[key].as(); + int lvalue = value; + bool ret = jsonRead(json, key, lvalue, e); + value = lvalue; return ret; } bool jsonRead(const String& json, String key, int& value, bool e) { - bool ret = true; DynamicJsonDocument doc(JSON_BUFFER_SIZE); DeserializationError error = deserializeJson(doc, json); if (error) { - if (e) { - SerialPrint("EE", F("jsonRead"), error.f_str()); - jsonErrorDetected(); - } - ret = false; + SerialPrint("EE", F("jsonRead"), error.f_str()); + jsonErrorDetected(); + return false; } else if (!doc.containsKey(key)) { if (e) { SerialPrint("EE", F("jsonRead"), key + " missing"); jsonErrorDetected(); } - ret = false; + return false; } value = doc[key].as(); - return ret; + return true; } // new============================================================================== From d9788f96bd3f7ab6c82f5393466ab71fa7b9755b Mon Sep 17 00:00:00 2001 From: biver Date: Sat, 29 Oct 2022 20:04:02 +0300 Subject: [PATCH 8/9] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BF=D0=BE=D0=BD=D1=8F=D1=82=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=B8=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=BE=D0=B4=D1=80=D0=B0=D0=B7=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D1=82=20=D1=84=D0=B8=D0=BA=D1=81=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8E=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=B8=20=D1=83=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20WS=20=D0=B8=20MQTT=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0=20=D0=B3=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D1=83=D0=BC=D0=B5=D0=B2=D0=B0=D0=B5=D1=82=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=84=D0=B0=D0=BA=D1=82=D0=B0=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B2=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D1=8C=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B8=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D1=83=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B4=D1=80=D1=83=D0=B3=D0=B8=D0=B5=20=D1=83?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/classes/IoTItem.h | 24 ++++---- src/classes/IoTItem.cpp | 70 ++++++++++++----------- src/modules/display/Ws2812b/Ws2181b.cpp | 4 +- src/modules/exec/ButtonIn/ButtonIn.cpp | 4 +- src/modules/exec/ButtonOut/ButtonOut.cpp | 4 +- src/modules/exec/IoTServo/IoTServo.cpp | 4 +- src/modules/exec/Pwm32/Pwm32.cpp | 4 +- src/modules/exec/Pwm8266/Pwm8266.cpp | 4 +- src/modules/virtual/Loging/Loging.cpp | 10 ++-- src/modules/virtual/VButton/VButton.cpp | 4 +- src/modules/virtual/Variable/Variable.cpp | 5 -- 11 files changed, 68 insertions(+), 69 deletions(-) diff --git a/include/classes/IoTItem.h b/include/classes/IoTItem.h index dc42c57a..ba2b1053 100644 --- a/include/classes/IoTItem.h +++ b/include/classes/IoTItem.h @@ -16,8 +16,8 @@ class IoTItem { virtual void doByInterval(); virtual IoTValue execute(String command, std::vector& param); - virtual void regEvent(const String& value, const String& consoleInfo, bool error = false); - virtual void regEvent(float 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, bool genEvent = true); String getSubtype(); @@ -38,8 +38,8 @@ class IoTItem { bool enableDoByInt = true; virtual IoTGpio* getGpioDriver(); - virtual void setValue(const IoTValue& Value, bool generateEvent = true); - virtual void setValue(const String& valStr, bool generateEvent = true); + virtual void setValue(const IoTValue& Value, bool genEvent = true); + virtual void setValue(const String& valStr, bool genEvent = true); String getRoundValue(); //методы для графиков @@ -51,17 +51,17 @@ class IoTItem { protected: bool _needSave = false; // признак необходимости сохранять и загружать значение элемента на flash - String _subtype; - String _id; - unsigned long _interval; + String _subtype = ""; + String _id = ""; + unsigned long _interval = 1000; float _multiply; // умножаем на значение float _plus; // увеличиваем на значение - int _map1; - int _map2; - int _map3; - int _map4; - int _round; // 1, 10, 100, 1000, 10000 + int _map1 = 0; + int _map2 = 0; + int _map3 = 0; + int _map4 = 0; + int _round = 1; // 1, 10, 100, 1000, 10000 bool _global = false; // характеристика айтема, что ему нужно слать и принимать события из внешнего мира }; diff --git a/src/classes/IoTItem.cpp b/src/classes/IoTItem.cpp index c63d12a7..e78e6b42 100644 --- a/src/classes/IoTItem.cpp +++ b/src/classes/IoTItem.cpp @@ -18,14 +18,6 @@ IoTItem::IoTItem(const String& parameters) { 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; jsonRead(parameters, F("map"), map, false); if (map != "") { @@ -35,6 +27,14 @@ IoTItem::IoTItem(const String& parameters) { _map4 = selectFromMarkerToMarker(map, ",", 3).toInt(); } else _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,48 +58,52 @@ String IoTItem::getValue() { } //определяем тип прилетевшей величины -void IoTItem::setValue(const String& valStr, bool generateEvent) { - if (value.isDecimal = isDigitDotCommaStr(valStr)) { +void IoTItem::setValue(const String& valStr, bool genEvent) { + value.isDecimal = isDigitDotCommaStr(valStr); + + if (value.isDecimal) { value.valD = valStr.toFloat(); } else { 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; - if (generateEvent) - if (value.isDecimal) { - regEvent(value.valD, ""); - } else { - regEvent(value.valS, ""); - } + + if (value.isDecimal) { + regEvent(value.valD, "", false, genEvent); + } else { + 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) { jsonWriteStr_(valuesFlashJson, _id, value); needSaveValues = true; } publishStatusMqtt(_id, value); publishStatusWs(_id, value); - SerialPrint("i", "Sensor", consoleInfo + " '" + _id + "' data: " + value + "'"); + //SerialPrint("i", "Sensor", consoleInfo + " '" + _id + "' data: " + value + "'"); - generateEvent(_id, value); + if (genEvent) { + generateEvent(_id, value); - //отправка события другим устройствам в сети если не было ошибки============================== - if (jsonReadBool(settingsFlashJson, "mqttin") && _global && !error) { - String json = "{}"; - jsonWriteStr_(json, "id", _id); - jsonWriteStr_(json, "val", value); - jsonWriteInt_(json, "int", _interval/1000 + 5); // 5 секунд про запас - publishEvent(_id, json); - SerialPrint("i", F("<=MQTT"), "Broadcast event: " + json); + //отправка события другим устройствам в сети если не было ошибки============================== + if (jsonReadBool(settingsFlashJson, "mqttin") && _global && !error) { + String json = "{}"; + jsonWriteStr_(json, "id", _id); + jsonWriteStr_(json, "val", value); + jsonWriteInt_(json, "int", _interval/1000 + 5); // 5 секунд про запас + publishEvent(_id, json); + SerialPrint("i", F("<=MQTT"), "Broadcast event: " + json); + } + //======================================================================== } - //======================================================================== } 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; if (_multiply) value.valD = value.valD * _multiply; if (_plus) value.valD = value.valD + _plus; if (_map1 != _map2) value.valD = map(value.valD, _map1, _map2, _map3, _map4); - - regEvent(getRoundValue(), consoleInfo, error); + + regEvent(getRoundValue(), consoleInfo, error, genEvent); } void IoTItem::doByInterval() {} diff --git a/src/modules/display/Ws2812b/Ws2181b.cpp b/src/modules/display/Ws2812b/Ws2181b.cpp index 9ddac234..0dbf5362 100644 --- a/src/modules/display/Ws2812b/Ws2181b.cpp +++ b/src/modules/display/Ws2812b/Ws2181b.cpp @@ -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(){}; diff --git a/src/modules/exec/ButtonIn/ButtonIn.cpp b/src/modules/exec/ButtonIn/ButtonIn.cpp index 700edce7..bd532aab 100644 --- a/src/modules/exec/ButtonIn/ButtonIn.cpp +++ b/src/modules/exec/ButtonIn/ButtonIn.cpp @@ -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() { diff --git a/src/modules/exec/ButtonOut/ButtonOut.cpp b/src/modules/exec/ButtonOut/ButtonOut.cpp index 2f3005d1..017d1fc9 100644 --- a/src/modules/exec/ButtonOut/ButtonOut.cpp +++ b/src/modules/exec/ButtonOut/ButtonOut.cpp @@ -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() { diff --git a/src/modules/exec/IoTServo/IoTServo.cpp b/src/modules/exec/IoTServo/IoTServo.cpp index b2340558..3cd672cf 100644 --- a/src/modules/exec/IoTServo/IoTServo.cpp +++ b/src/modules/exec/IoTServo/IoTServo.cpp @@ -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); } } diff --git a/src/modules/exec/Pwm32/Pwm32.cpp b/src/modules/exec/Pwm32/Pwm32.cpp index a1d3cb99..79f6eedf 100644 --- a/src/modules/exec/Pwm32/Pwm32.cpp +++ b/src/modules/exec/Pwm32/Pwm32.cpp @@ -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); } //======================================================================================================= diff --git a/src/modules/exec/Pwm8266/Pwm8266.cpp b/src/modules/exec/Pwm8266/Pwm8266.cpp index 10cc1b01..2f8883f4 100644 --- a/src/modules/exec/Pwm8266/Pwm8266.cpp +++ b/src/modules/exec/Pwm8266/Pwm8266.cpp @@ -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); } //======================================================================================================= diff --git a/src/modules/virtual/Loging/Loging.cpp b/src/modules/virtual/Loging/Loging.cpp index 117afead..a189d046 100644 --- a/src/modules/virtual/Loging/Loging.cpp +++ b/src/modules/virtual/Loging/Loging.cpp @@ -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::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) { if ((*it)->getSubtype() == "Loging") { diff --git a/src/modules/virtual/VButton/VButton.cpp b/src/modules/virtual/VButton/VButton.cpp index b5411af0..747ded1c 100644 --- a/src/modules/virtual/VButton/VButton.cpp +++ b/src/modules/virtual/VButton/VButton.cpp @@ -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() { diff --git a/src/modules/virtual/Variable/Variable.cpp b/src/modules/virtual/Variable/Variable.cpp index 28d495ed..755506a4 100644 --- a/src/modules/virtual/Variable/Variable.cpp +++ b/src/modules/virtual/Variable/Variable.cpp @@ -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() { } }; From 94c156f1231de6cf363fc22510f2a6842d12b433 Mon Sep 17 00:00:00 2001 From: biver Date: Sat, 29 Oct 2022 20:23:35 +0300 Subject: [PATCH 9/9] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B2=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B5=D1=80=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=D0=B0=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0?= =?UTF-8?q?=20=D0=B2=20=D1=81=D0=BB=D1=83=D1=87=D0=B0=D0=B5=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=82=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/virtual/Timer/Timer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/virtual/Timer/Timer.cpp b/src/modules/virtual/Timer/Timer.cpp index f843206f..d1ab432e 100644 --- a/src/modules/virtual/Timer/Timer.cpp +++ b/src/modules/virtual/Timer/Timer.cpp @@ -33,6 +33,7 @@ class Timer : public IoTItem { if (value.valD == 0) { regEvent(value.valD, "Time's up"); } + if (!_ticker) regEvent(getValue(), "Timer tick", false, false); // только регистрируем изменения без генерации тиков } if (_ticker && (value.valD > 0 || _unfin) && !_pause) regEvent(value.valD, "Timer tick");