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.
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=vodaB
- kanál, 0=žiadny dostupný kanálC
- fyzická hodnota, napríklad prúd, napätie, teplota.D
- typ merania,E
- tarifa, 0=celková, 1=tarifa č.1, 2=tarifa č.2 a tak ďalejF
- 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ť:
- https://www.promotic.eu/en/pmdoc/Subsystems/Comm/PmDrivers/IEC62056_OBIS.htm
- https://onemeter.com/docs/device/obis/#index
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.
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 na0
. 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é na4800
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 okremreceive_timeout
sú ignorované. Nezabudnite nastaviť prenosovú rýchlosť UART, ktorú merač používa. Ak si nie ste istí, skúste2400 7E1
alebo9600 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
alebo2
. Predvolene1
. Ak je nastavené na0
, 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é.