diff --git a/NukiOpenerWrapper.cpp b/NukiOpenerWrapper.cpp index 0b1ab4a..4b425c6 100644 --- a/NukiOpenerWrapper.cpp +++ b/NukiOpenerWrapper.cpp @@ -267,7 +267,18 @@ void NukiOpenerWrapper::unpair() void NukiOpenerWrapper::updateKeyTurnerState() { - _nukiOpener.requestOpenerState(&_keyTurnerState); + Nuki::CmdResult result =_nukiOpener.requestOpenerState(&_keyTurnerState); + if(result != Nuki::CmdResult::Success) + { + _retryLockstateCount++; + postponeBleWatchdog(); + if(_retryLockstateCount < _nrOfRetries) + { + _nextLockStateUpdateTs = millis() + _retryDelay; + } + return; + } + _retryLockstateCount = 0; if(_statusUpdated && _keyTurnerState.lockState == NukiOpener::LockState::Locked && diff --git a/NukiOpenerWrapper.h b/NukiOpenerWrapper.h index 92d8f9b..159deae 100644 --- a/NukiOpenerWrapper.h +++ b/NukiOpenerWrapper.h @@ -66,6 +66,7 @@ private: int _nrOfRetries = 0; int _retryDelay = 0; int _retryCount = 0; + int _retryLockstateCount = 0; unsigned long _nextRetryTs = 0; std::vector _keypadCodeIds; diff --git a/NukiWrapper.cpp b/NukiWrapper.cpp index 54b351d..4109298 100644 --- a/NukiWrapper.cpp +++ b/NukiWrapper.cpp @@ -283,7 +283,19 @@ void NukiWrapper::unpair() void NukiWrapper::updateKeyTurnerState() { - _nukiLock.requestKeyTurnerState(&_keyTurnerState); + Nuki::CmdResult result =_nukiLock.requestKeyTurnerState(&_keyTurnerState); + if(result != Nuki::CmdResult::Success) + { + _retryLockstateCount++; + postponeBleWatchdog(); + if(_retryLockstateCount < _nrOfRetries) + { + _nextLockStateUpdateTs = millis() + _retryDelay; + } + return; + } + _retryLockstateCount = 0; + _network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState); if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState) diff --git a/NukiWrapper.h b/NukiWrapper.h index af94abf..5dbdd88 100644 --- a/NukiWrapper.h +++ b/NukiWrapper.h @@ -90,6 +90,7 @@ private: int _nrOfRetries = 0; int _retryDelay = 0; int _retryCount = 0; + int _retryLockstateCount = 0; long _rssiPublishInterval = 0; unsigned long _nextRetryTs = 0; unsigned long _nextLockStateUpdateTs = 0;