From 4640ddfba02c8db550cd5c6f4a2d95a25d7a5c3b Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Sat, 29 Jun 2024 11:05:04 +0200 Subject: [PATCH] Better handling of empty MQTT client id If the configured client id is empty, the default value (auto generated) will be used --- include/MqttSettings.h | 3 ++- src/MqttSettings.cpp | 11 ++++++++++- src/WebApi_mqtt.cpp | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/include/MqttSettings.h b/include/MqttSettings.h index c21f14b8..41b0e6ec 100644 --- a/include/MqttSettings.h +++ b/include/MqttSettings.h @@ -20,6 +20,7 @@ public: void unsubscribe(const String& topic); String getPrefix() const; + String getClientId(); private: void NetworkEvent(network_event event); @@ -39,4 +40,4 @@ private: std::mutex _clientLock; }; -extern MqttSettingsClass MqttSettings; \ No newline at end of file +extern MqttSettingsClass MqttSettings; diff --git a/src/MqttSettings.cpp b/src/MqttSettings.cpp index 164794ff..b86c51f5 100644 --- a/src/MqttSettings.cpp +++ b/src/MqttSettings.cpp @@ -115,7 +115,7 @@ void MqttSettingsClass::performConnect() MessageOutput.println("Connecting to MQTT..."); const CONFIG_T& config = Configuration.get(); const String willTopic = getPrefix() + config.Mqtt.Lwt.Topic; - const String clientId = config.Mqtt.ClientId; + String clientId = getClientId(); if (config.Mqtt.Tls.Enabled) { static_cast(_mqttClient)->setCACert(config.Mqtt.Tls.RootCaCert); static_cast(_mqttClient)->setServer(config.Mqtt.Hostname, config.Mqtt.Port); @@ -180,6 +180,15 @@ String MqttSettingsClass::getPrefix() const return Configuration.get().Mqtt.Topic; } +String MqttSettingsClass::getClientId() +{ + String clientId = Configuration.get().Mqtt.ClientId; + if (clientId == "") { + clientId = NetworkSettings.getApName(); + } + return clientId; +} + void MqttSettingsClass::publish(const String& subtopic, const String& payload) { String topic = getPrefix(); diff --git a/src/WebApi_mqtt.cpp b/src/WebApi_mqtt.cpp index b287b3df..af40643e 100644 --- a/src/WebApi_mqtt.cpp +++ b/src/WebApi_mqtt.cpp @@ -34,7 +34,7 @@ void WebApiMqttClass::onMqttStatus(AsyncWebServerRequest* request) root["mqtt_enabled"] = config.Mqtt.Enabled; root["mqtt_hostname"] = config.Mqtt.Hostname; root["mqtt_port"] = config.Mqtt.Port; - root["mqtt_clientid"] = config.Mqtt.ClientId; + root["mqtt_clientid"] = MqttSettings.getClientId(); root["mqtt_username"] = config.Mqtt.Username; root["mqtt_topic"] = config.Mqtt.Topic; root["mqtt_connected"] = MqttSettings.getConnected();