diff --git a/Network.cpp b/Network.cpp index c3ca3b6..a47ad2e 100644 --- a/Network.cpp +++ b/Network.cpp @@ -471,6 +471,40 @@ void Network::publishHASSConfigBatLevel(char *deviceType, const char *baseTopic, } } +void Network::publishHASSConfigDoorSensor(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(" door sensor\",\"unique_id\":\""); + configJSON.concat(uidString); + configJSON.concat( + "_door_sensor\",\"dev_cla\":\"door\",\"stat_t\":\"~"); + configJSON.concat(mqtt_topic_lock_door_sensor_state); + configJSON.concat("\",\"pl_off\":\"doorClosed\",\"pl_on\":\"doorOpened\",\"pl_not_avail\":\"unavailable\""); + configJSON.concat("}"); + + String path = discoveryTopic; + path.concat("/binary_sensor/"); + path.concat(uidString); + path.concat("/door_sensor/config"); + + _device->mqttClient()->publish(path.c_str(), configJSON.c_str(), true); + } +} void Network::removeHASSConfig(char* uidString) { diff --git a/Network.h b/Network.h index cb7a064..da26bbd 100644 --- a/Network.h +++ b/Network.h @@ -35,6 +35,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 removeHASSConfig(char* uidString); void publishPresenceDetection(char* csv); diff --git a/NetworkLock.cpp b/NetworkLock.cpp index 1370e01..71624fe 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -456,6 +456,7 @@ NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, char *na { _network->publishHASSConfig(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); _network->publishHASSConfigBatLevel(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); + _network->publishHASSConfigDoorSensor(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); } void NetworkLock::removeHASSConfig(char *uidString) diff --git a/Version.h b/Version.h index 312b341..4964743 100644 --- a/Version.h +++ b/Version.h @@ -1,3 +1,3 @@ #pragma once -#define nuki_hub_version "5.10" \ No newline at end of file +#define nuki_hub_version "5.11" \ No newline at end of file diff --git a/WebCfgServer.cpp b/WebCfgServer.cpp index 93f3784..1fa0595 100644 --- a/WebCfgServer.cpp +++ b/WebCfgServer.cpp @@ -568,10 +568,10 @@ void WebCfgServer::buildMqttConfigHtml(String &response) response.concat("