From 1dcef135fcb0e138f421ab2b389dbcb34469262f Mon Sep 17 00:00:00 2001 From: iranl Date: Sun, 24 Mar 2024 22:28:44 +0100 Subject: [PATCH] Add extra checks and auto retries --- NukiOpenerWrapper.cpp | 25 ++++++++++++++++++++++++- NukiOpenerWrapper.h | 1 + NukiWrapper.cpp | 25 ++++++++++++++++++++++++- NukiWrapper.h | 1 + 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/NukiOpenerWrapper.cpp b/NukiOpenerWrapper.cpp index ef78887..b1f5aa5 100644 --- a/NukiOpenerWrapper.cpp +++ b/NukiOpenerWrapper.cpp @@ -396,10 +396,11 @@ void NukiOpenerWrapper::updateConfig() readConfig(); readAdvancedConfig(); _configRead = true; + bool expectedConfig = true; if(_nukiConfigValid) { - if(_preferences->getUInt(preference_nuki_id_opener, 0) == 0) + if(_preferences->getUInt(preference_nuki_id_opener, 0) == 0 || _retryConfigCount == 10) { _preferences->putUInt(preference_nuki_id_opener, _nukiConfig.nukiId); } @@ -410,11 +411,33 @@ void NukiOpenerWrapper::updateConfig() _firmwareVersion = std::to_string(_nukiConfig.firmwareVersion[0]) + "." + std::to_string(_nukiConfig.firmwareVersion[1]) + "." + std::to_string(_nukiConfig.firmwareVersion[2]); _hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]); _network->publishConfig(_nukiConfig); + _retryConfigCount = 0; } + else + { + expectedConfig = false; + ++_retryConfigCount; + } + } + else + { + expectedConfig = false; + ++_retryConfigCount; } if(_nukiAdvancedConfigValid && _preferences->getUInt(preference_nuki_id_opener, 0) == _nukiConfig.nukiId) { _network->publishAdvancedConfig(_nukiAdvancedConfig); + _retryConfigCount = 0; + } + else + { + expectedConfig = false; + ++_retryConfigCount; + } + if(!expectedConfig && _retryConfigCount < 11) + { + unsigned long ts = millis(); + _nextConfigUpdateTs = ts + 60000; } } diff --git a/NukiOpenerWrapper.h b/NukiOpenerWrapper.h index cc4a758..657fe2b 100644 --- a/NukiOpenerWrapper.h +++ b/NukiOpenerWrapper.h @@ -88,6 +88,7 @@ private: int _nrOfRetries = 0; int _retryDelay = 0; int _retryCount = 0; + int _retryConfigCount = 0; int _retryLockstateCount = 0; unsigned long _nextRetryTs = 0; std::vector _keypadCodeIds; diff --git a/NukiWrapper.cpp b/NukiWrapper.cpp index 412c345..35a4c3f 100644 --- a/NukiWrapper.cpp +++ b/NukiWrapper.cpp @@ -362,10 +362,11 @@ void NukiWrapper::updateConfig() readConfig(); readAdvancedConfig(); _configRead = true; + bool expectedConfig = true; if(_nukiConfigValid) { - if(_preferences->getUInt(preference_nuki_id_lock, 0) == 0) + if(_preferences->getUInt(preference_nuki_id_lock, 0) == 0 || _retryConfigCount == 10) { _preferences->putUInt(preference_nuki_id_lock, _nukiConfig.nukiId); } @@ -376,11 +377,33 @@ void NukiWrapper::updateConfig() _firmwareVersion = std::to_string(_nukiConfig.firmwareVersion[0]) + "." + std::to_string(_nukiConfig.firmwareVersion[1]) + "." + std::to_string(_nukiConfig.firmwareVersion[2]); _hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]); _network->publishConfig(_nukiConfig); + _retryConfigCount = 0; } + else + { + expectedConfig = false; + ++_retryConfigCount; + } + } + else + { + expectedConfig = false; + ++_retryConfigCount; } if(_nukiAdvancedConfigValid && _preferences->getUInt(preference_nuki_id_lock, 0) == _nukiConfig.nukiId) { _network->publishAdvancedConfig(_nukiAdvancedConfig); + _retryConfigCount = 0; + } + else + { + expectedConfig = false; + ++_retryConfigCount; + } + if(!expectedConfig && _retryConfigCount < 11) + { + unsigned long ts = millis(); + _nextConfigUpdateTs = ts + 60000; } } diff --git a/NukiWrapper.h b/NukiWrapper.h index 7ff26f4..2f68988 100644 --- a/NukiWrapper.h +++ b/NukiWrapper.h @@ -108,6 +108,7 @@ private: int _nrOfRetries = 0; int _retryDelay = 0; int _retryCount = 0; + int _retryConfigCount = 0; int _retryLockstateCount = 0; long _rssiPublishInterval = 0; unsigned long _nextRetryTs = 0;