Fix meter lifecycle and MQTT/HA integration bugs #1

Merged
adebaumann merged 8 commits from fix-attach-meters-detach into main 2026-06-26 23:53:16 +00:00
Showing only changes of commit eafdf87563 - Show all commits
+8 -3
View File
@@ -14,6 +14,8 @@
#define MQTT_MANUFACTURER "Baumann Enkataleiptics"
#define AUTH_USERNAME "admin"
#define MQTT_PROBE_TIMEOUT_MS 400 // keep short: blocks loop()/handleClient() per reconnect attempt
#define MQTT_PAYLOAD_AVAILABLE "online"
#define MQTT_PAYLOAD_NOT_AVAILABLE "offline"
struct MeterConfig {
int pin;
@@ -256,6 +258,9 @@ static void mqttPublishDiscovery() {
doc["name"] = name;
doc["state_topic"] = stat;
doc["command_topic"] = stat + "/set";
doc["availability_topic"] = String(mqttCfg.prefix) + "/status";
doc["payload_available"] = MQTT_PAYLOAD_AVAILABLE;
doc["payload_not_available"] = MQTT_PAYLOAD_NOT_AVAILABLE;
doc["min"] = meters[i].rangeMin;
doc["max"] = meters[i].rangeMax;
doc["step"] = 0.1;
@@ -268,7 +273,7 @@ static void mqttPublishDiscovery() {
char topic[128];
snprintf(topic, sizeof(topic), "homeassistant/number/%s/config", objId.c_str());
char payload[512];
char payload[768];
serializeJson(doc, payload, sizeof(payload));
bool pubOk = mqttClient.publish(topic, payload, true);
Serial.printf("[MQTT] discovery %s -> %s (ok=%d)\n", topic, payload, pubOk);
@@ -323,11 +328,11 @@ static bool mqttConnect() {
Serial.printf("[MQTT] connecting to %s:%d as %s\n", mqttCfg.host, mqttCfg.port, clientId);
bool ok = mqttClient.connect(clientId, user, pass,
statusTopic, 0, true, "online: false");
statusTopic, 0, true, MQTT_PAYLOAD_NOT_AVAILABLE);
if (ok) {
Serial.printf("[MQTT] connected to %s:%d\n", mqttCfg.host, mqttCfg.port);
mqttClient.publish(statusTopic, "online: true", true);
mqttClient.publish(statusTopic, MQTT_PAYLOAD_AVAILABLE, true);
mqttSubscribe();
mqttPublishDiscovery();
for (int i = 0; i < meterCount; i++)