Panel energii w Home Assistancie zaczyna się od jednej liczby: ile prądu pobierasz z sieci. Najpewniej odczytasz ją z samego licznika. Niektóre liczniki mają do tego ustandaryzowany port, jak P1 w Holandii, Belgii i Luksemburgu, ale wiele innych, zwłaszcza starszych, nie ma żadnego wyjścia danych. Prawie każdy ma za to małą diodę, która mruga, gdy płynie przez niego energia.

Wystarczy przyłożyć do tej diody fotodiodę i podłączyć ją do ESP32 z ESPHome, żeby mieć w Home Assistancie bieżącą moc w watach i licznik energii w kWh. Wszystko działa lokalnie, bez chmury i bez grzebania w instalacji w rozdzielnicy. Wyjaśniam, jak sprawdzić, czy licznik się nadaje, co kupić i jak to połączyć, jak na dwa sposoby wgrać oprogramowanie, jak policzyć mnożniki i co robić przy najczęstszych usterkach.

Najpierw sprawdź licznik

Poszukaj na tabliczce licznika wartości w imp/kWh, czyli liczby mignięć diody na jedną kilowatogodzinę. Zapisz ją, bo od niej zależą wszystkie dalsze obliczenia. Dokumentacja Glow podaje jako typowe wartości 1000 i 2000, a Home Assistant w swoim przykładzie używa 1000. Przy takiej stałej jedno mignięcie oznacza 1/1000 kWh, czyli 1 Wh.

ESP32 liczy mignięcia i mierzy czas między nimi. Z liczby mignięć wynika zużyta energia, a z odstępu między dwoma kolejnymi bieżąca moc. Na tym polega cała metoda i dlatego wartość imp/kWh musi się zgadzać: jeśli wpiszesz złą, każdy odczyt będzie błędny w tej samej proporcji.

To też powód, dla którego ten sposób jest wygodniejszy od cęgów prądowych. Cęgi trzeba założyć na przewód w rozdzielnicy, a dokumentacja Home Assistanta zaznacza, że powinna to zrobić osoba znająca się na instalacjach elektrycznych, a w niektórych krajach może być do tego potrzebny elektryk z uprawnieniami. Fotodioda przyklejona z zewnątrz do licznika w ogóle nie dotyka przewodów.

Co kupić i jak to połączyć

Home Assistant Glow to otwarte oprogramowanie oparte na ESPHome, napisane właśnie do odczytu diody licznika. Dokumentacja Home Assistanta sama odsyła do niego właścicieli liczników z diodą impulsową. W poradniku na start projekt wymienia taki sprzęt:

  • Płytka z układem ESP. Zalecane jest zwykłe ESP32, ale działają też płytki z ESP32-C3 i ESP8266.
  • Moduł z fotodiodą i układem LM393. Uważaj przy zamawianiu: dokumentacja Glow ostrzega, że pod podobnymi nazwami sprzedawane są też moduły z fotorezystorem. Potrzebujesz wersji z fotodiodą.
  • Przewody połączeniowe żeńsko-żeńskie.
  • Opcjonalnie dioda RGB 5 mm ze wspólną katodą jako wskaźnik stanu. Miga na czerwono przy każdym zliczonym impulsie, a na niebiesko, gdy nie ma połączenia z Wi-Fi.

Na ESP32 połączenia według tabeli z dokumentacji Glow wyglądają tak:

Moduł z fotodiodą ESP32
DO GPIO26
VCC 3V3
GND GND
A0 niepodłączone

Na ESP32-C3 wyjście DO idzie według tej samej tabeli do GPIO10, a na ESP8266 do GPIO13 (na wielu płytkach opisanego jako D7). Płytki różnią się rozkładem wyprowadzeń, więc przed podłączeniem sprawdź schemat swojego egzemplarza.

Fotodiodę zamocuj dokładnie nad diodą licznika i osłoń ją przed światłem z otoczenia i odbiciami. Projekt udostępnia obudowę do wydruku na drukarce 3D, ale nada się każda osłona, która trzyma czujnik nieruchomo i w ciemności.

Sposób pierwszy: zainstaluj Home Assistant Glow z przeglądarki

Jeśli chcesz po prostu mieć działający odczyt licznika, a nie własny plik YAML, to najkrótsza droga.

  1. Otwórz stronę z poradnikiem na start w serwisie glow-energy.io w przeglądarce opartej na Chromium, na komputerze. Instalator nie działa na tabletach ani telefonach.
  2. Wybierz wariant oprogramowania: „Standard”, jeśli podłączyłeś diodę RGB, albo „Basic”, jeśli masz tylko fotodiodę.
  3. Podłącz płytkę przez USB, wybierz jej port szeregowy i zainstaluj oprogramowanie. Jeśli instalacja się nie uda, przytrzymaj przycisk BOOT na płytce i spróbuj jeszcze raz.
  4. Gdy instalator o to poprosi, podaj dane sieci Wi-Fi 2,4 GHz.
  5. Dodaj urządzenie do Home Assistanta: przez odnośnik, który pokaże instalator, albo poczekaj, aż pojawi się jako wykryte w Ustawienia > Urządzenia oraz usługi („Settings > Devices & services”).
  6. W encji ze stałą licznika („Pulse rate”) wpisz wartość imp/kWh z licznika. Domyślnie jest tam 1000.

Domyślne oprogramowanie Glow nie używa klucza szyfrowania API. Jeśli Home Assistant o niego pyta, to według FAQ projektu urządzenie zostało najpewniej przypadkiem przejęte w ESPHome Builderze.

Przejęcie urządzenia w ESPHome Builderze (przycisk „Take Control”) ma jednak sens, gdy chcesz zmieniać konfigurację. Pamiętaj tylko, co się wtedy dzieje: domyślne oprogramowanie zostaje zastąpione twoją konfiguracją ESPHome, dochodzi klucz szyfrowania, dane Wi-Fi są brane z twojego pliku z sekretami, a automatyczne aktualizacje z glow-energy.io przestają przychodzić. Od tej chwili o aktualizacje dbasz sam. Do oryginalnego oprogramowania wrócisz, instalując je ponownie przez USB, ale stracisz wtedy swoje zmiany.

Sposób drugi: napisz własną konfigurację

Oprogramowanie Glow korzysta z czujnika pulse_meter z ESPHome, więc jego najważniejszą część możesz odtworzyć we własnym pliku. Poniższy przykład zakłada zwykłe ESP32, fotodiodę na GPIO26 i licznik o stałej 1000 imp/kWh:

esphome:
  name: licznik-pradu

esp32:
  board: esp32dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

logger:

api:
  encryption:
    key: !secret api_encryption_key

ota:
  platform: esphome

time:
  - platform: homeassistant
    id: ha_time

sensor:
  - platform: pulse_meter
    id: house_power
    name: "Pobór mocy"
    pin: GPIO26
    unit_of_measurement: W
    device_class: power
    state_class: measurement
    accuracy_decimals: 0
    internal_filter: 200ms
    filters:
      - multiply: 60  # (60 / 1000 imp/kWh) * 1000 W
    total:
      name: "Energia łącznie"
      unit_of_measurement: kWh
      device_class: energy
      state_class: total_increasing
      accuracy_decimals: 3
      filters:
        - multiply: 0.001  # 1 / 1000 imp/kWh

  - platform: total_daily_energy
    name: "Energia dzisiaj"
    power_id: house_power
    unit_of_measurement: kWh
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 3
    filters:
      - multiply: 0.001  # W na kW

Jak policzyć mnożniki

Czujnik pulse_meter domyślnie podaje liczbę impulsów na minutę. Żeby dostać waty, pomnóż ją przez (60 / imp) * 1000. Przy 1000 imp/kWh mnożnik wynosi 60, przy 2000 imp/kWh - 30. Dokumentacja ESPHome pokazuje ten sam wzór dla licznika 10000 imp/kWh, gdzie wychodzi 6.

Pole total, czyli osobny czujnik sumy, liczy surowe impulsy. Żeby dostać kWh, pomnóż je przez 1 / imp: przy 1000 imp/kWh to 0,001, a przy 2000 - 0,0005.

Jednostki i klasy nie są tu dodatkiem. Home Assistant pokaże czujnik w sekcji sieci elektrycznej panelu energii tylko wtedy, gdy ma on device_class: energy, state_class ustawione na total albo total_increasing i obsługiwaną jednostkę, na przykład kWh. Czujnik mocy potrzebuje device_class: power i state_class: measurement.

Jak dobrać filtr wewnętrzny

Parametr internal_filter odrzuca impulsy, które przychodzą zbyt blisko siebie. W domyślnym trybie EDGE ESPHome porównuje kolejne zbocza narastające i odrzuca późniejsze, jeśli odstęp jest krótszy niż ustawiony filtr. Dokumentacja ESPHome dobiera tę wartość do największego spodziewanego obciążenia: przy 16 kW i 10000 imp/kWh prawdziwy impuls nie może przyjść szybciej niż po 22,5 ms, więc filtr ustawiono o mniej więcej 10% niżej, na 20 ms.

Tak samo policzysz to dla dowolnego licznika. Najkrótszy możliwy odstęp w sekundach to 3600 / (imp/kWh * największe obciążenie w kW). Przy 1000 imp/kWh i tych samych 16 kW wychodzi 225 ms, stąd 200 ms w przykładzie wyżej. Przelicz to dla stałej swojego licznika i rzeczywistej mocy przyłącza. Jeśli filtr będzie dłuższy niż odstęp między prawdziwymi impulsami, przy dużym obciążeniu część z nich przepadnie.

Home Assistant Glow wychodzi z innego założenia. Domyślnie ustawia 1000 µs (1 ms) i udostępnia tę wartość jako encję filtra („Internal Filter”), którą zmienisz z poziomu Home Assistanta. Dokumentacja projektu uznaje 1-10 ms za dobry punkt wyjścia dla większości domów. W oprogramowaniu Glow wartość z tej encji po uruchomieniu zastępuje internal_filter wpisany w YAML.

Energia dzienna i źródło czasu

Czujnik total_daily_energy całkuje moc i zeruje się o północy, więc potrzebuje komponentu time. Platforma homeassistant pobiera czas z Home Assistanta przez API. Jeśli energia dzienna nigdy się nie zeruje, FAQ projektu Glow radzi przejść na platform: sntp.

Do panelu energii nie musisz dodawać obu czujników energii. Według dokumentacji Glow wystarczy dzienny albo łączny. Wyzerowanie w ciągu dnia, na przykład po aktualizacji albo ponownym uruchomieniu, nie jest problemem, bo statystyki długoterminowe Home Assistanta sobie z nim radzą.

Dodaj licznik do panelu energii

  1. Przejdź do Ustawienia > Panele > Energia („Settings > Dashboards > Energy”).
  2. W sekcji Sieć elektryczna („Electricity grid”) dodaj połączenie z siecią.
  3. Jako energię pobraną z sieci wybierz czujnik energii.
  4. Jeśli chcesz, dodaj też czujnik mocy i cenę prądu, żeby śledzić koszty.
  5. Zapisz zmiany.

Wykresy nie pojawią się od razu. Według dokumentacji Glow po dodaniu nowego urządzenia może minąć do dwóch godzin, zanim zbierze się dość statystyk długoterminowych, żeby panel coś pokazał.

Jeśli czujnika nie ma na liście, FAQ Home Assistanta o energii każe sprawdzić trzy rzeczy. Po pierwsze, sprawdź atrybuty opisane wyżej (zobaczysz je w narzędziach, w zakładce stanów: „Settings > Tools > States”). Po drugie, upewnij się, że encja jest czujnikiem (sensor), a nie na przykład polem liczbowym input_number. Po trzecie, zajrzyj do zakładki statystyk („Settings > Tools > Statistics”) i zobacz, czy nie ma przy niej zgłoszonych problemów. Dokumentacja sieci elektrycznej dodaje czwarty warunek: czujnik musi być zapisywany przez Rejestrator („Recorder”).

Jeśli masz taryfę dzienno-nocną albo inną zależną od pory, dioda licznika nie powie Home Assistantowi, która strefa właśnie obowiązuje. FAQ o energii zaleca do tego integrację utility_meter z osobną taryfą dla każdego okresu cenowego. Każdy powstały w ten sposób czujnik dodaj do panelu osobno. Jeśli zsumujesz kilka zerujących się czujników w jeden czujnik szablonowy albo grupę, sumy mogą wyjść zawyżone: czujniki nigdy nie zerują się w tej samej chwili, a fałszywa wartość pośrednia trafia do statystyk długoterminowych.

Jak ograniczyć liczbę aktualizacji

Przy 1000 imp/kWh i obciążeniu 3600 W licznik daje jeden impuls na sekundę. Według FAQ projektu Glow oznacza to w Home Assistancie dwie zmiany stanu na sekundę, czyli 7200 na godzinę. Jeśli nie potrzebujesz takiej dokładności, przerzedzisz je filtrami ESPHome. Oto przepis z dokumentacji Glow, dopasowany do identyfikatorów z przykładu wyżej:

sensor:
  - platform: pulse_meter
    # ...
    filters:
      - multiply: 60
      - throttle_average: 10s
      - filter_out: NaN
    total:
      # ...
      filters:
        - multiply: 0.001
        - delta: 0.01
        - heartbeat: 300s

Czujnik mocy podaje teraz średnią z 10 sekund, a licznik łączny aktualizuje się po zmianie o co najmniej 0,01 kWh albo co pięć minut, zależnie od tego, co nastąpi wcześniej. Według FAQ Glow daje to 396 zmian stanu na godzinę. Jeśli używasz samego oprogramowania Glow, zamiast przepisywać czujnik od nowa, skorzystaj z !extend sensor_energy_pulse_meter, jak na tamtej stronie FAQ.

Jak zrównać licznik z odczytem na wyświetlaczu

Czujnik pulse_meter pozwala ustawić liczbę impulsów na dowolną wartość akcją pulse_meter.set_total_pulses. Jeśli udostępnisz ją jako akcję API, zrównasz stan w ESP32 z tym, co pokazuje wyświetlacz licznika:

api:
  encryption:
    key: !secret api_encryption_key
  actions:
    - action: set_total
      variables:
        new_total: int
      then:
        - pulse_meter.set_total_pulses:
            id: house_power
            value: !lambda 'return new_total;'

Podajesz tu surową liczbę impulsów, a nie kWh, bo akcja działa na liczniku przed wszystkimi filtrami. Przy 1000 imp/kWh odczyt 12345 kWh to 12345000 impulsów. Oprogramowanie Glow mnoży to za ciebie: ma encję liczbową na wartość w kWh („Reset Value - Total Energy kWh”) i przycisk („Reset - Total Energy”), który ustawia licznik impulsów na tę wartość pomnożoną przez stałą licznika.

Jeśli pominiesz ten krok, panel energii na tym nie ucierpi. Statystyki długoterminowe śledzą, o ile rośnie licznik, i dlatego dokumentacja Glow mówi, że wyzerowanie niczego nie psuje. Zrównanie z licznikiem przydaje się głównie po to, żeby w obu miejscach widzieć tę samą liczbę.

Typowe problemy

  • Nie ma żadnych impulsów. Sprawdź, czy fotodioda leży dokładnie nad diodą licznika, czy jest dobrze osłonięta i jak ustawiona jest czułość na module. FAQ projektu Glow opisuje też fotodiody dostarczane wlutowane odwrotnie: większa, trójkątna część diody powinna być przylutowana do strony dodatniej płytki. Jeśli jest odwrotnie, dioda licznika nie zostanie wykryta bez względu na czułość.
  • Absurdalne skoki mocy, na przykład do 1000 kW. To fałszywe impulsy wywołane zakłóceniami elektrycznymi albo odbiciami światła w pobliżu diody. Zwiększaj filtr wewnętrzny stopniowo. Jeśli przesadzisz, przy dużym obciążeniu zaczną ginąć prawdziwe impulsy.
  • Nagły skok energii dziennej po dłuższym okresie zerowego poboru, przy fotowoltaice. FAQ Glow radzi ustawić w czujniku total_daily_energy metodę method: left zamiast domyślnej right.
  • Energia dzienna nie zeruje się o północy. Zmień źródło czasu na SNTP.
  • Odczyty stale zawyżone albo zaniżone. Sprawdź jeszcze raz wartość imp/kWh i oba mnożniki.