From af0b2095814956c53301d1cbc450210df9762106 Mon Sep 17 00:00:00 2001 From: Martin Dummer Date: Fri, 4 Nov 2022 07:58:54 +0100 Subject: [PATCH] BREAKING CHANGE: add dtu serial to mqtt status topics modify mqtt status topics from /dtu/ to /dtu// Signed-off-by: Martin Dummer --- docs/MQTT_Topics.md | 10 ++++++---- src/MqttPublishing.cpp | 15 +++++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/MQTT_Topics.md b/docs/MQTT_Topics.md index 4f73b6166..d93d77977 100644 --- a/docs/MQTT_Topics.md +++ b/docs/MQTT_Topics.md @@ -4,13 +4,15 @@ The base topic, as configured in the web GUI is prepended to all follwing topics ## General topics +serial will be replaced with the serial number of the OpenDTU device. + | Topic | R / W | Description | Value / Unit | | --------------------------------------- | ----- | ---------------------------------------------------- | -------------------------- | -| dtu/ip | R | IP address of OpenDTU | IP address | -| dtu/hostname | R | Current hostname of the dtu (as set in web GUI) | | -| dtu/rssi | R | WiFi network quality | db value | +| dtu/[serial]/ip | R | IP address of OpenDTU | IP address | +| dtu/[serial]/hostname | R | Current hostname of the dtu (as set in web GUI) | | +| dtu/[serial]/rssi | R | WiFi network quality | db value | | dtu/status | R | Indicates whether OpenDTU network is reachable | online / offline | -| dtu/uptime | R | Time in seconds since startup | seconds | +| dtu/[serial]/uptime | R | Time in seconds since startup | seconds | ## Inverter specific topics diff --git a/src/MqttPublishing.cpp b/src/MqttPublishing.cpp index f297d21ec..7802b6c44 100644 --- a/src/MqttPublishing.cpp +++ b/src/MqttPublishing.cpp @@ -22,11 +22,18 @@ void MqttPublishingClass::loop() const CONFIG_T& config = Configuration.get(); if (millis() - _lastPublish > (config.Mqtt_PublishInterval * 1000)) { - MqttSettings.publish("dtu/uptime", String(millis() / 1000)); - MqttSettings.publish("dtu/ip", NetworkSettings.localIP().toString()); - MqttSettings.publish("dtu/hostname", NetworkSettings.getHostname()); + + // compose subtopic "dtu/" with config.DtuSerial as hex + char dtu_subtopic[sizeof(uint64_t) * 8 + 5]; + snprintf(dtu_subtopic, sizeof(dtu_subtopic), "dtu/%0x%08x", + ((uint32_t)((config.Dtu_Serial >> 32) & 0xFFFFFFFF)), + ((uint32_t)(config.Dtu_Serial & 0xFFFFFFFF))); + + MqttSettings.publish(String(dtu_subtopic) + "/uptime", String(millis() / 1000)); + MqttSettings.publish(String(dtu_subtopic) + "/ip", NetworkSettings.localIP().toString()); + MqttSettings.publish(String(dtu_subtopic) + "/hostname", NetworkSettings.getHostname()); if (NetworkSettings.NetworkMode() == network_mode::WiFi) { - MqttSettings.publish("dtu/rssi", String(WiFi.RSSI())); + MqttSettings.publish(String(dtu_subtopic) + "/rssi", String(WiFi.RSSI())); } // Loop all inverters