From 710aa1775e8110ccf2a1ec5c3e1261aac1af9cbc Mon Sep 17 00:00:00 2001 From: technyon Date: Tue, 4 Apr 2023 20:05:51 +0200 Subject: [PATCH] fix LWT, add discovery for LWT --- Config.h | 2 +- Network.cpp | 31 +++++++++++++++++++++++++++++-- Network.h | 2 +- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/Config.h b/Config.h index a39a252..f290b33 100644 --- a/Config.h +++ b/Config.h @@ -1,6 +1,6 @@ #pragma once -#define NUKI_HUB_VERSION "8.20" +#define NUKI_HUB_VERSION "8.21-pre-2" #define MQTT_QOS_LEVEL 1 #define MQTT_CLEAN_SESSIONS false diff --git a/Network.cpp b/Network.cpp index 35f32e4..fd485a7 100644 --- a/Network.cpp +++ b/Network.cpp @@ -23,12 +23,21 @@ Network::Network(Preferences *preferences, const String& maintenancePathPrefix, _hostname = _preferences->getString(preference_hostname); memset(_maintenancePathPrefix, 0, sizeof(_maintenancePathPrefix)); - size_t len = maintenancePathPrefix.length(); for(int i=0; i < len; i++) { _maintenancePathPrefix[i] = maintenancePathPrefix.charAt(i); } + + String connectionStateTopic = _preferences->getString(preference_mqtt_lock_path) + mqtt_topic_mqtt_connection_state; + + memset(_mqttConnectionStateTopic, 0, sizeof(_mqttConnectionStateTopic)); + len = connectionStateTopic.length(); + for(int i=0; i < len; i++) + { + _mqttConnectionStateTopic[i] = connectionStateTopic.charAt(i); + } + setupDevice(); } @@ -417,7 +426,7 @@ bool Network::reconnect() } } - publishString(_maintenancePathPrefix, _mqttConnectionStateTopic, "online"); + publishString(_maintenancePathPrefix, mqtt_topic_mqtt_connection_state, "online"); _mqttConnectionState = 2; for(const auto& callback : _reconnectedCallbacks) @@ -698,6 +707,24 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n "", { { "enabled_by_default", "true" } }); + // MQTT Connected + publishHassTopic("binary_sensor", + "mqtt_connected", + uidString, + "_mqtt_connected", + "MQTT connected", + name, + baseTopic, + mqtt_topic_mqtt_connection_state, + deviceType, + "", + "", + "diagnostic", + "", + {{"pl_on", "online"}, + {"pl_off", "offline"}, + {"ic", "mdi:lan-connect"}}); + // Firmware version publishHassTopic("sensor", "firmware_version", diff --git a/Network.h b/Network.h index 121637e..1ef54fc 100644 --- a/Network.h +++ b/Network.h @@ -101,8 +101,8 @@ private: static Network* _inst; - const char* _mqttConnectionStateTopic = mqtt_topic_mqtt_connection_state; const char* _lastWillPayload = "offline"; + char _mqttConnectionStateTopic[211] = {0}; Preferences* _preferences; IPConfiguration* _ipConfiguration = nullptr;