diff --git a/src/NukiOpenerWrapper.cpp b/src/NukiOpenerWrapper.cpp index 5da1dba..2fdbbf6 100644 --- a/src/NukiOpenerWrapper.cpp +++ b/src/NukiOpenerWrapper.cpp @@ -767,9 +767,18 @@ Nuki::BatteryType NukiOpenerWrapper::batteryTypeToEnum(const char* str) void NukiOpenerWrapper::onConfigUpdateReceived(const char *value) { + JsonDocument jsonResult; char _resbuf[2048]; + if(!_configRead || !_nukiConfigValid) + { + jsonResult["general"] = "configNotReady"; + serializeJson(jsonResult, _resbuf, sizeof(_resbuf)); + _network->publishConfigCommandResult(_resbuf); + return; + } + if(_nukiOpener.getSecurityPincode() == 0) { jsonResult["general"] = "noPinSet"; @@ -1744,6 +1753,12 @@ void NukiOpenerWrapper::onKeypadJsonCommandReceived(const char *value) void NukiOpenerWrapper::onTimeControlCommandReceived(const char *value) { + if(!_configRead || !_nukiConfigValid) + { + _network->publishTimeControlCommandResult("configNotReady"); + return; + } + if(_nukiOpener.getSecurityPincode() == 0) { _network->publishTimeControlCommandResult("noPinSet"); diff --git a/src/NukiWrapper.cpp b/src/NukiWrapper.cpp index 8f1a383..bf126ca 100644 --- a/src/NukiWrapper.cpp +++ b/src/NukiWrapper.cpp @@ -489,7 +489,7 @@ void NukiWrapper::updateKeypad() { std::list entries; _nukiLock.getKeypadEntries(&entries); - + Log->print(F("Lock keypad codes: ")); Log->println(entries.size()); @@ -533,7 +533,7 @@ void NukiWrapper::updateTimeControl(bool retrieved) { std::list timeControlEntries; _nukiLock.getTimeControlEntries(&timeControlEntries); - + Log->print(F("Lock time control entries: ")); Log->println(timeControlEntries.size()); @@ -548,7 +548,7 @@ void NukiWrapper::updateTimeControl(bool retrieved) _timeControlIds.push_back(entry.entryId); } } - + postponeBleWatchdog(); } @@ -574,13 +574,13 @@ NukiLock::LockAction NukiWrapper::lockActionToEnum(const char *str) LockActionResult NukiWrapper::onLockActionReceivedCallback(const char *value) { NukiLock::LockAction action; - + if(value) { if(strlen(value) > 0) { action = nukiInst->lockActionToEnum(value); - + if((int)action == 0xff) { return LockActionResult::UnknownAction; @@ -589,7 +589,7 @@ LockActionResult NukiWrapper::onLockActionReceivedCallback(const char *value) else return LockActionResult::UnknownAction; } else return LockActionResult::UnknownAction; - + nukiLockPreferences = new Preferences(); nukiLockPreferences->begin("nukihub", true); uint32_t aclPrefs[17]; @@ -707,6 +707,14 @@ void NukiWrapper::onConfigUpdateReceived(const char *value) JsonDocument jsonResult; char _resbuf[2048]; + if(!_configRead || !_nukiConfigValid) + { + jsonResult["general"] = "configNotReady"; + serializeJson(jsonResult, _resbuf, sizeof(_resbuf)); + _network->publishConfigCommandResult(_resbuf); + return; + } + if(_nukiLock.getSecurityPincode() == 0) { jsonResult["general"] = "noPinSet"; @@ -744,7 +752,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value) if(json[basicKeys[i]]) { const char *jsonchar = json[basicKeys[i]].as(); - + if(strlen(jsonchar) == 0) { jsonResult[basicKeys[i]] = "noValueSet"; @@ -947,7 +955,7 @@ void NukiWrapper::onConfigUpdateReceived(const char *value) if(json[advancedKeys[i]]) { const char *jsonchar = json[advancedKeys[i]].as(); - + if(strlen(jsonchar) == 0) { jsonResult[advancedKeys[i]] = "noValueSet"; @@ -1651,13 +1659,13 @@ void NukiWrapper::onKeypadJsonCommandReceived(const char *value) _network->publishKeypadJsonCommandResult("noCodeIdSet"); return; } - + if(!idExists) { _network->publishKeypadJsonCommandResult("noExistingCodeIdSet"); return; } - + NukiLock::UpdatedKeypadEntry entry; memset(&entry, 0, sizeof(entry)); entry.codeId = codeId; @@ -1731,6 +1739,12 @@ void NukiWrapper::onKeypadJsonCommandReceived(const char *value) void NukiWrapper::onTimeControlCommandReceived(const char *value) { + if(!_configRead || !_nukiConfigValid) + { + _network->publishTimeControlCommandResult("configNotReady"); + return; + } + if(_nukiLock.getSecurityPincode() == 0) { _network->publishTimeControlCommandResult("noPinSet"); @@ -1772,7 +1786,7 @@ void NukiWrapper::onTimeControlCommandReceived(const char *value) return; } } - + if(action) { bool idExists = false; @@ -1861,7 +1875,7 @@ void NukiWrapper::onTimeControlCommandReceived(const char *value) _network->publishTimeControlCommandResult("noExistingEntryIdSet"); return; } - + NukiLock::TimeControlEntry entry; memset(&entry, 0, sizeof(entry)); entry.entryId = entryId; diff --git a/src/main.cpp b/src/main.cpp index 05329b4..e3f158f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -112,9 +112,9 @@ void setupTasks() { // configMAX_PRIORITIES is 25 - xTaskCreatePinnedToCore(networkTask, "ntw", 10240, NULL, 3, &networkTaskHandle, 1); - xTaskCreatePinnedToCore(nukiTask, "nuki", 5120, NULL, 2, &nukiTaskHandle, 1); - xTaskCreatePinnedToCore(presenceDetectionTask, "prdet", 896, NULL, 5, &presenceDetectionTaskHandle, 1); + xTaskCreatePinnedToCore(networkTask, "ntw", 12288, NULL, 3, &networkTaskHandle, 1); + xTaskCreatePinnedToCore(nukiTask, "nuki", 8192, NULL, 2, &nukiTaskHandle, 1); + xTaskCreatePinnedToCore(presenceDetectionTask, "prdet", 1024, NULL, 5, &presenceDetectionTaskHandle, 1); } void initEthServer(const NetworkDeviceType device)