diff --git a/Config.h b/Config.h index 70b30b32..85d89053 100644 --- a/Config.h +++ b/Config.h @@ -1,6 +1,6 @@ #pragma once -#define NUKI_HUB_VERSION "8.27-pre-1" +#define NUKI_HUB_VERSION "8.27" #define MQTT_QOS_LEVEL 1 #define MQTT_CLEAN_SESSIONS false diff --git a/Network.cpp b/Network.cpp index 8bcb0757..18e2e2bd 100644 --- a/Network.cpp +++ b/Network.cpp @@ -697,7 +697,7 @@ bool Network::publishString(const char* prefix, const char *topic, const char *v return _device->mqttPublish(path, MQTT_QOS_LEVEL, true, value) > 0; } -void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState) +void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState) { String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); @@ -715,6 +715,7 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n json["name"] = nullptr; json["unique_id"] = String(uidString) + "_lock"; json["cmd_t"] = String("~") + String(mqtt_topic_lock_action); + json["avty"]["t"] = availabilityTopic; json["pl_lock"] = lockAction; json["pl_unlk"] = unlockAction; json["pl_open"] = openAction; @@ -1068,7 +1069,7 @@ void Network::publishHASSConfigAccessLog(char *deviceType, const char *baseTopic "diagnostic", "", { { "ic", "mdi:format-list-bulleted" }, - { "value_template", "{{ (value_json|selectattr('type', 'eq', 'LockAction')|selectattr('action', 'in', ['Lock', 'Unlock', 'Unlatch'])|first).authorizationName }}" }}); + { "value_template", "{{ (value_json|selectattr('type', 'eq', 'LockAction')|selectattr('action', 'in', ['Lock', 'Unlock', 'Unlatch'])|first|default).authorizationName|default }}" }}); } void Network::publishHASSConfigKeypadAttemptInfo(char *deviceType, const char *baseTopic, char *name, char *uidString) diff --git a/Network.h b/Network.h index 71e5faa6..e2c234b8 100644 --- a/Network.h +++ b/Network.h @@ -43,7 +43,7 @@ class Network void publishBool(const char* prefix, const char* topic, const bool value); bool publishString(const char* prefix, const char* topic, const char* value); - void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); + void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); void publishHASSConfigBatLevel(char* deviceType, const char* baseTopic, char* name, char* uidString); 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); diff --git a/NetworkLock.cpp b/NetworkLock.cpp index e6d5e0f9..c93e933b 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -525,7 +525,7 @@ bool NetworkLock::comparePrefixedPath(const char *fullPath, const char *subPath) void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, char *name, char *uidString, const bool& hasDoorSensor, const bool& hasKeypad, const bool& publishAuthData, char *lockAction, char *unlockAction, char *openAction, char *lockedState, char *unlockedState) { - _network->publishHASSConfig(deviceType, baseTopic, name, uidString, hasKeypad, lockAction, unlockAction, openAction, lockedState, unlockedState); + _network->publishHASSConfig(deviceType, baseTopic, name, uidString, "~/maintenance/mqttConnectionState", hasKeypad, lockAction, unlockAction, openAction, lockedState, unlockedState); _network->publishHASSConfigBatLevel(deviceType, baseTopic, name, uidString); _network->publishHASSConfigLedBrightness(deviceType, baseTopic, name, uidString); if(hasDoorSensor) diff --git a/NetworkOpener.cpp b/NetworkOpener.cpp index b4c592f3..4f867ac1 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -489,7 +489,10 @@ void NetworkOpener::publishBleAddress(const std::string &address) 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, false, lockAction, unlockAction, openAction, lockedState, unlockedState); + String availabilityTopic = _preferences->getString("mqttpath"); + availabilityTopic.concat("/maintenance/mqttConnectionState"); + + _network->publishHASSConfig(deviceType, baseTopic, name, uidString, availabilityTopic.c_str(), false, lockAction, unlockAction, openAction, lockedState, unlockedState); _network->publishHASSConfigRingDetect(deviceType, baseTopic, name, uidString); _network->publishHASSConfigSoundLevel(deviceType, baseTopic, name, uidString); _network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString); diff --git a/webflash/nuki_hub.bin b/webflash/nuki_hub.bin index a4b113b1..d1f2ad16 100644 Binary files a/webflash/nuki_hub.bin and b/webflash/nuki_hub.bin differ