Skip to content

ESPHome IEC 62056-21 -komponentti

IEC 62056-21 on kansainvälinen standardi, joka määrittelee protokollan tietojen vaihtoon mittarien kanssa. Enimmäkseen sähkömittareille, mutta myös vesi-, lämpö- ja muille mittareille. Se tunnettiin aiemmin nimellä IEC 61107.

iec62056-komponentti mahdollistaa tietojen lukemisen mistä tahansa yhteensopivasta mittarista. Se vaatii sarjaportin ja ulkoisen optisen liitännän. Tietojen vaihto tapahtuu infrapunaoptisen kanavan kautta. Yhteensopivat mittarit on varustettu tunnusomaisella pyöreällä metallilevyllä, jossa on kaksi opto-elementtiä sisällä. Protokollaa voidaan käyttää muiden siirtokerrosten kanssa, esim. virtasilmukka, mutta komponenttia on testattu vain optisella liitännällä.

Se tukee IEC 62056-21:n neljää tilaa: A, B, C ja D. Tila E ei ole tuettu.

Komponentti ei tue ohjelmointia. Mittarin konfiguraatioparametrien asettaminen vaatii salasanan, mikä tekee sen käytön mahdottomaksi tavallisille käyttäjille.

Mittarin liitäntä. Metallirengas magneetille ja kaksi optista elementtiä sisällä.

On olemassa muita älymittaristandardeja, jotka käyttävät samaa optista liitäntää. Vaikka niillä on joitakin yhteisiä käsitteitä, ne eivät ole yhteensopivia.

Asennus

Lisää seuraava koodi ESPHome YAML -konfiguraatiotiedostoon viitataksesi ulkoiseen komponenttiin.

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

Toimintaperiaate

Komponentti toimii kahdessa päätilassa:

  • Kaksisuuntainen viestintä mittarin kanssa. Tässä tilassa mittari lähettää tietoja vain pyydettäessä. Se vaatii IR-vastaanottimen ja -lähettimen. Tämä on tila A, B ja C IEC 62056-21:n mukaan.
  • Yksisuuntainen viestintä, jossa mittari lähettää tietoja koettimelle ajoittain. Se vaatii vain IR-vastaanottimen. IEC 62056-21 terminologiassa se on tila D.

Tilat A, B, C

Komponentti lukee tietoja ensimmäisen kerran 15 sekuntia käynnistyksen jälkeen. Ensin se lähettää tunnistuspyynnön nopeudella 300 bps. Mittari palauttaa suurimman tiedonsiirtonopeuden, jonka se voi käsitellä. Tämän jälkeen sarjaportin tiedonsiirtonopeus muutetaan mittarin antamaan arvoon tai konfiguroituun arvoon vaihtoehdolla baud_rate_max. Mittari lähettää tietorekisterit niihin liittyvien OBIS-koodien kanssa.

Jos tiedonsiirto on epäonnistunut (huono tarkistussumma tai virheellinen muoto), komponentti yrittää lukea tiedot uudelleen, mutta tällä kertaa hitaammalla siirtonopeudella. Jokaisella yrityksellä nopeutta vähennetään. Uudelleenyritysten ja viiveiden määrää voidaan säätää.

Jos mittari on paristokäyttöinen, voidaan käyttää erityistä herätysjärjestystä. Tämä tapahtuu vain, kun battery_meter on asetettu arvoon True.

Tila D

Mittareille, jotka toimivat tilassa D, tarvitset vain IR-vastaanottimen, koska tiedonsiirtoa mittarille ei tueta. Tässä tilassa mittari lähettää tietoja muutaman sekunnin välein ilman pyyntöä. Sinun tulee määrittää sarjaportti vastaamaan mittarin siirtoformaattia. Toisin kuin tilat A, B ja C, jotka havaitaan automaattisesti, Tila D on otettava käyttöön manuaalisesti asettamalla mode_d=True alustakonfiguraatiossa.

Tila E

Tätä tilaa ei tueta. Tila E käyttää binaarikoodausta HDLC-linkin kautta.

Komponentti yrittää käyttää tilaa C mittareille, jotka raportoivat tilan E. Tämä pitäisi toimia, jos mittari tukee sekä E- että C-tiloja. Mittareille, jotka tukevat vain tilaa E, lukeminen ei ole mahdollista.

OBIS-koodit

OBIS (Object Identification System) -koodi tunnistaa mittarin eri lukemat. Koodi koostuu enintään kuudesta ryhmäaliosoitteesta. Koodi on muotoiltu näin: A-B:C.D.E*F, missä:

  • A - media: 0=abstraktit objektit, 1=sähkö, 6=lämpö, 7=kaasu, 8=vesi
  • B - kanava, 0=kanavaa ei ole saatavilla
  • C - fyysinen arvo, esimerkiksi virta, jännite, lämpötila.
  • D - mittaustyyppi,
  • E - tariffi, 0=kokonaisuus, 1=tariffi #1, 2=tariffi #2 ja niin edelleen
  • F - laskutusjakso

A, B ja F voidaan jättää pois. Koodit voivat käyttää heksadesimaalilukuja, esimerkiksi koodi 15.8.0 voitaisiin esittää muodossa F.8.0.

Koodit ovat standardoituja, mutta laitteet lähettävät eri määrän koodeja. Saadaksesi luettelon mittarisi tukemista koodeista, ota käyttöön DEBUG-loki iec62056-komponentille ja tarkkaile lokitulostetta. Esimerkkituloste:

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

Anturin OBIS-koodin on vastattava tarkalleen sitä, mitä mittarista lähetetään. Tämä on osa ennen ensimmäistä sulkua (.

Jos OBIS-koodi on vain kaksi numeroa, sinun tulee käyttää lainausmerkkejä määrittelytiedostossa; esimerkiksi "1.2" pelkän 1.2 sijaan.

Lista OBIS-koodeista sähkömittareille löytyy seuraavista linkeistä:

Laitteisto

Kommunikoidaksesi mittarin kanssa sinun täytyy liittää optinen rajapinta sarjaporttiin. Rajapinta koostuu infrapuna-LEDistä ja valotransistorista. Lisäksi laitteessa tulee olla rengasmagneetti, jotta se pysyy linjassa mittarin kanssa.

Jos mittari toimii yksisuuntaisessa tilassa D, tarvitaan vain IR valotransistori.

Anturi

Standardi määrittelee anturin enimmäismitat, jotka voidaan liittää mittariin. Sen tulee olla varustettu magneetilla, koska se on ainoa tapa pitää anturi vakaassa asennossa.

Optisen anturin mitat

Määritykset

Jotta voit nähdä mittarin tiedot Home Assistantissa, sinun täytyy määritellä anturi tai tekstisensori sopivalla OBIS-koodilla. Huomaa, että mittarit tukevat erilaisia OBIS-koodisarjoja. Oletuksena komponentti ei määrittele mitään antureita.

Sarjaportti

Komponentti vaatii UART-väylän. Sarja on useimmissa tapauksissa konfiguroitava 7E1-muotoon. Kun mode_d=True, tiedonsiirtonopeus on asetettava mittarin tukemaan arvoon. Yleensä 2400 tai 9600 bps. Muissa tiloissa (mode_d=False) tiedonsiirtonopeus neuvotellaan mittarin kanssa. baud_rate ohitetaan ja voi olla mikä tahansa arvo.

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:lle on erittäin suositeltavaa käyttää laitteistopohjaista UARTia. Ohjelmistopohjainen UART ei pysty käsittelemään yli 4800 bps:n tiedonsiirtonopeuksia.

Saatat joutua poistamaan lokituksen käytöstä, jos optinen anturi on liitetty sarjaporttiin, jota logger-komponentti käyttää.

yaml
# Aseta baud_rate arvoon 0 poistaaksesi lokituksen käytöstä UARTin kautta.
logger:
    baud_rate: 0

Alusta

Jotta voit käyttää komponenttia, sinun täytyy määritellä iec62056-alustaosio määrittelytiedostossa. Se koostuu perusasetuksista.

yaml
# Example platform configuration entry for bidirectional communication
iec62056:
  update_interval: 60s
  baud_rate_max: 9600
  battery_meter: False
yaml
# Esimerkki alustan kokoonpanosta yksisuuntaiseen viestintään
iec62056:
  mode_d: True

Konfiguraatiomuuttujat

  • update_interval (Valinnainen, Time): Aikaväli, jolla luetaan tietoja mittarista. Oletusarvo on 15min. never poistaa päivitykset käytöstä. Tällöin kytkintä tulisi käyttää lukemisen käynnistämiseen. Jatkuvien lukemien saamiseksi käytä pientä arvoa, kuten 1s.
  • baud_rate_max (Valinnainen, int): Rajoittaa suurimman siirtonopeuden määritettyyn arvoon. Oletuksena se on asetettu 9600, koska se tarjoaa vakaan yhteyden. Poista se käytöstä asettamalla se 0:ksi. Näin voit käyttää suurinta mahdollista siirtonopeutta 19200, jos mittari tukee sitä. ESP8266:lle käytä ohjelmistopohjaista UART:ia, joka on asetettu 4800 tai alemmaksi.
  • receive_timeout (Valinnainen, Time): Maksimiaika, jonka komponentti odottaa tietoja mittarista ennen kuin raportoi siirtovirheen. Oletusarvo on 3s.
  • battery_meter (Valinnainen, boolean): Aseta arvoksi true, jos mittari on paristokäyttöinen. Tällöin käytetään erityistä käynnistyssekvenssiä.
  • retry_delay (Valinnainen, Time): Siirtovirheen sattuessa, aika, joka odotetaan ennen siirron uudelleenyritystä. Oletusarvo on 15s.
  • retry_counter_max (Valinnainen, int): Siirtovirheen sattuessa, suurin sallittu uudelleenyritysten määrä. Oletusarvo on 2.
  • uart_id (Valinnainen, ID: Määritä manuaalisesti UART-komponentin ID, jos haluat käyttää useita UART-väyliä.
  • mode_d (Valinnainen, boolean): Aseta arvoksi True, jos mittari lähettää tietoja muutaman sekunnin välein. Tämä pakottaa komponentin toimimaan tilassa D. Tässä tilassa tietoja ei koskaan lähetetä mittarille. Jos asetettu, muita asetuksia paitsi receive_timeout ei huomioida. Älä unohda asettaa UART:n siirtonopeutta, jota mittari käyttää. Jos et ole varma, kokeile 2400 7E1 tai 9600 7E1.

WARNING

Paristokäyttöiset mittarit rajoittavat yleensä lukemien määrää energian säästämiseksi, esimerkiksi 4 lukemaan päivässä. Jos mittari ei aseta rajoitusta, usein toistuvat lukemat voivat merkittävästi lyhentää pariston kestoa.

Anturi

Anturi raportoi ensimmäisen arvon sulkeista tietueesta. Seuraaville tiedoille

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

anturin arvo on 6000.385. Saadaksesi toisen arvon (päivämäärä/aika tässä esimerkissä) käytä Tekstianturia.

Anturi tukee vain desimaalilukuja. Jos tietue sisältää tietoja muussa muodossa, sinun on käytettävä Tekstianturia ja tarvittaessa lambdaa muuntamaan se numeroksi.

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

Konfiguraatiomuuttujat

  • obis (Pakollinen): OBIS-koodi.
  • Kaikki muut vaihtoehdot Anturista.

Tekstianturi

Tekstianturi tarjoaa lukematiedot tekstinä. Toisin kuin Anturi, voit valita, mikä osa lukemasta raportoidaan ja jopa lähettää koko tietueen takaisin Home Assistantille.

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

Konfiguraatiomuuttujat

  • obis (Pakollinen): OBIS-koodi. Voit määritellä useita tekstiantureita samalla OBIS-koodilla mutta eri ryhmällä.
  • group (Valinnainen, int): Arvoryhmä, 0, 1 tai 2. Oletusarvo on 1. Jos asetettu 0, koko tietue raportoidaan mukaan lukien OBIS-koodi. 1 raportoi ensimmäisen arvon, 2 toisen.
  • Kaikki muut vaihtoehdot ovat Tekstianturista.

Tietojen muuntaminen

Jos mittari raportoi tietoja ei-desimaalimuodossa, voit muuntaa ne automaattisesti käyttämällä mallianturia ja lambdaa. Oletetaan, että mittari lähettää tietueen seuraavalla tavalla heksakoodattuna:

text
0-0:96.8.0*255(ABCDEF00)

Luo ensin mallianturi, joka julkaisee tiedot desimaalimuodossa.

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

Luo nyt tekstianturi, joka vastaanottaa tiedot merkkijonona, muuntaa ne desimaaliksi ja julkaisee.

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

Joka kerta, kun tekstisensori vastaanottaa uuden arvon, se muuntaa sen desimaaliksi ja julkaisee sen käyttäen sensoria, jonka id on hex_to_dec_sensor. internal-lippu estää sensoria näkymästä Home Assistantissa. Lokissa pitäisi näkyä:

log
[I][iec62056.component:127]: Muunnettu HEX 'ABCDEF00' desimaaliksi 2882400000

Samat tulokset voidaan saavuttaa käyttämällä Home Assistant -lambdoja. Tässä skenaariossa tekstisensori julkaisee heksadesimaaliarvon ja Home Assistant -mallipohjainen sensori tekee muunnoksen.

Kytkin

Kytkin tarjoaa mahdollisuuden käynnistää lukeminen pyynnöstä. Kun tila muuttuu OFF:sta ON:ksi, komponentti aloittaa tiedonsiirron mittarista. Voit käyttää kytkintä automaatiossa.

Switch-konfiguraatiomuuttujia voidaan käyttää.

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

Et voi käynnistää lukemista tilassa D.

Binäärisensori

Asetetaan ON:ksi, kun tiedonsiirto mittariin alkaa. OFF, kun tiedonsiirto on päättynyt.

Voit käyttää kaikkia Binary Sensor-konfiguraatiomuuttujia.

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

Vianmääritys

  • Varmista, että anturi on oikein kohdistettu mittarin optisiin elementteihin.
  • Mittarit asennetaan yleensä ei kovin puhtaisiin paikkoihin. Saatat joutua poistamaan pölyä optisesta liitännästä aika ajoin.
  • Jos kohtaat tiedonsiirto- ja BCC-tarkistussummavirheitä, vähennä tiedonsiirtonopeutta baud_rate_max-asetuksella.
  • Jos laitteesi käsittelee useita sensoreita, jotka kuluttavat paljon aikaa päivityssilmukassa, saatat joutua kasvattamaan sarjaportin puskurointikokoa. Erityisesti, jos huomaat tiedonsiirto-ongelmia, kun lisäsensorit ovat käytössä, mutta eivät, kun ne ovat poissa käytöstä.

Katso myös