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.
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=vesiB
- kanava, 0=kanavaa ei ole saatavillaC
- fyysinen arvo, esimerkiksi virta, jännite, lämpötila.D
- mittaustyyppi,E
- tariffi, 0=kokonaisuus, 1=tariffi #1, 2=tariffi #2 ja niin edelleenF
- 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ä:
- https://www.promotic.eu/en/pmdoc/Subsystems/Comm/PmDrivers/IEC62056_OBIS.htm
- https://onemeter.com/docs/device/obis/#index
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.
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 se0
:ksi. Näin voit käyttää suurinta mahdollista siirtonopeutta19200
, jos mittari tukee sitä. ESP8266:lle käytä ohjelmistopohjaista UART:ia, joka on asetettu4800
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 paitsireceive_timeout
ei huomioida. Älä unohda asettaa UART:n siirtonopeutta, jota mittari käyttää. Jos et ole varma, kokeile2400 7E1
tai9600 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
tai2
. Oletusarvo on1
. Jos asetettu0
, 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ä.