ESPHome Komponent IEC 62056-21
IEC 62056-21 huwa standard internazzjonali għal protokoll biex jiskambja data ma' meters tal-utilità. L-aktar għall-elettriku imma wkoll għall-ilma, termali u meters oħra. Kien magħruf qabel bħala IEC 61107.
Il-komponent iec62056
jippermettilek taqra data minn kwalunkwe meter kompatibbli. Jeħtieġ port serjali u interface ottiku estern. L-iskambju tad-data juża kanal ottiku infra-aħmar. Meters kompatibbli huma mgħammra b'platt tal-metall tond karatteristiku b'żewġ elementi opto ġewwa. Il-protokoll jista' jintuża ma' saffi oħra ta' trasport, eż. ċirkwit kurrenti imma l-komponent ġie ttestjat biss bl-interface ottiku.
Jappoġġja 4 modi ta' IEC 62056-21: A, B, C, u D. Il-mod E mhuwiex appoġġjat.
Il-komponent ma jappoġġjax il-programmazzjoni. L-issettjar tal-parametri tal-konfigurazzjoni tal-meter jeħtieġ password sigrieta li tagħmilha impossibbli li tintuża minn utenti ordinarji.
Hemm standards oħra ta' meters intelliġenti li jużaw l-istess interface ottiku. Għalkemm jaqsmu xi kunċetti komuni mhumiex kompatibbli.
Installazzjoni
Żid il-kodiċi li ġej fil-fajl tal-konfigurazzjoni YAML ta' ESPHome biex tirreferi għall-komponent estern.
yaml
external_components:
# Komponent IEC62056
- source: github://aquaticus/esphome-iec62056
Teorija tal-operazzjoni
Il-komponent jopera f'2 modi ewlenin:
- Komunikazzjoni Bidirezzjonali ma' meter. F'dan il-mod, meter jibgħat data biss meta mitlub. Jeħtieġ riċevitur IR u trasmettitur. Dan huwa mod A, B u C skont IEC 62056-21.
- Komunikazzjoni Unidirezzjonali, fejn meter jibgħat data lil sonda minn żmien għal żmien. Jeħtieġ biss riċevitur IR. Fit-terminoloġija ta' IEC 62056-21 huwa mod D.
Modi A, B, C
Il-komponent jaqra data għall-ewwel darba 15-il sekonda wara l-bidu. L-ewwel, jibgħat talba ta' identifikazzjoni f'300 bps. Il-meter jirritorna ir-rata massima ta' baud li jista' jimmaniġġja. Wara dan, ir-rata ta' baud tal-port serjali tinbidel għall-valur ipprovdut mill-meter jew konfigurata mill- għażla baud_rate_max
. Il-meter jittrasmetti reġistri tad-data b'kodiċijiet OBIS assoċjati.
Jekk it-trasmissjoni falliet (checksum ħażin jew format invalidu), il-komponent se jipprova jaqra d-data mill-ġdid iżda din id-darba billi juża veloċità ta' trasmissjoni aktar bil-mod. Għal kull tentattiv mill-ġdid, il-veloċità titnaqqas. In-numru ta' tentattivi u dewmien jista' jiġi kkonfigurat.
Jekk il-meter huwa mħaddem bil-batterija, jista' jiġi applikat sekwenza speċjali ta' qawmien. Dan jiġri biss meta battery_meter
huwa ssettjat għal True
.
Mod D
Għal meters li joperaw fil-mod D, għandek bżonn biss riċevitur IR peress li t-trasmissjoni għal meter mhix appoġġjata. F'dan il-mod, il-meter jibgħat data kull ftit sekondi mingħajr ebda talba. Għandek tikkonfigura l-port serjali biex jaqbel mal-format tat-trasmissjoni tal-meter. B'differenza mill-modi A, B, u C li huma skoperti awtomatikament, il-Mod D għandu jiġi attivat manwalment billi tissettja mode_d=True
fil-konfigurazzjoni tal-pjattaforma.
Mod E
Dan il-mod mhuwiex appoġġjat. Il-Mod E juża kodifikazzjoni binarja fuq link HDLC.
Il-komponent jipprova juża l-mod C għal meters li jirrapportaw il-mod E. Dan għandu jaħdem jekk il-meter jappoġġja kemm il-modi E kif ukoll C. Għal meters li jappoġġjaw biss il-mod E, il-qari mhuwiex possibbli.
Kodiċijiet OBIS
Il-kodiċi OBIS (Object Identification System) jidentifika l-qari differenti minn meter. Il-kodiċi jikkonsisti sa 6 sub-identifikaturi tal-grupp. Il-kodiċi huwa fformat bħal dan: A-B:C.D.E*F
, fejn:
A
- medju: 0=oġġetti astratti, 1=elettriku, 6=sħana, 7=gas, 8=ilmaB
- kanal, 0=ebda kanal disponibbliC
- valur fiżiku, pereżempju kurrent, vultaġġ, temperatura.D
- tip ta' kejl,E
- tariffa, 0=total, 1=tariffa #1, 2=tariffa #2 u hekkF
- perjodu ta' fatturazzjoni
A
, B
, u F
jistgħu jiġu omessi. Kodiċijiet jistgħu jużaw ċifri esadecimali, pereżempju, kodiċi 15.8.0
jista' jiġi rappreżentat bħala F.8.0
.
Il-kodiċijiet huma standardizzati iżda apparati jibagħtu numru differenti ta' kodiċijiet. Biex tikseb lista ta' kodiċijiet appoġġjati mill-meter tiegħek, attiva l-log DEBUG
għall-komponent iec62056
u osserva l-output tal-log. Eżempju ta' output:
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
Il-kodiċi OBIS tas-sensor għandu jaqbel eżattament ma' dak li huwa trasmess minn meter. Din hija l-parti qabel l-ewwel parentesi (
.
Jekk kodiċi OBIS huwa biss żewġ ċifri, għandek tuża l-kwotazzjonijiet fil-fajl tal-konfigurazzjoni; pereżempju, "1.2"
minflok sempliċement 1.2
.
Għal lista ta' kodiċijiet OBIS għall-meters elettriċi, tista' żżur:
- https://www.promotic.eu/en/pmdoc/Subsystems/Comm/PmDrivers/IEC62056_OBIS.htm
- https://onemeter.com/docs/device/obis/#index
Ħardwer
Biex tikkomunika ma' meter trid twaħħal interface ottiku mal-port serjali. L-interface tikkonsisti f'LED infra-aħmar u fototransistor. Barra minn hekk, l-apparat irid ikun mgħammar b'magnetu ċirku biex iżommu allinjat mal-meter.
Jekk il-meter jopera f'modalità unidirezzjonali D, huwa meħtieġ biss fototransistor IR.
Sonda
L-istandard jiddefinixxi d-dimensjonijiet massimi tas-sonda li tista' tiġi mwaħħla ma' meter. Għandu jkun mgħammar b'magnetu peress li huwa l-uniku mod biex iżomm is-sonda f'pożizzjoni stabbli.
Konfigurazzjoni
Biex tara d-dejta tal-meter f'Home Assistant trid tiddefinixxi sensor jew text sensor bil-kodiċi OBIS xieraq. Innota li l-meters jappoġġjaw settijiet differenti ta' kodiċijiet OBIS. B'mod awtomatiku, il-komponent ma jiddefinixxi l-ebda sensors.
Port serjali
Il-komponent jeħtieġ UART bus. Is-serjali għandu jiġi kkonfigurat bħala 7E1 fil-maġġoranza tal-każijiet. Meta mode_d=True
ir-rata tal-baud għandha tiġi ssettjata għal valur appoġġjat mill-meter. Normalment 2400 jew 9600 bps. Għal modi oħra (mode_d=False
) il-veloċità tat-trasmissjoni tiġi nnegozjata ma' meter. baud_rate
huwa injorat u jista' jkun kwalunkwe valur.
yaml
# Example UART configuration entry
uart:
rx_pin: GPIO21
tx_pin: GPIO22
baud_rate: 9600
data_bits: 7
parity: EVEN
stop_bits: 1
WARNING
Għal ESP8266 huwa rakkomandat ħafna li tuża UART tal-ħardwer. UART tas-softwer ma jistax jimmaniġġja trasmissjonijiet aktar mgħaġġla minn 4800 bps.
Jista' jkollok bżonn tiddiżattiva l-logging jekk is-sonda ottika tkun konnessa mal-port serjali użat mill-komponent tal-logger.
yaml
# Issettja baud_rate għal 0 biex tiddiżattiva l-logging permezz ta' UART.
logger:
baud_rate: 0
Pjattaforma
Biex tuża l-komponent trid tiddefinixxi sezzjoni tal-pjattaforma iec62056
fil-fajl tal-konfigurazzjoni. Tikkonsisti f'settings bażiċi.
Varjabbli tal-konfigurazzjoni
- update_interval (Optionali, Time): L-intervall biex taqra d-data minn meter. Default huwa
15min
.never
jiddiżattiva aġġornamenti. F'dak il-każ, għandu jintuża swiċċ biex jattiva l-qari. Biex tikseb qari kontinwu uża valur żgħir bħal 1s. - baud_rate_max (Optionali, int): Jillimita l-veloċità massima tat-trasmissjoni għall-valur speċifikat. B'mod default, huwa stabbilit għal
9600
peress li jipprovdi konnessjoni stabbli. Biex tiddiżattivah, issettjah għal0
. B'dan il-mod tista' tuża l-veloċità massima possibbli ta' baud ta'19200
jekk il-meter jappoġġjaha. Għal ESP8266 uża l-UART tas-softwer issettjat għal4800
jew inqas. - receive_timeout (Optionali, Time): Ħin massimu li l-komponent jistenna għad-data minn meter qabel ma jirrapporta żball ta' trasmissjoni. Default huwa
3s
. - battery_meter (Optionali, boolean): Issettja għal true jekk meter huwa mħaddem bil-batterija. B'dan il-mod se jintuża sekwenza speċjali ta' power-up.
- retry_delay (Optionali, Time): F'każ ta' falliment tat-trasmissjoni, ħin biex tistenna qabel ma terġa' tipprova t-trasmissjoni. Default huwa
15s
. - retry_counter_max (Optionali, int): F'każ ta' falliment tat-trasmissjoni, in-numru massimu ta' tentattivi mill-ġdid. Default huwa
2
. - uart_id (Optionali, ID: Speċifika manwalment l-ID tal- Komponent UART jekk trid tuża bosta bus UART.
- mode_d (Optionali, boolean): Issettja għal
True
jekk meter jibgħat data kull ftit sekondi. Dan iġiegħel lill-komponent jopera f'modalità D. F'din il-modalità data qatt ma tiġi trasmessa lil meter. Jekk issettjat, kwalunkwe settings oħra ħliefreceive_timeout
jiġu injorati. Tinsiex issettja r-rata ta' baud tal-UART li l-meter qed juża. Jekk m'intix ċert ipprova2400 7E1
jew9600 7E1
.
WARNING
Il-meters li jaħdmu bil-batterija tipikament jillimitaw in-numru ta' qari biex jippreservaw l-enerġija, eż. għal 4 qari kuljum. Jekk meter ma jimponix il-limitu, qari frekwenti jista' jnaqqas b'mod sinifikanti l-ħajja tal-batterija.
Sensor
Is-sensor jirrapporta l-ewwel valur bejn il-parentesi mir-rekord. Għad-data li ġejja
log
1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)
il-valur tas-sensor huwa 6000.385
. Biex tikseb it-tieni valur (data/ħin f'dan l-eżempju) uża Text Sensor.
Is-sensor jappoġġja biss valuri deċimali. Jekk ir-rekord fih data f'xi format ieħor trid tuża Text Sensor u fakultattivament lambda biex tikkonvertiha f'numru.
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
Varjabbli tal-konfigurazzjoni
- obis (Meħtieġ): Kodiċi OBIS.
- L-għażliet l-oħra kollha minn Sensor.
Text Sensor
It-text sensor jipprovdi data tal-qari bħala test. B'kuntrast mas-Sensor, tista' tagħżel liema parti tal-qari tiġi rrappurtata u anke tibgħat ir-rekord tad-data kollu lura lil 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
Varjabbli tal-konfigurazzjoni
- obis (Meħtieġ): Kodiċi OBIS. Tista' tiddefinixxi diversi text sensors bl-istess OBIS iżda b'grupp differenti.
- group (Fakultattiv, int): Grupp tal-valur,
0
,1
, jew2
. Default huwa1
. Jekk issettjat għal0
, ir-rekord tad-data kollu jiġi rrappurtat inkluż il-kodiċi OBIS.1
jirrapporta l-ewwel valur,2
it-tieni wieħed. - L-għażliet l-oħra kollha huma minn Text Sensor.
Konverżjoni tad-data
Jekk meter jirrapporta data bħala valur mhux deċimali tista' tikkonvertiha awtomatikament billi tuża template sensor u lambda. Ejja nassumu li l-meter jibgħat rekord bħal dan li ġej b'data kodifikata f'hex:
text
0-0:96.8.0*255(ABCDEF00)
L-ewwel, oħloq template sensor li se jippubblika data bħala valur deċimali.
yaml
sensor:
- platform: template
id: hex_to_dec_sensor
name: "Converted hexadecimal number"
Issa oħloq text sensor li se jirċievi data bħala string, jikkonvertiha f'deċimali u jippubblikaha.
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);
Kull darba li s-sensor tat-test jirċievi valur ġdid, jikkonvertih għal deċimali u jippubblikah billi juża s-sensor bl-id hex_to_dec_sensor
. Il-bandiera internal
tipprevjeni li s-sensor ikun viżibbli f'Home Assistant. Fil-log għandek tara:
log
[I][iec62056.component:127]: Converted HEX 'ABCDEF00' to 2882400000 decimal
L-istess riżultati jistgħu jinkisbu billi jintużaw lambdas ta' Home Assistant. F'dan l-iskop, is-sensor tat-test jippubblika valur esadecimali u s-sensor tat-template ta' Home Assistant jagħmel il-konverżjoni.
Switch
Is-switch jipprovdi l-abbiltà li jqanqal il-qari fuq talba. Meta l-istat jinbidel minn OFF
għal ON
il-komponent jibda t-trasmissjoni tad-data minn meter. Tista' tuża s-switch fl-awtomazzjoni.
Il-varjabbli tal-konfigurazzjoni minn Switch jistgħu jintużaw.
yaml
# Sample switch configuration
switch:
- platform: iec62056
name: 'Readout Trigger'
Ma tistax tqanqal il-qari fil-mod D.
Sensor binarju
Imwaqqaf għal ON
meta tibda t-trasmissjoni għal meter. OFF
meta t-trasmissjoni tkun lesta.
Tista' tuża l-varjabbli kollha tal-konfigurazzjoni minn Binary Sensor.
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
Soluzzjoni tal-Problemi
- Kun żgur li l-prob huwa allinjat sew mal-elementi ottiku fuq il-meter.
- Il-meters huma ġeneralment installati f'żoni mhux ħafna nodfa. Jista' jkollok bżonn tneħħi t-trab mill-interface ottiku minn żmien għal żmien.
- Jekk tiltaqa' ma' żbalji ta' trasmissjoni u checksum BCC naqqas ir-rata tal-baud billi tuża s-setting
baud_rate_max
. - Jekk it-tagħmir tiegħek jimmaniġġja diversi sensors li jqattgħu ħafna ħin fil- loop ta' aġġornament jista' jkollok bżonn iżżid id-daqs tal-buffer tal-port serjali. Speċjalment jekk tinnota problemi ta' trasmissjoni meta sensors addizzjonali jkunu attivati iżda mhux meta jkunu diżattivati.