From 538257208d3a5e9f3c7453dad9d7520dcfe8f164 Mon Sep 17 00:00:00 2001 From: biver Date: Sat, 22 Oct 2022 08:00:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D0=B5?= =?UTF-8?q?=D0=BC=20=D1=81=D0=B5=D1=82=D0=B5=D0=B2=D1=8B=D0=B5=20=D1=81?= =?UTF-8?q?=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D0=B8=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=B7=D0=B5=20MQTT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MqttClient.cpp | 50 ++++++++++++++++++++++------------------- src/classes/IoTItem.cpp | 18 +++++++-------- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/MqttClient.cpp b/src/MqttClient.cpp index 90691b43..72884352 100644 --- a/src/MqttClient.cpp +++ b/src/MqttClient.cpp @@ -161,29 +161,33 @@ void mqttCallback(char* topic, uint8_t* payload, size_t length) { else if (topicStr.indexOf("event") != -1) { //пока не работает сетевой обмен этот код будет закомментирован - // if (!jsonReadBool(settingsFlashJson, "mqttin")) { - // return; - // } - // if (topicStr.indexOf(chipId) == -1) { - // String devId = selectFromMarkerToMarker(topicStr, "/", 2); - // String id = selectFromMarkerToMarker(topicStr, "/", 3); - // IoTItem* itemExist = findIoTItem(id); - // if (itemExist) { - // String valAsStr; - // if (jsonRead(payloadStr, F("val"), valAsStr, false)) { - // itemExist->setValue(valAsStr); - // unsigned long interval; - // jsonRead(payloadStr, F("int"), interval); - // itemExist->setInterval(interval); - // } - // } else { - // //добавим событие в базу - // // IoTItems.push_back((IoTItem*)new externalVariable(payloadStr)); - // } - // //запустим проверку его в сценариях - // generateEvent(id, payloadStr); - // SerialPrint("i", F("=>MQTT"), "Received event from other device: '" + devId + "' " + id + " " + payloadStr); - // } + if (!jsonReadBool(settingsFlashJson, "mqttin")) { + return; + } + if (topicStr.indexOf(chipId) == -1) { + String devId = selectFromMarkerToMarker(topicStr, "/", 2); + String id = selectFromMarkerToMarker(topicStr, "/", 3); + String valAsStr; + jsonRead(payloadStr, F("val"), valAsStr, false); + + IoTItem* itemExist = findIoTItem(id); + if (itemExist) { + unsigned long interval; + jsonRead(payloadStr, F("int"), interval); + itemExist->setInterval(interval); + itemExist->setValue(valAsStr, false); + } else { + //добавим событие в базу + itemExist = (IoTItem*)new externalVariable(payloadStr); + IoTItems.push_back(itemExist); + } + //запустим проверку его в сценариях + generateEvent(id, valAsStr); + publishStatusMqtt(id, valAsStr); + publishStatusWs(id, valAsStr); + //itemExist->regEvent(valAsStr, ""); + SerialPrint("i", F("=>MQTT"), "Received event from other device: '" + devId + "' " + id + " " + valAsStr); + } } //здесь мы получаем прямые команды которые сразу выполнятся на этом устройстве diff --git a/src/classes/IoTItem.cpp b/src/classes/IoTItem.cpp index 02061f9d..0c50e7f0 100644 --- a/src/classes/IoTItem.cpp +++ b/src/classes/IoTItem.cpp @@ -64,7 +64,7 @@ void IoTItem::setValue(String valStr, bool generateEvent) { } else { value.valS = valStr; } - if (generateEvent) setValue(value, generateEvent); + setValue(value, generateEvent); } // @@ -96,14 +96,14 @@ void IoTItem::regEvent(String value, String consoleInfo = "") { // SerialPrint("i", F("=>ALLMQTT"), "Broadcast event: "); // } //отправка события другим устройствам в сети============================== - // if (jsonReadBool(settingsFlashJson, "mqttin")) { - // String json = "{}"; - // jsonWriteStr_(json, "id", _id); - // jsonWriteStr_(json, "val", value); - // jsonWriteInt_(json, "int", _interval + 5000); // 5 секунд про запас - // publishEvent(_id, json); - // SerialPrint("i", F("<=MQTT"), "Broadcast event: " + json); - //} + if (jsonReadBool(settingsFlashJson, "mqttin")) { + 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); + } //======================================================================== }