Componenta ESPHome IEC 62056-21
IEC 62056-21 este un standard internațional pentru un protocol de schimb de date cu contoarele utilitare. În principal pentru electricitate, dar și pentru apă, termic și alte contoare. A fost cunoscut anterior sub numele de IEC 61107.
Componenta iec62056
îți permite să citești date de la orice contor compatibil. Necesită un port serial și o interfață optică externă. Schimbul de date folosește un canal optic cu infraroșu. Contoarele compatibile sunt echipate cu o placă metalică rotundă caracteristică cu două opto-elemente în interior. Protocolul ar putea fi folosit cu alte straturi de transport, de exemplu buclă de curent, dar componenta a fost testată doar cu interfața optică.
Suportă 4 moduri ale IEC 62056-21: A, B, C și D. Modul E nu este suportat.
Componenta nu suportă programarea. Setarea parametrilor de configurare a contorului necesită o parolă secretă, ceea ce face imposibilă utilizarea de către utilizatorii obișnuiți.
Există alte standarde de contoare inteligente care folosesc aceeași interfață optică. Deși împărtășesc unele concepte comune, nu sunt compatibile.
Instalare
Adaugă următorul cod în fișierul de configurare YAML al ESPHome pentru a referenția componenta externă.
yaml
external_components:
# Componenta IEC62056
- source: github://aquaticus/esphome-iec62056
Teoria funcționării
Componenta funcționează în 2 moduri principale:
- Comunicare bidirecțională cu un contor. În acest mod, un contor trimite date doar când este solicitat. Necesită un receptor și un emițător IR. Acesta este modul A, B și C conform IEC 62056-21.
- Comunicare unidirecțională, unde un contor trimite date către o sondă din când în când. Necesită doar un receptor IR. În terminologia IEC62056-21 este modul D.
Modurile A, B, C
Componenta citește date pentru prima dată la 15 secunde după pornire. Mai întâi, trimite o cerere de identificare la 300 bps. Contorul returnează rata maximă de baud pe care o poate gestiona. După aceea, rata de baud a portului serial este schimbată la valoarea furnizată de contor sau configurată prin opțiunea baud_rate_max
. Contorul transmite registre de date cu coduri OBIS asociate.
Dacă transmisia a eșuat (checksum incorect sau format invalid), componenta va încerca să citească din nou datele, dar de această dată folosind o viteză de transmisie mai lentă. Pentru fiecare încercare, viteza este redusă. Numărul de încercări și întârzieri poate fi configurat.
Dacă contorul este alimentat cu baterie, poate fi aplicată o secvență specială de trezire. Acest lucru se întâmplă doar când battery_meter
este setat la True
.
Modul D
Pentru contoarele care operează în modul D, aveți nevoie doar de un receptor IR, deoarece transmisia către un contor nu este suportată. În acest mod, contorul trimite date la fiecare câteva secunde fără nicio cerere. Ar trebui să configurați portul serial pentru a se potrivi cu formatul de transmisie al contorului. Spre deosebire de modurile A, B și C, care sunt detectate automat, Modul D trebuie activat manual prin setarea mode_d=True
în configurația platformei.
Modul E
Acest mod nu este suportat. Modul E folosește codificare binară peste legătura HDLC.
Componenta încearcă să folosească modul C pentru contoarele care raportează modul E. Acest lucru ar trebui să funcționeze dacă contorul suportă ambele moduri E și C. Pentru contoarele care suportă doar modul E, citirea nu este posibilă.
Coduri OBIS
Codul OBIS (Object Identification System) identifică diferitele citiri de la un contor. Codul constă din până la 6 sub-identificatori de grup. Codul este formatat astfel: A-B:C.D.E*F
, unde:
A
- mediu: 0=obiecte abstracte, 1=electricitate, 6=căldură, 7=gaz, 8=apăB
- canal, 0=niciun canal disponibilC
- valoare fizică, de exemplu curent, tensiune, temperatură.D
- tip de măsurare,E
- tarif, 0=total, 1=tarif #1, 2=tarif #2 și așa mai departeF
- perioadă de facturare
A
, B
și F
pot fi omise. Codurile pot folosi cifre hexazecimale, de exemplu, codul 15.8.0
ar putea fi reprezentat ca F.8.0
.
Codurile sunt standardizate, dar dispozitivele trimit un număr diferit de coduri. Pentru a obține o listă de coduri suportate de contorul dumneavoastră, activați jurnalul DEBUG
pentru componenta iec62056
și observați ieșirea jurnalului. Ieșire exemplu:
log
[10:50:12][D][iec62056.component:416]: Data: '1-0:15.8.1(00000009999.567*kWh)'
[10:50:12][D][iec62056.component:416]: Data: '1-0:15.8.2(00000000000.000*kWh)'
[10:50:12][D][iec62056.component:416]: Data: '1-0:15.8.3(00000000000.000*kWh)'
[10:50:12][D][iec62056.component:416]: Data: '1-0:15.8.4(00000000000.000*kWh)'
TIP
Codul OBIS al senzorului trebuie să se potrivească exact cu ceea ce este transmis de la un contor. Aceasta este partea înainte de prima paranteză (
.
Dacă un cod OBIS are doar două cifre, ar trebui să folosiți ghilimele în fișierul de configurare; de exemplu, "1.2"
în loc de 1.2
.
Pentru o listă de coduri OBIS pentru contoare electrice, puteți vizita:
- https://www.promotic.eu/en/pmdoc/Subsystems/Comm/PmDrivers/IEC62056_OBIS.htm
- https://onemeter.com/docs/device/obis/#index
Hardware
Pentru a comunica cu un contor, trebuie să atașați o interfață optică la portul serial. Interfața constă dintr-un LED cu infraroșu și un fototransistor. În plus, dispozitivul trebuie să fie echipat cu un magnet inelar pentru a-l menține aliniat cu contorul.
Dacă contorul operează în modul unidirecțional D, este necesar doar un fototransistor IR.
Sondă
Standardul definește dimensiunile maxime ale sondei care poate fi atașată la un contor. Trebuie să fie echipată cu un magnet, deoarece este singura modalitate de a menține sonda într-o poziție stabilă.
Configurare
Pentru a vedea datele contorului în Home Assistant, trebuie să definiți un senzor sau un senzor text cu codul OBIS corespunzător. Rețineți că contoarele suportă seturi diferite de coduri OBIS. În mod implicit, componenta nu definește niciun senzor.
Port serial
Componenta necesită autobuz UART. Serialul trebuie configurat ca 7E1 în majoritatea cazurilor. Când mode_d=True
, rata de baud trebuie setată la o valoare suportată de contor. De obicei 2400 sau 9600 bps. Pentru alte moduri (mode_d=False
), viteza de transmisie este negociată cu un contor. baud_rate
este ignorat și poate fi orice valoare.
yaml
# Example UART configuration entry
uart:
rx_pin: GPIO21
tx_pin: GPIO22
baud_rate: 9600
data_bits: 7
parity: EVEN
stop_bits: 1
WARNING
Pentru ESP8266 este recomandat să folosiți UART hardware. UART software nu poate gestiona transmisii mai rapide de 4800 bps.
Este posibil să fie necesar să dezactivați jurnalizarea dacă sonda optică este conectată la portul serial utilizat de componenta de jurnalizare.
yaml
# Setați baud_rate la 0 pentru a dezactiva jurnalizarea prin UART.
logger:
baud_rate: 0
Platformă
Pentru a utiliza componenta, trebuie să definiți secțiunea platformei iec62056
în fișierul de configurare. Aceasta constă în setări de bază.
yaml
# Example platform configuration entry for bidirectional communication
iec62056:
update_interval: 60s
baud_rate_max: 9600
battery_meter: False
yaml
# Exemplu de configurare a platformei pentru comunicare unidirecțională
iec62056:
mode_d: True
Variabile de configurare
- update_interval (Opțional, Time): Intervalul pentru a citi datele de la un contor. Implicit este
15min
.never
dezactivează actualizările. În acest caz, ar trebui folosit un comutator pentru a declanșa citirea. Pentru a obține citiri continue, utilizați o valoare mică, cum ar fi 1s. - baud_rate_max (Opțional, int): Limitează viteza maximă de transmisie la valoarea specificată. Implicit este setat la
9600
, deoarece oferă o conexiune stabilă. Pentru a-l dezactiva, setați-l la0
. În acest fel, puteți utiliza rata maximă posibilă de19200
dacă contorul o suportă. Pentru ESP8266 utilizați UART software setat la4800
sau mai mic. - receive_timeout (Opțional, Time): Timpul maxim în care componenta așteaptă date de la un contor înainte de a raporta o eroare de transmisie. Implicit este
3s
. - battery_meter (Opțional, boolean): Setați la true dacă un contor este alimentat de baterie. În acest fel, va fi folosită o secvență specială de pornire.
- retry_delay (Opțional, Time): În caz de eșec al transmisiei, timpul de așteptare înainte de a încerca din nou transmisia. Implicit este
15s
. - retry_counter_max (Opțional, int): În caz de eșec al transmisiei, numărul maxim de încercări. Implicit este
2
. - uart_id (Opțional, ID): Specificați manual ID-ul Componentului UART dacă doriți să utilizați mai multe magistrale UART.
- mode_d (Opțional, boolean): Setați la
True
dacă un contor trimite date la fiecare câteva secunde. Aceasta forțează componenta să opereze în modul D. În acest mod, datele nu sunt niciodată transmise către un contor. Dacă este setat, orice alte setări, cu excepțiareceive_timeout
, sunt ignorate. Nu uitați să setați rata de baud UART pe care o folosește contorul. Dacă nu sunteți sigur, încercați2400 7E1
sau9600 7E1
.
WARNING
Contoarele alimentate cu baterii limitează de obicei numărul de citiri pentru a conserva energia, de exemplu, la 4 citiri pe zi. Dacă un contor nu impune această limită, citirile frecvente pot reduce semnificativ durata de viață a bateriei.
Senzor
Senzorul raportează prima valoare dintre paranteze din înregistrare. Pentru următoarele date
log
1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)
valoarea senzorului este 6000.385
. Pentru a obține a doua valoare (data/ora în acest exemplu) folosiți un Senzor Text.
Senzorul suportă doar valori zecimale. Dacă înregistrarea conține date în alt format, trebuie să folosiți Senzor Text și opțional lambda pentru a le converti într-un număr.
yaml
# Example sensor configuration entries
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
- platform: iec62056
name: Instantaneous current in phase L1
obis: 1-0:31.7.0
unit_of_measurement: A
accuracy_decimals: 2
device_class: current
state_class: measurement
- platform: iec62056
name: Instantaneous voltage in phase L1
obis: 1-0:32.7.0
unit_of_measurement: V
accuracy_decimals: 1
device_class: voltage
state_class: measurement
- platform: iec62056
name: Absolute active instantaneous power
obis: 1-0:15.7.0
unit_of_measurement: kW
accuracy_decimals: 3
device_class: energy
state_class: measurement
Variabile de configurare
- obis (Obligatoriu): Codul OBIS.
- Toate celelalte opțiuni de la Senzor.
Senzor Text
Senzorul text oferă datele citite sub formă de text. Spre deosebire de Senzor, puteți selecta ce parte a citirii este raportată și chiar să trimiteți întregul înregistrare de date înapoi la Home Assistant.
yaml
# Sample text sensor configuration
# Data record:
# 1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)
text_sensor:
- platform: iec62056
obis: 1-0:15.6.0
group: 2 # "2000-01-01 20:10:30"
name: Date time
- platform: iec62056
obis: 1-0:15.6.0
group: 1 # "00000006000.385"
name: Value
- platform: iec62056
obis: 1-0:15.6.0
group: 0 # "1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)"
name: The entire record
Variabile de configurare
- obis (Obligatoriu): Codul OBIS. Puteți defini mai mulți senzori text cu același OBIS, dar cu un grup diferit.
- group (Opțional, int): Grupul de valori,
0
,1
sau2
. Implicit este1
. Dacă este setat la0
, întregul înregistrare de date este raportat, inclusiv codul OBIS.1
raportează prima valoare,2
a doua. - Toate celelalte opțiuni sunt de la Senzor Text.
Conversia datelor
Dacă un contor raportează date ca o valoare non-zecimală, le puteți converti automat folosind un senzor șablon și lambda. Să presupunem că contorul trimite o înregistrare ca următoarea cu date codificate hex:
text
0-0:96.8.0*255(ABCDEF00)
Mai întâi, creați un senzor șablon care va publica datele ca o valoare zecimală.
yaml
sensor:
- platform: template
id: hex_to_dec_sensor
name: "Converted hexadecimal number"
Acum creați un senzor text care va primi datele ca un șir, le va converti în zecimal și le va publica.
De fiecare dată când senzorul de text primește o valoare nouă, o convertește într-un număr zecimal și o publică folosind senzorul cu id-ul hex_to_dec_sensor
. Flag-ul internal
împiedică senzorul să fie vizibil în Home Assistant. În jurnal ar trebui să vezi:
Aceleași rezultate pot fi obținute folosind lambdas în Home Assistant. În acest scenariu, senzorul de text publică valoarea hexazecimală, iar senzorul de șablon din Home Assistant face conversia.
Comutator
Comutatorul oferă abilitatea de a declanșa citirea la cerere. Când starea este schimbată de la OFF
la ON
, componenta inițiază transmiterea datelor de la un contor. Poți folosi comutatorul în automatizări.
Variabilele de configurare din Comutator pot fi utilizate.
Nu poți declanșa citirea în modul D.
Senzor binar
Setat pe ON
când începe transmiterea către un contor. OFF
când transmiterea este finalizată.
Poți folosi toate variabilele de configurare din Senzor Binar.
Depanare
- Asigură-te că sonda este aliniată corect cu elementele optice de pe contor.
- Contoarele sunt de obicei instalate în zone nu foarte curate. Poate fi necesar să îndepărtezi praful de pe interfața optică din când în când.
- Dacă întâmpini erori de transmisie și de checksum BCC, scade rata de baud folosind setarea
baud_rate_max
. - Dacă dispozitivul tău gestionează mai mulți senzori care petrec mult timp în bucla de actualizare, poate fi necesar să mărești dimensiunea bufferului portului serial. Mai ales dacă observi probleme de transmisie când senzori suplimentari sunt activați, dar nu când sunt dezactivați.