TWDT
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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');
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
106
src/main.cpp
106
src/main.cpp
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user