From 95684092b47ecf686dd6bb07e16ff01fbd5e30e1 Mon Sep 17 00:00:00 2001 From: iranl Date: Sat, 10 Feb 2024 19:16:20 +0100 Subject: [PATCH] add-ring-as-event --- Network.cpp | 36 +++++++++++++++++++++++++++++++----- Network.h | 4 ++-- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/Network.cpp b/Network.cpp index 23a1730..5cbba52 100644 --- a/Network.cpp +++ b/Network.cpp @@ -1104,6 +1104,33 @@ void Network::publishHASSConfigRingDetect(char *deviceType, const char *baseTopi "", {{"pl_on", "ring"}, {"pl_off", "locked"}}); + + DynamicJsonDocument ringjson(_bufferSize); + ringjson.clear(); + auto ringdev = ringjson.createNestedObject("dev"); + auto ringids = ringdev.createNestedArray("ids"); + ringids.add(String("nuki_") + uidString); + ringjson["dev"]["mf"] = "Nuki"; + ringjson["dev"]["mdl"] = deviceType; + ringjson["dev"]["name"] = name; + ringjson["~"] = baseTopic; + ringjson["name"] = "Ring"; + ringjson["unique_id"] = String(uidString) + "_ring_event"; + ringjson["dev_cla"] = "doorbell"; + ringjson["stat_t"] = String("~") + mqtt_topic_lock_state; + ringjson["avty"]["t"] = _lockPath + mqtt_topic_mqtt_connection_state; + ringjson["event_types"][0] = "ring"; + ringjson["value_template"] = "{ \"event_type\": \"{{ value }}\" }"; + + serializeJson(ringjson, _buffer, _bufferSize); + + String ringpath = discoveryTopic; + ringpath.concat("/event/"); + ringpath.concat(uidString); + ringpath.concat("/ring/config"); + + _device->mqttPublish(ringpath.c_str(), MQTT_QOS_LEVEL, true, _buffer); + } } @@ -1241,7 +1268,7 @@ void Network::publishHASSBleRssiConfig(char *deviceType, const char *baseTopic, } void Network::publishHassTopic(const String& mqttDeviceType, - const String& mattDeviceName, + const String& mqttDeviceName, const String& uidString, const String& uidStringPostfix, const String& displayName, @@ -1262,7 +1289,6 @@ void Network::publishHassTopic(const String& mqttDeviceType, { DynamicJsonDocument json(_bufferSize); - // Battery level json.clear(); auto dev = json.createNestedObject("dev"); auto ids = dev.createNestedArray("ids"); @@ -1322,7 +1348,7 @@ void Network::publishHassTopic(const String& mqttDeviceType, path.concat("/"); path.concat(uidString); path.concat("/"); - path.concat(mattDeviceName); + path.concat(mqttDeviceName); path.concat("/config"); _device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, _buffer); @@ -1330,7 +1356,7 @@ void Network::publishHassTopic(const String& mqttDeviceType, } -void Network::removeHassTopic(const String& mqttDeviceType, const String& mattDeviceName, const String& uidString) +void Network::removeHassTopic(const String& mqttDeviceType, const String& mqttDeviceName, const String& uidString) { String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); @@ -1342,7 +1368,7 @@ void Network::removeHassTopic(const String& mqttDeviceType, const String& mattDe path.concat("/"); path.concat(uidString); path.concat("/"); - path.concat(mattDeviceName); + path.concat(mqttDeviceName); path.concat("/config"); _device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, ""); diff --git a/Network.h b/Network.h index c9aa133..30e7f62 100644 --- a/Network.h +++ b/Network.h @@ -83,7 +83,7 @@ private: bool reconnect(); void publishHassTopic(const String& mqttDeviceType, - const String& mattDeviceName, + const String& mqttDeviceName, const String& uidString, const String& uidStringPostfix, const String& displayName, @@ -98,7 +98,7 @@ private: std::vector> additionalEntries = {} ); - void removeHassTopic(const String& mqttDeviceType, const String& mattDeviceName, const String& uidString); + void removeHassTopic(const String& mqttDeviceType, const String& mqttDeviceName, const String& uidString); void onMqttConnect(const bool& sessionPresent); void onMqttDisconnect(const espMqttClientTypes::DisconnectReason& reason);