From 817157bbc1d7c0c725e8c607ff207e6acb470df7 Mon Sep 17 00:00:00 2001 From: "Christian W. Zuckschwerdt" Date: Thu, 22 May 2025 09:36:41 +0200 Subject: [PATCH] Change to set LWT only once --- wled00/mqtt.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/wled00/mqtt.cpp b/wled00/mqtt.cpp index a462881ec..dfa336d0d 100644 --- a/wled00/mqtt.cpp +++ b/wled00/mqtt.cpp @@ -27,7 +27,7 @@ static void parseMQTTBriPayload(char* payload) static void onMqttConnect(bool sessionPresent) { //(re)subscribe to required topics - char subuf[MQTT_MAX_TOPIC_LEN + 6]; + char subuf[MQTT_MAX_TOPIC_LEN + 9]; if (mqttDeviceTopic[0] != 0) { strlcpy(subuf, mqttDeviceTopic, MQTT_MAX_TOPIC_LEN + 1); @@ -52,6 +52,13 @@ static void onMqttConnect(bool sessionPresent) UsermodManager::onMqttConnect(sessionPresent); DEBUG_PRINTLN(F("MQTT ready")); + +#ifndef USERMOD_SMARTNEST + strlcpy(subuf, mqttDeviceTopic, MQTT_MAX_TOPIC_LEN + 1); + strcat_P(subuf, PSTR("/status")); + mqtt->publish(subuf, 0, true, "online"); // retain message for a LWT +#endif + publishMqtt(); } @@ -174,10 +181,6 @@ void publishMqtt() strcat_P(subuf, PSTR("/c")); mqtt->publish(subuf, 0, retainMqttMsg, s); // optionally retain message (#2263) - strlcpy(subuf, mqttDeviceTopic, MQTT_MAX_TOPIC_LEN + 1); - strcat_P(subuf, PSTR("/status")); - mqtt->publish(subuf, 0, true, "online"); // retain message for a LWT - // TODO: use a DynamicBufferList. Requires a list-read-capable MQTT client API. DynamicBuffer buf(1024); bufferPrint pbuf(buf.data(), buf.size());