Komponent globals w ESPHome dostaje opcję storage. Inne komponenty już jej używają, żeby wskazać, gdzie zapisać wartość przywracaną po starcie. Z ustawieniem storage: rtc zmienna trafia do pamięci RTC, która przetrwa głębokie uśpienie, programowy restart i awarię programu. Jeśli wartość zmienia się co kilka minut, urządzenie nie musi już co kilka minut zapisywać jej w pamięci flash. Zgłoszenie zmian #13954 od użytkownika Rapsssito, otwarte w lutym, bdraco scalił do gałęzi rozwojowej 18 października 2026 o 22:40 czasu polskiego, a kilka sekund później dołączyła do niego dokumentacja (esphome.io #6068). ESPHome 2026.10 jest wciąż w fazie testów, więc opcja trafi do ESPHome 2026.11.

globals:
  - id: wake_count
    type: int
    restore_value: true
    storage: rtc
    initial_value: '0'

Pamięć flash czy RTC

Opcja storage działa tylko razem z restore_value: true. Dokumentacja opisuje oba warianty tak:

  • flash przetrwa zanik zasilania, ale każdy zapis odrobinę zużywa pamięć flash, więc nadaje się do wartości, które zmieniają się rzadko;
  • rtc przetrwa programowy restart, awarię i głębokie uśpienie, ale nie zanik zasilania, i nie zużywa pamięci flash, więc nadaje się do wartości zmienianych często. W oryginalnym ESP32 wartość kasuje też sprzętowy przycisk resetu (pin EN).

Najprostszy przypadek dla rtc to licznik wybudzeń w czujniku na baterię, który większość czasu śpi. Wartość, która musi przetrwać zanik zasilania, nie powinna tam trafić. Przykładem jest kod kroczący dla rolet Somfy RTS: każde polecenie wymaga wyższego kodu niż poprzednie, więc jeśli licznik cofnie się do starej wartości, odbiornik zignoruje polecenia.

Typ zmiennej (type) może być dowolny, także std::string i tablice, bo wartość przechodzi przez ten sam mechanizm zapisu ustawień, z którego korzystają inne komponenty. Pierwsza wersja zgłoszenia obsługiwała tylko proste typy i dodawała osobny tryb restore_value: RTC, który w scalonej wersji zastąpiła opcja storage.

Wartości domyślne i obsługiwane układy

Jeśli pominiesz storage, nic się nie zmieni, a wygenerowany kod będzie taki sam jak wcześniej. W ESP32 oznacza to pamięć flash, a w ESP8266 pamięć RTC, chyba że w ustawieniach platformy ESP8266 jest restore_from_flash: true.

rtc działa w ESP32 poza odmianami C2 i C61, które nie mają pamięci RTC, w ESP8266 oraz w układach Beken BK7231T, BK7231N i BK7238. Te ostatnie też nie mają pamięci RTC. Od zmiany scalonej wcześniej tego samego dnia rtc oznacza w nich zapis w pamięci flash, a wartość znika po zaniku zasilania, więc nic się nie oszczędza. Na innych platformach, na przykład w RP2040, można wybrać tylko flash.

ESP8266 ma w sumie tylko 96 bajtów pamięci RTC na wszystkie przywracane wartości. Przywracane zmienne typu std::string są teraz wliczane do tego limitu już przy kompilacji, więc konfiguracja, która się nie mieści, kończy się błędem kompilacji, a nie nieudanym zapisem w urządzeniu. Ta kontrola działa niezależnie od tego, czy używasz nowej opcji.

Autor sprawdził zmianę na ESP32 z platformą ESP-IDF.