From b8d32914ee514baa70989855ea829f8b900b2624 Mon Sep 17 00:00:00 2001 From: technyon Date: Sat, 10 Sep 2022 10:59:10 +0200 Subject: [PATCH] publish lock and opener rssi --- MqttTopics.h | 1 + NetworkLock.cpp | 5 +++++ NetworkLock.h | 1 + NetworkOpener.cpp | 6 ++++++ NetworkOpener.h | 1 + NukiOpenerWrapper.cpp | 11 +++++++++++ NukiOpenerWrapper.h | 2 ++ NukiWrapper.cpp | 11 +++++++++++ NukiWrapper.h | 2 ++ lib/nuki_ble | 2 +- 10 files changed, 41 insertions(+), 1 deletion(-) diff --git a/MqttTopics.h b/MqttTopics.h index 4909b81..ee80b27 100644 --- a/MqttTopics.h +++ b/MqttTopics.h @@ -18,6 +18,7 @@ #define mqtt_topic_lock_action_command_result "/lock/commandResult" #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_config_button_enabled "/configuration/buttonEnabled" #define mqtt_topic_config_led_enabled "/configuration/ledEnabled" diff --git a/NetworkLock.cpp b/NetworkLock.cpp index 992404b..916622b 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -364,6 +364,11 @@ void NetworkLock::publishAdvancedConfig(const NukiLock::AdvancedConfig &config) publishBool(mqtt_topic_config_auto_lock, config.autoLockEnabled == 1); } +void NetworkLock::publishRssi(const int& rssi) +{ + publishInt(mqtt_topic_lock_rssi, rssi); +} + void NetworkLock::publishKeypad(const std::list& entries, uint maxKeypadCodeCount) { uint index = 0; diff --git a/NetworkLock.h b/NetworkLock.h index 1de5c56..c268a36 100644 --- a/NetworkLock.h +++ b/NetworkLock.h @@ -27,6 +27,7 @@ public: void publishBatteryReport(const NukiLock::BatteryReport& batteryReport); void publishConfig(const NukiLock::Config& config); void publishAdvancedConfig(const NukiLock::AdvancedConfig& config); + void publishRssi(const int& rssi); 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 9a0d46f..f42f239 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -360,6 +360,11 @@ void NetworkOpener::publishAdvancedConfig(const NukiOpener::AdvancedConfig &conf publishUInt(mqtt_topic_config_sound_level, config.soundLevel); } +void NetworkOpener::publishRssi(const int &rssi) +{ + publishInt(mqtt_topic_lock_rssi, rssi); +} + 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); @@ -441,3 +446,4 @@ 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 02e6425..063709f 100644 --- a/NetworkOpener.h +++ b/NetworkOpener.h @@ -28,6 +28,7 @@ public: void publishBatteryReport(const NukiOpener::BatteryReport& batteryReport); void publishConfig(const NukiOpener::Config& config); void publishAdvancedConfig(const NukiOpener::AdvancedConfig& config); + void publishRssi(const int& rssi); 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 fe607ca..19613e5 100644 --- a/NukiOpenerWrapper.cpp +++ b/NukiOpenerWrapper.cpp @@ -104,6 +104,17 @@ void NukiOpenerWrapper::update() _nextConfigUpdateTs = ts + _intervalConfig * 1000; updateConfig(); } + if(_nextRssiTs == 0 || ts > _nextRssiTs) + { + _nextRssiTs = ts + 3000; + + int rssi = _nukiOpener.getRssi(); + if(rssi != _lastRssi) + { + _network->publishRssi(rssi); + _lastRssi = rssi; + } + } if(_nextLockAction != (NukiOpener::LockAction)0xff) { diff --git a/NukiOpenerWrapper.h b/NukiOpenerWrapper.h index 7473f9b..8746ad1 100644 --- a/NukiOpenerWrapper.h +++ b/NukiOpenerWrapper.h @@ -73,5 +73,7 @@ private: unsigned long _nextBatteryReportTs = 0; unsigned long _nextConfigUpdateTs = 0; unsigned long _nextPairTs = 0; + unsigned long _nextRssiTs = 0; + unsigned long _lastRssi = 0; NukiOpener::LockAction _nextLockAction = (NukiOpener::LockAction)0xff; }; diff --git a/NukiWrapper.cpp b/NukiWrapper.cpp index 6f55609..a8b733d 100644 --- a/NukiWrapper.cpp +++ b/NukiWrapper.cpp @@ -114,6 +114,17 @@ void NukiWrapper::update() _nextConfigUpdateTs = ts + _intervalConfig * 1000; updateConfig(); } + if(_nextRssiTs == 0 || ts > _nextRssiTs) + { + _nextRssiTs = ts + 3000; + + int rssi = _nukiLock.getRssi(); + if(rssi != _lastRssi) + { + _network->publishRssi(rssi); + _lastRssi = rssi; + } + } if(_hasKeypad && _keypadEnabled && (_nextKeypadUpdateTs == 0 || ts > _nextKeypadUpdateTs)) { _nextKeypadUpdateTs = ts + _intervalKeypad * 1000; diff --git a/NukiWrapper.h b/NukiWrapper.h index 906b457..0efe3ec 100644 --- a/NukiWrapper.h +++ b/NukiWrapper.h @@ -84,5 +84,7 @@ private: unsigned long _nextBatteryReportTs = 0; unsigned long _nextConfigUpdateTs = 0; unsigned long _nextKeypadUpdateTs = 0; + unsigned long _nextRssiTs = 0; + unsigned long _lastRssi = 0; NukiLock::LockAction _nextLockAction = (NukiLock::LockAction)0xff; }; diff --git a/lib/nuki_ble b/lib/nuki_ble index 0205191..24794a3 160000 --- a/lib/nuki_ble +++ b/lib/nuki_ble @@ -1 +1 @@ -Subproject commit 0205191ceb64ffdcdb3c8e81ac0f2f0ae5066a14 +Subproject commit 24794a348b388219db01745b2d34584be8f03897