From c7545d93dc8f4e255f2bb040bd3151836ebaebd3 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Tue, 5 Jan 2021 11:49:13 +0100 Subject: [PATCH] Fix RTC related power on sequence --- tasmota/settings.ino | 38 ++++++++++++++++++++------------------ tasmota/tasmota.ino | 2 +- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/tasmota/settings.ino b/tasmota/settings.ino index 465789eb8..b74d9bb4b 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -51,31 +51,33 @@ void RtcSettingsSave(void) } } -bool RtcSettingsLoad(void) { - bool was_read_valid = true; +bool RtcSettingsLoad(uint32_t update) { #ifdef ESP8266 ESP.rtcUserMemoryRead(100, (uint32_t*)&RtcSettings, sizeof(RtcSettings)); // 0x290 #endif // ESP8266 #ifdef ESP32 RtcSettings = RtcDataSettings; #endif // ESP32 - if (RtcSettings.valid != RTC_MEM_VALID) { - was_read_valid = false; - memset(&RtcSettings, 0, sizeof(RtcSettings)); - RtcSettings.valid = RTC_MEM_VALID; - RtcSettings.energy_kWhtoday = Settings.energy_kWhtoday; - RtcSettings.energy_kWhtotal = Settings.energy_kWhtotal; - RtcSettings.energy_usage = Settings.energy_usage; - for (uint32_t i = 0; i < MAX_COUNTERS; i++) { - RtcSettings.pulse_counter[i] = Settings.pulse_counter[i]; + + bool read_valid = (RTC_MEM_VALID == RtcSettings.valid); + if (update) { + if (!read_valid) { + memset(&RtcSettings, 0, sizeof(RtcSettings)); + RtcSettings.valid = RTC_MEM_VALID; + RtcSettings.energy_kWhtoday = Settings.energy_kWhtoday; + RtcSettings.energy_kWhtotal = Settings.energy_kWhtotal; + RtcSettings.energy_usage = Settings.energy_usage; + for (uint32_t i = 0; i < MAX_COUNTERS; i++) { + RtcSettings.pulse_counter[i] = Settings.pulse_counter[i]; + } + RtcSettings.power = Settings.power; + // RtcSettings.baudrate = Settings.baudrate * 300; + RtcSettings.baudrate = APP_BAUDRATE; + RtcSettingsSave(); } - RtcSettings.power = Settings.power; -// RtcSettings.baudrate = Settings.baudrate * 300; - RtcSettings.baudrate = APP_BAUDRATE; - RtcSettingsSave(); + rtc_settings_crc = GetRtcSettingsCrc(); } - rtc_settings_crc = GetRtcSettingsCrc(); - return was_read_valid; + return read_valid; } bool RtcSettingsValid(void) @@ -571,7 +573,7 @@ void SettingsLoad(void) { settings_crc32 = GetSettingsCrc32(); #endif // FIRMWARE_MINIMAL - RtcSettingsLoad(); + RtcSettingsLoad(1); } // Used in TLS - returns the timestamp of the last Flash settings write diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index 8eb7303fb..e060853ea 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -220,7 +220,7 @@ void setup(void) { #endif RtcRebootSave(); - if (RtcSettingsLoad()) { + if (RtcSettingsLoad(0)) { uint32_t baudrate = (RtcSettings.baudrate / 300) * 300; // Make it a valid baudrate if (baudrate) { TasmotaGlobal.baudrate = baudrate; } }