remove door sensor discovery topic when no door sensor preent

This commit is contained in:
technyon
2023-03-11 18:18:14 +01:00
parent c0a2a69d08
commit 71138e0849
3 changed files with 33 additions and 0 deletions

View File

@@ -996,6 +996,27 @@ void Network::publishHassTopic(const String& mqttDeviceType,
}
}
void Network::removeHassTopic(const String& mqttDeviceType, const String& mattDeviceName, const String& uidString)
{
String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery);
if (discoveryTopic != "")
{
String path = discoveryTopic;
path.concat("/");
path.concat(mqttDeviceType);
path.concat("/");
path.concat(uidString);
path.concat("/");
path.concat(mattDeviceName);
path.concat("/config");
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, "");
}
}
void Network::removeHASSConfig(char* uidString)
{
String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery);
@@ -1058,6 +1079,11 @@ void Network::removeHASSConfig(char* uidString)
}
}
void Network::removeHASSConfigDoorSensor(char *deviceType, const char *baseTopic, char *name, char *uidString)
{
removeHassTopic("binary_sensor", "door_sensor", uidString);
}
void Network::publishPresenceDetection(char *csv)
{
_presenceCsv = csv;

View File

@@ -49,6 +49,7 @@ public:
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 removeHASSConfigDoorSensor(char* deviceType, const char* baseTopic, char* name, char* uidString);
void clearWifiFallback();
@@ -87,6 +88,8 @@ private:
std::vector<std::pair<char*, char*>> additionalEntries = {}
);
void removeHassTopic(const String& mqttDeviceType, const String& mattDeviceName, const String& uidString);
void onMqttConnect(const bool& sessionPresent);
void onMqttDisconnect(const espMqttClientTypes::DisconnectReason& reason);

View File

@@ -525,6 +525,10 @@ void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, cha
{
_network->publishHASSConfigDoorSensor(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState);
}
else
{
_network->removeHASSConfigDoorSensor(deviceType, baseTopic, name, uidString);
}
_network->publishHASSWifiRssiConfig(deviceType, baseTopic, name, uidString);
_network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString);
}