From 86c204e1a1d22159f75fed885623fcbaaebb05d2 Mon Sep 17 00:00:00 2001 From: Norbert Richter Date: Thu, 31 Jul 2025 17:28:03 +0200 Subject: [PATCH] NeoPool fix reset to default settings (#23734) --- CHANGELOG.md | 1 + tasmota/tasmota_xsns_sensor/xsns_83_neopool.ino | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0646f62ac..077f9e12d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ All notable changes to this project will be documented in this file. - OpenTherm library from v0.9.0 to v1.1.5 (#23704) ### Fixed +- NeoPool fix reset to default settings ### Removed diff --git a/tasmota/tasmota_xsns_sensor/xsns_83_neopool.ino b/tasmota/tasmota_xsns_sensor/xsns_83_neopool.ino index 327d7eec1..60cf0f6d1 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_83_neopool.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_83_neopool.ino @@ -815,14 +815,14 @@ typedef union { } NeoPoolBitfield;; // Global structure containing sensor saved variables -struct { +typedef struct { uint32_t crc32; uint16_t version; NeoPoolBitfield flags; uint8_t result; uint16_t npteleperiod; -} NeoPoolSettings; - +} TNeoPoolSettings; +TNeoPoolSettings NeoPoolSettings; #define D_NEOPOOL_NAME "NeoPool" @@ -3381,6 +3381,9 @@ void NeoPoolSettingsLoad(bool erase) { NeoPoolSettings.flags.conn_stat = 1; NeoPoolSettings.result = NEOPOOL_DEFAULT_RESULT; NeoPoolSettings.npteleperiod = NEOPOOL_DEFAULT_NPTELEPERIOD; + TNeoPoolSettings NeoPoolSettingsDefaults; + memcpy(&NeoPoolSettingsDefaults, &NeoPoolSettings, sizeof(NeoPoolSettingsDefaults)); + #ifdef USE_UFILESYS snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_SENSOR), XSNS_83); @@ -3391,6 +3394,10 @@ void NeoPoolSettingsLoad(bool erase) { #ifdef DEBUG_TASMOTA_SENSOR AddLog(LOG_LEVEL_DEBUG, PSTR("NEO: Settings loaded from file '%s'"), filename); #endif // DEBUG_TASMOTA_SENSOR + if (NeoPoolSettings.crc32 != GetCfgCrc32((uint8_t*)&NeoPoolSettings +4, sizeof(NeoPoolSettings) -4)) { + AddLog(LOG_LEVEL_INFO, PSTR("NEO: Settings CRC error, reset to defaults")); + memcpy(&NeoPoolSettings, &NeoPoolSettingsDefaults, sizeof(NeoPoolSettings)); + } } else { #ifdef DEBUG_TASMOTA_SENSOR