PiggyMeter
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.
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.
- Apator Norax 3
- Apator Norax 1
- Apator Norax 1D przez komponent SML
- Pafal 12EA5
- Iskra MT372
- Iskra ME162
- Kastrup 382
- Landis+Gyr E350 ZMF110
- ZPA ZE110.D0
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.
- Moduł DLMS/COSEM Esphome https://github.com/viric/esphome-ziv
Lista materiałów
Część | Opis |
---|---|
CPU | Wemos C3 lub S2 Mini https://www.wemos.cc/en/latest/ |
Interfejs optyczny | PiggyMeter PCB https://www.tindie.com/products/32082/ |
2×pin header 1×4 | Raster 2,54 mm; część plastikowa musi mieć wysokość 8,5 mm |
Magnes pierścieniowy | ⌀30/⌀15×2mm |
Obudowa | Obudowa drukowana w 3D https://github.com/aquaticus/piggymeter_case |
Podkładka | Podkładka drukowana w 3D https://github.com/aquaticus/piggymeter_case |
Pokrywa | Tylna pokrywa drukowana w 3D https://github.com/aquaticus/piggymeter_case |
Płyta 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
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.
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.
Obudowa
Pobierz pliki dla drukarki 3D z https://github.com/aquaticus/piggymeter_case. Użyj wersji V5 dla najnowszego projektu.
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
Montaż
Ułóż komponenty w obudowie w następującej kolejności:
- Magnes
- Podkładka
- Interfejs optyczny
- Płyta CPU
- 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.
Czujniki
To lista czujników zdefiniowanych w pliku konfiguracyjnym.
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.