17 października 2026 o 2:55 czasu polskiego do gałęzi rozwojowej ESPHome trafiła poprawka ważna dla wszystkich, którzy odczytują francuski licznik prądu komponentem teleinfo. Do tej pory wartość, której nie dało się odczytać jako liczby, była wysyłana jako 0. Teraz komponent zapisuje ostrzeżenie w dzienniku i ją pomija. Zmianę #20960 przygotował FredM67, a scalił ją bdraco. Trafi do ESPHome 2026.11.
Jak jedno zero zawyżało zużycie energii
Teleinfo (TIC) to wyjście szeregowe francuskich liczników, na przykład Linky. Każda grupa w ramce ma sumę kontrolną, ale to tylko 6-bitowa suma, więc mniej więcej co 64. uszkodzona grupa przechodzi kontrolę. Jeśli po uszkodzeniu wartość przestawała być liczbą, stary kod podstawiał 0 i wysyłał je dalej.
To zero robiło sporo szkody. Większość czujników teleinfo to wskazania liczników energii, takie jak EAST, BASE czy HCHP, a gotowe ustawienia komponentu nadają im state_class: total_increasing. Home Assistant traktuje spadek takiego czujnika do 0 jak wyzerowanie licznika. Kiedy przychodził następny prawidłowy odczyt, całe wskazanie licznika jeszcze raz trafiało do statystyk długoterminowych. Użytkownicy radzili sobie filtrami z wyrażeniami lambda, które odrzucały zera albo duże skoki.
Po poprawce prawdziwe 0 wysłane przez licznik nadal dociera do Home Assistanta. Odrzucane są tylko wartości, które nie są liczbami. Zmiana dodaje też pierwsze testy tego komponentu uruchamiane na komputerze, a jeden z nich nie przechodzi na starym kodzie.
Granica dokładności, o której mówi teraz dokumentacja
Razem z poprawką zmieniła się dokumentacja (esphome.io #7763, scalone 17 października o 23:47 czasu polskiego). Doszło drugie ostrzeżenie. Wartości czujników w ESPHome to 32-bitowe liczby zmiennoprzecinkowe, które dokładnie przechowują każdą liczbę całkowitą tylko do 16 777 216. Wskazania liczników energii przychodzą w Wh, a wiele liczników ma już na koncie więcej, czyli około 16,8 MWh. Powyżej tej granicy czujnik zmienia się co 2 Wh, a powyżej 33 554 432 Wh (około 33,6 MWh) co 4 Wh. Przeliczenie na kWh filtrem multiply nic nie da, bo wartość jest zaokrąglona, zanim filtr w ogóle zadziała.
Autor zauważył to na liczniku Linky ze wskazaniem 33,26 MWh. Każda wartość EAST, która docierała do Home Assistanta, była parzysta, a osobne wskazania dla taryf (EASF0x), po kilka MWh każde, nadal rosły co 1 Wh.
Jeśli potrzebujesz każdej watogodziny, na przykład do wyliczania mocy ze wskazania licznika, dokumentacja radzi odczytać etykietę czujnikiem tekstowym teleinfo. Zachowuje on dokładnie te cyfry, które wysłał licznik. Na liczbę zamienisz je dopiero w Home Assistancie, który korzysta z 64-bitowych liczb zmiennoprzecinkowych. W przykładzie jest czujnik szablonowy z device_class: energy, state_class: total_increasing i warunkiem availability, który przepuszcza tylko liczby.
Co się zmienia w praktyce
Gdy zainstalujesz wydanie z tą poprawką, filtry odrzucające zera przy czujnikach energii z teleinfo nie będą już potrzebne, a do tego czasu niczemu nie szkodzą. Poprawka nie naprawia statystyk, które fałszywe zerowania już zawyżyły. Te trzeba poprawić osobno w Home Assistancie.