ESPHome IEC 62056-21 Komponenta
IEC 62056-21 je mednarodni standard za protokol za izmenjavo podatkov z merilniki komunalnih storitev. Večinoma za elektriko, pa tudi za vodo, toploto in druge merilnike. Prej je bil znan kot IEC 61107.
Komponenta iec62056
vam omogoča branje podatkov iz katerega koli združljivega merilnika. Zahteva serijski port in zunanji optični vmesnik. Izmenjava podatkov uporablja infrardeči optični kanal. Združljivi merilniki so opremljeni z značilno okroglo kovinsko ploščo z dvema opto-elementoma znotraj. Protokol bi se lahko uporabljal z drugimi transportnimi plastmi, npr. tokovno zanko, vendar je bila komponenta testirana le z optičnim vmesnikom.
Podpira 4 načine IEC 62056-21: A, B, C in D. Način E ni podprt.
Komponenta ne podpira programiranja. Nastavitev parametrov konfiguracije merilnika zahteva skrivno geslo, kar onemogoča uporabo običajnim uporabnikom.
Obstajajo tudi drugi standardi pametnih merilnikov, ki uporabljajo isti optični vmesnik. Čeprav si delijo nekaj skupnih konceptov, niso združljivi.
Namestitev
Dodajte naslednjo kodo v ESPHome YAML konfiguracijsko datoteko za referenco zunanje komponente.
yaml
external_components:
# IEC62056 komponenta
- source: github://aquaticus/esphome-iec62056
Teorija delovanja
Komponenta deluje v dveh glavnih načinih:
- Dvosmerna komunikacija z merilnikom. V tem načinu merilnik pošlje podatke le, ko je to zahtevano. Zahteva IR sprejemnik in oddajnik. To je način A, B in C po IEC 62056-21.
- Enosmerna komunikacija, kjer merilnik občasno pošlje podatke sondi. Zahteva le IR sprejemnik. V terminologiji IEC 62056-21 je to način D.
Načini A, B, C
Komponenta prvič prebere podatke 15 sekund po zagonu. Najprej pošlje zahtevo za identifikacijo pri 300 bps. Merilnik vrne največjo hitrost prenosa, ki jo lahko obvlada. Nato se hitrost prenosa serijskega porta spremeni na vrednost, ki jo zagotovi merilnik ali je konfigurirana z možnostjo baud_rate_max
. Merilnik prenaša registre podatkov z ustreznimi OBIS kodami.
Če prenos ni uspel (slab kontrolni vsota ali neveljavna oblika), bo komponenta poskusila znova prebrati podatke, vendar tokrat z nižjo hitrostjo prenosa. Pri vsakem ponovnem poskusu se hitrost zmanjša. Število ponovitev in zamikov je mogoče nastaviti.
Če je števec napajan z baterijo, se lahko uporabi posebna sekvenca za prebujanje. To se zgodi le, ko je battery_meter
nastavljeno na True
.
Način D
Za števce, ki delujejo v načinu D, potrebujete le IR sprejemnik, saj prenos do števca ni podprt. V tem načinu števec pošilja podatke vsakih nekaj sekund brez kakršne koli zahteve. Serijski vmesnik morate nastaviti tako, da ustreza formatu prenosa števca. Za razliko od načinov A, B in C, ki se zaznajo samodejno, je treba način D omogočiti ročno z nastavitvijo mode_d=True
v konfiguraciji platforme.
Način E
Ta način ni podprt. Način E uporablja binarno kodiranje prek HDLC povezave.
Komponenta poskuša uporabiti način C za števce, ki poročajo o načinu E. To bi moralo delovati, če števec podpira oba načina, E in C. Za števce, ki podpirajo le način E, branje ni mogoče.
OBIS kode
OBIS (Object Identification System) koda identificira različna odčitavanja iz števca. Koda je sestavljena iz do 6 skupinskih pod-identifikatorjev. Koda je oblikovana tako: A-B:C.D.E*F
, kjer:
A
- medij: 0=abstraktni objekti, 1=elektrika, 6=toplota, 7=plin, 8=vodaB
- kanal, 0=kanal ni na voljoC
- fizična vrednost, na primer tok, napetost, temperatura.D
- vrsta merjenja,E
- tarifa, 0=skupaj, 1=tarifa #1, 2=tarifa #2 in tako naprejF
- obračunsko obdobje
A
, B
in F
se lahko izpustijo. Kode lahko uporabljajo šestnajstiške številke, na primer, koda 15.8.0
bi lahko bila predstavljena kot F.8.0
.
Kode so standardizirane, vendar naprave pošiljajo različno število kod. Če želite dobiti seznam kod, ki jih podpira vaš števec, omogočite DEBUG
dnevnik za komponento iec62056
in opazujte izhod dnevnika. Primer izhoda:
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
OBIS koda senzorja se mora natančno ujemati s tistim, kar je poslano iz števca. To je del pred prvim oklepajem (
.
Če je OBIS koda le dve števki, morate v konfiguracijski datoteki uporabiti narekovaje; na primer, "1.2"
namesto samo 1.2
.
Za seznam OBIS kod za električne števce lahko obiščete:
- https://www.promotic.eu/en/pmdoc/Subsystems/Comm/PmDrivers/IEC62056_OBIS.htm
- https://onemeter.com/docs/device/obis/#index
Strojna oprema
Za komunikacijo s števcem morate na serijski port priključiti optični vmesnik. Vmesnik je sestavljen iz infrardeče LED diode in fototranzistorja. Poleg tega mora biti naprava opremljena z obročastim magnetom, da ostane poravnana s števcem.
Če števec deluje v enosmernem načinu D, je potreben le IR fototranzistor.
Sonda
Standard določa največje dimenzije sonde, ki jo je mogoče pritrditi na števec. Opremljena mora biti z magnetom, saj je to edini način, da sonda ostane v stabilnem položaju.
Konfiguracija
Da bi videli podatke števca v Home Assistant, morate definirati senzor ali tekstovni senzor z ustrezno OBIS kodo. Upoštevajte, da števci podpirajo različne nize OBIS kod. Privzeto komponenta ne definira nobenih senzorjev.
Serijski port
Komponenta zahteva UART vodilo. Serijski port mora biti konfiguriran kot 7E1 v večini primerov. Ko je mode_d=True
, mora biti hitrost prenosa nastavljena na vrednost, ki jo podpira števec. Običajno 2400 ali 9600 bps. Za druge načine (mode_d=False
) se hitrost prenosa dogovori s števcem. baud_rate
se ignorira in je lahko katera koli vrednost.
yaml
# Example UART configuration entry
uart:
rx_pin: GPIO21
tx_pin: GPIO22
baud_rate: 9600
data_bits: 7
parity: EVEN
stop_bits: 1
WARNING
Za ESP8266 je zelo priporočljivo uporabljati strojni UART. Programska oprema UART ne more obdelati prenosov hitrejših od 4800 bps.
Morda boste morali onemogočiti beleženje, če je optična sonda povezana na serijski port, ki ga uporablja komponenta za beleženje.
yaml
# Nastavite baud_rate na 0, da onemogočite beleženje prek UART.
logger:
baud_rate: 0
Platforma
Za uporabo komponente morate v konfiguracijski datoteki definirati razdelek platforme iec62056
. Sestavljen je iz osnovnih nastavitev.
Konfiguracijske spremenljivke
- update_interval (Neobvezno, Time): Interval za branje podatkov iz števca. Privzeto je
15min
.nikoli
onemogoči posodobitve. V tem primeru je treba uporabiti stikalo za sprožitev branja. Za neprekinjeno branje uporabite majhno vrednost, kot je 1s. - baud_rate_max (Neobvezno, int): Omeji največjo hitrost prenosa na določeno vrednost. Privzeto je nastavljeno na
9600
, saj zagotavlja stabilno povezavo. Če želite onemogočiti, nastavite na0
. Tako lahko uporabite največjo možno hitrost prenosa19200
, če števec to podpira. Za ESP8266 uporabite programski UART nastavljen na4800
ali manj. - receive_timeout (Neobvezno, Time): Najdaljši čas, ki ga komponenta čaka na podatke iz števca, preden poroča o napaki prenosa. Privzeto je
3s
. - battery_meter (Neobvezno, boolean): Nastavite na true, če je števec napajan z baterijo. Tako bo uporabljen poseben postopek vklopa.
- retry_delay (Neobvezno, Time): V primeru napake pri prenosu, čas čakanja pred ponovnim poskusom prenosa. Privzeto je
15s
. - retry_counter_max (Neobvezno, int): V primeru napake pri prenosu, največje število ponovitev. Privzeto je
2
. - uart_id (Neobvezno, ID: Ročno določite ID UART Komponente, če želite uporabiti več UART vodil.
- mode_d (Neobvezno, boolean): Nastavite na
True
, če števec pošilja podatke vsakih nekaj sekund. To prisili komponento, da deluje v načinu D. V tem načinu se podatki nikoli ne prenašajo na števec. Če je nastavljeno, se vse druge nastavitve razenreceive_timeout
ignorirajo. Ne pozabite nastaviti hitrosti prenosa UART, ki jo števec uporablja. Če niste prepričani, poskusite2400 7E1
ali9600 7E1
.
WARNING
Števci na baterijski pogon običajno omejujejo število odčitkov, da ohranijo energijo, npr. na 4 odčitke na dan. Če števec ne nalaga omejitve, lahko pogosti odčitki znatno zmanjšajo življenjsko dobo baterije.
Senzor
Senzor poroča o prvi vrednosti med oklepaji iz zapisa. Za naslednje podatke
log
1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)
je vrednost senzorja 6000.385
. Za pridobitev druge vrednosti (datum/čas v tem primeru) uporabite Besedilni Senzor.
Senzor podpira samo decimalne vrednosti. Če zapis vsebuje podatke v katerem koli drugem formatu, morate uporabiti Besedilni Senzor in po potrebi lambda za pretvorbo v številko.
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
Konfiguracijske spremenljivke
- obis (Obvezno): OBIS koda.
- Vse druge možnosti iz Senzor.
Besedilni Senzor
Besedilni senzor zagotavlja podatke odčitka kot besedilo. V nasprotju s Senzorjem lahko izberete, kateri del odčitka se poroča in celo pošljete celoten zapis podatkov nazaj v 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
Konfiguracijske spremenljivke
- obis (Obvezno): OBIS koda. Lahko definirate več besedilnih senzorjev z isto OBIS kodo, vendar z drugo skupino.
- group (Neobvezno, int): Skupina vrednosti,
0
,1
ali2
. Privzeto je1
. Če je nastavljeno na0
, se poroča celoten zapis podatkov, vključno z OBIS kodo.1
poroča prvo vrednost,2
drugo. - Vse druge možnosti so iz Besedilni Senzor.
Pretvorba podatkov
Če števec poroča podatke kot ne-decimalno vrednost, jih lahko samodejno pretvorite z uporabo predloge senzorja in lambda. Predpostavimo, da števec pošlje zapis, kot je naslednji, s podatki kodiranimi v šestnajstiškem sistemu:
text
0-0:96.8.0*255(ABCDEF00)
Najprej ustvarite predlogo senzorja, ki bo objavila podatke kot decimalno vrednost.
yaml
sensor:
- platform: template
id: hex_to_dec_sensor
name: "Converted hexadecimal number"
Zdaj ustvarite besedilni senzor, ki bo prejel podatke kot niz, jih pretvoril v decimalno vrednost in objavil.
yaml
text_sensor:
- platform: iec62056
id: hex_sensor
obis: 0-0:96.8.0*255
name: Hex content
internal: True
on_value:
lambda: |-
std::string hex_str = id(hex_sensor).state;
uint32_t dec=std::stoul(hex_str, nullptr, 16);
ESP_LOGI("iec62056.component", "Converted HEX '%s' to %u decimal", hex_str.c_str(), dec);
id(hex_to_dec_sensor).publish_state((float)dec);
Vsakič, ko besedilni senzor prejme novo vrednost, jo pretvori v decimalno in objavi s senzorjem z ID-jem hex_to_dec_sensor
. Zastavica internal
preprečuje, da bi bil senzor viden v Home Assistant. V dnevniku bi morali videti:
log
[I][iec62056.component:127]: Pretvorjen HEX 'ABCDEF00' v 2882400000 decimalno
Enake rezultate je mogoče doseči z uporabo lambd v Home Assistant. V tem scenariju besedilni senzor objavi šestnajstiško vrednost, senzor predloge Home Assistant pa izvede pretvorbo.
Stikalo
Stikalo omogoča sprožitev odčitavanja na zahtevo. Ko se stanje spremeni iz OFF
v ON
, komponenta začne prenos podatkov iz števca. Stikalo lahko uporabite v avtomatizaciji.
Uporabite lahko spremenljivke konfiguracije iz Stikalo.
yaml
# Sample switch configuration
switch:
- platform: iec62056
name: 'Readout Trigger'
Ne morete sprožiti odčitavanja v načinu D.
Binarni senzor
Nastavi se na ON
, ko se začne prenos na števec. OFF
, ko je prenos zaključen.
Uporabite lahko vse spremenljivke konfiguracije iz Binarni senzor.
yaml
# Sample automation to turn LED on when data read from a meter
switch:
- platform: gpio
pin: GPIO2
name: Internal LED
id: led_switch
internal: True
binary_sensor:
- platform: iec62056
id: meter_status
name: Meter Connection Status
on_press:
then:
- switch.turn_on: led_switch
on_release:
then:
- switch.turn_off: led_switch
Odpravljanje težav
- Prepričajte se, da je sonda pravilno poravnana z optičnimi elementi na števcu.
- Števci so običajno nameščeni v ne zelo čistih območjih. Morda boste morali občasno odstraniti prah z optičnega vmesnika.
- Če naletite na napake pri prenosu in preverjanju BCC, zmanjšajte hitrost prenosa z nastavitvijo
baud_rate_max
. - Če vaša naprava upravlja več senzorjev, ki porabijo veliko časa v zanki posodobitev, boste morda morali povečati velikost medpomnilnika serijskega vmesnika. Še posebej, če opazite težave s prenosom, ko so dodatni senzorji omogočeni, vendar ne, ko so onemogočeni.