From 1cbe0394ef55c2270ca02614311ff1afba441b84 Mon Sep 17 00:00:00 2001 From: biver Date: Fri, 24 Feb 2023 16:28:04 +0300 Subject: [PATCH] =?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=D0=BF=D1=80=D0=B8=D0=B5=D0=BC=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=20433=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D0=B2=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=B8=D0=B3=D0=BD=D0=BE=D1=80=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=B2=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=A2=D0=B8=D0=BF=D0=B0=20=D0=B7=D0=B0=D1=89?= =?UTF-8?q?=D0=B8=D1=82=D1=8B=20=D0=BE=D1=82=20=D0=B2=D0=B8=D1=80=D1=82?= =?UTF-8?q?=D1=83=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B4=D1=80?= =?UTF-8?q?=D0=B5=D0=B1=D0=B5=D0=B7=D0=B3=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/sensors/RCswitch/RCswitch.cpp | 19 ++++++++++++++++--- src/modules/sensors/RCswitch/modinfo.json | 6 ++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/modules/sensors/RCswitch/RCswitch.cpp b/src/modules/sensors/RCswitch/RCswitch.cpp index 272d5069..d28ca97f 100644 --- a/src/modules/sensors/RCswitch/RCswitch.cpp +++ b/src/modules/sensors/RCswitch/RCswitch.cpp @@ -9,11 +9,16 @@ class RCswitch : public IoTItem { private: int _pinRx; // Выход радио модуля int _pinTx; // Выход модуля передатчика + int _intRepeat = 6; + int _repeatCount = 0; + unsigned long _oldValue = 0; + unsigned long _newValue = 0; public: RCswitch(String parameters): IoTItem(parameters) { jsonRead(parameters, "pinRx", _pinRx); jsonRead(parameters, "pinTx", _pinTx); + jsonRead(parameters, "intRepeat", _intRepeat); _interval = _interval / 1000; // корректируем величину интервала int, теперь он в миллисекундах if (_pinRx >= 0) { Serial.printf("Protocol: %d", _pinRx); @@ -32,11 +37,19 @@ class RCswitch : public IoTItem { // Serial.print("bit "); // Serial.print("Protocol: "); // Serial.println( mySwitch.getReceivedProtocol() ); - value.valD = mySwitch.getReceivedValue(); - regEvent(value.valD, "RCswitch"); - + + _newValue = mySwitch.getReceivedValue(); + if (_newValue != _oldValue || _repeatCount > _intRepeat) { + value.valD = _newValue; + regEvent(value.valD, "RCswitch"); + _oldValue = _newValue; + _repeatCount = 0; + } + mySwitch.resetAvailable(); } + + if (_repeatCount <= _intRepeat) _repeatCount++; } IoTValue execute(String command, std::vector ¶m) { diff --git a/src/modules/sensors/RCswitch/modinfo.json b/src/modules/sensors/RCswitch/modinfo.json index 434a698b..a5c6fa3c 100644 --- a/src/modules/sensors/RCswitch/modinfo.json +++ b/src/modules/sensors/RCswitch/modinfo.json @@ -8,7 +8,8 @@ "type": "Reading", "subtype": "RCswitch", "id": "rsw", - "int": 500, + "int": 100, + "intRepeat": 6, "pinRx": 12, "pinTx": 12 } @@ -29,7 +30,8 @@ "propInfo": { "pinRx": "GPIO номер, к которому подключен радио приемник 433 MHz. Если < 0, то приемник выключен", "pinTx": "GPIO номер, к которому подключен радио передатчик 433 MHz. Если < 0, то передатчик выключен", - "int": "Количество миллисекунд между опросами датчика. 0 - выключено. (устранение повторений при нажатой кнопке)" + "int": "Количество миллисекунд между опросами датчика. 0 - выключено.", + "intRepeat": "Количество интервалов int пропускаем повторы, т.е. при int=100 и intRepeat=6, первые 600мс игнорируем одинаковые значения." }, "retInfo": "Содержит принятое значение", "funcInfo": [