diff --git a/Network.cpp b/Network.cpp index 3529adc..e578143 100644 --- a/Network.cpp +++ b/Network.cpp @@ -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; diff --git a/Network.h b/Network.h index 073c5d2..26218d0 100644 --- a/Network.h +++ b/Network.h @@ -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> additionalEntries = {} ); + void removeHassTopic(const String& mqttDeviceType, const String& mattDeviceName, const String& uidString); + void onMqttConnect(const bool& sessionPresent); void onMqttDisconnect(const espMqttClientTypes::DisconnectReason& reason); diff --git a/NetworkLock.cpp b/NetworkLock.cpp index 955397a..34845a1 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -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); }