Skip to content

PiggyMeter

PiggyMeter atașat la contorul electric

Acest articol îți arată cum să construiești un dispozitiv pentru a citi de la distanță datele de la un contor electric (sau orice dispozitiv cu o interfață compatibilă).

Folosește componente disponibile pe scară largă, software open source și este compatibil cu software-ul popular de automatizare a locuinței, Home Assistant.

INFO

Un kit pentru asamblarea unui dispozitiv funcțional este disponibil pentru achiziție pe Tindie: PiggyMeter KIT.

Caracteristici

  • Suportă protocoale bazate pe IEC62056-21
  • Suportă protocolul pasiv SML folosind componenta nativă ESPHome
  • Multiple contoare: energie, apă, termic și altele
  • Folosește ESPHome open source
  • Comunicare wireless prin Wi-Fi
  • Integrare cu Home Assistant
  • Server web opțional
  • Hardware ieftin ESP32-C3 sau ESP32-S2
  • Design carcasă disponibil pentru imprimare 3D

Suportă contoare compatibile cu standardul IEC62056-21 care funcționează în modurile A, B, C, D (dar nu E). Pentru detalii, vezi componenta IEC 62056-21.

Reține că există multe variații ale protocolului. Deși contorul poate folosi aceeași interfață optică, formatul cadrului de date ar putea fi diferit.

În plus, suportă contoare care folosesc protocolul SML (Smart Message Language) folosind componenta ESPHome SML.

WARNING

Standardele DLMS, M-Bus și ANSI C12.18/19 nu sunt suportate de software.

Cum să verifici dacă contorul este suportat?

Termenul IEC 62056-21 este folosit pentru multiple protocoale (cu același strat hardware, dar cu codificare diferită a datelor). Dispozitivul suportă contoare care furnizează date codificate ASCII, ceva de genul:

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)

Contorul trebuie să fie compatibil cu Standardul Internațional IEC 62056-21:2002.

Inel metalic caracteristic și interfață optică în mijloc.

Pentru protocolul SML, caută logo-ul SML pe contor sau verifică manualul. Componenta ESPHome suportă doar modul pasiv, nu trimite nicio cerere către contor. În acest mod, contorul trimite date la fiecare câteva secunde.

Contoare raportate ca funcționând cu PiggyMeter

Lista este creată pe baza rapoartelor utilizatorilor. Nu există nicio garanție că este exactă.

INFO

Nu ezitați să trimiteți un email la info@aquaticus.info dacă cunoașteți un contor care funcționează cu PiggyMeter, dar nu este listat mai sus.

Software alternativ

Hardware-ul PiggyMeter poate funcționa cu multe contoare diferite care utilizează interfața optică. Totuși, software-ul suportă în prezent un singur standard, limitând practic gama de contoare suportate.

Puteți încerca să utilizați software alternativ care poate adăuga suport pentru contoare diferite. Este important de menționat că nu există nicio asigurare că va funcționa perfect cu PiggyMeter. Pentru suport, vă rugăm să contactați autorul original.

Lista de materiale

ParteDescriere
CPUWemos C3 sau S2 Mini https://www.wemos.cc/en/latest/
Interfață opticăPCB PiggyMeter https://www.tindie.com/products/32082/
2×pin header 1×4Raster 2.54mm; partea de plastic trebuie să aibă 8.5 mm înălțime
Magnet inelar⌀30/⌀15×2mm
CarcasăCarcasă imprimată 3D https://github.com/aquaticus/piggymeter_case
ȘaibăȘaibă imprimată 3D https://github.com/aquaticus/piggymeter_case
CapacCapac spate imprimat 3D https://github.com/aquaticus/piggymeter_case

Placa CPU

CPU

Ai nevoie de o placă cu un cip Espressif instalat și compatibil cu pinout-ul Wemos/Lolin. Factorul cheie este locația celor 4 pini: GND, VCC, TX și RX.

Dimensiunea PCB-ului este, de asemenea, critică. Carcasa imprimată 3D se potrivește doar cu plăcile (sau clonele lor) listate mai jos:

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

În teorie, poți folosi orice altă placă CPU cu pinout compatibil, notabil ESP32 și ESP8266 D1 mini. Dar în acest caz trebuie să îți proiectezi propria carcasă și să modifici puțin fișierele de configurare (tipul plăcii și pinii portului serial).

Interfața optică

Interfața optică

Un contor utilizează o interfață optică compatibilă cu standardul IEC62056-21, comunicând cu o sondă printr-o diodă infraroșu și un fototransistor.

Interfața este conectată la unul dintre porturile seriale de pe placa CPU. Desigur, ai nevoie și de VCC și GND.

Interfața optică și placa CPU

Sudează 2 pini de conectare. Trebuie să folosești un pin de conectare cu înălțimea de 8.5 mm. Designul carcasei acomodează această înălțime, asigurând o potrivire corespunzătoare. Dacă înălțimea depășește această dimensiune, închiderea capacului poate prezenta provocări.

INFO

Poți cumpăra interfața asamblată de pe Tindie. Cumpără de pe Tindie

Carcasa

Descarcă fișierele pentru imprimanta 3D de la https://github.com/aquaticus/piggymeter_case. Folosește versiunea V5 pentru cel mai recent design.

Carcasa

Carcasa este compusă din trei componente:

  • carcasa principală,
  • o șaibă,
  • și un capac.

Există trei fișiere STL distincte disponibile pentru fiecare componentă, sau alternativ, un singur fișier 3fm care încorporează toate cele trei elemente.

Carcasa îndeplinește cerințele standardului IEC62056-21 pentru Sonda Optică>.

INFO

Carcasa are un mic zăvor. Pentru a o închide sau deschide, este nevoie de puțină forță.

Setări recomandate pentru imprimarea 3D

  • Material: PLA
  • Strat: 0,2 mm
  • Fără suport

3d print

Asamblare

Assembly

Aranjați componentele în carcasă în această ordine:

  1. Magnet
  2. Șaibă
  3. Interfață optică
  4. Placă CPU
  5. Capac

INFO

Urmăriți asamblarea pe Youtube https://youtu.be/fM2LyJJWQHA?si=dyY4r7zMSMfbwQtm

Programare pentru contoare IEC62056-21

Începeți prin instalarea ESPHome.

În funcție de placa CPU, selectați fișierul de configurare corespunzător. De asemenea, faceți ajustări manuale la anumite parametri, cum ar fi parola WiFi.

Obțineți fișierele de configurare

Clonați depozitul git cu fișierele de configurare:

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

Creați fișierul secrets.yaml

Creați un fișier secrets.yaml în directorul unde sunt localizate fișierele de configurare. Acest fișier va conține numele rețelei WiFi și parola corespunzătoare.

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

Modificați configurația proiectului

Configurația vine pre-setată cu puncte de date standard pentru un contor electric.

Puteți ajusta lista, mai ales dacă contorul dumneavoastră diferă de tipul contorului electric. Consultați componenta IEC 62056-21 pentru mai multe informații.

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

Construiți și încărcați firmware-ul

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

Comanda de mai sus încarcă firmware-ul și afișează ieșirea monitorului. În mod implicit, interfața citește date de la un contor la fiecare 1 minut.

TIP

Pentru placa ESP32-S2 trebuie să apăsați butonul BOOT și apoi butonul RESET pe PCB pentru a intra în modul de programare. În plus, puteți vedea un mesaj de eroare după încărcare -- ignorați-l.

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)

Programare pentru contoare SML

Primii pași sunt identici cu cei pentru contoarele IEC62056-21.

După clonarea depozitului și crearea fișierului secrets.yaml, utilizați fișierele de configurare pentru contoarele SML.

bash
esphome run piggymeter-s2-sml.yaml

Cel mai probabil, va trebui să ajustați fișierul de configurare pentru a se potrivi cu punctele de date transmise de contor. De asemenea, merită să verificați rata de baud și biții de date ai portului serial.

Home Assistant

Dispozitivul ar trebui să fie detectat automat de Home Assistant. Dacă nu, îl puteți adăuga manual făcând clic pe Add Integration și selectând integrarea ESPHome.

PiggyMeter expune trei grupuri de elemente:

Declanșator Citire

Acest declanșator forțează PiggyMeter să citească date de la un contor în afara programului.

Starea Conexiunii Contorului

Starea Connected indică faptul că interfața schimbă date cu contorul.

Connection Status

Senzori

Aceasta este o listă de senzori definiți în fișierul de configurare.

Sensors

Mod independent

PiggyMeter poate funcționa independent de Home Assistant, oferind capacitatea de a activa un server web. Acest server afișează citirile de date direct într-un browser web și oferă o API REST simplă.

Pentru a activa serverul web, includeți următoarele linii în fișierul de configurare:

yaml
web_server:
  port: 80

Mai multe informații despre serverul web pot fi găsite în documentația ESPHome.

Modificări

În mod implicit, dispozitivul preia date la fiecare minut, iar LED-ul intern este iluminat în timpul transmisiei.

Numai un număr limitat de coduri OBIS sunt definite în fișierul de configurare yaml. Este foarte recomandat să modificați lista de senzori pentru a se potrivi cu un contor.

Deși codurile OBIS sunt standardizate, contoarele pot transmite un număr variabil de coduri. Pentru a determina codurile suportate de contorul dvs., activați logarea DEBUG pentru componenta IEC62056-21 și analizați ieșirea jurnalului.

Diagnostic și Probleme IEC62056-21

Această secțiune este doar pentru contoarele IEC62056-21 (nu SML).

După flash-uirea firmware-ului, dispozitivul va încerca să citească date de la un contor după aproximativ 15 secunde. Dacă transmisia eșuează, va încerca de două ori la fiecare 15 secunde.

Poți ajusta acești parametri configurând token-urile corespunzătoare. Consultă documentația componentului IEC62056-21 pentru mai multe detalii.

Este recomandabil să schimbi nivelul implicit de jurnalizare de la DEBUG la INFO odată ce dispozitivul a fost confirmat că funcționează corect.

Mai jos sunt probleme comune și soluțiile lor respective.

TIP

Asigură-te că sonda este atașată în siguranță la contor, aliniind săgeata de pe sondă în direcția în sus.

Nicio transmisie de la contor

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

Aceasta poate indica:

  • Cel mai frecvent, interfața nu este atașată la un contor.
  • Interfața nu este aliniată corect cu interfața optică a unui contor.
  • Contorul nu este compatibil.

Asigură-te că interfața optică este poziționată paralel cu suprafața frontală a carcasei. Dacă dispozitivul funcționează când este atașat la contor fără carcasă, dar nu funcționează după ce este introdus în carcasă, aceasta ar putea fi problema. Într-un astfel de caz, poți lua în considerare mărirea celor două găuri din carcasă.

Nu toate senzorii au primit date

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.

Aceasta poate indica două probleme:

  • Contorul nu suportă codul OBIS pe care l-ai configurat în fișierul yaml. Pur și simplu elimină senzorul cu codul OBIS specific din configurație.
  • Ar putea exista o greșeală de tipar sau o definiție incorectă a codului OBIS pentru senzor în fișierul de configurație. Verifică codul cu atenție.

Contorul transmite date automat, dar dispozitivul nu primește nimic

Aceasta indică faptul că contorul suportă modul D al IEC62056-21. În acest mod, contorul transmite autonom date la fiecare câteva secunde fără a necesita o cerere specifică. Asigură-te că portul serial este configurat să se alinieze cu formatul de transmisie al contorului, de obicei setat la 9600 7E1 sau 2400 7E1 în majoritatea cazurilor.

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

În plus, Modul D trebuie activat manual prin setarea mode_d=True în configurația platformei.

yaml
# Activează modul D
iec62056:
  mode_d: True

Erori de checksum

log
[E][iec62056.component:504]: Verificarea BCC a eșuat. Așteptat 0x6b, primit 0x14

Această eroare sugerează probleme de transmisie.

De obicei, viteza de transmisie este excesiv de mare. Reducerea vitezei maxime de baud ar trebui să ajute.

yaml
iec62056:
  baud_rate_max : 4800

Identificarea contorului primită, dar fără transmisie

log
[D][iec62056.component:174]: Identificarea contorului: '/XXX6\2YYYYYYY'
[D][iec62056.component:252]: Contorul indică modul E, care nu este suportat. Se încearcă modul C. Acest lucru va funcționa pentru contoarele care suportă atât modul E, cât și C.
[E][iec62056.component:268]: Nicio transmisie de la contor.

Șirul de identificare al contorului este primit cu succes, dar nu există transmisie de date. În plus, jurnalul afișează un mesaj care spune, "Contorul indică modul E."

Contorul funcționează exclusiv în modul E, pe care PiggyMeter nu îl suportă. În consecință, software-ul încearcă să comute contorul la modul C, dar această încercare eșuează.

Dacă un contor suportă atât modul E, cât și C, sistemul ar trebui să funcționeze corect.