ESPHome IEC 62056-21 Komponent
IEC 62056-21 on rahvusvaheline standard, mis määratleb protokolli andmete vahetamiseks kommunaalarvestitega. Peamiselt elektri, aga ka vee, soojuse ja muude arvestite jaoks. Varem tunti seda kui IEC 61107.
iec62056
komponent võimaldab lugeda andmeid mis tahes ühilduvast arvestist. See nõuab järjestikporti ja välist optilist liidest. Andmevahetus toimub infrapuna optilise kanali kaudu. Ühilduvad arvestid on varustatud iseloomuliku ümmarguse metallplaadiga, mille sees on kaks opto-elementi. Protokolli saab kasutada ka teiste transpordikihtidega, nt voolusilmus, kuid komponenti on testitud ainult optilise liidesega.
See toetab IEC 62056-21 nelja režiimi: A, B, C ja D. Režiimi E ei toetata.
Komponent ei toeta programmeerimist. Arvesti konfiguratsiooniparameetrite seadistamine nõuab salajast parooli, mis muudab selle tavakasutajatele võimatuks.
On ka teisi nutiarvestite standardeid, mis kasutavad sama optilist liidest. Kuigi neil on mõned ühised kontseptsioonid, ei ole nad omavahel ühilduvad.
Paigaldamine
Lisage järgmine kood ESPHome YAML konfiguratsioonifaili, et viidata välisele komponendile.
yaml
external_components:
# IEC62056 komponent
- source: github://aquaticus/esphome-iec62056
Tööteooria
Komponent töötab kahes põhirežiimis:
- Kahesuunaline suhtlus arvestiga. Selles režiimis saadab arvesti andmeid ainult siis, kui seda küsitakse. See nõuab IR vastuvõtjat ja saatjat. See on režiim A, B ja C vastavalt IEC 62056-21-le.
- Ühesuunaline suhtlus, kus arvesti saadab aeg-ajalt andmeid proovile. See nõuab ainult IR vastuvõtjat. IEC 62056-21 terminoloogias on see režiim D.
Režiimid A, B, C
Komponent loeb andmeid esimest korda 15 sekundit pärast käivitamist. Kõigepealt saadab see identifitseerimispäringu kiirusel 300 bps. Arvesti tagastab maksimaalse andmeedastuskiiruse, mida ta suudab käsitleda. Seejärel muudetakse järjestikpordi andmeedastuskiirus arvesti poolt antud väärtuseks või konfigureeritud valiku baud_rate_max
järgi. Arvesti edastab andmeregistrid koos seotud OBIS koodidega.
Kui edastus on ebaõnnestunud (vigane kontrollsumma või kehtetu formaat), proovib komponent andmeid uuesti lugeda, kuid seekord aeglasema edastuskiirusega. Iga korduse korral kiirus väheneb. Korduste ja viivituste arvu saab seadistada.
Kui arvesti töötab patareidega, saab rakendada spetsiaalset äratusjärjestust. See juhtub ainult siis, kui battery_meter
on seatud väärtusele True
.
Režiim D
Režiimis D töötavate arvestite puhul on vaja ainult IR-vastuvõtjat, kuna edastamine arvestile ei ole toetatud. Selles režiimis saadab arvesti andmeid iga paari sekundi järel ilma igasuguse päringuta. Sa peaksid seadistama jadapordi vastavalt arvesti edastusformaadile. Erinevalt režiimidest A, B ja C, mis tuvastatakse automaatselt, tuleb režiim D käsitsi lubada, seades platvormi konfiguratsioonis mode_d=True
.
Režiim E
See režiim ei ole toetatud. Režiim E kasutab binaarkodeeringut HDLC lingi kaudu.
Komponent proovib kasutada režiimi C arvestite puhul, mis teatavad režiimi E. See peaks toimima, kui arvesti toetab nii E kui ka C režiime. Ainult režiimi E toetavate arvestite puhul ei ole lugemine võimalik.
OBIS koodid
OBIS (Objekti Identifitseerimise Süsteem) kood identifitseerib erinevaid näite arvestist. Kood koosneb kuni 6 grupi alamidentifikaatorist. Kood on vormindatud järgmiselt: A-B:C.D.E*F
, kus:
A
- keskkond: 0=abstraktsed objektid, 1=elekter, 6=soojus, 7=gaas, 8=vesiB
- kanal, 0=kanal puudubC
- füüsiline väärtus, näiteks vool, pinge, temperatuur.D
- mõõtmise tüüp,E
- tariif, 0=kokku, 1=tariif #1, 2=tariif #2 ja nii edasiF
- arveldusperiood
A
, B
ja F
võivad olla välja jäetud. Koodid võivad kasutada kuueteistkümnendsüsteemi numbreid, näiteks koodi 15.8.0
võiks esitada kui F.8.0
.
Koodid on standardiseeritud, kuid seadmed saadavad erineva arvu koode. Oma arvesti toetatud koodide loendi saamiseks luba DEBUG
logi iec62056
komponendi jaoks ja jälgi logi väljundit. Näidisväljund:
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
Sensori OBIS kood peab täpselt vastama sellele, mida arvesti edastab. See on osa enne esimest sulgu (
.
Kui OBIS kood on ainult kaks numbrit, tuleks konfiguratsioonifailis kasutada jutumärke; näiteks "1.2"
asemel lihtsalt 1.2
.
Elektriarvestite OBIS koodide loetelu leiate siit:
- https://www.promotic.eu/en/pmdoc/Subsystems/Comm/PmDrivers/IEC62056_OBIS.htm
- https://onemeter.com/docs/device/obis/#index
Riistvara
Arvestiga suhtlemiseks peate ühendama optilise liidese järjestikpordiga. Liides koosneb infrapuna LED-ist ja fototransistorist. Lisaks peab seade olema varustatud rõngasmagnetiga, et hoida see arvestiga joondatuna.
Kui arvesti töötab ühesuunalises režiimis D, on vaja ainult IR fototransistorit.
Andur
Standard määratleb anduri maksimaalsed mõõtmed, mida saab arvestile kinnitada. See peab olema varustatud magnetiga, kuna see on ainus viis, kuidas hoida andurit stabiilses asendis.
Konfiguratsioon
Arvesti andmete nägemiseks Home Assistantis peate määratlema sensori või tekstisensori koos sobiva OBIS koodiga. Pange tähele, et arvestid toetavad erinevaid OBIS koodide komplekte. Vaikimisi komponent ei määra ühtegi sensorit.
Järjestikport
Komponent vajab UART siini. Järjestikport peab olema konfigureeritud kui 7E1 enamikul juhtudel. Kui mode_d=True
, peab baudimäär olema seatud arvesti toetatud väärtusele. Tavaliselt 2400 või 9600 bps. Muude režiimide korral (mode_d=False
) lepitakse edastuskiirus arvestiga kokku. baud_rate
ignoreeritakse ja võib olla mis tahes väärtus.
yaml
# Example UART configuration entry
uart:
rx_pin: GPIO21
tx_pin: GPIO22
baud_rate: 9600
data_bits: 7
parity: EVEN
stop_bits: 1
WARNING
ESP8266 puhul on tungivalt soovitatav kasutada riistvaralist UART-i. Tarkvaraline UART ei suuda käsitleda edastusi kiiremini kui 4800 bps.
Teil võib olla vaja logimine keelata, kui optiline andur on ühendatud järjestikpordiga, mida kasutab logimiskomponent.
yaml
# Seadke baud_rate väärtuseks 0, et keelata logimine UART-i kaudu.
logger:
baud_rate: 0
Platvorm
Komponendi kasutamiseks peate määratlema iec62056
platvormi jaotise konfiguratsioonifailis. See koosneb põhisätetest.
yaml
# Example platform configuration entry for bidirectional communication
iec62056:
update_interval: 60s
baud_rate_max: 9600
battery_meter: False
yaml
# Näide platvormi konfiguratsiooni kirjest ühesuunalise suhtluse jaoks
iec62056:
mode_d: True
Konfiguratsiooni muutujad
- update_interval (Valikuline, Time): Intervall andmete lugemiseks arvestist. Vaikimisi
15min
.never
keelab uuendused. Sel juhul tuleks lugemise käivitamiseks kasutada lülitit. Jätkuvate lugemiste saamiseks kasutage väikest väärtust nagu 1s. - baud_rate_max (Valikuline, int): Piirab maksimaalse edastuskiiruse määratud väärtuseni. Vaikimisi on see seatud
9600
, kuna see tagab stabiilse ühenduse. Selle keelamiseks seadke0
. Nii saate kasutada maksimaalset võimalikku kiirust19200
, kui arvesti seda toetab. ESP8266 puhul kasutage tarkvara UART-i, mis on seatud4800
või madalamale. - receive_timeout (Valikuline, Time): Maksimaalne aeg, mille komponent ootab andmeid arvestist enne edastusvea teatamist. Vaikimisi
3s
. - battery_meter (Valikuline, boolean): Seadke tõeks, kui arvesti on patareitoitega. Sel viisil kasutatakse spetsiaalset sisselülitamise järjestust.
- retry_delay (Valikuline, Time): Edastusvea korral, aeg, mida oodata enne edastuse uuesti proovimist. Vaikimisi
15s
. - retry_counter_max (Valikuline, int): Edastusvea korral maksimaalne korduskatsete arv. Vaikimisi
2
. - uart_id (Valikuline, ID: Määrake käsitsi UART komponendi ID, kui soovite kasutada mitut UART-siinibussi.
- mode_d (Valikuline, boolean): Seadke
True
, kui arvesti saadab andmeid iga paari sekundi järel. See sunnib komponenti töötama režiimis D. Selles režiimis ei edastata andmeid kunagi arvestile. Kui see on seatud, ignoreeritakse kõiki muid seadeid pealereceive_timeout
. Ärge unustage määrata UART-i kiirust, mida arvesti kasutab. Kui te pole kindel, proovige2400 7E1
või9600 7E1
.
WARNING
Aku toitel töötavad mõõturid piiravad tavaliselt näitude arvu, et säästa energiat, näiteks 4 näiduni päevas. Kui mõõtur ei sea piirangut, võivad sagedased näidud aku eluiga oluliselt lühendada.
Andur
Andur teatab kirjest esimese väärtuse sulgudes. Järgmiste andmete puhul
log
1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:30)
on anduri väärtus 6000.385
. Teise väärtuse (kuupäev/kellaaeg selles näites) saamiseks kasutage Tekstiandurit.
Andur toetab ainult kümnendväärtusi. Kui kirje sisaldab andmeid mõnes muus vormingus, peate kasutama Tekstiandurit ja vajadusel lambdat, et see arvuks teisendada.
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
Konfiguratsiooni muutujad
- obis (Nõutav): OBIS kood.
- Kõik muud valikud Andurist.
Tekstiandur
Tekstiandur esitab loetud andmed tekstina. Erinevalt Andurist saate valida, milline osa loetud andmetest teatatakse ja isegi kogu andmekirje tagasi Home Assistantile saata.
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
Konfiguratsiooni muutujad
- obis (Nõutav): OBIS kood. Võite määratleda mitu tekstiandurit sama OBIS koodiga, kuid erineva grupiga.
- group (Valikuline, int): Väärtuse grupp,
0
,1
või2
. Vaikimisi on1
. Kui määratud0
, teatatakse kogu andmekirje, sealhulgas OBIS kood.1
teatab esimese väärtuse,2
teise. - Kõik muud valikud on Tekstiandurist.
Andmete teisendamine
Kui mõõtur teatab andmeid mitte-kümnendväärtusena, saate need automaatselt teisendada, kasutades mallandurit ja lambdat. Oletame, et mõõtur saadab kirje nagu järgmine, kus andmed on kodeeritud heksades:
text
0-0:96.8.0*255(ABCDEF00)
Esmalt looge mallandur, mis avaldab andmed kümnendväärtusena.
yaml
sensor:
- platform: template
id: hex_to_dec_sensor
name: "Converted hexadecimal number"
Nüüd looge tekstiandur, mis võtab andmed vastu stringina, teisendab need kümnendväärtuseks ja avaldab.
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);
Iga kord, kui tekstisensor saab uue väärtuse, teisendab see selle kümnendkujuks ja avaldab selle sensoriga, mille ID on hex_to_dec_sensor
. internal
lipp takistab sensori nähtavust Home Assistantis. Logis peaks olema näha:
log
[I][iec62056.component:127]: Teisendatud HEX 'ABCDEF00' kümnendkujuks 2882400000
Sama tulemuse saab ka Home Assistant lambdade abil. Selles stsenaariumis avaldab tekstisensor kuueteistkümnendväärtuse ja Home Assistant mallisensor teeb teisenduse.
Lüliti
Lüliti võimaldab käivitada lugemist nõudmisel. Kui olek muutub OFF
-ist ON
-iks, algatab komponent andmeedastuse arvestist. Lülitit saab kasutada automatiseerimisel.
Konfiguratsioonimuutujaid Lüliti saab kasutada.
yaml
# Sample switch configuration
switch:
- platform: iec62056
name: 'Readout Trigger'
Sa ei saa käivitada lugemist režiimis D.
Binaarne sensor
Seadistatud ON
, kui edastus arvestile algab. OFF
, kui edastus on lõppenud.
Sa saad kasutada kõiki konfiguratsioonimuutujaid Binaarne 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
Tõrkeotsing
- Veendu, et sond oleks korralikult joondatud arvesti optiliste elementidega.
- Arvestid on tavaliselt paigaldatud mitte väga puhtatesse kohtadesse. Võib olla vajalik aeg-ajalt eemaldada tolm optiliselt liideselt.
- Kui esineb edastus- ja BCC-kontrollsummavigu, vähenda andmeedastuskiirust, kasutades
baud_rate_max
seadistust. - Kui sinu seade haldab mitut sensorit, mis veedavad palju aega uuendustsüklis, võib olla vajalik suurendada jadapordi puhvri suurust. Eriti kui märkad edastusprobleeme, kui täiendavad sensorid on lubatud, kuid mitte siis, kui need on keelatud.