From 6a0c4b281e6912f23b16838b5b41d86d1ae5c7a6 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:15:54 +0200 Subject: [PATCH] Add RTC time save --- tasmota/tasmota.ino | 3 +-- tasmota/tasmota_support/settings.ino | 3 +++ tasmota/tasmota_support/support_rtc.ino | 11 ++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index 9bc4e7833..77a63fb24 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -125,8 +125,7 @@ typedef struct { int32_t energy_kWhtoday_ph[3]; // 2D8 int32_t energy_kWhtotal_ph[3]; // 2E4 int32_t energy_kWhexport_ph[3]; // 2F0 - - uint8_t free_2fc[4]; // 2FC + uint32_t utc_time; // 2FC } TRtcSettings; TRtcSettings RtcSettings; #ifdef ESP32 diff --git a/tasmota/tasmota_support/settings.ino b/tasmota/tasmota_support/settings.ino index 1d03c5c0e..74c59e0aa 100644 --- a/tasmota/tasmota_support/settings.ino +++ b/tasmota/tasmota_support/settings.ino @@ -37,6 +37,9 @@ uint32_t GetRtcSettingsCrc(void) { void RtcSettingsSave(void) { RtcSettings.baudrate = Settings->baudrate * 300; + if (UtcTime() > START_VALID_TIME) { // 2016-01-01 + RtcSettings.utc_time = UtcTime(); + } if (GetRtcSettingsCrc() != rtc_settings_crc) { if (RTC_MEM_VALID != RtcSettings.valid) { diff --git a/tasmota/tasmota_support/support_rtc.ino b/tasmota/tasmota_support/support_rtc.ino index aac70eac4..85efa6a84 100644 --- a/tasmota/tasmota_support/support_rtc.ino +++ b/tasmota/tasmota_support/support_rtc.ino @@ -489,10 +489,15 @@ void RtcInit(void) { if (Settings->cfg_timestamp > START_VALID_TIME) { // Fix file timestamp while utctime is not synced - uint32_t local_time = Settings->cfg_timestamp +1; - RtcGetDaylightSavingTimes(local_time); - local_time += RtcTimeZoneOffset(local_time); + uint32_t utc_time = Settings->cfg_timestamp; + if (RtcSettings.utc_time > utc_time) { + utc_time = RtcSettings.utc_time; + } + utc_time++; + RtcGetDaylightSavingTimes(utc_time); + uint32_t local_time = utc_time + RtcTimeZoneOffset(utc_time); RtcSetTimeOfDay(local_time); +// AddLog(LOG_LEVEL_DEBUG, PSTR("RTC: Timestamp %s"), GetDT(local_time).c_str()); } }