Skip to content

ESPHome IEC 62056-21 Komponent

IEC 62056-21 je medzinárodná norma pre protokol na výmenu dát s meracími prístrojmi. Väčšinou pre elektrinu, ale aj vodu, teplo a iné merače. Predtým bola známa ako IEC 61107.

Komponent iec62056 vám umožňuje čítať dáta z akéhokoľvek kompatibilného merača. Vyžaduje sériový port a externé optické rozhranie. Výmena dát prebieha cez infračervený optický kanál. Kompatibilné merače sú vybavené charakteristickou okrúhlou kovovou platňou s dvoma opto-elementmi vo vnútri. Protokol by sa mohol použiť s inými transportnými vrstvami, napr. prúdová slučka, ale komponent bol testovaný iba s optickým rozhraním.

Podporuje 4 režimy IEC 62056-21: A, B, C a D. Režim E nie je podporovaný.

Komponent nepodporuje programovanie. Nastavenie konfiguračných parametrov merača vyžaduje tajné heslo, čo znemožňuje jeho použitie bežnými používateľmi.

Rozhranie na merači. Kovový krúžok pre magnet a dva optické prvky vo vnútri.

Existujú aj iné štandardy inteligentných meračov, ktoré používajú rovnaké optické rozhranie. Aj keď zdieľajú niektoré spoločné koncepty, nie sú kompatibilné.

Inštalácia

Pridajte nasledujúci kód do konfiguračného súboru ESPHome YAML na referenciu externého komponentu.

yaml
external_components:
    # IEC62056 komponent
    - source: github://aquaticus/esphome-iec62056

Teória prevádzky

Komponent pracuje v 2 hlavných režimoch:

  • Obojsmerná komunikácia s meračom. V tomto režime merač posiela dáta iba na požiadanie. Vyžaduje IR prijímač a vysielač. Toto je režim A, B a C podľa IEC 62056-21.
  • Jednosmerná komunikácia, kde merač posiela dáta do sondy z času na čas. Vyžaduje iba IR prijímač. V terminológii IEC 62056-21 je to režim D.

Režimy A, B, C

Komponent číta dáta prvýkrát 15 sekúnd po spustení. Najprv odošle žiadosť o identifikáciu pri 300 bps. Merač vráti maximálnu prenosovú rýchlosť, ktorú dokáže zvládnuť. Následne sa prenosová rýchlosť sériového portu zmení na hodnotu poskytnutú meračom alebo nakonfigurovanú pomocou možnosti baud_rate_max. Merač prenáša dátové registre s pridruženými OBIS kódmi.

Ak prenos zlyhal (zlý kontrolný súčet alebo neplatný formát), komponent sa pokúsi znova prečítať údaje, ale tentoraz s pomalšou prenosovou rýchlosťou. Pri každom opakovaní sa rýchlosť znižuje. Počet opakovaní a oneskorení je možné konfigurovať.

Ak je merač napájaný z batérie, môže sa použiť špeciálna sekvencia prebudenia. Toto sa stane iba vtedy, keď je battery_meter nastavený na True.

Režim D

Pre merače pracujúce v režime D potrebujete iba IR prijímač, pretože prenos do merača nie je podporovaný. V tomto režime merač odosiela údaje každých niekoľko sekúnd bez akejkoľvek požiadavky. Mali by ste nakonfigurovať sériový port tak, aby zodpovedal formátu prenosu merača. Na rozdiel od režimov A, B a C, ktoré sú detekované automaticky, musí byť režim D povolený manuálne nastavením mode_d=True v konfigurácii platformy.

Režim E

Tento režim nie je podporovaný. Režim E používa binárne kódovanie cez HDLC linku.

Komponent sa pokúša použiť režim C pre merače hlásajúce režim E. Toto by malo fungovať, ak merač podporuje oba režimy E a C. Pre merače podporujúce iba režim E nie je možné čítanie.

OBIS kódy

OBIS (Object Identification System) kód identifikuje rôzne odčítania z merača. Kód pozostáva až zo 6 skupinových podidentifikátorov. Kód je formátovaný takto: A-B:C.D.E*F, kde:

  • A - médium: 0=abstraktné objekty, 1=elektrina, 6=teplo, 7=plyn, 8=voda
  • B - kanál, 0=žiadny dostupný kanál
  • C - fyzická hodnota, napríklad prúd, napätie, teplota.
  • D - typ merania,
  • E - tarifa, 0=celková, 1=tarifa č.1, 2=tarifa č.2 a tak ďalej
  • F - fakturačné obdobie

A, B a F môžu byť vynechané. Kódy môžu používať hexadecimálne číslice, napríklad kód 15.8.0 by mohol byť reprezentovaný ako F.8.0.

Kódy sú štandardizované, ale zariadenia odosielajú rôzny počet kódov. Ak chcete získať zoznam kódov podporovaných vaším meračom, povoľte DEBUG log pre komponent iec62056 a sledujte výstup logu. Ukážkový výstup:

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 kód senzora musí presne zodpovedať tomu, čo je prenášané z merača. Toto je časť pred prvou zátvorkou (.

Ak je OBIS kód iba dvojciferný, mali by ste v konfiguračnom súbore použiť úvodzovky; napríklad "1.2" namiesto len 1.2.

Pre zoznam OBIS kódov pre elektrické merače môžete navštíviť:

Hardvér

Na komunikáciu s meračom musíte pripojiť optické rozhranie k sériovému portu. Rozhranie pozostáva z infračerveného LED a fototranzistora. Okrem toho musí byť zariadenie vybavené kruhovým magnetom, aby zostalo zarovnané s meračom.

Ak merač pracuje v jednosmernom režime D, je potrebný iba IR fototranzistor.

Sonda

Štandard definuje maximálne rozmery sondy, ktorú je možné pripojiť k meraču. Musí byť vybavená magnetom, pretože je to jediný spôsob, ako udržať sondu v stabilnej polohe.

Rozmery optickej sondy

Konfigurácia

Aby ste videli údaje z merača v Home Assistant, musíte definovať senzor alebo textový senzor s príslušným OBIS kódom. Upozorňujeme, že merače podporujú rôzne sady OBIS kódov. Komponent predvolene nedefinuje žiadne senzory.

Sériový port

Komponent vyžaduje UART bus. Sériový port musí byť vo väčšine prípadov nakonfigurovaný ako 7E1. Keď je mode_d=True, rýchlosť prenosu musí byť nastavená na hodnotu podporovanú meračom. Zvyčajne 2400 alebo 9600 bps. Pre iné režimy (mode_d=False) je rýchlosť prenosu dohodnutá s meračom. baud_rate je ignorovaný a môže byť akákoľvek hodnota.

yaml
# Example UART configuration entry
uart:
    rx_pin: GPIO21
    tx_pin: GPIO22
    baud_rate: 9600
    data_bits: 7
    parity: EVEN
    stop_bits: 1

WARNING

Pre ESP8266 sa dôrazne odporúča používať hardvérový UART. Softvérový UART nedokáže spracovať prenosy rýchlejšie ako 4800 bps.

Možno budete musieť vypnúť protokolovanie, ak je optická sonda pripojená k sériovému portu používanému komponentom logger.

yaml
# Nastavte baud_rate na 0, aby ste zakázali protokolovanie cez UART.
logger:
    baud_rate: 0

Platforma

Na použitie komponentu musíte definovať sekciu platformy iec62056 v konfiguračnom súbore. Skladá sa zo základných nastavení.

yaml
# Example platform configuration entry for bidirectional communication
iec62056:
  update_interval: 60s
  baud_rate_max: 9600
  battery_meter: False
yaml
# Príklad konfigurácie platformy pre jednosmernú komunikáciu
iec62056:
  mode_d: True

Konfiguračné premenné

  • update_interval (Voliteľné, Time): Interval na čítanie údajov z merača. Predvolene je nastavený na 15min. never zakáže aktualizácie. V takom prípade by sa mal použiť prepínač na spustenie čítania. Na získanie nepretržitých údajov použite malú hodnotu ako 1s.
  • baud_rate_max (Voliteľné, int): Obmedzuje maximálnu prenosovú rýchlosť na zadanú hodnotu. Predvolene je nastavená na 9600, pretože poskytuje stabilné pripojenie. Na deaktiváciu nastavte na 0. Týmto spôsobom môžete použiť maximálnu možnú prenosovú rýchlosť 19200, ak to merač podporuje. Pre ESP8266 použite softvérové UART nastavené na 4800 alebo nižšie.
  • receive_timeout (Voliteľné, Time): Maximálny čas, ktorý komponent čaká na údaje z merača pred nahlásením chyby prenosu. Predvolene je nastavený na 3s.
  • battery_meter (Voliteľné, boolean): Nastavte na true, ak je merač napájaný z batérie. Týmto spôsobom sa použije špeciálna sekvencia zapnutia.
  • retry_delay (Voliteľné, Time): V prípade zlyhania prenosu, čas čakania pred opätovným pokusom o prenos. Predvolene je nastavený na 15s.
  • retry_counter_max (Voliteľné, int): V prípade zlyhania prenosu, maximálny počet opakovaní. Predvolene je nastavený na 2.
  • uart_id (Voliteľné, ID: Ručne zadajte ID UART komponentu, ak chcete použiť viacero UART zberníc.
  • mode_d (Voliteľné, boolean): Nastavte na True, ak merač posiela údaje každých niekoľko sekúnd. Týmto sa komponent núti pracovať v režime D. V tomto režime sa údaje nikdy neprenášajú do merača. Ak je nastavené, všetky ostatné nastavenia okrem receive_timeout sú ignorované. Nezabudnite nastaviť prenosovú rýchlosť UART, ktorú merač používa. Ak si nie ste istí, skúste 2400 7E1 alebo 9600 7E1.

WARNING

Merače napájané z batérie zvyčajne obmedzujú počet odčítaní na zachovanie energie, napríklad na 4 odčítania denne. Ak merač neukladá obmedzenie, časté odčítania môžu výrazne znížiť životnosť batérie.

Senzor

Senzor hlási prvú hodnotu v zátvorkách zo záznamu. Pre nasledujúce údaje

log
1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)

je hodnota senzora 6000.385. Ak chcete získať druhú hodnotu (dátum/čas v tomto príklade), použite Textový senzor.

Senzor podporuje iba desatinné hodnoty. Ak záznam obsahuje údaje v inom formáte, musíte použiť Textový senzor a prípadne lambda na ich konverziu na číslo.

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

Konfiguračné premenné

  • obis (Povinné): OBIS kód.
  • Všetky ostatné možnosti z Senzor.

Textový senzor

Textový senzor poskytuje údaje ako text. Na rozdiel od senzora môžete vybrať, ktorá časť odčítania sa hlási, a dokonca poslať celý záznam údajov späť do 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

Konfiguračné premenné

  • obis (Povinné): OBIS kód. Môžete definovať viacero textových senzorov s rovnakým OBIS, ale inou skupinou.
  • group (Voliteľné, int): Skupina hodnôt, 0, 1 alebo 2. Predvolene 1. Ak je nastavené na 0, hlási sa celý záznam údajov vrátane OBIS kódu. 1 hlási prvú hodnotu, 2 druhú.
  • Všetky ostatné možnosti sú z Textový senzor.

Konverzia údajov

Ak merač hlási údaje ako nedesatinnú hodnotu, môžete ich automaticky konvertovať pomocou šablónového senzora a lambda. Predpokladajme, že merač posiela záznam ako nasledujúci s hexadecimálne kódovanými údajmi:

text
0-0:96.8.0*255(ABCDEF00)

Najprv vytvorte šablónový senzor, ktorý bude publikovať údaje ako desatinnú hodnotu.

yaml
sensor:
  - platform: template
    id: hex_to_dec_sensor
    name: "Converted hexadecimal number"

Teraz vytvorte textový senzor, ktorý prijme údaje ako reťazec, konvertuje ich na desatinnú hodnotu a publikuje.

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);

Zakaždým, keď textový senzor prijme novú hodnotu, prevedie ju na desiatkovú a zverejní ju pomocou senzora s id hex_to_dec_sensor. Príznak internal zabraňuje senzoru byť viditeľným v Home Assistant. V logu by ste mali vidieť:

log
[I][iec62056.component:127]: Converted HEX 'ABCDEF00' to 2882400000 decimal

Rovnaké výsledky je možné dosiahnuť pomocou Home Assistant lambdas. V tomto scenári textový senzor zverejňuje hexadecimálnu hodnotu a Home Assistant šablónový senzor vykonáva konverziu.

Prepínač

Prepínač poskytuje možnosť spustiť čítanie na požiadanie. Keď sa stav zmení z OFF na ON, komponent iniciuje prenos dát z merača. Prepínač môžete použiť v automatizácii.

Konfiguračné premenné z Prepínač môžu byť použité.

yaml
# Sample switch configuration
switch:
  - platform: iec62056
    name: 'Readout Trigger'

Nemôžete spustiť čítanie v režime D.

Binárny senzor

Nastavený na ON, keď začína prenos do merača. OFF, keď je prenos dokončený.

Môžete použiť všetky konfiguračné premenné z Binárny 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

Riešenie problémov

  • Uistite sa, že sonda je správne zarovnaná s optickými prvkami na merači.
  • Merače sú zvyčajne inštalované v nie veľmi čistých oblastiach. Možno budete musieť z času na čas odstrániť prach z optického rozhrania.
  • Ak narazíte na chyby prenosu a BCC kontrolného súčtu, znížte rýchlosť prenosu pomocou nastavenia baud_rate_max.
  • Ak vaše zariadenie spracováva viacero senzorov, ktoré trávia veľa času v aktualizačnej slučke, možno budete musieť zvýšiť veľkosť vyrovnávacej pamäte sériového portu. Najmä ak zaznamenáte problémy s prenosom, keď sú povolené ďalšie senzory, ale nie keď sú zakázané.

Pozri tiež