From 94107a3d208f849ae17e553c2c21eba9d4d7f67a Mon Sep 17 00:00:00 2001 From: Gunnar Skjold Date: Fri, 21 Nov 2025 13:26:52 +0100 Subject: [PATCH] Fixed default MQTT subscription --- lib/AmsMqttHandler/include/AmsMqttHandler.h | 1 + lib/AmsMqttHandler/src/AmsMqttHandler.cpp | 20 +++++++++++++++++ .../src/HomeAssistantMqttHandler.cpp | 22 +++++++++++++------ lib/JsonMqttHandler/include/JsonMqttHandler.h | 2 -- lib/JsonMqttHandler/src/JsonMqttHandler.cpp | 11 ---------- 5 files changed, 36 insertions(+), 20 deletions(-) diff --git a/lib/AmsMqttHandler/include/AmsMqttHandler.h b/lib/AmsMqttHandler/include/AmsMqttHandler.h index 8dc4fe54..11fa68a6 100644 --- a/lib/AmsMqttHandler/include/AmsMqttHandler.h +++ b/lib/AmsMqttHandler/include/AmsMqttHandler.h @@ -43,6 +43,7 @@ public: void setConfig(MqttConfig& mqttConfig); bool connect(); + bool defaultSubscribe(); void disconnect(); lwmqtt_err_t lastError(); bool connected(); diff --git a/lib/AmsMqttHandler/src/AmsMqttHandler.cpp b/lib/AmsMqttHandler/src/AmsMqttHandler.cpp index 220df4ad..c2fe2d0a 100644 --- a/lib/AmsMqttHandler/src/AmsMqttHandler.cpp +++ b/lib/AmsMqttHandler/src/AmsMqttHandler.cpp @@ -127,6 +127,7 @@ bool AmsMqttHandler::connect() { mqtt.onMessage(std::bind(&AmsMqttHandler::onMessage, this, std::placeholders::_1, std::placeholders::_2)); mqtt.publish(statusTopic, "online", true, 0); mqtt.loop(); + defaultSubscribe(); postConnect(); return true; } else { @@ -146,6 +147,25 @@ bool AmsMqttHandler::connect() { } } +bool AmsMqttHandler::defaultSubscribe() { + bool ret = true; + if(!subTopic.isEmpty()) { + if(mqtt.subscribe(subTopic)) { + #if defined(AMS_REMOTE_DEBUG) + if (debugger->isActive(RemoteDebug::ERROR)) + #endif + debugger->printf_P(PSTR(" Subscribed to [%s]\n"), subTopic.c_str()); + } else { + #if defined(AMS_REMOTE_DEBUG) + if (debugger->isActive(RemoteDebug::ERROR)) + #endif + debugger->printf_P(PSTR(" Unable to subscribe to [%s]\n"), subTopic.c_str()); + ret = false; + } + } + return ret; +} + void AmsMqttHandler::disconnect() { mqtt.disconnect(); mqtt.loop(); diff --git a/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp b/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp index fd87724f..e2a01b0b 100644 --- a/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp +++ b/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp @@ -70,14 +70,22 @@ void HomeAssistantMqttHandler::setHomeAssistantConfig(HomeAssistantConfig config } bool HomeAssistantMqttHandler::postConnect() { - if(!subTopic.isEmpty() && !mqtt.subscribe(subTopic)) { - #if defined(AMS_REMOTE_DEBUG) - if (debugger->isActive(RemoteDebug::ERROR)) - #endif - debugger->printf_P(PSTR(" Unable to subscribe to to [%s]\n"), subTopic.c_str()); - return false; + bool ret = true; + if(!statusTopic.isEmpty()) { + if(mqtt.subscribe(statusTopic)) { + #if defined(AMS_REMOTE_DEBUG) + if (debugger->isActive(RemoteDebug::ERROR)) + #endif + debugger->printf_P(PSTR(" Subscribed to [%s]\n"), statusTopic.c_str()); + } else { + #if defined(AMS_REMOTE_DEBUG) + if (debugger->isActive(RemoteDebug::ERROR)) + #endif + debugger->printf_P(PSTR(" Unable to subscribe to [%s]\n"), statusTopic.c_str()); + ret = false; + } } - return true; + return ret; } bool HomeAssistantMqttHandler::publish(AmsData* update, AmsData* previousState, EnergyAccounting* ea, PriceService* ps) { diff --git a/lib/JsonMqttHandler/include/JsonMqttHandler.h b/lib/JsonMqttHandler/include/JsonMqttHandler.h index 7042e6fb..16b430e1 100644 --- a/lib/JsonMqttHandler/include/JsonMqttHandler.h +++ b/lib/JsonMqttHandler/include/JsonMqttHandler.h @@ -26,8 +26,6 @@ public: bool publishRaw(String data); bool publishFirmware(); - bool postConnect(); - void onMessage(String &topic, String &payload); uint8_t getFormat(); diff --git a/lib/JsonMqttHandler/src/JsonMqttHandler.cpp b/lib/JsonMqttHandler/src/JsonMqttHandler.cpp index 17a6fbb7..e65d294a 100644 --- a/lib/JsonMqttHandler/src/JsonMqttHandler.cpp +++ b/lib/JsonMqttHandler/src/JsonMqttHandler.cpp @@ -10,17 +10,6 @@ #include "Uptime.h" #include "AmsJsonGenerator.h" -bool JsonMqttHandler::postConnect() { - if(!subTopic.isEmpty() && !mqtt.subscribe(subTopic)) { - #if defined(AMS_REMOTE_DEBUG) - if (debugger->isActive(RemoteDebug::ERROR)) - #endif - debugger->printf_P(PSTR(" Unable to subscribe to to [%s]\n"), subTopic.c_str()); - return false; - } - return true; -} - bool JsonMqttHandler::publish(AmsData* update, AmsData* previousState, EnergyAccounting* ea, PriceService* ps) { if(strlen(mqttConfig.publishTopic) == 0) { return false;