From 7e5a033e75d8740dc409b64ffc849fccddf1cdaf Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Tue, 18 Aug 2026 23:18:49 +0200 Subject: [PATCH 1/3] [Build] Fix build for Stats without ChartJS and other typos --- src/ESPEasy/net/DataStructs/NWPluginData_base.h | 1 + src/ESPEasy/net/NWPluginStructs/NW002_data_struct_WiFi_AP.h | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ESPEasy/net/DataStructs/NWPluginData_base.h b/src/ESPEasy/net/DataStructs/NWPluginData_base.h index 44830f4ab..b2efb1138 100644 --- a/src/ESPEasy/net/DataStructs/NWPluginData_base.h +++ b/src/ESPEasy/net/DataStructs/NWPluginData_base.h @@ -7,6 +7,7 @@ #include "../DataStructs/NWPluginData_static_runtime.h" #include "../../../src/DataStructs/ESPEasy_EventStruct.h" #include "../../../src/DataStructs/PluginStats_array.h" +#include "../../../src/DataStructs/PluginStats_Config.h" #if FEATURE_STORE_NETWORK_INTERFACE_SETTINGS # include "../../../src/Helpers/_ESPEasy_key_value_store.h" diff --git a/src/ESPEasy/net/NWPluginStructs/NW002_data_struct_WiFi_AP.h b/src/ESPEasy/net/NWPluginStructs/NW002_data_struct_WiFi_AP.h index d7e22f235..1a317d0f5 100644 --- a/src/ESPEasy/net/NWPluginStructs/NW002_data_struct_WiFi_AP.h +++ b/src/ESPEasy/net/NWPluginStructs/NW002_data_struct_WiFi_AP.h @@ -1,7 +1,7 @@ #pragma once #include "../_NWPlugin_Helper.h" -#ifdef USES_NW001 +#ifdef USES_NW002 namespace ESPEasy { @@ -54,4 +54,4 @@ private: } // namespace ESPEasy -#endif // ifdef USES_NW001 +#endif // ifdef USES_NW002 From 911498b62a6897d808c299bb8433985e47f0493d Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Wed, 19 Aug 2026 16:40:25 +0200 Subject: [PATCH 2/3] [Storage] Fix issue with saving the EEPROM settings (manual merge-error) --- src/src/WebServer/HardwarePage.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/src/WebServer/HardwarePage.cpp b/src/src/WebServer/HardwarePage.cpp index dc6e93ac8..6699214ed 100644 --- a/src/src/WebServer/HardwarePage.cpp +++ b/src/src/WebServer/HardwarePage.cpp @@ -46,14 +46,14 @@ void handle_hardware() { if (isFormItem(F("pi2cbuspcf"))) { set3BitToUL(Settings.I2C_peripheral_bus, I2C_PERIPHERAL_BUS_PCFMCP, getFormItemInt(F("pi2cbuspcf"))); } + #endif // if FEATURE_I2C_MULTIPLE // EEPROM settings - # if FEATURE_EEPROM_EXTERNAL - const uint8_t i2cBus = getFormItemInt(F("pi2cbuseeprom"), 0); - set3BitToUL(Settings.I2C_peripheral_bus, I2C_PERIPHERAL_BUS_EEPROM, i2cBus); - # endif // if FEATURE_EEPROM_EXTERNAL #if FEATURE_I2CMULTIPLEXER && !FEATURE_I2C_MULTIPLE && FEATURE_EEPROM_EXTERNAL constexpr uint8_t i2cBus = 0; + #else // if FEATURE_I2CMULTIPLEXER && !FEATURE_I2C_MULTIPLE && FEATURE_EEPROM_EXTERNAL + const uint8_t i2cBus = getFormItemInt(F("pi2cbuseeprom"), 0); + set3BitToUL(Settings.I2C_peripheral_bus, I2C_PERIPHERAL_BUS_EEPROM, i2cBus); #endif // if FEATURE_I2CMULTIPLEXER && !FEATURE_I2C_MULTIPLE && FEATURE_EEPROM_EXTERNAL #if FEATURE_EEPROM_EXTERNAL @@ -74,7 +74,6 @@ void handle_hardware() { #endif // if FEATURE_EEPROM_EXTERNAL - #endif // if FEATURE_I2C_MULTIPLE #if defined(ESP32) && FEATURE_SD Settings.setSPIBusForSDCard(getFormItemInt(F("sdspibus"), 0)); #endif // if defined(ESP32) && FEATURE_SD @@ -217,7 +216,7 @@ void handle_hardware() { if (eepromChecked && ESPEasy::eeprom::isEEPROMExternalWriteProtected()) { addHtml(F(" Write-protected!")); } - if (eepromChecked && !ESPEasy::eeprom::isEEPROMExternalWriteProtected()) { + if (eepromChecked) { addRowLabel(F("'WriteEE' slots available")); addHtmlInt(ESPEasy::eeprom::getEEPROMMaxSlots()); } From e430a37764f26801213e445cf1a8b2bc442b7d37 Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Wed, 19 Aug 2026 16:41:28 +0200 Subject: [PATCH 3/3] [Storage] Add documentation for EEPROM and RTC SRAM and commands --- docs/source/Hardware/Hardware.rst | 26 +++++++++++++ docs/source/Hardware/Hardware_EEPROM.png | Bin 0 -> 9479 bytes docs/source/Hardware/Hardware_EEPROM_WP.png | Bin 0 -> 3460 bytes docs/source/Plugin/P000_commands.repl | 40 ++++++++++++++++++++ docs/source/Reference/Command.rst | 2 + docs/source/Tools/Tools.rst | 17 +++++++++ 6 files changed, 85 insertions(+) create mode 100644 docs/source/Hardware/Hardware_EEPROM.png create mode 100644 docs/source/Hardware/Hardware_EEPROM_WP.png diff --git a/docs/source/Hardware/Hardware.rst b/docs/source/Hardware/Hardware.rst index 1b290f245..0a79f581c 100644 --- a/docs/source/Hardware/Hardware.rst +++ b/docs/source/Hardware/Hardware.rst @@ -50,6 +50,32 @@ When using multiple PCF and/or MCP GPIO extenders, they must all be connected to NB: If only 1 I2C Bus is configured, this section isn't shown. +-------------------- +External I2C EEPROM +-------------------- + +Added: 2026-08-19 + +For persistently storing (numeric) values, an I2C EEPROM (AT24Cxx) or FRAM (MB85RCxx) module can be connected to the ESP, ranging in size from 4kB up to 256kB. This storage is made available as 'slots', where a single numeric value, of type ``double``, can be stored, and of course retrieved. Of each unit there is 128 bytes reserved for future (internal/housekeeping) use, and the remaining space is available for user-values. + +The used module, I2C address (also used as 'enable' setting) and the I2C bus where the module is connected (when multiple I2C buses are available & configured), can be configured. + +.. image:: Hardware_EEPROM.png + +Once setup, a reboot is required to validate the connection to the module, and also a write-protected check is done, as some units come with a write-protect pin, to inhibit writing to the device. + +When the module is enabled, the number of available slots is shown, and a warning if the module is write-protected. + +.. image:: Hardware_EEPROM_WP.png + +Saving a value in a slot is done with command ``WriteEE,,``, and retrieving the value using the special variable ``[ReadEE#]``. The max. number of slots can be obtained via ``[ReadEE#max]`` and the write-protect status via ``[ReadEE#wp]`` (1 = write-protected). + +NB: ```` is in the range 0 .. (Max.slots - 1) ! + +All values can be erased from the module by using the command ``WriteEE,erase,erase``, and re-checking the write-protected status via ``WriteEE,check,wp``. + +See also :ref:`Command-Reference` + ------- SD Card diff --git a/docs/source/Hardware/Hardware_EEPROM.png b/docs/source/Hardware/Hardware_EEPROM.png new file mode 100644 index 0000000000000000000000000000000000000000..496d003186fdbfcac40bf9a94ce5aa7a00a84e92 GIT binary patch literal 9479 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

P9%5 z*Pdw4Kl#Z7FgCsJPw&cB0?xD#Oz(Icl3v|r$!-jin61oAgL!{D_`aOn|9bU|4Ci5B zaSQFlFZbZ~L7Ltcf;?*M6zExCt^q(lM$l=ZY{KTMD+*Po(?8ddTYh;((PgflC*_4g zRSsz@_E6mAH9@6r#V;kCHOoI8o&kNg9)MLcT!o+;dfw4S5DEn^sd_BVP`UjA7M+-# z)ki&m=qJhiX|cXZ3m+qg%+?r zLBUIwoS2Dk3s>iqdiQtjKe)skeHN>UWl!ft6Ufcb>)BiM7!l$tSO$L996Iytu>Is1 zlXvoY;G~ktDqjg8RvaMEyAUbtRleL3rsh2d)33pw+qq~wIbgHSJTAF!%NV!$+7mRK zLN0Z!S}C66k+&2M<(Tk734hW_R9g;+x=qyB$?l(rakXZ;X+|(|jbYhuWzf0 zncfe*N!J9KJG@mN#<|b=#j0+k!9xKAdOWqwK$ynw!0l7n0+XRd3{a(nj2pAq4kP{c z{Cq#C6qqsOU12+S|0~(N<)&>8z1Q+vylrVwFok4-% zUS=7W!JEU*KotkdJl3}v2|wE`P_nIY13`WoTt|ix!qg}=$;^FkQw-E>+LVs;={lH$ zbfy%FE(?=A9u&=UQu4`e=v;N!J5`(!(P9ltwC z0)gJEetrm^e0A_ql(|c%CCk3rexug{UzrR;wCuFHm0E$t_G#~+f>fR}IvHppom98C zR+2&pO1=t_FU_B<4TT*&rrlk_;bqs-mQio~)e*`eUhEY{3A-LaIxZg9fzSDBe4?y^mbFhneK@HDYF{atge#kvP2%?|aF9 zUJ+UZHEZ>Si})M|D+E-Z0fBbAfaC+fY@T5l0p1B*|MF%x@SFcbe!D05XhTEw_hUNY hlpH?gd7UpuAtiTzn8kajJfQTh1=Ce4Q+f3KKLAepIJ*D< literal 0 HcmV?d00001 diff --git a/docs/source/Hardware/Hardware_EEPROM_WP.png b/docs/source/Hardware/Hardware_EEPROM_WP.png new file mode 100644 index 0000000000000000000000000000000000000000..810b10d1948b1e11cc9d31bd11c191500b0a96b6 GIT binary patch literal 3460 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 L@^B>EU%K%x`;m|W literal 0 HcmV?d00001 diff --git a/docs/source/Plugin/P000_commands.repl b/docs/source/Plugin/P000_commands.repl index f29d588fb..cd10de3b6 100644 --- a/docs/source/Plugin/P000_commands.repl +++ b/docs/source/Plugin/P000_commands.repl @@ -1087,6 +1087,46 @@ Force the unit into STA mode. ``WifiSTAMode``" + " + WriteEE"," + :green:`Rules`"," + Store a value in a 'slot' in an external EEPROM (AT24Cxx) or FRAM (MB85RCxx) I2C module. Numeric values only, using the resolution as used by Rules (``double`` or ``float``). Stored as a ``double`` value. + + The external EEPROM/FRAM module can be configured on the :ref:`Hardware_page` + + Stored values can be read back using the special variable ``[ReadEE#]``, using the same slot number. The number of slots available is shown once the module is enabled and found working. Some modules support a Write Protect pin. During initialization this feature is checked, and shown on the Hardware page when active. + + Retrieving the max. number of slots available is available in ``[ReadEE#max]``, and the write-protect status via ``[ReadEE#wp]`` (1 = write protected). + + NB: ```` is in the range 0 .. (Max.slots - 1) ! + + Syntax: + + ``WriteEE,,`` for writing a value to a slot. + + ``WriteRTC,erase,erase`` for erasing all data from the module. + + ``WriteRTC,check,wp`` for re-checking the write-protect status of the module. + " + " + WriteRTC"," + :green:`Rules`"," + Store a value in a 'slot' in an external RTC (Realtime Clock) I2C module that has SRAM available, DS1307, DS3232 and PCF8583. Numeric values only, using the resolution as used by Rules (``double`` or ``float``). Stored as a ``double`` value. + + The RTC module can be configured on the Tools/:ref:`tools-advanced` page in the **Time Source** section. + + Stored values can be read back using the special variable ``[ReadRTC#]``, using the same slot number. The number of slots available is shown if the module is enabled and SRAM is available. + + Retrieving the max. number of slots available is available in ``[ReadRTC#max]``. + + NB: ```` is in the range 0 .. (Max.slots - 1) ! + + Syntax: + + ``WriteRTC,,`` for writing a value to a slot. + + ``WriteRTC,erase,erase`` for erasing all data from the module. + " diff --git a/docs/source/Reference/Command.rst b/docs/source/Reference/Command.rst index 438d22661..7c4b90d8f 100644 --- a/docs/source/Reference/Command.rst +++ b/docs/source/Reference/Command.rst @@ -1,5 +1,7 @@ .. include:: ../Plugin/_plugin_substitutions.repl +.. _command-reference: + Command Reference ***************** diff --git a/docs/source/Tools/Tools.rst b/docs/source/Tools/Tools.rst index 0e4ceda53..6f7fd8d25 100644 --- a/docs/source/Tools/Tools.rst +++ b/docs/source/Tools/Tools.rst @@ -240,6 +240,8 @@ Showing detailed information about the flash chip and used file system. * **Maximum open files**: Configured maximum number of simultaneous open files. Example: ``5`` * **Maximum path length**: Maximum length of file name + path. Example: ``32`` +.. _tools-advanced: + Advanced ======== @@ -265,8 +267,10 @@ Supported RTC chips: * `DS1307 `_ * `DS3231 `_ +* `DS3232 `_ (added: 2026-08-19) * `PCF8523 `_ * `PCF8563 `_ +* `PCF8583 `_ (added: 2026-08-19 Not available in ``LIMIT_BUILD_SIZE`` builds) Most modules sold with one of these RTC chips also have a battery socket to keep track of time while the rest is not powered. This allows ESPEasy to know the correct date and time after been powered off for a while, or deep sleep, without the need for working network to query a NTP server. @@ -281,6 +285,19 @@ When multiple I2C Buses are configured (ESP32 only), we need to configure on whi NB: If only 1 I2C Bus is configured, this configuration option isn't shown. +Added: 2026-08-19 + +With some RTC chips, there is a battery-backed SRAM option available. This SRAM can be used for persistent storage of numeric values. + +This storage is available in DS1307 (56 bytes = 7 slots), DS3232 (236 bytes = 29 slots) and PCF8583 (240 bytes = 30 slots). + +If one of the supported Time Sources is connected, the number of available SRAM slots is shown. + +Slots can be written using the ``WriteRTC,,`` command, and read using the special variable ``[ReadRTC#]``, and the number of slots via ``[ReadRTC#max]``. See also :ref:`Command-Reference` + +NB: ```` is in the range 0 .. (Max.slots - 1) ! + + Procedure to configure a real time clock (RTC) chip: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^