Skip to content

PiggyMeter

PiggyMeter przymocowany do licznika
elektrycznego

Ten artykuł pokazuje, jak zbudować urządzenie do zdalnego odczytu danych z licznika elektrycznego (lub dowolnego urządzenia z kompatybilnym interfejsem).

Wykorzystuje powszechnie dostępne komponenty, oprogramowanie open source i jest kompatybilne z popularnym oprogramowaniem do automatyki domowej, Home Assistant.

INFO

Zestaw do montażu funkcjonalnego urządzenia jest dostępny do zakupu na Tindie: PiggyMeter KIT.

Funkcje

  • Obsługuje protokoły oparte na IEC62056-21
  • Obsługuje pasywny protokół SML za pomocą natywnego komponentu ESPHome
  • Wiele liczników: energii, wody, ciepła i więcej
  • Wykorzystuje open source ESPHome
  • Komunikacja bezprzewodowa przez Wi-Fi
  • Integracja z Home Assistant
  • Opcjonalny serwer WWW
  • Tanie komponenty ESP32-C3 lub ESP32-S2
  • Projekt obudowy dostępny do druku 3D

Obsługuje liczniki kompatybilne ze standardem IEC62056-21, które działają w trybach A, B, C, D (ale nie E). Szczegóły można znaleźć w komponencie IEC 62056-21.

Należy pamiętać, że istnieje wiele wariantów protokołu. Chociaż licznik może używać tego samego interfejsu optycznego, format ramki danych może być inny.

Dodatkowo obsługuje liczniki, które używają protokołu SML (Smart Message Language) za pomocą komponentu ESPHome SML.

WARNING

Standardy DLMS, M-Bus i ANSI C12.18/19 nie są obsługiwane przez oprogramowanie.

Jak sprawdzić, czy licznik jest obsługiwany?

Termin IEC 62056-21 jest używany dla wielu protokołów (z tą samą warstwą sprzętową, ale różnym kodowaniem danych). Urządzenie obsługuje liczniki, które dostarczają dane zakodowane w ASCII, coś takiego:

console
1-0:15.8.1(00000009999.567*kWh)
1-0:15.8.2(00000000000.000*kWh)
1-0:15.8.3(00000000000.000*kWh)
1-0:15.8.4(00000000000.000*kWh)

Licznik musi być kompatybilny z Międzynarodowym Standardem IEC 62056-21:2002.

Charakterystyczny metalowy pierścień i interfejs optyczny w
środku.

Dla protokołu SML, szukaj logo SML na liczniku lub sprawdź instrukcję. Komponent ESPHome obsługuje tylko tryb pasywny, nie wysyła żadnych żądań do licznika. W tym trybie licznik wysyła dane co kilka sekund.

Liczniki zgłoszone jako działające z PiggyMeter

Lista została stworzona na podstawie zgłoszeń użytkowników. Nie ma gwarancji, że jest dokładna.

INFO

Jeśli znasz licznik, który działa z PiggyMeter, ale nie jest wymieniony powyżej, śmiało wyślij e-mail na info@aquaticus.info.

Alternatywne oprogramowanie

Sprzęt PiggyMeter może współpracować z wieloma różnymi licznikami wykorzystującymi interfejs optyczny. Jednak obecne oprogramowanie obsługuje tylko jeden standard, co praktycznie ogranicza zakres obsługiwanych liczników.

Możesz spróbować użyć alternatywnego oprogramowania, które może dodać obsługę różnych liczników. Ważne jest, aby zauważyć, że nie ma gwarancji, że będzie działać bezproblemowo z PiggyMeter. W celu uzyskania wsparcia, skontaktuj się z oryginalnym autorem.

Lista materiałów

CzęśćOpis
CPUWemos C3 lub S2 Mini https://www.wemos.cc/en/latest/
Interfejs optycznyPiggyMeter PCB https://www.tindie.com/products/32082/
2×pin header 1×4Raster 2,54 mm; część plastikowa musi mieć wysokość 8,5 mm
Magnes pierścieniowy⌀30/⌀15×2mm
ObudowaObudowa drukowana w 3D https://github.com/aquaticus/piggymeter_case
PodkładkaPodkładka drukowana w 3D https://github.com/aquaticus/piggymeter_case
PokrywaTylna pokrywa drukowana w 3D https://github.com/aquaticus/piggymeter_case

Płyta CPU

CPU

Potrzebujesz płytki z zainstalowanym chipem Espressif i kompatybilnym rozmieszczeniem pinów Wemos/Lolin. Kluczowym czynnikiem jest lokalizacja 4 pinów: GND, VCC, TX i RX.

Rozmiar PCB jest również istotny. Obudowa wydrukowana w 3D pasuje tylko do płytek (lub ich klonów) wymienionych poniżej:

  • Lolin/Wemos S2 mini
  • Lolin/Wemos C3 mini

Teoretycznie możesz użyć dowolnej innej płyty CPU z kompatybilnym rozmieszczeniem pinów, takiej jak ESP32 i ESP8266 D1 mini. W takim przypadku musisz zaprojektować własną obudowę i nieco zmodyfikować pliki konfiguracyjne (typ płyty i piny portu szeregowego).

Interfejs optyczny

Interfejs optyczny

Licznik wykorzystuje interfejs optyczny zgodny ze standardem IEC62056-21, komunikujący się z sondą za pomocą diody podczerwieni i fototranzystora.

Interfejs jest podłączony do jednego z portów szeregowych na płycie CPU. Oczywiście potrzebujesz również VCC i GND.

Interfejs optyczny i płyta CPU

Przylutuj 2 złącza pinowe. Musisz użyć złącza pinowego o wysokości 8,5 mm. Projekt obudowy uwzględnia tę wysokość, zapewniając odpowiednie dopasowanie. Jeśli wysokość przekracza ten wymiar, zamknięcie pokrywy może stanowić wyzwanie.

INFO

Możesz kupić zmontowany interfejs na Tindie. Kup na Tindie

Obudowa

Pobierz pliki dla drukarki 3D z https://github.com/aquaticus/piggymeter_case. Użyj wersji V5 dla najnowszego projektu.

Obudowa

Obudowa składa się z trzech elementów:

  • głównej obudowy,
  • podkładki,
  • i pokrywy.

Dostępne są trzy odrębne pliki STL dla każdego elementu lub alternatywnie jeden plik 3fm zawierający wszystkie trzy elementy.

Obudowa spełnia wymagania standardu IEC62056-21 dla sondy optycznej.

INFO

Obudowa ma mały zatrzask. Aby ją zamknąć lub otworzyć, musisz użyć trochę siły.

Zalecane ustawienia druku 3D

  • Materiał: PLA
  • Warstwa: 0,2 mm
  • Bez wsparcia

3d print

Montaż

Assembly

Ułóż komponenty w obudowie w następującej kolejności:

  1. Magnes
  2. Podkładka
  3. Interfejs optyczny
  4. Płyta CPU
  5. Pokrywa

INFO

Obejrzyj montaż na Youtube https://youtu.be/fM2LyJJWQHA?si=dyY4r7zMSMfbwQtm

Programowanie dla liczników IEC62056-21

Rozpocznij od zainstalowania ESPHome.

Na podstawie swojej płyty CPU wybierz odpowiedni plik konfiguracyjny. Dodatkowo dokonaj ręcznych zmian w niektórych parametrach, takich jak hasło do WiFi.

Pobierz pliki konfiguracyjne

Sklonuj repozytorium git z plikami konfiguracyjnymi:

bash
git clone https://github.com/aquaticus/piggymeter_esphome_yaml

Utwórz plik secrets.yaml

Utwórz plik secrets.yaml w katalogu, w którym znajdują się pliki konfiguracyjne. Ten plik będzie zawierał nazwę sieci WiFi i odpowiadające jej hasło.

yaml
# Home Assistant API encryption key
api_key: my_home_assistant_encryption_key

# OTA password
ota_pass: my_ota_password

# WiFi network name
wifi_ssid: my_network

# WiFi network password
wifi_pass: my_password

Zmodyfikuj konfigurację projektu

Konfiguracja jest wstępnie ustawiona z standardowymi punktami danych dla licznika elektrycznego.

Możesz dostosować listę, zwłaszcza jeśli Twój licznik różni się od typu licznika elektrycznego. Odnieś się do komponentu IEC 62056-21 po więcej informacji.

yaml
sensor:
   - platform: iec62056
       obis: 1-0:15.8.0
       name: Absolute active energy total
       unit_of_measurement: kWh
       accuracy_decimals: 3
       device_class: energy
       state_class: total_increasing

Zbuduj i wgraj firmware

bash
esphome run piggymeter-s2-iec62056-21.yaml

Powyższe polecenie wgrywa firmware i pokazuje wyjście monitora. Domyślnie interfejs odczytuje dane z licznika co 1 minutę.

TIP

Dla płyty ESP32-S2 musisz nacisnąć przycisk BOOT, a następnie przycisk RESET na PCB, aby wejść w tryb programowania. Dodatkowo, po wgraniu może pojawić się komunikat o błędzie -- po prostu go zignoruj.

log
[12:21:27][D][iec62056.component:232]: Connection start
[12:21:27][D][binary_sensor:036]: 'Meter Connection Status': Sending state ON
[12:21:28][D][switch:013]: 'Internal LED' Turning ON.
[12:21:28][D][switch:056]: 'Internal LED': Sending state ON
[12:21:28][D][iec62056.component:174]: Meter identification: '/XXX6\2YYYYY'
[12:21:28][D][iec62056.component:407]: Meter reported protocol: C
[12:21:28][D][iec62056.component:410]: Meter reported max baud rate: 19200 bps ('6')
[12:21:28][D][iec62056.component:438]: Using negotiated baud rate 9600 bps.
[12:21:29][D][iec62056.component:470]: Switching to new baud rate 9600 bps ('5')
[12:21:29][D][iec62056.component:482]: Meter started readout transmission
[12:21:29][D][iec62056.component:524]: Data: 0-0:C.1.0(12345678)
[12:21:29][D][iec62056.component:524]: Data: 0-0:1.0.0(2000-01-01 20:10:30)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.0(00000001000.657*kWh)
[12:21:29][D][iec62056.component:620]: Set sensor 'Absolute active energy total' for OBIS '1-0:15.8.0'. Value: 1000.656982
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.1(00000002000.657*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.2(00000003000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.3(00000004000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.4(00000005000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:01)

Programowanie dla liczników SML

Pierwsze kroki są identyczne jak dla liczników IEC62056-21.

Po sklonowaniu repozytorium i utworzeniu pliku secrets.yaml, użyj plików konfiguracyjnych dla liczników SML.

bash
esphome run piggymeter-s2-sml.yaml

Najprawdopodobniej będziesz musiał dostosować plik konfiguracyjny, aby dopasować go do punktów danych przesyłanych przez licznik. Warto również zweryfikować prędkość transmisji i bity danych portu szeregowego.

Home Assistant

Urządzenie powinno zostać automatycznie wykryte przez Home Assistant. Jeśli nie, możesz dodać je ręcznie, klikając Dodaj integrację i wybierając integrację ESPHome.

PiggyMeter udostępnia trzy grupy elementów:

Wyzwalacz odczytu

Ten wyzwalacz zmusza PiggyMeter do odczytu danych z licznika poza harmonogramem.

Status połączenia z licznikiem

Status $1 wskazuje, że interfejs wymienia dane z licznikiem.

Status połączenia

Czujniki

To lista czujników zdefiniowanych w pliku konfiguracyjnym.

Czujniki

Tryb samodzielny

PiggyMeter może działać niezależnie od Home Assistant, oferując możliwość uruchomienia serwera WWW. Serwer ten wyświetla odczyty danych bezpośrednio w przeglądarce internetowej i oferuje prosty interfejs REST API.

Aby uruchomić serwer WWW, dodaj następujące linie do pliku konfiguracyjnego:

yaml
web_server:
  port: 80

Więcej informacji o serwerze WWW można znaleźć w dokumentacji ESPHome.

Modyfikacje

Domyślnie urządzenie pobiera dane co minutę, a wewnętrzna dioda LED jest podświetlana podczas transmisji.

W pliku konfiguracyjnym yaml zdefiniowano tylko ograniczoną liczbę kodów OBIS. Zaleca się modyfikację listy czujników, aby dopasować je do licznika.

Chociaż kody OBIS są znormalizowane, liczniki mogą przesyłać różną liczbę kodów. Aby ustalić obsługiwane kody dla swojego licznika, włącz logowanie DEBUG dla komponentu IEC62056-21 i przeanalizuj wynik logowania.

Diagnostyka i problemy IEC62056-21

Ta sekcja dotyczy tylko liczników IEC62056-21 (nie SML).

Po wgraniu oprogramowania urządzenie spróbuje odczytać dane z licznika po około 15 sekundach. Jeśli transmisja się nie powiedzie, spróbuje ponownie dwa razy co 15 sekund.

Możesz dostosować te parametry, konfigurując odpowiednie tokeny. Zapoznaj się z dokumentacją komponentu IEC62056-21 po więcej szczegółów.

Zaleca się zmianę domyślnego poziomu logowania z DEBUG na INFO, gdy urządzenie zostało potwierdzone jako działające poprawnie.

Poniżej znajdują się typowe problemy i ich odpowiednie rozwiązania.

TIP

Upewnij się, że sonda jest solidnie przymocowana do licznika, ustawiając strzałkę na sondzie w kierunku do góry.

Brak transmisji z licznika

log
[E][iec62056.component:268]: No transmission from meter.

Może to oznaczać:

  • Najczęściej interfejs nie jest podłączony do licznika.
  • Interfejs nie jest prawidłowo ustawiony względem interfejsu optycznego licznika.
  • Licznik nie jest kompatybilny.

Upewnij się, że interfejs optyczny jest ustawiony równolegle do przedniej powierzchni obudowy. Jeśli urządzenie działa, gdy jest podłączone do licznika bez obudowy, ale nie działa po włożeniu do obudowy, to może być problem. W takim przypadku możesz również rozważyć powiększenie dwóch otworów w obudowie.

Nie wszystkie czujniki otrzymały dane

log
[E][iec62056.component:644]: Not all sensors received data from the meter. The first one: OBIS '1-0:72.7.0'. Verify sensor is defined with valid OBIS code.

Może to oznaczać dwa problemy:

  • Licznik nie obsługuje kodu OBIS, który skonfigurowałeś w pliku yaml. Po prostu usuń czujnik z określonym kodem OBIS z konfiguracji.
  • Może występować literówka lub niepoprawna definicja kodu OBIS dla czujnika w pliku konfiguracyjnym. Sprawdź kod ponownie.

Licznik automatycznie przesyła dane, ale urządzenie nic nie odbiera

To oznacza, że licznik obsługuje tryb D IEC62056-21. W tym trybie, licznik autonomicznie przesyła dane co kilka sekund bez potrzeby specyficznego żądania. Upewnij się, że port szeregowy jest skonfigurowany tak, aby był zgodny z formatem transmisji licznika, zazwyczaj ustawionym na 9600 7E1 lub 2400 7E1 w większości przypadków.

yaml
# 9600bps for mode D
uart:
    rx_pin: GPIO21
    tx_pin: GPIO22
    baud_rate: 9600
    data_bits: 7
    parity: EVEN
    stop_bits: 1

Dodatkowo, tryb D musi być ręcznie aktywowany poprzez ustawienie mode_d=True w konfiguracji platformy.

yaml
# Włącz tryb D
iec62056:
  mode_d: True

Błędy sumy kontrolnej

log
[E][iec62056.component:504]: Weryfikacja BCC nie powiodła się. Oczekiwano 0x6b, otrzymano 0x14

Ten błąd sugeruje problemy z transmisją.

Zazwyczaj prędkość transmisji jest zbyt wysoka. Obniżenie maksymalnej prędkości transmisji powinno pomóc.

yaml
iec62056:
  baud_rate_max : 4800

Odebrano identyfikację licznika, ale brak transmisji

log
[D][iec62056.component:174]: Identyfikacja licznika: '/XXX6\2YYYYYYY'
[D][iec62056.component:252]: Licznik wskazuje tryb E, który nie jest obsługiwany. Próba przełączenia na tryb C. To zadziała dla liczników obsługujących zarówno tryb E, jak i C.
[E][iec62056.component:268]: Brak transmisji z licznika.

Ciąg identyfikacyjny licznika został pomyślnie odebrany, ale nie ma transmisji danych. Dodatkowo, w logu pojawia się komunikat stwierdzający, "Liczniki wskazują tryb E."

Licznik działa wyłącznie w trybie E, którego PiggyMeter nie obsługuje. W związku z tym oprogramowanie próbuje przełączyć licznik na tryb C, ale ta próba kończy się niepowodzeniem.

Jeśli licznik obsługuje zarówno tryb E, jak i C, system powinien działać poprawnie.