Urządzenie z ESPHome, które budzi się z głębokiego uśpienia i łączy z brokerem MQTT, wysyła SUBSCRIBE dla każdego tematu z poleceniami, nawet jeśli broker pamięta je z poprzedniej sesji. Zmiana autorstwa Rapsssito, sprawdzona przez bdraco i scalona 25 października 2026 po ponad dziesięciu miesiącach przeglądu, dodaje opcję, która ten krok pomija. Dokumentację scalono tego samego dnia, więc opcja powinna trafić do ESPHome 2026.11.
Nowa opcja
mqtt:
clean_session: false # broker zachowuje sesję (to już domyślne ustawienie)
persist_subscriptions: true # nowa opcja
persist_subscriptions wymaga clean_session: false. Bez tej opcji nic się nie zmienia, a nowy kod w ogóle nie trafia do skompilowanego oprogramowania.
Jak urządzenie decyduje
Urządzenie przechowuje jeden 32-bitowy odcisk zestawu subskrypcji, liczony z tematów, ich poziomów QoS i skrótu konfiguracji. Gdy broker odpowie na połączenie flagą „session present”, a odcisk się zgadza, ESPHome uznaje subskrypcje za gotowe i niczego nie wysyła. W każdym innym przypadku subskrybuje wszystko od nowa, tak jak dziś.
Odcisk trzyma pamięć, która przetrwa głębokie uśpienie i restart, ale nie zanik zasilania. W ESP8266 jest to pamięć RTC, a w układach ESP32 z pamięcią RTC 8-bajtowe słowo z sumą kontrolną. ESP32-C2, ESP32-C61 i LibreTiny trzymają odcisk tylko w RAM-ie, więc na nich każdy restart oznacza jedną pełną subskrypcję. Przy żadnym połączeniu nic nie trafia do pamięci flash.
Autor zadbał też o to, by urządzenie nie ufało niedokończonej sesji. Przed wysłaniem subskrypcji odcisk zostaje oznaczony jako niepewny, a nowa wartość trafia do pamięci dopiero wtedy, gdy broker potwierdzi każde SUBSCRIBE z tego połączenia. Jeśli połączenie zerwie się w połowie, przy następnym urządzenie subskrybuje wszystko ponownie. Odcisk traci ważność także wtedy, gdy urządzenie wypisze się z tematu w trakcie pracy.
Ile to daje
Według opisu zmiany urządzenie z 10 subskrypcjami po około 50 bajtów, budzone co 15 minut, oszczędza mniej więcej 2000 bajtów na godzinę i 100-200 ms na każdym połączeniu. To niewiele, ale w czujniku na baterię najwięcej prądu zużywa właśnie radio. Nadawanie przez Wi-Fi pobiera 70-100 mA, a głębokie uśpienie poniżej 1 mA. Krótszy czas w sieci przekłada się na dłuższą pracę na baterii, choć dokładny zysk zależy od liczby tematów z poleceniami.
O czym pamiętać
Po zaniku zasilania albo po wgraniu oprogramowania z innym zestawem tematów pierwsze połączenie raz subskrybuje wszystko. Tematy używane tylko przez starsze oprogramowanie zostają zasubskrybowane na brokerze, dopóki ten nie porzuci sesji. Oszczędność pojawi się tylko wtedy, gdy broker naprawdę przechowuje sesję między połączeniami. Jeśli ją porzuca, urządzenie po prostu subskrybuje wszystko jak dotąd.