Skip to content

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.

Vmesnik na merilniku. Kovinski obroč za magnet in dva optična elementa znotraj.

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=voda
  • B - kanal, 0=kanal ni na voljo
  • C - fizična vrednost, na primer tok, napetost, temperatura.
  • D - vrsta merjenja,
  • E - tarifa, 0=skupaj, 1=tarifa #1, 2=tarifa #2 in tako naprej
  • F - 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:

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.

Dimenzije optične sonde

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 na 0. Tako lahko uporabite največjo možno hitrost prenosa 19200, če števec to podpira. Za ESP8266 uporabite programski UART nastavljen na 4800 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 razen receive_timeout ignorirajo. Ne pozabite nastaviti hitrosti prenosa UART, ki jo števec uporablja. Če niste prepričani, poskusite 2400 7E1 ali 9600 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 ali 2. Privzeto je 1. Če je nastavljeno na 0, 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.

Glej tudi