This commit is contained in:
iranl
2025-06-19 14:09:48 +02:00
parent 50081af326
commit 009b167d1d
11 changed files with 328 additions and 107 deletions

View File

@@ -25,7 +25,10 @@ HomeAssistantDiscovery::HomeAssistantDiscovery(NetworkDevice* device, Preference
char uidString[20]; char uidString[20];
itoa(_preferences->getUInt(preference_device_id_lock, 0), uidString, 10); itoa(_preferences->getUInt(preference_device_id_lock, 0), uidString, 10);
removeHASSConfig(uidString); removeHASSConfig(uidString);
delay(3000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(3000 / portTICK_PERIOD_MS);
} }
else if(savedDevId != curDevId) else if(savedDevId != curDevId)
{ {
@@ -38,10 +41,16 @@ HomeAssistantDiscovery::HomeAssistantDiscovery(NetworkDevice* device, Preference
char uidString[20]; char uidString[20];
itoa(_preferences->getUInt(preference_device_id_lock, 0), uidString, 10); itoa(_preferences->getUInt(preference_device_id_lock, 0), uidString, 10);
removeHASSConfig(uidString); removeHASSConfig(uidString);
delay(3000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(3000 / portTICK_PERIOD_MS);
itoa(savedDevId, uidString, 10); itoa(savedDevId, uidString, 10);
removeHASSConfig(uidString); removeHASSConfig(uidString);
delay(3000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(3000 / portTICK_PERIOD_MS);
} }
sprintf(_nukiHubUidString, "%" PRIu64, curDevId); sprintf(_nukiHubUidString, "%" PRIu64, curDevId);
@@ -93,7 +102,10 @@ void HomeAssistantDiscovery::setupHASS(int type, uint32_t nukiId, char* nukiName
void HomeAssistantDiscovery::disableHASS() void HomeAssistantDiscovery::disableHASS()
{ {
removeHASSConfig(_nukiHubUidString); removeHASSConfig(_nukiHubUidString);
delay(3000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(3000 / portTICK_PERIOD_MS);
char uidString[20]; char uidString[20];
@@ -101,13 +113,19 @@ void HomeAssistantDiscovery::disableHASS()
{ {
itoa(_preferences->getUInt(preference_nuki_id_lock, 0), uidString, 16); itoa(_preferences->getUInt(preference_nuki_id_lock, 0), uidString, 16);
removeHASSConfig(uidString); removeHASSConfig(uidString);
delay(3000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(3000 / portTICK_PERIOD_MS);
} }
if(_preferences->getUInt(preference_nuki_id_opener, 0) != 0) if(_preferences->getUInt(preference_nuki_id_opener, 0) != 0)
{ {
itoa(_preferences->getUInt(preference_nuki_id_opener, 0), uidString, 16); itoa(_preferences->getUInt(preference_nuki_id_opener, 0), uidString, 16);
removeHASSConfig(uidString); removeHASSConfig(uidString);
delay(3000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(3000 / portTICK_PERIOD_MS);
} }
} }

View File

@@ -470,7 +470,10 @@ bool NukiNetwork::update()
bool success = reconnect(); bool success = reconnect();
if(!success) if(!success)
{ {
delay(2000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(2000 / portTICK_PERIOD_MS);
_mqttConnectCounter++; _mqttConnectCounter++;
return false; return false;
} }
@@ -479,14 +482,20 @@ bool NukiNetwork::update()
if(forceEnableWebServer && !_webEnabled) if(forceEnableWebServer && !_webEnabled)
{ {
forceEnableWebServer = false; forceEnableWebServer = false;
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
setRestartServices(false); setRestartServices(false);
} }
else if(!_webEnabled) else if(!_webEnabled)
{ {
forceEnableWebServer = false; forceEnableWebServer = false;
} }
delay(2000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(2000 / portTICK_PERIOD_MS);
} }
if(!_device->isConnected() || !_device->mqttConnected() ) if(!_device->isConnected() || !_device->mqttConnected() )
@@ -498,10 +507,16 @@ bool NukiNetwork::update()
forceEnableWebServer = true; forceEnableWebServer = true;
} }
Log->println("Network timeout has been reached, restarting ..."); Log->println("Network timeout has been reached, restarting ...");
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::NetworkTimeoutWatchdog); restartEsp(RestartReason::NetworkTimeoutWatchdog);
} }
delay(2000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(2000 / portTICK_PERIOD_MS);
return false; return false;
} }
@@ -729,7 +744,10 @@ bool NukiNetwork::reconnect(bool force)
while(!_connectReplyReceived && espMillis() < timeout) while(!_connectReplyReceived && espMillis() < timeout)
{ {
delay(50); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(50 / portTICK_PERIOD_MS);
_device->update(); _device->update();
if(_keepAliveCallback != nullptr) if(_keepAliveCallback != nullptr)
{ {
@@ -742,7 +760,10 @@ bool NukiNetwork::reconnect(bool force)
Log->println("MQTT connected"); Log->println("MQTT connected");
_mqttConnectedTs = millis(); _mqttConnectedTs = millis();
_mqttConnectionState = 1; _mqttConnectionState = 1;
delay(100); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(100 / portTICK_PERIOD_MS);
_device->mqttOnMessage(onMqttDataReceivedCallback); _device->mqttOnMessage(onMqttDataReceivedCallback);
if(_firstConnect) if(_firstConnect)
@@ -987,7 +1008,10 @@ void NukiNetwork::onMqttDataReceived(const char* topic, byte* payload, const uns
{ {
Log->println("Restart requested via MQTT."); Log->println("Restart requested via MQTT.");
clearWifiFallback(); clearWifiFallback();
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::RequestedViaMqtt); restartEsp(RestartReason::RequestedViaMqtt);
} }
else if(comparePrefixedPath(topic, mqtt_topic_update) && strcmp(data, "1") == 0 && _preferences->getBool(preference_update_from_mqtt, false) && !mqttRecentlyConnected()) else if(comparePrefixedPath(topic, mqtt_topic_update) && strcmp(data, "1") == 0 && _preferences->getBool(preference_update_from_mqtt, false) && !mqttRecentlyConnected())
@@ -1040,7 +1064,10 @@ void NukiNetwork::onMqttDataReceived(const char* topic, byte* payload, const uns
_preferences->putString(preference_ota_updater_url, GITHUB_LATEST_UPDATER_BINARY_URL); _preferences->putString(preference_ota_updater_url, GITHUB_LATEST_UPDATER_BINARY_URL);
_preferences->putString(preference_ota_main_url, GITHUB_LATEST_RELEASE_BINARY_URL); _preferences->putString(preference_ota_main_url, GITHUB_LATEST_RELEASE_BINARY_URL);
Log->println("Updating to latest release version."); Log->println("Updating to latest release version.");
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::OTAReboot); restartEsp(RestartReason::OTAReboot);
} }
} }
@@ -1055,7 +1082,10 @@ void NukiNetwork::onMqttDataReceived(const char* topic, byte* payload, const uns
_preferences->putString(preference_ota_updater_url, GITHUB_BETA_UPDATER_BINARY_URL); _preferences->putString(preference_ota_updater_url, GITHUB_BETA_UPDATER_BINARY_URL);
_preferences->putString(preference_ota_main_url, GITHUB_BETA_RELEASE_BINARY_URL); _preferences->putString(preference_ota_main_url, GITHUB_BETA_RELEASE_BINARY_URL);
Log->println("Updating to latest beta version."); Log->println("Updating to latest beta version.");
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::OTAReboot); restartEsp(RestartReason::OTAReboot);
} }
} }
@@ -1070,7 +1100,10 @@ void NukiNetwork::onMqttDataReceived(const char* topic, byte* payload, const uns
_preferences->putString(preference_ota_updater_url, GITHUB_MASTER_UPDATER_BINARY_URL); _preferences->putString(preference_ota_updater_url, GITHUB_MASTER_UPDATER_BINARY_URL);
_preferences->putString(preference_ota_main_url, GITHUB_MASTER_RELEASE_BINARY_URL); _preferences->putString(preference_ota_main_url, GITHUB_MASTER_RELEASE_BINARY_URL);
Log->println("Updating to latest developmemt version."); Log->println("Updating to latest developmemt version.");
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::OTAReboot); restartEsp(RestartReason::OTAReboot);
} }
} }
@@ -1085,7 +1118,10 @@ void NukiNetwork::onMqttDataReceived(const char* topic, byte* payload, const uns
_preferences->putString(preference_ota_updater_url, GITHUB_LATEST_UPDATER_BINARY_URL); _preferences->putString(preference_ota_updater_url, GITHUB_LATEST_UPDATER_BINARY_URL);
_preferences->putString(preference_ota_main_url, GITHUB_LATEST_RELEASE_BINARY_URL); _preferences->putString(preference_ota_main_url, GITHUB_LATEST_RELEASE_BINARY_URL);
Log->println("Updating to latest release version."); Log->println("Updating to latest release version.");
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::OTAReboot); restartEsp(RestartReason::OTAReboot);
} }
} }
@@ -1122,7 +1158,10 @@ void NukiNetwork::onMqttDataReceived(const char* topic, byte* payload, const uns
_preferences->putBool(preference_webserver_enabled, false); _preferences->putBool(preference_webserver_enabled, false);
} }
clearWifiFallback(); clearWifiFallback();
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
setRestartServices(false); setRestartServices(false);
} }
else if(comparePrefixedPath(topic, mqtt_topic_nuki_hub_config_action) && !mqttRecentlyConnected()) else if(comparePrefixedPath(topic, mqtt_topic_nuki_hub_config_action) && !mqttRecentlyConnected())
@@ -1173,10 +1212,10 @@ void NukiNetwork::onMqttDataReceived(const char* topic, byte* payload, const uns
while (duoResult == 2) while (duoResult == 2)
{ {
duoResult = _importExport->checkDuoApprove(); duoResult = _importExport->checkDuoApprove();
delay(2000); if (esp_task_wdt_status(NULL) == ESP_OK) {
#if !defined(CONFIG_IDF_TARGET_ESP32C5) esp_task_wdt_reset();
esp_task_wdt_reset(); }
#endif vTaskDelay(2000 / portTICK_PERIOD_MS);
} }
} }
@@ -1293,7 +1332,10 @@ void NukiNetwork::onMqttDataReceived(const char* topic, byte* payload, const uns
serializeJson(json, _buffer, _bufferSize); serializeJson(json, _buffer, _bufferSize);
publishString(_maintenancePathPrefix, mqtt_topic_nuki_hub_config_json, _buffer, false); publishString(_maintenancePathPrefix, mqtt_topic_nuki_hub_config_json, _buffer, false);
publishString(_maintenancePathPrefix, mqtt_topic_nuki_hub_config_action, "--", true); publishString(_maintenancePathPrefix, mqtt_topic_nuki_hub_config_action, "--", true);
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::ConfigurationUpdated); restartEsp(RestartReason::ConfigurationUpdated);
} }
else else

View File

@@ -7,6 +7,7 @@
#include "RestartReason.h" #include "RestartReason.h"
#include <ArduinoJson.h> #include <ArduinoJson.h>
#include <ctype.h> #include <ctype.h>
#include "hal/wdt_hal.h"
extern bool forceEnableWebServer; extern bool forceEnableWebServer;
extern const uint8_t x509_crt_imported_bundle_bin_start[] asm("_binary_x509_crt_bundle_start"); extern const uint8_t x509_crt_imported_bundle_bin_start[] asm("_binary_x509_crt_bundle_start");
@@ -160,6 +161,11 @@ void NukiNetworkLock::initialize()
bool NukiNetworkLock::update() bool NukiNetworkLock::update()
{ {
wdt_hal_context_t rtc_wdt_ctx = RWDT_HAL_CONTEXT_DEFAULT();
wdt_hal_write_protect_disable(&rtc_wdt_ctx);
wdt_hal_feed(&rtc_wdt_ctx);
wdt_hal_write_protect_enable(&rtc_wdt_ctx);
bool ret = false; bool ret = false;
if(_nukiOfficial->hasOffStateToPublish()) if(_nukiOfficial->hasOffStateToPublish())

View File

@@ -5,6 +5,7 @@
#include "Logger.h" #include "Logger.h"
#include "Config.h" #include "Config.h"
#include <ArduinoJson.h> #include <ArduinoJson.h>
#include "hal/wdt_hal.h"
NukiNetworkOpener::NukiNetworkOpener(NukiNetwork* network, Preferences* preferences, char* buffer, size_t bufferSize) NukiNetworkOpener::NukiNetworkOpener(NukiNetwork* network, Preferences* preferences, char* buffer, size_t bufferSize)
: _preferences(preferences), : _preferences(preferences),
@@ -131,6 +132,11 @@ void NukiNetworkOpener::initialize()
void NukiNetworkOpener::update() void NukiNetworkOpener::update()
{ {
wdt_hal_context_t rtc_wdt_ctx = RWDT_HAL_CONTEXT_DEFAULT();
wdt_hal_write_protect_disable(&rtc_wdt_ctx);
wdt_hal_feed(&rtc_wdt_ctx);
wdt_hal_write_protect_enable(&rtc_wdt_ctx);
if(_resetRingStateTs != 0 && espMillis() >= _resetRingStateTs) if(_resetRingStateTs != 0 && espMillis() >= _resetRingStateTs)
{ {
_resetRingStateTs = 0; _resetRingStateTs = 0;

View File

@@ -247,7 +247,10 @@ void NukiOpenerWrapper::update()
} }
else else
{ {
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
return; return;
} }
} }
@@ -265,7 +268,10 @@ void NukiOpenerWrapper::update()
Log->print("No BLE beacon received from the opener for "); Log->print("No BLE beacon received from the opener for ");
Log->print((ts - lastReceivedBeaconTs) / 1000); Log->print((ts - lastReceivedBeaconTs) / 1000);
Log->println(" seconds, signalling to restart BLE controller."); Log->println(" seconds, signalling to restart BLE controller.");
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
_restartController = 2; _restartController = 2;
} }
@@ -298,7 +304,10 @@ void NukiOpenerWrapper::update()
_network->publishRetry(std::to_string(retryCount + 1)); _network->publishRetry(std::to_string(retryCount + 1));
delay(_retryDelay); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(_retryDelay / portTICK_PERIOD_MS);
++retryCount; ++retryCount;
} }
@@ -594,7 +603,10 @@ void NukiOpenerWrapper::updateBatteryState()
{ {
Log->print("Querying opener battery state: "); Log->print("Querying opener battery state: ");
result = _nukiOpener.requestBatteryReport(&_batteryReport); result = _nukiOpener.requestBatteryReport(&_batteryReport);
delay(250); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(250 / portTICK_PERIOD_MS);
if(result != Nuki::CmdResult::Success) if(result != Nuki::CmdResult::Success)
{ {
++retryCount; ++retryCount;
@@ -766,7 +778,10 @@ void NukiOpenerWrapper::updateAuthData(bool retrieved)
if(result == Nuki::CmdResult::Success) if(result == Nuki::CmdResult::Success)
{ {
_waitAuthLogUpdateTs = espMillis() + 5000; _waitAuthLogUpdateTs = espMillis() + 5000;
delay(100); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(100 / portTICK_PERIOD_MS);
std::list<NukiOpener::LogEntry> log; std::list<NukiOpener::LogEntry> log;
_nukiOpener.getLogEntries(&log); _nukiOpener.getLogEntries(&log);
@@ -993,7 +1008,10 @@ void NukiOpenerWrapper::updateAuth(bool retrieved)
{ {
Log->print("Querying opener authorization: "); Log->print("Querying opener authorization: ");
result = _nukiOpener.retrieveAuthorizationEntries(0, _preferences->getInt(preference_auth_max_entries, MAX_AUTH)); result = _nukiOpener.retrieveAuthorizationEntries(0, _preferences->getInt(preference_auth_max_entries, MAX_AUTH));
delay(250); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(250 / portTICK_PERIOD_MS);
if(result != Nuki::CmdResult::Success) if(result != Nuki::CmdResult::Success)
{ {
++retryCount; ++retryCount;
@@ -3032,7 +3050,10 @@ void NukiOpenerWrapper::onKeypadJsonCommandReceived(const char *value)
if(resultKp == Nuki::CmdResult::Success) if(resultKp == Nuki::CmdResult::Success)
{ {
delay(5000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(5000 / portTICK_PERIOD_MS);
std::list<NukiOpener::KeypadEntry> entries; std::list<NukiOpener::KeypadEntry> entries;
_nukiOpener.getKeypadEntries(&entries); _nukiOpener.getKeypadEntries(&entries);
@@ -3398,7 +3419,10 @@ void NukiOpenerWrapper::onTimeControlCommandReceived(const char *value)
if(resultTc == Nuki::CmdResult::Success) if(resultTc == Nuki::CmdResult::Success)
{ {
delay(5000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(5000 / portTICK_PERIOD_MS);
std::list<NukiOpener::TimeControlEntry> timeControlEntries; std::list<NukiOpener::TimeControlEntry> timeControlEntries;
_nukiOpener.getTimeControlEntries(&timeControlEntries); _nukiOpener.getTimeControlEntries(&timeControlEntries);
@@ -3854,7 +3878,10 @@ void NukiOpenerWrapper::onAuthCommandReceived(const char *value)
if(resultAuth == Nuki::CmdResult::Success) if(resultAuth == Nuki::CmdResult::Success)
{ {
delay(5000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(5000 / portTICK_PERIOD_MS);
std::list<NukiOpener::AuthorizationEntry> entries; std::list<NukiOpener::AuthorizationEntry> entries;
_nukiOpener.getAuthorizationEntries(&entries); _nukiOpener.getAuthorizationEntries(&entries);

View File

@@ -263,7 +263,10 @@ void NukiWrapper::update(bool reboot)
} }
else else
{ {
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
return; return;
} }
} }
@@ -281,7 +284,10 @@ void NukiWrapper::update(bool reboot)
Log->print("No BLE beacon received from the lock for "); Log->print("No BLE beacon received from the lock for ");
Log->print((ts - lastReceivedBeaconTs) / 1000); Log->print((ts - lastReceivedBeaconTs) / 1000);
Log->println(" seconds, signalling to restart BLE controller."); Log->println(" seconds, signalling to restart BLE controller.");
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
_restartController = 2; _restartController = 2;
} }
@@ -318,7 +324,10 @@ void NukiWrapper::update(bool reboot)
_network->publishRetry(std::to_string(retryCount + 1)); _network->publishRetry(std::to_string(retryCount + 1));
delay(_retryDelay); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(_retryDelay / portTICK_PERIOD_MS);
++retryCount; ++retryCount;
} }
@@ -801,8 +810,10 @@ void NukiWrapper::updateDebug()
Log->println(result); Log->println(result);
count = 0; count = 0;
while (count < 5) { while (count < 5) {
delay(1000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset(); esp_task_wdt_reset();
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
count++; count++;
} }
@@ -821,8 +832,10 @@ void NukiWrapper::updateDebug()
count = 0; count = 0;
while (count < 15) { while (count < 15) {
delay(1000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset(); esp_task_wdt_reset();
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
count++; count++;
} }
@@ -841,8 +854,10 @@ void NukiWrapper::updateDebug()
count = 0; count = 0;
while (count < 20) { while (count < 20) {
delay(1000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset(); esp_task_wdt_reset();
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
count++; count++;
} }
@@ -921,7 +936,10 @@ void NukiWrapper::updateAuthData(bool retrieved)
if(result == Nuki::CmdResult::Success) if(result == Nuki::CmdResult::Success)
{ {
_waitAuthLogUpdateTs = espMillis() + 5000; _waitAuthLogUpdateTs = espMillis() + 5000;
delay(100); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(100 / portTICK_PERIOD_MS);
std::list<NukiLock::LogEntry> log; std::list<NukiLock::LogEntry> log;
_nukiLock.getLogEntries(&log); _nukiLock.getLogEntries(&log);
@@ -1146,7 +1164,10 @@ void NukiWrapper::updateAuth(bool retrieved)
{ {
Log->print("Querying lock authorization: "); Log->print("Querying lock authorization: ");
result = _nukiLock.retrieveAuthorizationEntries(0, _preferences->getInt(preference_auth_max_entries, MAX_AUTH)); result = _nukiLock.retrieveAuthorizationEntries(0, _preferences->getInt(preference_auth_max_entries, MAX_AUTH));
delay(250); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(250 / portTICK_PERIOD_MS);
if(result != Nuki::CmdResult::Success) if(result != Nuki::CmdResult::Success)
{ {
++retryCount; ++retryCount;
@@ -3279,7 +3300,10 @@ void NukiWrapper::onKeypadJsonCommandReceived(const char *value)
if(resultKp == Nuki::CmdResult::Success) if(resultKp == Nuki::CmdResult::Success)
{ {
delay(5000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(5000 / portTICK_PERIOD_MS);
std::list<NukiLock::KeypadEntry> entries; std::list<NukiLock::KeypadEntry> entries;
_nukiLock.getKeypadEntries(&entries); _nukiLock.getKeypadEntries(&entries);
@@ -3646,7 +3670,10 @@ void NukiWrapper::onTimeControlCommandReceived(const char *value)
if(resultTc == Nuki::CmdResult::Success) if(resultTc == Nuki::CmdResult::Success)
{ {
delay(5000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(5000 / portTICK_PERIOD_MS);
std::list<NukiLock::TimeControlEntry> timeControlEntries; std::list<NukiLock::TimeControlEntry> timeControlEntries;
_nukiLock.getTimeControlEntries(&timeControlEntries); _nukiLock.getTimeControlEntries(&timeControlEntries);
@@ -3862,7 +3889,10 @@ void NukiWrapper::onAuthCommandReceived(const char *value)
if(idExists) if(idExists)
{ {
result = _nukiLock.deleteAuthorizationEntry(authId); result = _nukiLock.deleteAuthorizationEntry(authId);
delay(250); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(250 / portTICK_PERIOD_MS);
Log->print("Delete authorization: "); Log->print("Delete authorization: ");
Log->println((int)result); Log->println((int)result);
} }
@@ -4082,7 +4112,10 @@ void NukiWrapper::onAuthCommandReceived(const char *value)
} }
result = _nukiLock.addAuthorizationEntry(entry); result = _nukiLock.addAuthorizationEntry(entry);
delay(250); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(250 / portTICK_PERIOD_MS);
Log->print("Add authorization: "); Log->print("Add authorization: ");
Log->println((int)result); Log->println((int)result);
} }
@@ -4105,7 +4138,10 @@ void NukiWrapper::onAuthCommandReceived(const char *value)
if(resultAuth == Nuki::CmdResult::Success) if(resultAuth == Nuki::CmdResult::Success)
{ {
delay(5000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(5000 / portTICK_PERIOD_MS);
std::list<NukiLock::AuthorizationEntry> entries; std::list<NukiLock::AuthorizationEntry> entries;
_nukiLock.getAuthorizationEntries(&entries); _nukiLock.getAuthorizationEntries(&entries);
@@ -4248,7 +4284,10 @@ void NukiWrapper::onAuthCommandReceived(const char *value)
} }
result = _nukiLock.updateAuthorizationEntry(entry); result = _nukiLock.updateAuthorizationEntry(entry);
delay(250); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(250 / portTICK_PERIOD_MS);
Log->print("Update authorization: "); Log->print("Update authorization: ");
Log->println((int)result); Log->println((int)result);
} }
@@ -4360,7 +4399,10 @@ void NukiWrapper::readConfig()
{ {
++retryCount; ++retryCount;
Log->println("Failed to retrieve lock config, retrying in 1s"); Log->println("Failed to retrieve lock config, retrying in 1s");
delay(1000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
} }
else else
{ {
@@ -4388,7 +4430,10 @@ void NukiWrapper::readAdvancedConfig()
{ {
++retryCount; ++retryCount;
Log->println("Failed to retrieve lock advanced config, retrying in 1s"); Log->println("Failed to retrieve lock advanced config, retrying in 1s");
delay(1000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
} }
else else
{ {

View File

@@ -1,6 +1,7 @@
#include "SerialReader.h" #include "SerialReader.h"
#include "RestartReason.h" #include "RestartReason.h"
#include "EspMillis.h" #include "EspMillis.h"
#include "hal/wdt_hal.h"
SerialReader::SerialReader(ImportExport *importExport, NukiNetwork* network) SerialReader::SerialReader(ImportExport *importExport, NukiNetwork* network)
: _importExport(importExport), : _importExport(importExport),
@@ -11,6 +12,11 @@ SerialReader::SerialReader(ImportExport *importExport, NukiNetwork* network)
void SerialReader::update() void SerialReader::update()
{ {
wdt_hal_context_t rtc_wdt_ctx = RWDT_HAL_CONTEXT_DEFAULT();
wdt_hal_write_protect_disable(&rtc_wdt_ctx);
wdt_hal_feed(&rtc_wdt_ctx);
wdt_hal_write_protect_enable(&rtc_wdt_ctx);
if(Serial.available()) if(Serial.available())
{ {
String line = Serial.readStringUntil('\n'); String line = Serial.readStringUntil('\n');

View File

@@ -1512,7 +1512,10 @@ bool WebCfgServer::processWiFi(PsychicRequest *request, PsychicResponse* resp, S
int loop = 0; int loop = 0;
while(!_network->isConnected() && loop < 150) while(!_network->isConnected() && loop < 150)
{ {
delay(100); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(100 / portTICK_PERIOD_MS);
loop++; loop++;
} }
@@ -1803,7 +1806,7 @@ void WebCfgServer::waitAndProcess(const bool blocking, const uint32_t duration)
} }
else else
{ {
vTaskDelay( 50 / portTICK_PERIOD_MS); vTaskDelay(50 / portTICK_PERIOD_MS);
} }
} }
} }

View File

@@ -30,6 +30,7 @@ bool nuki_hub_https_server_enabled = false;
#include "NukiNetworkLock.h" #include "NukiNetworkLock.h"
#include "NukiOpenerWrapper.h" #include "NukiOpenerWrapper.h"
#include "Gpio.h" #include "Gpio.h"
#include "Gpio.h"
#include "CharBuffer.h" #include "CharBuffer.h"
#include "NukiDeviceId.h" #include "NukiDeviceId.h"
#include "WebCfgServer.h" #include "WebCfgServer.h"
@@ -456,7 +457,10 @@ void restartServices(bool reconnect)
Log->println("Deinit BLE device done"); Log->println("Deinit BLE device done");
} }
delay(2000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(2000 / portTICK_PERIOD_MS);
if(lockEnabled || openerEnabled) if(lockEnabled || openerEnabled)
{ {
@@ -498,6 +502,11 @@ void restartServices(bool reconnect)
Log->println("Restarting Nuki opener done"); Log->println("Restarting Nuki opener done");
} }
if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(2000 / portTICK_PERIOD_MS);
bleDone = true; bleDone = true;
if(webStarted || webSSLStarted) if(webStarted || webSSLStarted)
@@ -545,6 +554,10 @@ void networkTask(void *pvParameters)
} }
#endif #endif
network->update(); network->update();
if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(50 / portTICK_PERIOD_MS);
bool connected = network->isConnected(); bool connected = network->isConnected();
if(connected && reroute) if(connected && reroute)
@@ -588,11 +601,19 @@ void networkTask(void *pvParameters)
if(connected && lockStarted) if(connected && lockStarted)
{ {
rebootLock = networkLock->update(); rebootLock = networkLock->update();
if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(50 / portTICK_PERIOD_MS);
} }
if(connected && openerStarted) if(connected && openerStarted)
{ {
networkOpener->update(); networkOpener->update();
if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(50 / portTICK_PERIOD_MS);
} }
} }
#endif #endif
@@ -614,26 +635,36 @@ void networkTask(void *pvParameters)
restartEsp(RestartReason::RestartTimer); restartEsp(RestartReason::RestartTimer);
} }
#if !defined(CONFIG_IDF_TARGET_ESP32C5)
esp_task_wdt_reset(); if (esp_task_wdt_status(NULL) == ESP_OK) {
#endif esp_task_wdt_reset();
}
vTaskDelay(50 / portTICK_PERIOD_MS);
} }
} }
#ifndef NUKI_HUB_UPDATER #ifndef NUKI_HUB_UPDATER
void nukiTask(void *pvParameters) void nukiTask(void *pvParameters)
{ {
esp_task_wdt_add(NULL);
if (preferences->getBool(preference_mqtt_ssl_enabled, false)) if (preferences->getBool(preference_mqtt_ssl_enabled, false))
{ {
#if defined(CONFIG_SOC_SPIRAM_SUPPORTED) && defined(CONFIG_SPIRAM) #if defined(CONFIG_SOC_SPIRAM_SUPPORTED) && defined(CONFIG_SPIRAM)
if (esp_psram_get_size() <= 0) if (esp_psram_get_size() <= 0)
{ {
Log->println("Waiting 20 seconds to start BLE because of MQTT SSL"); Log->println("Waiting 20 seconds to start BLE because of MQTT SSL");
delay(20000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(20000 / portTICK_PERIOD_MS);
} }
#else #else
Log->println("Waiting 20 seconds to start BLE because of MQTT SSL"); Log->println("Waiting 20 seconds to start BLE because of MQTT SSL");
delay(20000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(20000 / portTICK_PERIOD_MS);
#endif #endif
} }
int64_t nukiLoopTs = 0; int64_t nukiLoopTs = 0;
@@ -645,14 +676,20 @@ void nukiTask(void *pvParameters)
if(bleScannerStarted) if(bleScannerStarted)
{ {
bleScanner->update(); bleScanner->update();
delay(20); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(20 / portTICK_PERIOD_MS);
} }
bool needsPairing = (lockStarted && !nuki->isPaired()) || (openerStarted && !nukiOpener->isPaired()); bool needsPairing = (lockStarted && !nuki->isPaired()) || (openerStarted && !nukiOpener->isPaired());
if (needsPairing) if (needsPairing)
{ {
delay(2500); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(2500 / portTICK_PERIOD_MS);
} }
else if (!whiteListed) else if (!whiteListed)
{ {
@@ -739,9 +776,10 @@ void nukiTask(void *pvParameters)
Log->println("nukiTask is running"); Log->println("nukiTask is running");
nukiLoopTs = espMillis(); nukiLoopTs = espMillis();
} }
#if !defined(CONFIG_IDF_TARGET_ESP32C5) if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset(); esp_task_wdt_reset();
#endif }
vTaskDelay(50 / portTICK_PERIOD_MS);
} }
} }
@@ -832,6 +870,8 @@ esp_err_t _http_event_handler(esp_http_client_event_t *evt)
void otaTask(void *pvParameter) void otaTask(void *pvParameter)
{ {
esp_task_wdt_add(NULL);
partitionType = checkPartition(); partitionType = checkPartition();
String updateUrl; String updateUrl;
@@ -885,14 +925,17 @@ void otaTask(void *pvParameter)
{ {
Log->println("Firmware upgrade failed, retrying in 5 seconds"); Log->println("Firmware upgrade failed, retrying in 5 seconds");
retryCount++; retryCount++;
#if !defined(CONFIG_IDF_TARGET_ESP32C5) if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset(); esp_task_wdt_reset();
#endif }
delay(5000); vTaskDelay(5000 / portTICK_PERIOD_MS);
continue; continue;
} }
while (1) while (1)
{ {
if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(1000 / portTICK_PERIOD_MS); vTaskDelay(1000 / portTICK_PERIOD_MS);
} }
} }
@@ -904,15 +947,13 @@ void otaTask(void *pvParameter)
void setupTasks(bool ota) void setupTasks(bool ota)
{ {
// configMAX_PRIORITIES is 25 // configMAX_PRIORITIES is 25
#if !defined(CONFIG_IDF_TARGET_ESP32C5)
esp_task_wdt_config_t twdt_config = esp_task_wdt_config_t twdt_config =
{ {
.timeout_ms = 300000, .timeout_ms = 300000,
.idle_core_mask = 0, .idle_core_mask = (1 << CONFIG_FREERTOS_NUMBER_OF_CORES) - 1,
.trigger_panic = true, .trigger_panic = true,
}; };
esp_task_wdt_reconfigure(&twdt_config); esp_task_wdt_reconfigure(&twdt_config);
#endif
esp_chip_info_t info; esp_chip_info_t info;
esp_chip_info(&info); esp_chip_info(&info);
@@ -923,26 +964,17 @@ void setupTasks(bool ota)
if(ota) if(ota)
{ {
xTaskCreatePinnedToCore(otaTask, "ota", 8192, NULL, 2, &otaTaskHandle, (espCores > 1) ? 1 : 0); xTaskCreatePinnedToCore(otaTask, "ota", 8192, NULL, 2, &otaTaskHandle, (espCores > 1) ? 1 : 0);
#if !defined(CONFIG_IDF_TARGET_ESP32C5)
esp_task_wdt_add(otaTaskHandle);
#endif
} }
else else
{ {
if(!disableNetwork) if(!disableNetwork)
{ {
xTaskCreatePinnedToCore(networkTask, "ntw", preferences->getInt(preference_task_size_network, NETWORK_TASK_SIZE), NULL, 3, &networkTaskHandle, (espCores > 1) ? 1 : 0); xTaskCreatePinnedToCore(networkTask, "ntw", preferences->getInt(preference_task_size_network, NETWORK_TASK_SIZE), NULL, 3, &networkTaskHandle, (espCores > 1) ? 1 : 0);
#if !defined(CONFIG_IDF_TARGET_ESP32C5)
esp_task_wdt_add(networkTaskHandle);
#endif
} }
#ifndef NUKI_HUB_UPDATER #ifndef NUKI_HUB_UPDATER
if(!network->isApOpen() && (lockEnabled || openerEnabled)) if(!network->isApOpen() && (lockEnabled || openerEnabled))
{ {
xTaskCreatePinnedToCore(nukiTask, "nuki", preferences->getInt(preference_task_size_nuki, NUKI_TASK_SIZE), NULL, 2, &nukiTaskHandle, 0); xTaskCreatePinnedToCore(nukiTask, "nuki", preferences->getInt(preference_task_size_nuki, NUKI_TASK_SIZE), NULL, 2, &nukiTaskHandle, 0);
#if !defined(CONFIG_IDF_TARGET_ESP32C5)
esp_task_wdt_add(nukiTaskHandle);
#endif
} }
#endif #endif
} }
@@ -951,7 +983,10 @@ void setupTasks(bool ota)
void logCoreDump() void logCoreDump()
{ {
coredumpPrinted = false; coredumpPrinted = false;
delay(500); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(500 / portTICK_PERIOD_MS);
Log->println("Printing coredump and saving to coredump.hex on SPIFFS"); Log->println("Printing coredump and saving to coredump.hex on SPIFFS");
size_t size = 0; size_t size = 0;
size_t address = 0; size_t address = 0;
@@ -1272,13 +1307,7 @@ void setup()
Log->println(lockEnabled ? F("Nuki Lock enabled") : F("Nuki Lock disabled")); Log->println(lockEnabled ? F("Nuki Lock enabled") : F("Nuki Lock disabled"));
if(lockEnabled) if(lockEnabled)
{ {
nukiOfficial = new NukiOfficial(preferences); startNuki(true);
networkLock = new NukiNetworkLock(network, nukiOfficial, preferences, CharBuffer::get(), buffer_size);
if(!disableNetwork)
{
networkLock->initialize();
}
nuki = new NukiWrapper("NukiHub", deviceIdLock, bleScanner, networkLock, nukiOfficial, gpio, preferences, CharBuffer::get(), buffer_size); nuki = new NukiWrapper("NukiHub", deviceIdLock, bleScanner, networkLock, nukiOfficial, gpio, preferences, CharBuffer::get(), buffer_size);
nuki->initialize(); nuki->initialize();
@@ -1287,12 +1316,7 @@ void setup()
Log->println(openerEnabled ? F("Nuki Opener enabled") : F("Nuki Opener disabled")); Log->println(openerEnabled ? F("Nuki Opener enabled") : F("Nuki Opener disabled"));
if(openerEnabled) if(openerEnabled)
{ {
networkOpener = new NukiNetworkOpener(network, preferences, CharBuffer::get(), buffer_size); startNuki(false);
if(!disableNetwork)
{
networkOpener->initialize();
}
nukiOpener = new NukiOpenerWrapper("NukiHub", deviceIdOpener, bleScanner, networkOpener, gpio, preferences, CharBuffer::get(), buffer_size); nukiOpener = new NukiOpenerWrapper("NukiHub", deviceIdOpener, bleScanner, networkOpener, gpio, preferences, CharBuffer::get(), buffer_size);
nukiOpener->initialize(); nukiOpener->initialize();

View File

@@ -1,3 +1,4 @@
#include "esp_task_wdt.h"
#include "EthernetDevice.h" #include "EthernetDevice.h"
#include "../PreferencesKeys.h" #include "../PreferencesKeys.h"
#include "../Logger.h" #include "../Logger.h"
@@ -68,14 +69,20 @@ const String EthernetDevice::deviceName() const
void EthernetDevice::initialize() void EthernetDevice::initialize()
{ {
delay(250); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(250 / portTICK_PERIOD_MS);
if(ethCriticalFailure) if(ethCriticalFailure)
{ {
ethCriticalFailure = false; ethCriticalFailure = false;
Log->println("Failed to initialize ethernet hardware"); Log->println("Failed to initialize ethernet hardware");
Log->println("Network device has a critical failure, enable fallback to Wi-Fi and reboot."); Log->println("Network device has a critical failure, enable fallback to Wi-Fi and reboot.");
wifiFallback = true; wifiFallback = true;
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::NetworkDeviceCriticalFailure); restartEsp(RestartReason::NetworkDeviceCriticalFailure);
return; return;
} }
@@ -140,7 +147,10 @@ void EthernetDevice::initialize()
Log->println("Failed to initialize ethernet hardware"); Log->println("Failed to initialize ethernet hardware");
Log->println("Network device has a critical failure, enable fallback to Wi-Fi and reboot."); Log->println("Network device has a critical failure, enable fallback to Wi-Fi and reboot.");
wifiFallback = true; wifiFallback = true;
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::NetworkDeviceCriticalFailure); restartEsp(RestartReason::NetworkDeviceCriticalFailure);
return; return;
} }
@@ -222,7 +232,10 @@ void EthernetDevice::onNetworkEvent(arduino_event_id_t event, arduino_event_info
void EthernetDevice::reconfigure() void EthernetDevice::reconfigure()
{ {
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::ReconfigureETH); restartEsp(RestartReason::ReconfigureETH);
} }

View File

@@ -1,3 +1,4 @@
#include "esp_task_wdt.h"
#include "WifiDevice.h" #include "WifiDevice.h"
#include "../PreferencesKeys.h" #include "../PreferencesKeys.h"
#include "../Logger.h" #include "../Logger.h"
@@ -50,7 +51,10 @@ void WifiDevice::initialize()
WiFi.disconnect(true); WiFi.disconnect(true);
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.disconnect(); WiFi.disconnect();
delay(5000); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(5000 / portTICK_PERIOD_MS);
Log->println("Dummy WiFi device for Hosted on P4 done"); Log->println("Dummy WiFi device for Hosted on P4 done");
} }
return; return;
@@ -63,12 +67,21 @@ void WifiDevice::scan(bool passive, bool async)
WiFi.disconnect(true); WiFi.disconnect(true);
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.disconnect(); WiFi.disconnect();
if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
} }
WiFi.scanDelete(); WiFi.scanDelete();
WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN); WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN);
WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL); WiFi.setSortMethod(WIFI_CONNECT_AP_BY_SIGNAL);
if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
if(async) if(async)
{ {
Log->println("Wi-Fi async scan started"); Log->println("Wi-Fi async scan started");
@@ -94,9 +107,15 @@ void WifiDevice::openAP()
Log->println("Starting AP with SSID NukiHub and Password NukiHubESP32"); Log->println("Starting AP with SSID NukiHub and Password NukiHubESP32");
_startAP = false; _startAP = false;
WiFi.mode(WIFI_AP); WiFi.mode(WIFI_AP);
delay(500); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(500 / portTICK_PERIOD_MS);
WiFi.softAPsetHostname(_hostname.c_str()); WiFi.softAPsetHostname(_hostname.c_str());
delay(500); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(500 / portTICK_PERIOD_MS);
WiFi.softAP("NukiHub", "NukiHubESP32"); WiFi.softAP("NukiHub", "NukiHubESP32");
//if(MDNS.begin(_hostname.c_str())){ //if(MDNS.begin(_hostname.c_str())){
@@ -109,7 +128,10 @@ bool WifiDevice::connect()
{ {
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
WiFi.setHostname(_hostname.c_str()); WiFi.setHostname(_hostname.c_str());
delay(500); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(500 / portTICK_PERIOD_MS);
int bestConnection = -1; int bestConnection = -1;
@@ -162,10 +184,13 @@ bool WifiDevice::connect()
Log->print("WiFi connecting"); Log->print("WiFi connecting");
int loop = 0; int loop = 0;
while(!isConnected() && loop < 150) while(!isConnected() && loop < 600)
{ {
Log->print("."); Log->print(".");
delay(100); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(25 / portTICK_PERIOD_MS);
loop++; loop++;
} }
Log->println(""); Log->println("");
@@ -177,7 +202,10 @@ bool WifiDevice::connect()
if(_preferences->getBool(preference_restart_on_disconnect, false) && (espMillis() > 60000)) if(_preferences->getBool(preference_restart_on_disconnect, false) && (espMillis() > 60000))
{ {
Log->println("Restart on disconnect watchdog triggered, rebooting"); Log->println("Restart on disconnect watchdog triggered, rebooting");
delay(100); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(100 / portTICK_PERIOD_MS);
restartEsp(RestartReason::RestartOnDisconnectWatchdog); restartEsp(RestartReason::RestartOnDisconnectWatchdog);
} }
else else
@@ -201,7 +229,10 @@ void WifiDevice::reconfigure()
{ {
_preferences->putString(preference_wifi_ssid, ""); _preferences->putString(preference_wifi_ssid, "");
_preferences->putString(preference_wifi_pass, ""); _preferences->putString(preference_wifi_pass, "");
delay(200); if (esp_task_wdt_status(NULL) == ESP_OK) {
esp_task_wdt_reset();
}
vTaskDelay(200 / portTICK_PERIOD_MS);
restartEsp(RestartReason::ReconfigureWifi); restartEsp(RestartReason::ReconfigureWifi);
} }