Jednym z częściej powtarzających się pytań/problemów, dotyczących ESPHome jest to, że wprowadzone zmiany – np. stan przełącznika, ustawiona temperatura termostatu – nie są zapamiętywane po ponownym uruchomieniu urządzenia. W takiej sytuacji najczęściej chodzi o ESPHome uruchomione na układzie ESP8266, gdzie faktycznie, w domyślnej konfiguracji zmiany nie są zapisywane w pamięci urządzenia (w przypadku ESP32 problem ten nie występuje, bo tu są domyślnie zapisywane). Na szczęście można to łatwo zmienić…

Zapamiętywanie ustawień w ESPHome na ESP8266

Nie wiem, z czego wynika taka decyzja twórców ESPHome, ale pewnie z tego, że układy ESP8266 trochę z przypadku stały się tym, czym się stały, w przeciwieństwie do układów ESP32, które od razu były tworzone z myślą o pracy jako (mikro)kontrolery. W każdym razie jest, jak jest i jak już na wstępie wspomniałem – w przypadku układów ESP8266, oprogramowanie ESPHome domyślnie nie zapisuje ustawień w pamięci, a więc po każdym restarcie urządzenia wszystko wraca do domyślnych wartości (stanów).

Można jednak to zmienić, za pomocą opcji “restore_from_flash”:

restore_from_flash (Optional, boolean): Whether to store some persistent preferences in flash memory. Defaults to false.

Wystarczy w sekcji, gdzie ustawiamy typ płytki dodać parametr “restore_from_flash” z wartością “true”:

esp8266:
  board: nodemcuv2
  restore_from_flash: true

Można też zmienić co jaki czas wartości i stany, mają być zapisywane w pamięci:

flash_write_interval (Optional, Time): Customize the frequency in which data is flushed to the flash. This setting helps to prevent rapid changes to a component from being quickly written to the flash and wearing it out. Defaults to 1min.

W takim przypadku dodajemy kod:

preferences:
  flash_write_interval: 10min

Mamy też opcje, pozwalające łatwo ustawić, czy np. stan danego przełącznika ma być przywracany, a jak tak, to na jakich zasadach, do czego służy parametr “restore_mode”:

  • RESTORE_DEFAULT_OFF: Próbuje przywrócić, jak się nie uda, to ustawia OFF
  • RESTORE_DEFAULT_ON: Próbuje przywrócić, jak się nie uda, to ustawia ON
  • RESTORE_INVERTED_DEFAULT_OFF: Próbuje przywrócić stan odwrotny od zapisanego, jak się nie uda, to ustawia OFF
  • RESTORE_INVERTED_DEFAULT_ON: Próbuje przywrócić stan odwrotny od zapisanego, jak się nie uda, to ustawia OFF
  • ALWAYS_OFF: Zawsze ustawia OFF (domyślna opcja)
  • ALWAYS_ON: Zawsze ustawia ON
  • DISABLED: Nie robi nic

Przykładowy kod z użyciem tej opcji może wyglądać tak:

switch:
  - platform: gpio
    [...]
    restore_mode: RESTORE_DEFAULT_OFF

I jest to bardzo przydatna opcja, bo pozwala z góry zaprogramować układ, by w razie np. problemów z przywróceniem ustawienia z pamięci, dany przełącznik został ustawiony tak, jak potrzebujemy. Sam często korzystam z opcji domyślnej, czyli “zawsze OFF” np. w przypadku wszelkiej maści termostatów (sterownik ogrzewania, czy sterownik piwnej lodówki), i opcji “zawsze ON” w przypadku np. dzwonka do drzwi…

(!) Zgłoś błąd na stronie | Lub postaw nam kawę :-)
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk