Czytnik impulsów na liczniku prądu powie ci, ile zużywa cały dom. Nie powie jednak, ile z tego bierze pompa ciepła, bojler, warsztat czy obwód kuchenny. Do tego potrzebny jest licznik na samym obwodzie, a Peacefair PZEM-004T V3 to tani sposób, żeby go mieć: mała płytka, która mierzy napięcie, natężenie prądu, moc, energię, częstotliwość i współczynnik mocy, a wyniki wysyła łączem szeregowym, które ESPHome odczytuje bezpośrednio.

Z poradnika dowiesz się, jaki wariant wybrać, jak podłączyć część niskonapięciową do ESP32, jak wygląda konfiguracja ESPHome, jak obsłużyć kilka modułów z jednej płytki i jak przenieść odczyty do panelu energii w Home Assistancie.

Najpierw bezpieczeństwo

PZEM-004T pracuje pod napięciem sieciowym. Zaciski napięciowe łączy się z przewodem fazowym i neutralnym, a w wariancie 10 A przez płytkę płynie cały prąd obciążenia. Zwykle moduł trafia do rozdzielnicy, obok wyłączników nadprądowych. Jeśli nie masz uprawnień do prac przy instalacji elektrycznej, część sieciową zostaw elektrykowi. Stronę ESP32, konfigurację i wszystko w Home Assistancie nadal zrobisz sam.

Zamontuj moduł w zamkniętej obudowie, na przykład w puszce na szynę DIN, tak żeby nie dało się dotknąć niczego po stronie sieciowej, i nigdy nie pracuj przy nim pod napięciem. Niskonapięciowe złącze szeregowe jest oddzielone transoptorami i dlatego zwykle podłącza się je bezpośrednio do mikrokontrolerów, ale to nie powód, żeby zostawiać płytkę na wierzchu. ESP32 zasilaj z porządnego zasilacza 5 V z izolacją. Tanie zasilacze pojemnościowe bez izolacji nie nadają się do tego projektu.

10 A czy 100 A

Moduł występuje w dwóch wariantach, a różnice podaje karta katalogowa:

PZEM-004T-10A PZEM-004T-100A
Pomiar prądu wbudowany bocznik zewnętrzna przekładnia prądowa (cęgi)
Zakres prądu 0-10 A 0-100 A
Zakres mocy 0-2,3 kW 0-23 kW
Prąd startowy 0,01 A 0,02 A

Oba warianty mierzą napięcie przemienne 80-260 V, częstotliwość od 45 do 65 Hz i energię do 9999,99 kWh z rozdzielczością 1 Wh. Dla napięcia, prądu, mocy, częstotliwości i energii producent podaje dokładność 0,5%, dla współczynnika mocy 1%.

Przy obwodzie w rozdzielnicy praktyczniejszy jest wariant 100 A. Przekładnia prądowa to pierścień albo rozkładane cęgi zakładane na jeden przewód, więc prąd obciążenia w ogóle nie płynie przez moduł i nie trzeba przecinać obwodu. Wariant 10 A nadaje się do pojedynczego urządzenia, które pobiera wyraźnie mniej niż 10 A, ale pamiętaj, że cały prąd płynie wtedy przez jego zaciski.

Podłączenie strony sieciowej

Po stronie sieciowej moduł potrzebuje dwóch rzeczy: napięcia na zaciskach L i N, które zasila też jego układ pomiarowy, oraz prądu z mierzonego obwodu.

W wariancie 100 A przeprowadź przez przekładnię tylko przewód fazowy mierzonego obwodu. Jeśli przez pierścień przejdą i faza, i przewód neutralny, ich prądy się zniosą, a moduł pokaże wartość bliską zera. Zaciski napięciowe możesz zasilić z tego samego obwodu albo z dowolnego innego punktu na tej samej fazie.

Dokumentacja ESPHome wymienia tu jeden mało oczywisty warunek: układ pomiarowy jest zasilany od strony sieci i musi być włączony w chwili startu urządzenia z ESPHome. W przeciwnym razie odczyty się nie pojawią. W praktyce zasilaj ESP32 z tego samego obwodu albo zadbaj o to, żeby PZEM miał napięcie, zanim ESP32 się uruchomi. Jeśli urządzenie jest dostępne w sieci, ale nic nie mierzy, najpierw uruchom ponownie ESP32.

Podłączenie strony niskonapięciowej

Złącze szeregowe ma cztery styki: 5V, RX, TX i GND. Karta katalogowa nazywa je złączem pasywnym. Wymaga zewnętrznego zasilania, a do komunikacji muszą być podłączone wszystkie cztery styki. Linie danych połącz na krzyż: TX modułu do styku RX w ESP32, a RX modułu do TX w ESP32.

Kłopotem są poziomy napięć. Złącze zaprojektowano do pracy z 5 V, a wejścia ESP32 pracują przy 3,3 V. Stosuje się dwa rozwiązania:

  • 5 V i konwerter poziomów logicznych. Zasil złącze z 5 V, a na linii od TX modułu do RX w ESP32 umieść konwerter poziomów, żeby na wejście ESP32 nigdy nie trafiło 5 V. Wiele osób steruje wejściem RX modułu bezpośrednio z wyjścia 3,3 V w ESP32, ale dwukierunkowy konwerter na obu liniach usuwa wątpliwości.
  • 3,3 V na styku 5V. Prostsze i u wielu osób działa, bo poziomy logiczne się wtedy zgadzają. Haczyk tkwi w transoptorze na linii RX: jego rezystor szeregowy dobrano do 5 V, więc przy 3,3 V płynie przez niego za mały prąd. Dokumentacja Tasmoty opisuje, jak to wyrównać, lutując rezystor 1 kΩ równolegle do tego rezystora (na płytce V3 to R8). Według dokumentacji ESPHome płytka PZEM-004T-100A-D-P wydaje się działać z 3,3 V na styku 5V, przynajmniej na przewodach długości kilku centymetrów, bez konwertera i bez zmiany rezystorów.

Niezależnie od wyboru przewody szeregowe powinny być krótkie. Długie, nieekranowane przewody biegnące obok kabli sieciowych zbierają zakłócenia i mogą powodować błędy odczytu.

Konfiguracja ESPHome

Moduł V3 obsługuje w ESPHome platforma pzemac. Komunikuje się przez Modbus na UART z prędkością 9600 bodów. Podstawowa konfiguracja dla ESP32:

uart:
  rx_pin: GPIO16
  tx_pin: GPIO17
  baud_rate: 9600

modbus:

sensor:
  - platform: pzemac
    id: pzem_heat_pump
    current:
      name: "Pompa ciepła prąd"
    voltage:
      name: "Pompa ciepła napięcie"
    power:
      name: "Pompa ciepła moc"
    energy:
      name: "Pompa ciepła energia"
    frequency:
      name: "Pompa ciepła częstotliwość"
    power_factor:
      name: "Pompa ciepła współczynnik mocy"
    update_interval: 10s

Piny to tylko przykład: nada się każdy wolny GPIO, którego płytka nie używa do czegoś innego. Jeśli nic nie przychodzi, najpierw zamień RX i TX w YAML. To samo radzi dokumentacja UART w ESPHome, bo nazwy pinów zależą od tego, z której strony się patrzy.

Domyślny update_interval to 60 sekund. Przy pompie ciepła albo pralce, gdzie liczy się moment startu i końca pracy, 10 sekund daje dużo czytelniejszy wykres. Energię zlicza sam moduł, więc dłuższy odstęp nie gubi żadnych kilowatogodzin, tylko szczegóły na wykresie mocy.

Każdy czujnik jest opcjonalny, więc częstotliwość czy napięcie możesz pominąć, jeśli ich nie potrzebujesz. Współczynnik mocy warto zostawić przy silnikach i sprężarkach: gdy spada wyraźnie poniżej 1, moduł daje znać, że prąd nie przekłada się w pełni na moc czynną, czego z samych watów nie zobaczysz.

Starszy PZEM-004T V1 używa innego protokołu i innej platformy, pzem004t, więc sprawdź, którą wersję masz. ESPHome ostrzega też, że PZEM-004T-100A-D-P ma na płytce nadruk „V1.0”, choć działa z pzemac.

Licznik energii

Czujnik energy podaje watogodziny z klasą stanu total_increasing, więc Home Assistant traktuje go jak licznik. Licznik jest przechowywany w module, a nie w ESP32, więc przetrwa ponowne uruchomienie ESP32 i aktualizację oprogramowania.

Wyzerujesz go akcją pzemac.reset_energy, na przykład z przycisku:

button:
  - platform: template
    name: "Zeruj energię pompy ciepła"
    on_press:
      - pzemac.reset_energy: pzem_heat_pump

Dla panelu energii niczego nie trzeba zerować. Home Assistant traktuje spadek wartości total_increasing jako początek nowego cyklu licznika, więc zerowanie nie pojawi się jako ujemne zużycie. Zerowanie przyda się, gdy licznik w module ma odpowiadać wybranemu okresowi, na przykład sezonowi grzewczemu.

Kilka modułów na jednym ESP32

Każdy PZEM ma adres Modbus, domyślnie 1. Kilka modułów może dzielić jeden UART, jeśli każdy ma własny adres z zakresu od 0x01 do 0xF7. Adres ustawiasz raz dla każdego modułu, podłączając do magistrali tylko ten jeden. Dokumentacja ESPHome podaje konfigurację, która przy starcie zapisuje nowy adres akcją modbus_client.write_single_register. Wgraj ją, poczekaj na komunikat w logu potwierdzający zmianę, a potem usuń ten kod, zanim podłączysz następny moduł. Nie zostawiaj go w konfiguracji.

Potem każdemu blokowi czujnika przypisz jego adres:

sensor:
  - platform: pzemac
    address: 1
    power:
      name: "Kuchnia moc"
    energy:
      name: "Kuchnia energia"
  - platform: pzemac
    address: 2
    power:
      name: "Warsztat moc"
    energy:
      name: "Warsztat energia"

Trudność jest elektryczna, a nie w YAML. Wyjście TX każdego modułu steruje linią, więc nie da się po prostu połączyć kilku styków TX. Użytkownicy forum Node-RED łączą je przez diody z rezystorem podciągającym. Na ESP32 przy dwóch czy trzech modułach jest prostsza droga: każdy dostaje osobny wpis uart: z własnymi pinami i osobną magistralę modbus:, a każdy czujnik łączysz z jego magistralą przez modbus_id. ESPHome korzysta wtedy ze sprzętowych układów UART w ESP32.

Odczyty w panelu energii

W Ustawienia > Panele > Energia (Settings > Dashboards > Energy) dodaj czujnik energii w sekcji Poszczególne urządzenia (Individual devices). Nie wpisuj go jako zużycia z sieci. To miejsce na licznik, który widzi cały dom, na przykład czytnik impulsów na głównym liczniku.

Jeśli mierzysz i cały dom, i niektóre jego obwody, ustaw licznik domu jako urządzenie nadrzędne (upstream device) dla czujników obwodów. Home Assistant pokaże wtedy obwody jako część całości, zamiast liczyć te same kilowatogodziny dwa razy.

Najczęstsze błędy

  • Oba przewody w przekładni prądowej. Prądy się znoszą, a odczyt jest bliski zera.
  • Niezamienione RX i TX. TX modułu idzie do RX w ESP32. Jeśli nic nie przychodzi, najpierw zamień piny w YAML.
  • ESP32 uruchomione, zanim moduł dostał napięcie sieciowe. Uruchom ESP32 ponownie po zasileniu PZEM.
  • Niepodłączone wszystkie cztery styki złącza. Złącze potrzebuje własnego zasilania. Same RX, TX i GND nie wystarczą.
  • Kod zmieniający adres pozostawiony w oprogramowaniu. Ma zadziałać raz dla każdego modułu, a nie przy każdym starcie.
  • Wariant 10 A na obwodzie, który pobiera więcej. Jego zakres mocy kończy się na 2,3 kW, a tyle potrafi pobrać sam czajnik albo grzejnik. Do całego obwodu użyj wariantu 100 A z cęgami.