From eedbd7b80a728c8511717db1191ad95574bb64ac Mon Sep 17 00:00:00 2001 From: Yurii Date: Sat, 11 Nov 2023 21:40:22 +0300 Subject: [PATCH] auto restart after changing some settings --- src/MainTask.h | 11 +++++ src/MqttTask.h | 7 +-- src/Settings.h | 2 + src/WifiManagerTask.h | 110 ++++++++++++++++++++++++++++++++++++------ 4 files changed, 111 insertions(+), 19 deletions(-) diff --git a/src/MainTask.h b/src/MainTask.h index 598b0c7..ed92e95 100644 --- a/src/MainTask.h +++ b/src/MainTask.h @@ -23,6 +23,17 @@ protected: INFO("Settings updated (EEPROM)"); } + if (vars.parameters.restartAfterTime > 0 && millis() - vars.parameters.restartSignalTime > vars.parameters.restartAfterTime) { + vars.parameters.restartAfterTime = 0; + + INFO("Received restart message..."); + eeSettings.updateNow(); + INFO("Restart..."); + delay(1000); + + ESP.restart(); + } + if (WiFi.status() == WL_CONNECTED) { if (!tMqtt->isEnabled() && strlen(settings.mqtt.server) > 0) { tMqtt->enable(); diff --git a/src/MqttTask.h b/src/MqttTask.h index 9eb16aa..e4d36f4 100644 --- a/src/MqttTask.h +++ b/src/MqttTask.h @@ -323,11 +323,8 @@ protected: } if (!doc["restart"].isNull() && doc["restart"].is() && doc["restart"].as()) { - DEBUG("Received restart message..."); - eeSettings.updateNow(); - DEBUG("Restart..."); - - ESP.restart(); + vars.parameters.restartAfterTime = 5000; + vars.parameters.restartSignalTime = millis(); } if (flag) { diff --git a/src/Settings.h b/src/Settings.h index 42e8abb..12da380 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -106,6 +106,8 @@ struct Variables { } temperatures; struct { + unsigned long restartSignalTime = 0; + unsigned int restartAfterTime = 0; bool heatingEnabled = false; byte heatingMinTemp = 20; byte heatingMaxTemp = 90; diff --git a/src/WifiManagerTask.h b/src/WifiManagerTask.h index cfbfba6..a7e9aba 100644 --- a/src/WifiManagerTask.h +++ b/src/WifiManagerTask.h @@ -127,7 +127,7 @@ protected: } #if defined(ESP8266) - if ( connected && millis() - lastArpGratuitous > 60000 ) { + if (connected && millis() - lastArpGratuitous > 60000) { arpGratuitous(); lastArpGratuitous = millis(); } @@ -137,19 +137,100 @@ protected: } static void saveParamsCallback() { - strcpy(settings.hostname, wmHostname->getValue()); - strcpy(settings.mqtt.server, wmMqttServer->getValue()); - settings.mqtt.port = wmMqttPort->getValue(); - strcpy(settings.mqtt.user, wmMqttUser->getValue()); - strcpy(settings.mqtt.password, wmMqttPassword->getValue()); - strcpy(settings.mqtt.prefix, wmMqttPrefix->getValue()); - settings.mqtt.interval = wmMqttPublishInterval->getValue(); - settings.opentherm.inPin = wmOtInPin->getValue(); - settings.opentherm.outPin = wmOtOutPin->getValue(); - settings.opentherm.memberIdCode = wmOtMemberIdCode->getValue(); - settings.opentherm.dhwPresent = wmOtDHWPresent->getCheckboxValue(); - settings.sensors.outdoor.pin = wmOutdoorSensorPin->getValue(); - settings.sensors.indoor.pin = wmIndoorSensorPin->getValue(); + bool changed = false; + bool needRestart = false; + + if (strcmp(wmHostname->getValue(), settings.hostname) != 0) { + changed = true; + needRestart = true; + + strcpy(settings.hostname, wmHostname->getValue()); + } + + if (strcmp(wmMqttServer->getValue(), settings.mqtt.server) != 0) { + changed = true; + + strcpy(settings.mqtt.server, wmMqttServer->getValue()); + } + + if (wmMqttPort->getValue() != settings.mqtt.port) { + changed = true; + + settings.mqtt.port = wmMqttPort->getValue(); + } + + if (strcmp(wmMqttUser->getValue(), settings.mqtt.user) != 0) { + changed = true; + + strcpy(settings.mqtt.user, wmMqttUser->getValue()); + } + + if (strcmp(wmMqttPassword->getValue(), settings.mqtt.password) != 0) { + changed = true; + + strcpy(settings.mqtt.password, wmMqttPassword->getValue()); + } + + if (strcmp(wmMqttPrefix->getValue(), settings.mqtt.prefix) != 0) { + changed = true; + + strcpy(settings.mqtt.prefix, wmMqttPrefix->getValue()); + } + + if (wmMqttPublishInterval->getValue() != settings.mqtt.interval) { + changed = true; + + settings.mqtt.interval = wmMqttPublishInterval->getValue(); + } + + if (wmOtInPin->getValue() != settings.opentherm.inPin) { + changed = true; + needRestart = true; + + settings.opentherm.inPin = wmOtInPin->getValue(); + } + + if (wmOtOutPin->getValue() != settings.opentherm.outPin) { + changed = true; + needRestart = true; + + settings.opentherm.outPin = wmOtOutPin->getValue(); + } + + if (wmOtMemberIdCode->getValue() != settings.opentherm.memberIdCode) { + changed = true; + + settings.opentherm.memberIdCode = wmOtMemberIdCode->getValue(); + } + + if (wmOtDHWPresent->getCheckboxValue() != settings.opentherm.dhwPresent) { + changed = true; + + settings.opentherm.dhwPresent = wmOtDHWPresent->getCheckboxValue(); + } + + if (wmOutdoorSensorPin->getValue() != settings.sensors.outdoor.pin) { + changed = true; + needRestart = true; + + settings.sensors.outdoor.pin = wmOutdoorSensorPin->getValue(); + } + + if (wmIndoorSensorPin->getValue() != settings.sensors.indoor.pin) { + changed = true; + needRestart = true; + + settings.sensors.indoor.pin = wmIndoorSensorPin->getValue(); + } + + if (!changed) { + return; + } + + if (needRestart) { + vars.parameters.restartAfterTime = 5000; + vars.parameters.restartSignalTime = millis(); + } INFO_F( "New settings:\r\n" @@ -179,6 +260,7 @@ protected: settings.sensors.outdoor.pin, settings.sensors.indoor.pin ); + eeSettings.updateNow(); INFO(F("Settings saved")); }