From de34e1a78e3bed29fc11dd9e0c6cacf7f34ac4d1 Mon Sep 17 00:00:00 2001 From: technyon Date: Tue, 10 Jan 2023 18:04:40 +0100 Subject: [PATCH] publish ble address via mqtt --- MqttTopics.h | 1 + NetworkLock.cpp | 5 +++++ NetworkLock.h | 1 + NetworkOpener.cpp | 6 +++++- NetworkOpener.h | 1 + NukiOpenerWrapper.cpp | 2 ++ NukiWrapper.cpp | 2 ++ 7 files changed, 17 insertions(+), 1 deletion(-) diff --git a/MqttTopics.h b/MqttTopics.h index 66c315f..2b09c82 100644 --- a/MqttTopics.h +++ b/MqttTopics.h @@ -20,6 +20,7 @@ #define mqtt_topic_lock_door_sensor_state "/lock/doorSensorState" #define mqtt_topic_lock_action "/lock/action" #define mqtt_topic_lock_rssi "/lock/rssi" +#define mqtt_topic_lock_address "/lock/address" #define mqtt_topic_config_button_enabled "/configuration/buttonEnabled" #define mqtt_topic_config_led_enabled "/configuration/ledEnabled" diff --git a/NetworkLock.cpp b/NetworkLock.cpp index 3c08524..e683e77 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -388,6 +388,11 @@ void NetworkLock::publishRssi(const int& rssi) publishInt(mqtt_topic_lock_rssi, rssi); } +void NetworkLock::publishBleAddress(const std::string &address) +{ + publishString(mqtt_topic_lock_address, address.c_str()); +} + void NetworkLock::publishKeypad(const std::list& entries, uint maxKeypadCodeCount) { uint index = 0; diff --git a/NetworkLock.h b/NetworkLock.h index c268a36..b313b30 100644 --- a/NetworkLock.h +++ b/NetworkLock.h @@ -28,6 +28,7 @@ public: void publishConfig(const NukiLock::Config& config); void publishAdvancedConfig(const NukiLock::AdvancedConfig& config); void publishRssi(const int& rssi); + void publishBleAddress(const std::string& address); void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); void removeHASSConfig(char* uidString); void publishKeypad(const std::list& entries, uint maxKeypadCodeCount); diff --git a/NetworkOpener.cpp b/NetworkOpener.cpp index 28d0d3b..7fe249e 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -367,6 +367,11 @@ void NetworkOpener::publishRssi(const int &rssi) publishInt(mqtt_topic_lock_rssi, rssi); } +void NetworkOpener::publishBleAddress(const std::string &address) +{ + publishString(mqtt_topic_lock_address, address.c_str()); +} + void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState) { _network->publishHASSConfig(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); @@ -449,4 +454,3 @@ bool NetworkOpener::comparePrefixedPath(const char *fullPath, const char *subPat buildMqttPath(subPath, prefixedPath); return strcmp(fullPath, prefixedPath) == 0; } - diff --git a/NetworkOpener.h b/NetworkOpener.h index 063709f..89eee36 100644 --- a/NetworkOpener.h +++ b/NetworkOpener.h @@ -29,6 +29,7 @@ public: void publishConfig(const NukiOpener::Config& config); void publishAdvancedConfig(const NukiOpener::AdvancedConfig& config); void publishRssi(const int& rssi); + void publishBleAddress(const std::string& address); void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); void removeHASSConfig(char* uidString); diff --git a/NukiOpenerWrapper.cpp b/NukiOpenerWrapper.cpp index 26a1374..cc8f064 100644 --- a/NukiOpenerWrapper.cpp +++ b/NukiOpenerWrapper.cpp @@ -75,6 +75,7 @@ void NukiOpenerWrapper::update() if (!_paired) { Log->println(F("Nuki opener start pairing")); + _network->publishBleAddress(""); Nuki::AuthorizationIdType idType = _preferences->getBool(preference_register_as_app) ? Nuki::AuthorizationIdType::App : @@ -83,6 +84,7 @@ void NukiOpenerWrapper::update() if (_nukiOpener.pairNuki(idType) == NukiOpener::PairingResult::Success) { Log->println(F("Nuki opener paired")); _paired = true; + _network->publishBleAddress(_nukiOpener.getBleAddress().toString()); } else { diff --git a/NukiWrapper.cpp b/NukiWrapper.cpp index d4d7575..63e269c 100644 --- a/NukiWrapper.cpp +++ b/NukiWrapper.cpp @@ -94,6 +94,7 @@ void NukiWrapper::update() if (!_paired) { Log->println(F("Nuki start pairing")); + _network->publishBleAddress(""); Nuki::AuthorizationIdType idType = _preferences->getBool(preference_register_as_app) ? Nuki::AuthorizationIdType::App : @@ -102,6 +103,7 @@ void NukiWrapper::update() if (_nukiLock.pairNuki(idType) == Nuki::PairingResult::Success) { Log->println(F("Nuki paired")); _paired = true; + _network->publishBleAddress(_nukiLock.getBleAddress().toString()); } else {