From 552589a2c6271e9197f696cec7201d4435ff9bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Gir=C3=B3n?= Date: Fri, 7 Jun 2024 13:21:58 +0200 Subject: [PATCH] mqtt: announce hardware and software version (#396) --- src/Network.cpp | 4 +++- src/Network.h | 2 +- src/NetworkLock.cpp | 4 ++-- src/NetworkLock.h | 2 +- src/NetworkOpener.cpp | 4 ++-- src/NetworkOpener.h | 2 +- src/NukiOpenerWrapper.cpp | 4 ++-- src/NukiWrapper.cpp | 2 +- 8 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/Network.cpp b/src/Network.cpp index 330c2f3..7dfbcdd 100644 --- a/src/Network.cpp +++ b/src/Network.cpp @@ -758,7 +758,7 @@ bool Network::publishString(const char* prefix, const char *topic, const char *v return _device->mqttPublish(path, MQTT_QOS_LEVEL, true, value) > 0; } -void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction) +void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char *softwareVersion, const char *hardwareVersion, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction) { JsonDocument json; json.clear(); @@ -768,6 +768,8 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n json["dev"]["mf"] = "Nuki"; json["dev"]["mdl"] = deviceType; json["dev"]["name"] = name; + json["dev"]["sw"] = softwareVersion; + json["dev"]["hw"] = hardwareVersion; String cuUrl = _preferences->getString(preference_mqtt_hass_cu_url); diff --git a/src/Network.h b/src/Network.h index 9db023c..10bd093 100644 --- a/src/Network.h +++ b/src/Network.h @@ -47,7 +47,7 @@ public: void publishBool(const char* prefix, const char* topic, const bool value); bool publishString(const char* prefix, const char* topic, const char* value); - void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction); + void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char *softwareVersion, const char *hardwareVersion, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction); void publishHASSConfigAdditionalLockEntities(char* deviceType, const char* baseTopic, char* name, char* uidString); void publishHASSConfigDoorSensor(char* deviceType, const char* baseTopic, char* name, char* uidString); void publishHASSConfigAdditionalOpenerEntities(char* deviceType, const char* baseTopic, char* name, char* uidString); diff --git a/src/NetworkLock.cpp b/src/NetworkLock.cpp index d5b8f7b..af6ce95 100644 --- a/src/NetworkLock.cpp +++ b/src/NetworkLock.cpp @@ -1045,10 +1045,10 @@ bool NetworkLock::comparePrefixedPath(const char *fullPath, const char *subPath) return strcmp(fullPath, prefixedPath) == 0; } -void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, char *name, char *uidString, const bool& hasDoorSensor, const bool& hasKeypad, const bool& publishAuthData, char *lockAction, +void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, char *name, char *uidString, const char *softwareVersion, const char *hardwareVersion, const bool& hasDoorSensor, const bool& hasKeypad, const bool& publishAuthData, char *lockAction, char *unlockAction, char *openAction) { - _network->publishHASSConfig(deviceType, baseTopic, name, uidString, "~/maintenance/mqttConnectionState", hasKeypad, lockAction, unlockAction, openAction); + _network->publishHASSConfig(deviceType, baseTopic, name, uidString, softwareVersion, hardwareVersion, "~/maintenance/mqttConnectionState", hasKeypad, lockAction, unlockAction, openAction); _network->publishHASSConfigAdditionalLockEntities(deviceType, baseTopic, name, uidString); if(hasDoorSensor) diff --git a/src/NetworkLock.h b/src/NetworkLock.h index 1b1ed97..568a670 100644 --- a/src/NetworkLock.h +++ b/src/NetworkLock.h @@ -34,7 +34,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, const bool& hasDoorSensor, const bool& hasKeypad, const bool& publishAuthData, char* lockAction, char* unlockAction, char* openAction); + void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char *softwareVersion, const char *hardwareVersion, const bool& hasDoorSensor, const bool& hasKeypad, const bool& publishAuthData, 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/NetworkOpener.cpp b/src/NetworkOpener.cpp index 4825da7..209469d 100644 --- a/src/NetworkOpener.cpp +++ b/src/NetworkOpener.cpp @@ -723,12 +723,12 @@ 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, const bool& publishAuthData, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction) +void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char *softwareVersion, const char *hardwareVersion, const bool& publishAuthData, 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(), hasKeypad, lockAction, unlockAction, openAction); + _network->publishHASSConfig(deviceType, baseTopic, name, uidString, softwareVersion, hardwareVersion, availabilityTopic.c_str(), hasKeypad, lockAction, unlockAction, openAction); _network->publishHASSConfigAdditionalOpenerEntities(deviceType, baseTopic, name, uidString); if(publishAuthData) { diff --git a/src/NetworkOpener.h b/src/NetworkOpener.h index 2daa762..d44d56b 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, const bool& publishAuthData, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction); + void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char *softwareVersion, const char *hardwareVersion, const bool& publishAuthData, 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 ccab09b..02dad90 100644 --- a/src/NukiOpenerWrapper.cpp +++ b/src/NukiOpenerWrapper.cpp @@ -2074,11 +2074,11 @@ void NukiOpenerWrapper::setupHASS() if(_preferences->getBool(preference_opener_continuous_mode)) { - _network->publishHASSConfig((char*)"Opener", baseTopic.c_str(), (char*)_nukiConfig.name, uidString, _publishAuthData, _hasKeypad, (char*)"deactivateCM", (char*)"activateCM", (char*)"electricStrikeActuation"); + _network->publishHASSConfig((char*)"Opener", baseTopic.c_str(), (char*)_nukiConfig.name, uidString, _firmwareVersion.c_str(), _hardwareVersion.c_str(), _publishAuthData, _hasKeypad, (char*)"deactivateCM", (char*)"activateCM", (char*)"electricStrikeActuation"); } else { - _network->publishHASSConfig((char*)"Opener", baseTopic.c_str(), (char*)_nukiConfig.name, uidString, _publishAuthData, _hasKeypad, (char*)"deactivateRTO", (char*)"activateRTO", (char*)"electricStrikeActuation"); + _network->publishHASSConfig((char*)"Opener", baseTopic.c_str(), (char*)_nukiConfig.name, uidString, _firmwareVersion.c_str(), _hardwareVersion.c_str(), _publishAuthData, _hasKeypad, (char*)"deactivateRTO", (char*)"activateRTO", (char*)"electricStrikeActuation"); } _hassSetupCompleted = true; diff --git a/src/NukiWrapper.cpp b/src/NukiWrapper.cpp index 81d39c0..dde8df5 100644 --- a/src/NukiWrapper.cpp +++ b/src/NukiWrapper.cpp @@ -2054,7 +2054,7 @@ void NukiWrapper::setupHASS() char uidString[20]; itoa(_nukiConfig.nukiId, uidString, 16); - _network->publishHASSConfig((char*)"SmartLock", baseTopic.c_str(),(char*)_nukiConfig.name, uidString, hasDoorSensor(), _hasKeypad, _publishAuthData, (char*)"lock", (char*)"unlock", (char*)"unlatch"); + _network->publishHASSConfig((char*)"SmartLock", baseTopic.c_str(),(char*)_nukiConfig.name, uidString, _firmwareVersion.c_str(), _hardwareVersion.c_str(), hasDoorSensor(), _hasKeypad, _publishAuthData, (char*)"lock", (char*)"unlock", (char*)"unlatch"); _hassSetupCompleted = true; Log->println("HASS setup for lock completed.");