From 2a5042457db87e36fa087dfc99b53a3a7077044e Mon Sep 17 00:00:00 2001 From: Mariusz Wasiluk Date: Mon, 22 Dec 2025 00:06:37 +0100 Subject: [PATCH] Add configuration option to send Home Assistant discovery config on MQTT connect --- src/config/settings.h | 4 ++++ src/publisher/pubMqtt.h | 3 ++- src/web/RestApi.h | 1 + src/web/html/setup.html | 7 ++++++- src/web/web.h | 1 + 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/config/settings.h b/src/config/settings.h index 0d8970d5..b0c327f1 100644 --- a/src/config/settings.h +++ b/src/config/settings.h @@ -166,6 +166,7 @@ typedef struct { bool json; uint16_t interval; bool enableRetain; + bool sendConfigOnConnect; } cfgMqtt_t; typedef struct { @@ -473,6 +474,7 @@ class settings { mCfg.mqtt.interval = 0; // off mCfg.mqtt.json = false; // off mCfg.mqtt.enableRetain = true; + mCfg.mqtt.sendConfigOnConnect = false; mCfg.inst.sendInterval = SEND_INTERVAL; mCfg.inst.rstValsAtMidNight = false; @@ -728,6 +730,7 @@ class settings { obj[F("json")] = mCfg.mqtt.json; obj[F("intvl")] = mCfg.mqtt.interval; obj[F("retain")] = mCfg.mqtt.enableRetain; + obj[F("sendConfigOnConnect")] = mCfg.mqtt.sendConfigOnConnect; } else { getVal(obj, F("port"), &mCfg.mqtt.port); @@ -739,6 +742,7 @@ class settings { getChar(obj, F("pwd"), mCfg.mqtt.pwd, MQTT_PWD_LEN); getChar(obj, F("topic"), mCfg.mqtt.topic, MQTT_TOPIC_LEN); getVal(obj, F("retain"), &mCfg.mqtt.enableRetain); + getVal(obj, F("sendConfigOnConnect"), &mCfg.mqtt.sendConfigOnConnect); } } diff --git a/src/publisher/pubMqtt.h b/src/publisher/pubMqtt.h index 92fe8f41..12d08c15 100644 --- a/src/publisher/pubMqtt.h +++ b/src/publisher/pubMqtt.h @@ -303,7 +303,8 @@ class PubMqtt { subscribe(mVal.data()); } subscribe(subscr[MQTT_SUBS_SET_TIME]); - sendDiscoveryConfig(); + if(mCfgMqtt->sendConfigOnConnect) + sendDiscoveryConfig(); } void onDisconnect(espMqttClientTypes::DisconnectReason reason) { diff --git a/src/web/RestApi.h b/src/web/RestApi.h index c6859386..770b7f1e 100644 --- a/src/web/RestApi.h +++ b/src/web/RestApi.h @@ -731,6 +731,7 @@ class RestApi { obj[F("json")] = (bool) mConfig->mqtt.json; obj[F("interval")] = String(mConfig->mqtt.interval); obj[F("retain")] = (bool)mConfig->mqtt.enableRetain; + obj[F("sendConfigOnConnect")] = (bool)mConfig->mqtt.sendConfigOnConnect; } void getNtp(JsonObject obj) { diff --git a/src/web/html/setup.html b/src/web/html/setup.html index 88b3be77..33399728 100644 --- a/src/web/html/setup.html +++ b/src/web/html/setup.html @@ -245,7 +245,11 @@
-
Discovery Config (homeassistant)
+
Send Home Assistant discovery config on MQTT connect
+
+
+
+
Force sending Home Assistant discovery config
@@ -990,6 +994,7 @@ document.getElementsByName("mqtt"+i[0])[0].value = obj[i[1]]; document.getElementsByName("mqttJson")[0].checked = obj["json"]; document.getElementsByName("retain")[0].checked = obj.retain + document.getElementsByName("sendConfigOnConnect")[0].checked = obj["sendConfigOnConnect"]; } function parseNtp(obj) { diff --git a/src/web/web.h b/src/web/web.h index efabe587..f0bcabfd 100644 --- a/src/web/web.h +++ b/src/web/web.h @@ -598,6 +598,7 @@ class Web { mConfig->mqtt.json = (request->arg("mqttJson") == "on"); mConfig->mqtt.port = request->arg("mqttPort").toInt(); mConfig->mqtt.interval = request->arg("mqttInterval").toInt(); + mConfig->mqtt.sendConfigOnConnect = (request->arg("sendConfigOnConnect") == "on"); mConfig->mqtt.enableRetain = (request->arg("retain") == "on"); // serial console