Opcja storage: rtc w ESPHome zachowuje wartość po restarcie i aktualizacji OTA, ale zapomina ją po zaniku zasilania. Teraz działa też na trzech układach firmy Beken: BK7231T, BK7231N i BK7238, które ESPHome obsługuje przez LibreTiny. 18 października 2026 o 2:59 czasu polskiego bdraco scalił do gałęzi rozwojowej zgłoszenie zmian #21007 od użytkownika porelli, a o 4:37 dołączyła do niego dokumentacja (esphome.io #7777). Obie zmiany trafią do ESPHome 2026.11.
Pamięć RTC, która w rzeczywistości jest pamięcią flash
Te układy nie mają pamięci RTC, a obszar RAM .noinit nie przetrwa na nich nawet restartu programowego. Nowy kod udaje więc pamięć RTC. Ustawienie zapisane jako rtc to zwykły wpis w bazie FlashDB, tyle że z własnym przedrostkiem nazwy. Jeśli funkcja lt_get_reboot_reason() zgłosi, że układ wystartował po włączeniu zasilania, spadku napięcia, resecie z pinu, z debugera albo z nieznanego powodu, przy otwieraniu ustawień ESPHome usuwa wszystkie wpisy z tym przedrostkiem. Robi to w jednym przejściu, zanim jakikolwiek komponent odczyta swoje ustawienie. Po restarcie programowym albo aktualizacji OTA wpisy zostają na miejscu.
Takie rozwiązanie ma ograniczenia, o których dokumentacja mówi wprost:
- w przeciwieństwie do prawdziwej pamięci RTC opcja
rtcna tych układach nadal zapisuje dane w pamięci flash, więc nie zmniejsza jej zużycia; - wartość trafia do pamięci flash dopiero przy następnej synchronizacji, więc reset przed nią oznacza utratę wartości;
- jeśli przełączysz istniejące ustawienie między
flashartc, zmieni się nazwa, pod którą jest zapisane, więc raz wróci ono do wartości początkowej.
Opcję rtc przyjmują tylko te trzy rodziny układów, bo tylko u nich sprawdzono na sprzęcie, jak zgłaszają przyczynę restartu. BK7251 i RTL8710B nadal jej nie obsługują, a RTL8710B każdy start zgłasza jako nieznany. Gdyby jakiś układ źle odczytał przyczynę restartu, skutki będą łagodne. Restart wzięty za zanik zasilania oznacza start od wartości domyślnej komponentu, a zanik zasilania wzięty za restart zachowa starą wartość, czyli zadziała tak jak dziś. Oprogramowanie skompilowane bez rtc nie zmienia się ani o bajt, a z rtc rośnie o kilkaset bajtów pamięci flash.
Co działa już teraz, a na co trzeba poczekać
Już teraz wartość rtc przyjmą na tych układach trzy opcje: fast_connect w komponencie wifi (zapomnienie zapisanej sieci po zaniku zasilania), licznik safe_mode i rtc_storage w preferences. Wszystkie korzystają z tego samego kodu, ale autor sprawdził go tylko z przełącznikiem.
Przełączniki są tu głównym zastosowaniem, ale tej części jeszcze nie scalono. Zgłoszenie #20978, z którego podczas przeglądu wydzielono obecną zmianę, dodaje przełącznikom opcje initial_state i restore_state z wyborem miejsca zapisu (storage). Gdy obie zmiany trafią do ESPHome, przekaźnik może się włączyć po zaniku zasilania, a po aktualizacji OTA albo restarcie wrócić do ostatniego stanu. Autor podaje, kiedy to się przydaje: gdy urządzenie jest dodatkowo wyłączane zwykłym włącznikiem na ścianie albo listwą zasilającą przed nim. 18 października zgłoszenie #20978 wciąż czekało na scalenie.
Autor sprawdził obie zmiany, jeszcze przed ich rozdzieleniem, na gniazdku z układem BK7231T w module WB2S. Po restartach i aktualizacjach OTA wyłączone gniazdko zostawało wyłączone, a po 15-sekundowym zaniku zasilania włączało się zgodnie z ustawieniem.