auto restart after changing some settings

This commit is contained in:
Yurii
2023-11-11 21:40:22 +03:00
parent e9bf4c4bd5
commit eedbd7b80a
4 changed files with 111 additions and 19 deletions

View File

@@ -23,6 +23,17 @@ protected:
INFO("Settings updated (EEPROM)"); 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 (WiFi.status() == WL_CONNECTED) {
if (!tMqtt->isEnabled() && strlen(settings.mqtt.server) > 0) { if (!tMqtt->isEnabled() && strlen(settings.mqtt.server) > 0) {
tMqtt->enable(); tMqtt->enable();

View File

@@ -323,11 +323,8 @@ protected:
} }
if (!doc["restart"].isNull() && doc["restart"].is<bool>() && doc["restart"].as<bool>()) { if (!doc["restart"].isNull() && doc["restart"].is<bool>() && doc["restart"].as<bool>()) {
DEBUG("Received restart message..."); vars.parameters.restartAfterTime = 5000;
eeSettings.updateNow(); vars.parameters.restartSignalTime = millis();
DEBUG("Restart...");
ESP.restart();
} }
if (flag) { if (flag) {

View File

@@ -106,6 +106,8 @@ struct Variables {
} temperatures; } temperatures;
struct { struct {
unsigned long restartSignalTime = 0;
unsigned int restartAfterTime = 0;
bool heatingEnabled = false; bool heatingEnabled = false;
byte heatingMinTemp = 20; byte heatingMinTemp = 20;
byte heatingMaxTemp = 90; byte heatingMaxTemp = 90;

View File

@@ -127,7 +127,7 @@ protected:
} }
#if defined(ESP8266) #if defined(ESP8266)
if ( connected && millis() - lastArpGratuitous > 60000 ) { if (connected && millis() - lastArpGratuitous > 60000) {
arpGratuitous(); arpGratuitous();
lastArpGratuitous = millis(); lastArpGratuitous = millis();
} }
@@ -137,19 +137,100 @@ protected:
} }
static void saveParamsCallback() { static void saveParamsCallback() {
strcpy(settings.hostname, wmHostname->getValue()); bool changed = false;
strcpy(settings.mqtt.server, wmMqttServer->getValue()); bool needRestart = false;
settings.mqtt.port = wmMqttPort->getValue();
strcpy(settings.mqtt.user, wmMqttUser->getValue()); if (strcmp(wmHostname->getValue(), settings.hostname) != 0) {
strcpy(settings.mqtt.password, wmMqttPassword->getValue()); changed = true;
strcpy(settings.mqtt.prefix, wmMqttPrefix->getValue()); needRestart = true;
settings.mqtt.interval = wmMqttPublishInterval->getValue();
settings.opentherm.inPin = wmOtInPin->getValue(); strcpy(settings.hostname, wmHostname->getValue());
settings.opentherm.outPin = wmOtOutPin->getValue(); }
settings.opentherm.memberIdCode = wmOtMemberIdCode->getValue();
settings.opentherm.dhwPresent = wmOtDHWPresent->getCheckboxValue(); if (strcmp(wmMqttServer->getValue(), settings.mqtt.server) != 0) {
settings.sensors.outdoor.pin = wmOutdoorSensorPin->getValue(); changed = true;
settings.sensors.indoor.pin = wmIndoorSensorPin->getValue();
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( INFO_F(
"New settings:\r\n" "New settings:\r\n"
@@ -179,6 +260,7 @@ protected:
settings.sensors.outdoor.pin, settings.sensors.outdoor.pin,
settings.sensors.indoor.pin settings.sensors.indoor.pin
); );
eeSettings.updateNow(); eeSettings.updateNow();
INFO(F("Settings saved")); INFO(F("Settings saved"));
} }