diff --git a/src/NetworkOpener.cpp b/src/NetworkOpener.cpp index 5e554ae..783299b 100644 --- a/src/NetworkOpener.cpp +++ b/src/NetworkOpener.cpp @@ -678,13 +678,23 @@ void NetworkOpener::publishBleAddress(const std::string &address) publishString(mqtt_topic_lock_address, address); } -void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction) +void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction) { String availabilityTopic = _preferences->getString("mqttpath"); availabilityTopic.concat("/maintenance/mqttConnectionState"); - _network->publishHASSConfig(deviceType, baseTopic, name, uidString, availabilityTopic.c_str(), false, lockAction, unlockAction, openAction); + _network->publishHASSConfig(deviceType, baseTopic, name, uidString, availabilityTopic.c_str(), hasKeypad, lockAction, unlockAction, openAction); _network->publishHASSConfigAdditionalOpenerEntities(deviceType, baseTopic, name, uidString); + + if(hasKeypad) + { + _network->publishHASSConfigKeypad(deviceType, baseTopic, name, uidString); + } + else + { + _network->removeHASSConfigTopic((char*)"sensor", (char*)"keypad_status", uidString); + _network->removeHASSConfigTopic((char*)"binary_sensor", (char*)"keypad_battery_low", uidString); + } } void NetworkOpener::removeHASSConfig(char* uidString) diff --git a/src/NetworkOpener.h b/src/NetworkOpener.h index d814933..028b703 100644 --- a/src/NetworkOpener.h +++ b/src/NetworkOpener.h @@ -31,7 +31,7 @@ public: void publishRssi(const int& rssi); void publishRetry(const std::string& message); void publishBleAddress(const std::string& address); - void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction); + void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction); void removeHASSConfig(char* uidString); void publishKeypad(const std::list& entries, uint maxKeypadCodeCount); void publishTimeControl(const std::list& timeControlEntries); diff --git a/src/NukiOpenerWrapper.cpp b/src/NukiOpenerWrapper.cpp index 7803ecb..0d619bc 100644 --- a/src/NukiOpenerWrapper.cpp +++ b/src/NukiOpenerWrapper.cpp @@ -2022,11 +2022,11 @@ void NukiOpenerWrapper::setupHASS() if(_preferences->getBool(preference_opener_continuous_mode)) { - _network->publishHASSConfig((char*)"Opener", baseTopic.c_str(), (char*)_nukiConfig.name, uidString, (char*)"deactivateCM", (char*)"activateCM", (char*)"electricStrikeActuation"); + _network->publishHASSConfig((char*)"Opener", baseTopic.c_str(), (char*)_nukiConfig.name, uidString, _hasKeypad, (char*)"deactivateCM", (char*)"activateCM", (char*)"electricStrikeActuation"); } else { - _network->publishHASSConfig((char*)"Opener", baseTopic.c_str(), (char*)_nukiConfig.name, uidString, (char*)"deactivateRTO", (char*)"activateRTO", (char*)"electricStrikeActuation"); + _network->publishHASSConfig((char*)"Opener", baseTopic.c_str(), (char*)_nukiConfig.name, uidString, _hasKeypad, (char*)"deactivateRTO", (char*)"activateRTO", (char*)"electricStrikeActuation"); } _hassSetupCompleted = true;