Fix meter lifecycle and MQTT/HA integration bugs #1
+8
-3
@@ -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++)
|
||||
|
||||
Reference in New Issue
Block a user