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 721cc2ff..12d08c15 100644 --- a/src/publisher/pubMqtt.h +++ b/src/publisher/pubMqtt.h @@ -303,6 +303,8 @@ class PubMqtt { subscribe(mVal.data()); } subscribe(subscr[MQTT_SUBS_SET_TIME]); + 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..a3a15362 100644 --- a/src/web/html/setup.html +++ b/src/web/html/setup.html @@ -245,16 +245,17 @@
-
Discovery Config (homeassistant)
-
+
{#RETAIN}
+
+
+
+
{#SEND_CONFIG_ON_CONNECT}
+
+
-
-
{#RETAIN}
-
-
@@ -990,6 +991,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/lang.json b/src/web/lang.json index 96f60a54..21354f54 100644 --- a/src/web/lang.json +++ b/src/web/lang.json @@ -495,8 +495,8 @@ }, { "token": "BTN_SEND", - "en": "send", - "de": "senden" + "en": "Force send", + "de": "Senden erzwingen" }, { "token": "BTN_REBOOT_SUCCESSFUL_SAVE", @@ -822,6 +822,11 @@ "token": "NO_NETWORK_FOUND", "en": "no network found", "de": "kein Netzwerk gefunden" + }, + { + "token": "SEND_CONFIG_ON_CONNECT", + "en": "Send discovery config on MQTT connect", + "de": "Discovery-Konfiguration beim MQTT-Verbindungsaufbau senden" } ] }, 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