Browse Source

Add configuration option to send Home Assistant discovery config on MQTT connect

pull/1864/head
Mariusz Wasiluk 1 week ago
parent
commit
2a5042457d
  1. 4
      src/config/settings.h
  2. 3
      src/publisher/pubMqtt.h
  3. 1
      src/web/RestApi.h
  4. 7
      src/web/html/setup.html
  5. 1
      src/web/web.h

4
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<uint16_t>(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<bool>(obj, F("retain"), &mCfg.mqtt.enableRetain);
getVal<bool>(obj, F("sendConfigOnConnect"), &mCfg.mqtt.sendConfigOnConnect);
}
}

3
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) {

1
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) {

7
src/web/html/setup.html

@ -245,7 +245,11 @@
<div class="col-12 col-sm-9"><input type="number" name="mqttInterval" title="Invalid input" /></div>
</div>
<div class="row mb-3">
<div class="col-12 col-sm-3 my-2">Discovery Config (homeassistant)</div>
<div class="col-8 col-sm-3">Send Home Assistant discovery config on MQTT connect</div>
<div class="col-4 col-sm-9"><input type="checkbox" name="sendConfigOnConnect"/></div>
</div>
<div class="row mb-3">
<div class="col-12 col-sm-3 my-2">Force sending Home Assistant discovery config</div>
<div class="col-12 col-sm-9">
<input type="button" name="mqttDiscovery" id="mqttDiscovery" class="btn" value="{#BTN_SEND}" onclick="sendDiscoveryConfig()"/>
<span id="apiResultMqtt"></span>
@ -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) {

1
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

Loading…
Cancel
Save