Wiele tanich inteligentnych gniazdek mierzy pobór mocy układem HLW8012 albo BL0937. Taki układ podaje waty, wolty i ampery jako ciągi impulsów, które ESPHome zlicza programowym licznikiem impulsów. W gniazdkach z układami Beken albo Realtek, działających pod LibreTiny, to liczenie od dawna było zawodne. Zmiana #21271, scalona z gałęzią rozwojową ESPHome 22 października 2026, zmienia sposób, w jaki licznik nasłuchuje na pinie.

Co było nie tak

Programowy licznik impulsów działa na ESP8266, RP2040, LibreTiny, nRF52, a na ESP32 wtedy, gdy ustawisz use_pcnt: false. Zawsze podpinał przerwanie pod oba zbocza sygnału, a dopiero w procedurze obsługi przerwania odczytywał stan pinu, żeby ustalić, czy zbocze było narastające, czy opadające. Robił tak nawet w ustawieniach domyślnych, w których liczą się tylko zbocza narastające, a opadające są pomijane.

Słabym punktem jest właśnie ten odczyt. Na platformach, na których przerwanie długo dociera do procedury obsługi, stan pinu często zdąży się już zmienić z powrotem. Szybkie ciągi impulsów, takie jak na wyjściach CF i CF1 układu HLW8012, są wtedy liczone na złym zboczu albo wcale. Zgłoszenie, od którego zaczęła się poprawka, otwarte 21 października, wskazuje, że najbardziej cierpią układy z LibreTiny, bo pakiety SDK ich producentów reagują na przerwania GPIO wolniej niż te od Espressifa. Autor podlinkował około dziesięciu starszych zgłoszeń i zmian w ESPHome i LibreTiny z obejściami tego samego problemu.

Co się zmienia

Rodzaj przerwania zależy teraz od ustawienia internal_filter, bo filtr musi widzieć oba zbocza, żeby zmierzyć impuls:

  • Gdy internal_filter jest ustawiony (czujnik pulse_counter ma domyślnie 13 µs), wszystko zostaje po staremu: przerwanie na obu zboczach i odczyt pinu, więc impulsy krótsze od okna filtra nadal są odrzucane.
  • Przy internal_filter: 0us ESPHome podpina przerwanie tylko pod te zbocza, które się liczą. W ustawieniach domyślnych (zbocze narastające zwiększa licznik, opadające jest wyłączone) oznacza to przerwanie na jednym zboczu, a procedura obsługi w ogóle nie czyta już pinu.
  • Gdy oba zbocza są wyłączone, przerwanie nie jest podpinane.

Komponenty hlw8012 i bl0937 korzystają z licznika bezpośrednio i bez filtra, więc same przechodzą na przerwanie z jednego zbocza. To dokładnie przypadek z pierwotnego zgłoszenia. Zwykły czujnik pulse_counter na LibreTiny może dostać to samo zachowanie po ustawieniu internal_filter: 0us.

Jeden skutek uboczny

Rodzaj przerwania jest teraz wybierany przy starcie. Jeśli lambda zmieni później tryby zboczy, ESPHome zapisze błąd w dzienniku i zignoruje zmianę. Autor zmiany zaznacza, że to nieudokumentowana zmiana w API C++, więc dotyczy tylko tych, którzy sterują licznikiem z własnego kodu.

Poprawka jest w gałęzi rozwojowej, więc powinna trafić do użytkowników razem z ESPHome 2026.11, chyba że zostanie też przeniesiona do wydania poprawkowego 2026.10. Po aktualizacji warto sprawdzić przede wszystkim gniazdka z układami Beken albo Realtek, które pokazywały zaniżony pobór mocy.