Arduino Core 3 (#407)

* Add and remove libs and components for Arduino Core 3

* Arduino Core 3

* Add back Solo1

* Change ESP32-S3 to 4MB build

* Update README.md

* Fix retain and number of retries

* Fix rolling log

* Fix defaults

* Fix BleScanner on Solo1

* Export settings

* Import settings

* Fix HA Battery voltage

* Change submodule

* Update espMqttClient and AsyncTCP

* Webserial and MQTT/Network reconnecting

* Update nuki_ble

---------

Co-authored-by: iranl <iranl@github.com>
This commit is contained in:
iranl
2024-07-05 18:45:39 +02:00
committed by GitHub
parent 193ebb5f91
commit 6b0100fd61
236 changed files with 16390 additions and 9740 deletions

View File

@@ -10,7 +10,7 @@
NukiOpenerWrapper* nukiOpenerInst;
Preferences* nukiOpenerPreferences = nullptr;
NukiOpenerWrapper::NukiOpenerWrapper(const std::string& deviceName, NukiDeviceId* deviceId, BleScanner::Scanner* scanner, NetworkOpener* network, Gpio* gpio, Preferences* preferences)
NukiOpenerWrapper::NukiOpenerWrapper(const std::string& deviceName, NukiDeviceId* deviceId, BleScanner::Scanner* scanner, NukiNetworkOpener* network, Gpio* gpio, Preferences* preferences)
: _deviceName(deviceName),
_deviceId(deviceId),
_nukiOpener(deviceName, _deviceId->get()),
@@ -103,6 +103,7 @@ void NukiOpenerWrapper::initialize()
}
_nukiOpener.setEventHandler(this);
_nukiOpener.setDisonnectTimeout(5000);
Log->print(F("Lock state interval: "));
Log->print(_intervalLockstate);
@@ -220,17 +221,8 @@ void NukiOpenerWrapper::update()
if(_nextLockAction != (NukiOpener::LockAction)0xff && ts > _nextRetryTs)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
Nuki::CmdResult cmdResult = _nukiOpener.lockAction(_nextLockAction, 0, 0);
_taskRunning = false;
delay(250);
char resultStr[15] = {0};
NukiOpener::cmdResultToString(cmdResult, resultStr);
@@ -350,28 +342,18 @@ void NukiOpenerWrapper::unpair()
void NukiOpenerWrapper::updateKeyTurnerState()
{
Nuki::CmdResult result;
Nuki::CmdResult result = (Nuki::CmdResult)-1;
_retryCount = 0;
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
Log->print(F("Querying opener state: "));
result =_nukiOpener.requestOpenerState(&_keyTurnerState);
_taskRunning = false;
if(!_nukiConfigValid) {
delay(250);
if(result != Nuki::CmdResult::Success) {
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
char resultStr[15];
@@ -383,7 +365,7 @@ void NukiOpenerWrapper::updateKeyTurnerState()
{
_retryLockstateCount++;
postponeBleWatchdog();
if(_retryLockstateCount < _nrOfRetries)
if(_retryLockstateCount < _nrOfRetries + 1)
{
_nextLockStateUpdateTs = millis() + _retryDelay;
}
@@ -435,28 +417,18 @@ void NukiOpenerWrapper::updateKeyTurnerState()
void NukiOpenerWrapper::updateBatteryState()
{
Nuki::CmdResult result;
Nuki::CmdResult result = (Nuki::CmdResult)-1;
_retryCount = 0;
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
Log->print(F("Querying opener battery state: "));
result = _nukiOpener.requestBatteryReport(&_batteryReport);
_taskRunning = false;
delay(250);
if(result != Nuki::CmdResult::Success) {
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
printCommandResult(result);
@@ -495,27 +467,17 @@ void NukiOpenerWrapper::updateConfig()
const int pinStatus = _preferences->getInt(preference_opener_pin_status, 4);
if(isPinSet()) {
Nuki::CmdResult result;
Nuki::CmdResult result = (Nuki::CmdResult)-1;
_retryCount = 0;
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
result = _nukiOpener.verifySecurityPin();
_taskRunning = false;
delay(250);
if(result != Nuki::CmdResult::Success) {
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
if(result != Nuki::CmdResult::Success)
@@ -577,28 +539,18 @@ void NukiOpenerWrapper::updateAuthData(bool retrieved)
if(!retrieved)
{
delay(250);
Nuki::CmdResult result;
Nuki::CmdResult result = (Nuki::CmdResult)-1;
_retryCount = 0;
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
Log->print(F("Retrieve log entries: "));
result = _nukiOpener.retrieveLogEntries(0, _preferences->getInt(preference_authlog_max_entries, MAX_AUTHLOG), 1, false);
_taskRunning = false;
delay(250);
if(result != Nuki::CmdResult::Success) {
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
Log->println(result);
@@ -654,28 +606,18 @@ void NukiOpenerWrapper::updateKeypad(bool retrieved)
if(!retrieved)
{
Nuki::CmdResult result;
Nuki::CmdResult result = (Nuki::CmdResult)-1;
_retryCount = 0;
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
Log->print(F("Querying opener keypad: "));
result = _nukiOpener.retrieveKeypadEntries(0, _preferences->getInt(preference_keypad_max_entries, MAX_KEYPAD));
_taskRunning = false;
delay(250);
if(result != Nuki::CmdResult::Success) {
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
printCommandResult(result);
@@ -725,28 +667,18 @@ void NukiOpenerWrapper::updateTimeControl(bool retrieved)
if(!retrieved)
{
Nuki::CmdResult result;
Nuki::CmdResult result = (Nuki::CmdResult)-1;
_retryCount = 0;
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
Log->print(F("Querying opener time control: "));
result = _nukiOpener.retrieveTimeControlEntries();
_taskRunning = false;
delay(250);
if(result != Nuki::CmdResult::Success) {
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
printCommandResult(result);
@@ -1045,14 +977,6 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
if(strcmp(basicKeys[i], "name") == 0)
{
if(strlen(jsonchar) <= 32)
@@ -1210,8 +1134,6 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
if(cmdResult == Nuki::CmdResult::Success) basicUpdated = true;
@@ -1245,14 +1167,6 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
if(strcmp(advancedKeys[j], "intercomID") == 0)
{
const uint16_t keyvalue = atoi(jsonchar);
@@ -1478,8 +1392,6 @@ void NukiOpenerWrapper::onConfigUpdateReceived(const char *value)
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
if(cmdResult == Nuki::CmdResult::Success) advancedUpdated = true;
@@ -1573,14 +1485,6 @@ void NukiOpenerWrapper::onKeypadCommandReceived(const char *command, const uint
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
if(strcmp(command, "add") == 0)
{
if(name == "" || name == "--")
@@ -1604,10 +1508,10 @@ void NukiOpenerWrapper::onKeypadCommandReceived(const char *command, const uint
size_t nameLen = name.length();
memcpy(&entry.name, name.c_str(), nameLen > 20 ? 20 : nameLen);
entry.code = codeInt;
_taskRunning = true;
result = _nukiOpener.addKeypadEntry(entry);
_taskRunning = false;
Log->print("Add keypad code: "); Log->println((int)result);
delay(250);
Log->print("Add keypad code: ");
Log->println((int)result);
updateKeypad(false);
}
else if(strcmp(command, "delete") == 0)
@@ -1618,10 +1522,10 @@ void NukiOpenerWrapper::onKeypadCommandReceived(const char *command, const uint
return;
}
_taskRunning = true;
result = _nukiOpener.deleteKeypadEntry(id);
_taskRunning = false;
Log->print("Delete keypad code: "); Log->println((int)result);
delay(250);
Log->print("Delete keypad code: ");
Log->println((int)result);
updateKeypad(false);
}
else if(strcmp(command, "update") == 0)
@@ -1654,13 +1558,13 @@ void NukiOpenerWrapper::onKeypadCommandReceived(const char *command, const uint
memcpy(&entry.name, name.c_str(), nameLen > 20 ? 20 : nameLen);
entry.code = codeInt;
entry.enabled = enabled == 0 ? 0 : 1;
_taskRunning = true;
result = _nukiOpener.updateKeypadEntry(entry);
_taskRunning = false;
Log->print("Update keypad code: "); Log->println((int)result);
delay(250);
Log->print("Update keypad code: ");
Log->println((int)result);
updateKeypad(false);
}
else if(command == "--")
else if(strcmp(command, "--") == 0)
{
return;
}
@@ -1674,8 +1578,6 @@ void NukiOpenerWrapper::onKeypadCommandReceived(const char *command, const uint
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
if((int)result != -1)
@@ -1771,20 +1673,11 @@ void NukiOpenerWrapper::onKeypadJsonCommandReceived(const char *value)
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
if(strcmp(action, "delete") == 0) {
if(idExists)
{
_taskRunning = true;
result = _nukiOpener.deleteKeypadEntry(codeId);
_taskRunning = false;
delay(250);
Log->print(F("Delete keypad code: "));
Log->println((int)result);
}
@@ -1970,9 +1863,8 @@ void NukiOpenerWrapper::onKeypadJsonCommandReceived(const char *value)
entry.allowedUntilTimeMin = allowedUntilTimeAr[1];
}
_taskRunning = true;
result = _nukiOpener.addKeypadEntry(entry);
_taskRunning = false;
delay(250);
Log->print(F("Add keypad code: "));
Log->println((int)result);
}
@@ -1990,17 +1882,8 @@ void NukiOpenerWrapper::onKeypadJsonCommandReceived(const char *value)
return;
}
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
Nuki::CmdResult resultKp = _nukiOpener.retrieveKeypadEntries(0, _preferences->getInt(preference_keypad_max_entries, MAX_KEYPAD));
_taskRunning = false;
delay(250);
bool foundExisting = false;
if(resultKp == Nuki::CmdResult::Success)
@@ -2075,7 +1958,7 @@ void NukiOpenerWrapper::onKeypadJsonCommandReceived(const char *value)
entry.codeId = codeId;
entry.code = code;
if(name.length() < 1)
if(!name.length() > 0)
{
size_t nameLen = strlen(oldName);
memcpy(&entry.name, oldName, nameLen > 20 ? 20 : nameLen);
@@ -2128,9 +2011,8 @@ void NukiOpenerWrapper::onKeypadJsonCommandReceived(const char *value)
}
}
_taskRunning = true;
result = _nukiOpener.updateKeypadEntry(entry);
_taskRunning = false;
delay(250);
Log->print(F("Update keypad code: "));
Log->println((int)result);
}
@@ -2145,8 +2027,6 @@ void NukiOpenerWrapper::onKeypadJsonCommandReceived(const char *value)
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
updateKeypad(false);
@@ -2235,20 +2115,11 @@ void NukiOpenerWrapper::onTimeControlCommandReceived(const char *value)
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
if(strcmp(action, "delete") == 0) {
if(idExists)
{
_taskRunning = true;
result = _nukiOpener.removeTimeControlEntry(entryId);
_taskRunning = false;
delay(250);
Log->print(F("Delete time control: "));
Log->println((int)result);
}
@@ -2306,10 +2177,8 @@ void NukiOpenerWrapper::onTimeControlCommandReceived(const char *value)
}
entry.lockAction = timeControlLockAction;
_taskRunning = true;
result = _nukiOpener.addTimeControlEntry(entry);
_taskRunning = false;
delay(250);
Log->print(F("Add time control: "));
Log->println((int)result);
}
@@ -2321,17 +2190,8 @@ void NukiOpenerWrapper::onTimeControlCommandReceived(const char *value)
return;
}
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
Nuki::CmdResult resultTc = _nukiOpener.retrieveTimeControlEntries();
_taskRunning = false;
delay(250);
bool foundExisting = false;
if(resultTc == Nuki::CmdResult::Success)
@@ -2380,10 +2240,8 @@ void NukiOpenerWrapper::onTimeControlCommandReceived(const char *value)
}
entry.lockAction = timeControlLockAction;
_taskRunning = true;
result = _nukiOpener.updateTimeControlEntry(entry);
_taskRunning = false;
delay(250);
Log->print(F("Update time control: "));
Log->println((int)result);
}
@@ -2398,8 +2256,6 @@ void NukiOpenerWrapper::onTimeControlCommandReceived(const char *value)
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
if((int)result != -1)
@@ -2448,6 +2304,7 @@ void NukiOpenerWrapper::notify(Nuki::EventType eventType)
{
if(eventType == Nuki::EventType::KeyTurnerStatusUpdated)
{
Log->println("KeyTurnerStatusUpdated");
_statusUpdated = true;
_network->publishStatusUpdated(_statusUpdated);
}
@@ -2455,30 +2312,19 @@ void NukiOpenerWrapper::notify(Nuki::EventType eventType)
void NukiOpenerWrapper::readConfig()
{
Nuki::CmdResult result;
Nuki::CmdResult result = (Nuki::CmdResult)-1;
_retryCount = 0;
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
Log->print(F("Reading opener config. Result: "));
Nuki::CmdResult result = _nukiOpener.requestConfig(&_nukiConfig);
_taskRunning = false;
delay(250);
_nukiConfigValid = result == Nuki::CmdResult::Success;
if(!_nukiConfigValid) {
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
char resultStr[20];
@@ -2489,29 +2335,19 @@ void NukiOpenerWrapper::readConfig()
void NukiOpenerWrapper::readAdvancedConfig()
{
Nuki::CmdResult result;
Nuki::CmdResult result = (Nuki::CmdResult)-1;
_retryCount = 0;
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
result = _nukiOpener.requestAdvancedConfig(&_nukiAdvancedConfig);
_taskRunning = false;
delay(250);
_nukiAdvancedConfigValid = result == Nuki::CmdResult::Success;
if(!_nukiAdvancedConfigValid) {
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
char resultStr[20];
@@ -2541,29 +2377,19 @@ void NukiOpenerWrapper::disableHASS()
{
if(!_nukiConfigValid) // only ask for config once to save battery life
{
Nuki::CmdResult result;
Nuki::CmdResult result = (Nuki::CmdResult)-1;
_retryCount = 0;
while(_retryCount < _nrOfRetries + 1)
{
int loop = 0;
while(_taskRunning && loop < 600)
{
Log->println("Waiting to run Nuki BLE command");
vTaskDelay( 50 / portTICK_PERIOD_MS);
++loop;
}
_taskRunning = true;
result = _nukiOpener.requestConfig(&_nukiConfig);
_taskRunning = false;
delay(250);
_nukiConfigValid = result == Nuki::CmdResult::Success;
if(!_nukiConfigValid) {
++_retryCount;
}
else break;
vTaskDelay( 1000 / portTICK_PERIOD_MS);
}
}