Add extra checks and auto retries

This commit is contained in:
iranl
2024-03-24 22:28:44 +01:00
parent 56d718bc00
commit 1dcef135fc
4 changed files with 50 additions and 2 deletions

View File

@@ -396,10 +396,11 @@ void NukiOpenerWrapper::updateConfig()
readConfig(); readConfig();
readAdvancedConfig(); readAdvancedConfig();
_configRead = true; _configRead = true;
bool expectedConfig = true;
if(_nukiConfigValid) 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); _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]); _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]); _hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]);
_network->publishConfig(_nukiConfig); _network->publishConfig(_nukiConfig);
_retryConfigCount = 0;
} }
else
{
expectedConfig = false;
++_retryConfigCount;
}
}
else
{
expectedConfig = false;
++_retryConfigCount;
} }
if(_nukiAdvancedConfigValid && _preferences->getUInt(preference_nuki_id_opener, 0) == _nukiConfig.nukiId) if(_nukiAdvancedConfigValid && _preferences->getUInt(preference_nuki_id_opener, 0) == _nukiConfig.nukiId)
{ {
_network->publishAdvancedConfig(_nukiAdvancedConfig); _network->publishAdvancedConfig(_nukiAdvancedConfig);
_retryConfigCount = 0;
}
else
{
expectedConfig = false;
++_retryConfigCount;
}
if(!expectedConfig && _retryConfigCount < 11)
{
unsigned long ts = millis();
_nextConfigUpdateTs = ts + 60000;
} }
} }

View File

@@ -88,6 +88,7 @@ private:
int _nrOfRetries = 0; int _nrOfRetries = 0;
int _retryDelay = 0; int _retryDelay = 0;
int _retryCount = 0; int _retryCount = 0;
int _retryConfigCount = 0;
int _retryLockstateCount = 0; int _retryLockstateCount = 0;
unsigned long _nextRetryTs = 0; unsigned long _nextRetryTs = 0;
std::vector<uint16_t> _keypadCodeIds; std::vector<uint16_t> _keypadCodeIds;

View File

@@ -362,10 +362,11 @@ void NukiWrapper::updateConfig()
readConfig(); readConfig();
readAdvancedConfig(); readAdvancedConfig();
_configRead = true; _configRead = true;
bool expectedConfig = true;
if(_nukiConfigValid) 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); _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]); _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]); _hardwareVersion = std::to_string(_nukiConfig.hardwareRevision[0]) + "." + std::to_string(_nukiConfig.hardwareRevision[1]);
_network->publishConfig(_nukiConfig); _network->publishConfig(_nukiConfig);
_retryConfigCount = 0;
} }
else
{
expectedConfig = false;
++_retryConfigCount;
}
}
else
{
expectedConfig = false;
++_retryConfigCount;
} }
if(_nukiAdvancedConfigValid && _preferences->getUInt(preference_nuki_id_lock, 0) == _nukiConfig.nukiId) if(_nukiAdvancedConfigValid && _preferences->getUInt(preference_nuki_id_lock, 0) == _nukiConfig.nukiId)
{ {
_network->publishAdvancedConfig(_nukiAdvancedConfig); _network->publishAdvancedConfig(_nukiAdvancedConfig);
_retryConfigCount = 0;
}
else
{
expectedConfig = false;
++_retryConfigCount;
}
if(!expectedConfig && _retryConfigCount < 11)
{
unsigned long ts = millis();
_nextConfigUpdateTs = ts + 60000;
} }
} }

View File

@@ -108,6 +108,7 @@ private:
int _nrOfRetries = 0; int _nrOfRetries = 0;
int _retryDelay = 0; int _retryDelay = 0;
int _retryCount = 0; int _retryCount = 0;
int _retryConfigCount = 0;
int _retryLockstateCount = 0; int _retryLockstateCount = 0;
long _rssiPublishInterval = 0; long _rssiPublishInterval = 0;
unsigned long _nextRetryTs = 0; unsigned long _nextRetryTs = 0;