From 8141836d378823d5621f509589cb7388a2246835 Mon Sep 17 00:00:00 2001 From: technyon Date: Fri, 2 Sep 2022 19:47:59 +0200 Subject: [PATCH] add home assistant auto discovery for ring detection --- Network.cpp | 34 ++++++++++++++++++++++++++++++++++ Network.h | 1 + NetworkOpener.cpp | 1 + 3 files changed, 36 insertions(+) diff --git a/Network.cpp b/Network.cpp index a47ad2e..603db38 100644 --- a/Network.cpp +++ b/Network.cpp @@ -506,6 +506,40 @@ void Network::publishHASSConfigDoorSensor(char *deviceType, const char *baseTopi } } +void Network::publishHASSConfigRingDetect(char *deviceType, const char *baseTopic, char *name, char *uidString, + char *lockAction, char *unlockAction, char *openAction, char *lockedState, + char *unlockedState) +{ + String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); + + if (discoveryTopic != "") + { + String configJSON = "{\"dev\":{\"ids\":[\"nuki_"; + configJSON.concat(uidString); + configJSON.concat("\"],\"mf\":\"Nuki\",\"mdl\":\""); + configJSON.concat(deviceType); + configJSON.concat("\",\"name\":\""); + configJSON.concat(name); + configJSON.concat("\"},\"~\":\""); + configJSON.concat(baseTopic); + configJSON.concat("\",\"name\":\""); + configJSON.concat(name); + configJSON.concat(" ring\",\"unique_id\":\""); + configJSON.concat(uidString); + configJSON.concat( + "_ring\",\"dev_cla\":\"sound\",\"stat_t\":\"~"); + configJSON.concat(mqtt_topic_lock_state); + configJSON.concat("\",\"pl_off\":\"locked\",\"pl_on\":\"ring\"}"); + + String path = discoveryTopic; + path.concat("/binary_sensor/"); + path.concat(uidString); + path.concat("/ring/config"); + + _device->mqttClient()->publish(path.c_str(), configJSON.c_str(), true); + } +} + void Network::removeHASSConfig(char* uidString) { String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); diff --git a/Network.h b/Network.h index da26bbd..e3b72cb 100644 --- a/Network.h +++ b/Network.h @@ -36,6 +36,7 @@ public: void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); void publishHASSConfigBatLevel(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); void publishHASSConfigDoorSensor(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); + void publishHASSConfigRingDetect(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); void removeHASSConfig(char* uidString); void publishPresenceDetection(char* csv); diff --git a/NetworkOpener.cpp b/NetworkOpener.cpp index 554797d..9a0d46f 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -363,6 +363,7 @@ void NetworkOpener::publishAdvancedConfig(const NukiOpener::AdvancedConfig &conf void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState) { _network->publishHASSConfig(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); + _network->publishHASSConfigRingDetect(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); } void NetworkOpener::removeHASSConfig(char* uidString)