From 9845ed0c45f307b8912b139905b74bc010f4b8f1 Mon Sep 17 00:00:00 2001 From: technyon Date: Sat, 10 Sep 2022 12:16:28 +0200 Subject: [PATCH] fix clearing HA auto discovery --- Network.cpp | 81 ++++++++++++++++++++++++++++++++++++++++--- Network.h | 3 +- NetworkLock.cpp | 3 +- NetworkOpener.cpp | 1 + NukiOpenerWrapper.cpp | 1 - NukiWrapper.cpp | 1 - main.cpp | 4 +-- 7 files changed, 84 insertions(+), 10 deletions(-) diff --git a/Network.cpp b/Network.cpp index e9b61ec..f8e17b2 100644 --- a/Network.cpp +++ b/Network.cpp @@ -592,7 +592,7 @@ void Network::publishHASSConfigRingDetect(char *deviceType, const char *baseTopi } } -void Network::publishHASSWifiConfig(char *deviceType, const char *baseTopic, char *name, char *uidString) +void Network::publishHASSWifiRssiConfig(char *deviceType, const char *baseTopic, char *name, char *uidString) { if(_device->signalStrength() == 127) { @@ -603,7 +603,6 @@ void Network::publishHASSWifiConfig(char *deviceType, const char *baseTopic, cha if (discoveryTopic != "") { - // Battery level String configJSON = "{\"dev\":{\"ids\":[\"nuki_"; configJSON.concat(uidString); configJSON.concat("\"],\"mf\":\"Nuki\",\"mdl\":\""); @@ -625,31 +624,105 @@ void Network::publishHASSWifiConfig(char *deviceType, const char *baseTopic, cha String path = discoveryTopic; path.concat("/sensor/"); path.concat(uidString); - path.concat("/signal_strength/config"); + path.concat("/wifi_signal_strength/config"); _device->mqttClient()->publish(path.c_str(), configJSON.c_str(), true); } } +void Network::publishHASSBleRssiConfig(char *deviceType, const char *baseTopic, char *name, char *uidString) +{ + 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(" bluetooth signal strength\",\"unique_id\":\""); + configJSON.concat(uidString); + configJSON.concat( + "_bluetooth_signal_strength\",\"dev_cla\":\"signal_strength\",\"ent_cat\":\"diagnostic\",\"stat_t\":\"~"); + configJSON.concat(mqtt_topic_lock_rssi); + configJSON.concat("\",\"state_cla\":\"measurement\",\"unit_of_meas\":\"db\""); + configJSON.concat("}"); + + String path = discoveryTopic; + path.concat("/sensor/"); + path.concat(uidString); + path.concat("/bluetooth_signal_strength/config"); + + _device->mqttClient()->publish(path.c_str(), configJSON.c_str(), true); + } +} void Network::removeHASSConfig(char* uidString) { String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); + Serial.print("##### "); Serial.println(uidString); + if(discoveryTopic != "") { String path = discoveryTopic; path.concat("/lock/"); path.concat(uidString); path.concat("/smartlock/config"); - _device->mqttClient()->publish(path.c_str(), NULL, 0U, true); path = discoveryTopic; path.concat("/binary_sensor/"); path.concat(uidString); path.concat("/battery_low/config"); + _device->mqttClient()->publish(path.c_str(), NULL, 0U, true); + path = discoveryTopic; + path.concat("/sensor/"); + path.concat(uidString); + path.concat("/battery_voltage/config"); + _device->mqttClient()->publish(path.c_str(), NULL, 0U, true); + + path = discoveryTopic; + path.concat("/sensor/"); + path.concat(uidString); + path.concat("/trigger/config"); + _device->mqttClient()->publish(path.c_str(), NULL, 0U, true); + + path = discoveryTopic; + path.concat("/sensor/"); + path.concat(uidString); + path.concat("/battery_level/config"); + _device->mqttClient()->publish(path.c_str(), NULL, 0U, true); + + path = discoveryTopic; + path.concat("/binary_sensor/"); + path.concat(uidString); + path.concat("/door_sensor/config"); + _device->mqttClient()->publish(path.c_str(), NULL, 0U, true); + + path = discoveryTopic; + path.concat("/binary_sensor/"); + path.concat(uidString); + path.concat("/ring/config"); + _device->mqttClient()->publish(path.c_str(), NULL, 0U, true); + + path = discoveryTopic; + path.concat("/sensor/"); + path.concat(uidString); + path.concat("/wifi_signal_strength/config"); + _device->mqttClient()->publish(path.c_str(), NULL, 0U, true); + + path = discoveryTopic; + path.concat("/sensor/"); + path.concat(uidString); + path.concat("/bluetooth_signal_strength/config"); _device->mqttClient()->publish(path.c_str(), NULL, 0U, true); } } diff --git a/Network.h b/Network.h index 503aaa3..e6524bc 100644 --- a/Network.h +++ b/Network.h @@ -37,7 +37,8 @@ public: 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 publishHASSWifiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString); + void publishHASSWifiRssiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString); + void publishHASSBleRssiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString); void removeHASSConfig(char* uidString); void publishPresenceDetection(char* csv); diff --git a/NetworkLock.cpp b/NetworkLock.cpp index f944efc..b8ad1f2 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -450,7 +450,8 @@ 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); - _network->publishHASSWifiConfig(deviceType, baseTopic, name, uidString); + _network->publishHASSWifiRssiConfig(deviceType, baseTopic, name, uidString); + _network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString); } void NetworkLock::removeHASSConfig(char *uidString) diff --git a/NetworkOpener.cpp b/NetworkOpener.cpp index f42f239..0f0d3f3 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -369,6 +369,7 @@ void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, c { _network->publishHASSConfig(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); _network->publishHASSConfigRingDetect(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); + _network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString); } void NetworkOpener::removeHASSConfig(char* uidString) diff --git a/NukiOpenerWrapper.cpp b/NukiOpenerWrapper.cpp index 19613e5..01820ad 100644 --- a/NukiOpenerWrapper.cpp +++ b/NukiOpenerWrapper.cpp @@ -343,7 +343,6 @@ void NukiOpenerWrapper::disableHASS() } if (_nukiConfigValid) { - String baseTopic = _preferences->getString(preference_mqtt_opener_path); char uidString[20]; itoa(_nukiConfig.nukiId, uidString, 16); _network->removeHASSConfig(uidString); diff --git a/NukiWrapper.cpp b/NukiWrapper.cpp index a8b733d..eeb8286 100644 --- a/NukiWrapper.cpp +++ b/NukiWrapper.cpp @@ -540,7 +540,6 @@ void NukiWrapper::disableHASS() } if (_nukiConfigValid) { - String baseTopic = _preferences->getString(preference_mqtt_lock_path); char uidString[20]; itoa(_nukiConfig.nukiId, uidString, 16); _network->removeHASSConfig(uidString); diff --git a/main.cpp b/main.cpp index 144d7ae..22e267e 100644 --- a/main.cpp +++ b/main.cpp @@ -169,8 +169,8 @@ void setup() restartTs = preferences->getInt(preference_restart_timer) * 60 * 1000; } - const NetworkDeviceType networkDevice = NetworkDeviceType::WiFi; -// const NetworkDeviceType networkDevice = digitalRead(NETWORK_SELECT) == HIGH ? NetworkDeviceType::WiFi : NetworkDeviceType::W5500; +// const NetworkDeviceType networkDevice = NetworkDeviceType::WiFi; + const NetworkDeviceType networkDevice = digitalRead(NETWORK_SELECT) == HIGH ? NetworkDeviceType::WiFi : NetworkDeviceType::W5500; const String mqttLockPath = preferences->getString(preference_mqtt_lock_path); network = new Network(networkDevice, preferences, mqttLockPath);