diff --git a/Network.cpp b/Network.cpp index 671d88c..e9b61ec 100644 --- a/Network.cpp +++ b/Network.cpp @@ -592,6 +592,46 @@ void Network::publishHASSConfigRingDetect(char *deviceType, const char *baseTopi } } +void Network::publishHASSWifiConfig(char *deviceType, const char *baseTopic, char *name, char *uidString) +{ + if(_device->signalStrength() == 127) + { + return; + } + + String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); + + if (discoveryTopic != "") + { + // Battery level + 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(" WiFi signal strength\",\"unique_id\":\""); + configJSON.concat(uidString); + configJSON.concat( + "_wifi_signal_strength\",\"dev_cla\":\"signal_strength\",\"ent_cat\":\"diagnostic\",\"stat_t\":\"~"); + configJSON.concat(mqtt_topic_wifi_rssi); + configJSON.concat("\",\"state_cla\":\"measurement\",\"unit_of_meas\":\"db\""); + configJSON.concat("}"); + + String path = discoveryTopic; + path.concat("/sensor/"); + path.concat(uidString); + path.concat("/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); diff --git a/Network.h b/Network.h index 0842e26..503aaa3 100644 --- a/Network.h +++ b/Network.h @@ -37,6 +37,7 @@ 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 removeHASSConfig(char* uidString); void publishPresenceDetection(char* csv); diff --git a/NetworkLock.cpp b/NetworkLock.cpp index 916622b..f944efc 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -450,6 +450,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); + _network->publishHASSWifiConfig(deviceType, baseTopic, name, uidString); } void NetworkLock::removeHASSConfig(char *uidString) diff --git a/main.cpp b/main.cpp index 22e267e..144d7ae 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);