add wifi signal strength HA auto discovery

This commit is contained in:
technyon
2022-09-10 11:56:14 +02:00
parent b8d32914ee
commit 64cde9a8a0
4 changed files with 44 additions and 2 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)

View File

@@ -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);