From aecbacf91b4c1e4c3096f3995124ccbab04cf426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Thu, 16 Mar 2017 12:36:30 +0100 Subject: [PATCH] Fix MQTT will topic pointer. Thanks to Asbjorn Tronhus --- code/espurna/mqtt.ino | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/espurna/mqtt.ino b/code/espurna/mqtt.ino index 5133885a..333bcd37 100644 --- a/code/espurna/mqtt.ino +++ b/code/espurna/mqtt.ino @@ -208,6 +208,7 @@ void mqttConnect() { unsigned int port = getSetting("mqttPort", MQTT_PORT).toInt(); _mqttUser = strdup(getSetting("mqttUser").c_str()); _mqttPass = strdup(getSetting("mqttPassword").c_str()); + char * will = strdup((mqttTopic + MQTT_TOPIC_STATUS).c_str()); DEBUG_MSG_P(PSTR("[MQTT] Connecting to broker at %s:%d"), host, port); mqtt.setServer(host, port); @@ -215,7 +216,7 @@ void mqttConnect() { #if MQTT_USE_ASYNC mqtt.setKeepAlive(MQTT_KEEPALIVE).setCleanSession(false); - mqtt.setWill((mqttTopic + MQTT_TOPIC_STATUS).c_str(), MQTT_QOS, MQTT_RETAIN, "0"); + mqtt.setWill(will, MQTT_QOS, MQTT_RETAIN, "0"); if ((strlen(_mqttUser) > 0) && (strlen(_mqttPass) > 0)) { DEBUG_MSG_P(PSTR(" as user '%s'."), _mqttUser); mqtt.setCredentials(_mqttUser, _mqttPass); @@ -229,10 +230,10 @@ void mqttConnect() { if ((strlen(_mqttUser) > 0) && (strlen(_mqttPass) > 0)) { DEBUG_MSG_P(PSTR(" as user '%s'\n"), _mqttUser); - response = mqtt.connect(getIdentifier().c_str(), _mqttUser, _mqttPass, (mqttTopic + MQTT_TOPIC_STATUS).c_str(), MQTT_QOS, MQTT_RETAIN, "0"); + response = mqtt.connect(getIdentifier().c_str(), _mqttUser, _mqttPass, will, MQTT_QOS, MQTT_RETAIN, "0"); } else { DEBUG_MSG_P(PSTR("\n")); - response = mqtt.connect(getIdentifier().c_str(), (mqttTopic + MQTT_TOPIC_STATUS).c_str(), MQTT_QOS, MQTT_RETAIN, "0"); + response = mqtt.connect(getIdentifier().c_str(), will, MQTT_QOS, MQTT_RETAIN, "0"); } if (response) { @@ -245,6 +246,7 @@ void mqttConnect() { #endif free(host); + free(will); String mqttSetter = getSetting("mqttSetter", MQTT_USE_SETTER); String mqttGetter = getSetting("mqttGetter", MQTT_USE_GETTER);