Skip to content

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.

Liides arvestil. Metallrõngas magneti jaoks ja kaks optilist elementi sees.

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=vesi
  • B - kanal, 0=kanal puudub
  • C - 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 edasi
  • F - 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:

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.

Optilise anduri mõõtmed

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 seadke 0. Nii saate kasutada maksimaalset võimalikku kiirust 19200, kui arvesti seda toetab. ESP8266 puhul kasutage tarkvara UART-i, mis on seatud 4800 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 peale receive_timeout. Ärge unustage määrata UART-i kiirust, mida arvesti kasutab. Kui te pole kindel, proovige 2400 7E1 või 9600 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õi 2. Vaikimisi on 1. Kui määratud 0, 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.

Vaata ka