diff --git a/src/MqttClient.cpp b/src/MqttClient.cpp index cfc5e8c2..48697b8c 100644 --- a/src/MqttClient.cpp +++ b/src/MqttClient.cpp @@ -121,13 +121,16 @@ void mqttSubscribe() { } void mqttSubscribeExternal(String topic, bool usePrefix) { - SerialPrint("i", F("MQTT"), ("subscribed external" + topic).c_str()); + // SerialPrint("i", F("MQTT"), mqttRootDevice); + String _sb_topic = topic; if (usePrefix) { - mqtt.subscribe((mqttPrefix + topic).c_str()); + _sb_topic = mqttPrefix + "/" + topic; } - mqtt.subscribe(topic.c_str()); + mqtt.subscribe(_sb_topic.c_str()); + + SerialPrint("i", F("MQTT"), ("subscribed external " + _sb_topic).c_str()); } void mqttCallback(char* topic, uint8_t* payload, size_t length) { diff --git a/src/modules/sensors/ExternalMQTT/ExternalMQTT.cpp b/src/modules/sensors/ExternalMQTT/ExternalMQTT.cpp index 91da0b9c..a37add87 100644 --- a/src/modules/sensors/ExternalMQTT/ExternalMQTT.cpp +++ b/src/modules/sensors/ExternalMQTT/ExternalMQTT.cpp @@ -17,6 +17,7 @@ private: bool _isJson; bool _addPrefix; bool _debug; + bool sendOk = false; public: ExternalMQTT(String parameters) : IoTItem(parameters) @@ -26,10 +27,12 @@ public: jsonRead(parameters, F("red"), red); jsonRead(parameters, F("offline"), offline); _topic = jsonReadStr(parameters, "topic"); - _isJson = jsonReadBool(parameters, "isJson"); - _addPrefix = jsonReadBool(parameters, "addPrefix"); - _debug = jsonReadBool(parameters, "debug"); + jsonRead(parameters, "isJson", _isJson); + jsonRead(parameters, "addPrefix", _addPrefix); + jsonRead(parameters, "debug", _debug); dataFromNode = false; + if (mqttIsConnect()) + sendOk = true; mqttSubscribeExternal(_topic, _addPrefix); } char *TimeToString(unsigned long t) @@ -58,6 +61,7 @@ public: { return; } + if (_isJson) { DynamicJsonDocument doc(JSON_BUFFER_SIZE); @@ -106,6 +110,11 @@ public: { _minutesPassed++; setNewWidgetAttributes(); + if (mqttIsConnect() && !sendOk) + { + sendOk = true; + mqttSubscribeExternal(_topic, _addPrefix); + } } void onMqttWsAppConnectEvent() {