Skip to content

ESPHome IEC 62056-21 Komponenta

IEC 62056-21 je mezinárodní standard pro protokol pro výměnu dat s měřiči. Většinou pro elektřinu, ale také pro vodu, teplo a další měřiče. Dříve byl znám jako IEC 61107.

Komponenta iec62056 vám umožňuje číst data z jakéhokoli kompatibilního měřiče. Vyžaduje sériový port a externí optické rozhraní. Výměna dat používá infračervený optický kanál. Kompatibilní měřiče jsou vybaveny charakteristickou kulatou kovovou deskou se dvěma opto-prvky uvnitř. Protokol by mohl být použit s jinými transportními vrstvami, např. proudovou smyčkou, ale komponenta byla testována pouze s optickým rozhraním.

Podporuje 4 režimy IEC 62056-21: A, B, C a D. Režim E není podporován.

Komponenta nepodporuje programování. Nastavení konfiguračních parametrů měřiče vyžaduje tajné heslo, což znemožňuje jeho použití běžnými uživateli.

Rozhraní na měřiči. Kovový kroužek pro magnet a dva optické prvky uvnitř.

Existují další standardy pro chytré měřiče, které používají stejné optické rozhraní. Ačkoli sdílejí některé společné koncepty, nejsou kompatibilní.

Instalace

Přidejte následující kód do konfiguračního souboru ESPHome YAML pro odkaz na externí komponentu.

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

Teorie provozu

Komponenta pracuje ve 2 hlavních režimech:

  • Obousměrná komunikace s měřičem. V tomto režimu měřič posílá data pouze na vyžádání. Vyžaduje IR přijímač a vysílač. Toto je režim A, B a C podle IEC 62056-21.
  • Jednosměrná komunikace, kde měřič posílá data do sondy čas od času. Vyžaduje pouze IR přijímač. V terminologii IEC 62056-21 je to režim D.

Režimy A, B, C

Komponenta čte data poprvé 15 sekund po spuštění. Nejprve odešle žádost o identifikaci při 300 bps. Měřič vrátí maximální přenosovou rychlost, kterou může zvládnout. Poté se přenosová rychlost sériového portu změní na hodnotu poskytnutou měřičem nebo nakonfigurovanou pomocí možnosti baud_rate_max. Měřič přenáší datové registry s přidruženými OBIS kódy.

Pokud přenos selhal (špatná kontrolní součet nebo neplatný formát), komponenta se pokusí znovu přečíst data, tentokrát však s nižší přenosovou rychlostí. Při každém opakování se rychlost snižuje. Počet opakování a zpoždění lze konfigurovat.

Pokud je měřič napájen z baterie, může být použita speciální sekvence probuzení. To se stane pouze tehdy, když je battery_meter nastaveno na True.

Režim D

Pro měřiče pracující v režimu D potřebujete pouze IR přijímač, protože přenos do měřiče není podporován. V tomto režimu měřič odesílá data každých několik sekund bez jakéhokoli požadavku. Měli byste nakonfigurovat sériový port tak, aby odpovídal formátu přenosu měřiče. Na rozdíl od režimů A, B a C, které jsou detekovány automaticky, musí být režim D povolen ručně nastavením mode_d=True v konfiguraci platformy.

Režim E

Tento režim není podporován. Režim E používá binární kódování přes HDLC linku.

Komponenta se pokusí použít režim C pro měřiče hlásící režim E. To by mělo fungovat, pokud měřič podporuje oba režimy E a C. Pro měřiče podporující pouze režim E není čtení možné.

OBIS kódy

OBIS (Object Identification System) kód identifikuje různé odečty z měřiče. Kód se skládá až ze 6 skupin podidentifikátorů. Kód je formátován takto: A-B:C.D.E*F, kde:

  • A - médium: 0=abstraktní objekty, 1=elektřina, 6=teplo, 7=plyn, 8=voda
  • B - kanál, 0=žádný kanál není k dispozici
  • C - fyzická hodnota, například proud, napětí, teplota.
  • D - typ měření,
  • E - tarif, 0=celkem, 1=tarif č. 1, 2=tarif č. 2 a tak dále
  • F - fakturační období

A, B a F mohou být vynechány. Kódy mohou používat hexadecimální číslice, například kód 15.8.0 by mohl být reprezentován jako F.8.0.

Kódy jsou standardizovány, ale zařízení odesílají různé množství kódů. Chcete-li získat seznam kódů podporovaných vaším měřičem, povolte DEBUG log pro komponentu iec62056 a sledujte výstup logu. Ukázkový výstup:

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

OBIS kód senzoru musí přesně odpovídat tomu, co je přenášeno z měřiče. Toto je část před první závorkou (.

Pokud je OBIS kód pouze dvouciferný, měli byste v konfiguračním souboru použít uvozovky; například "1.2" místo jen 1.2.

Pro seznam OBIS kódů pro elektroměry můžete navštívit:

Hardware

Pro komunikaci s měřičem musíte připojit optické rozhraní k sériovému portu. Rozhraní se skládá z infračervené LED a fototranzistoru. Kromě toho musí být zařízení vybaveno kruhovým magnetem, aby bylo zarovnáno s měřičem.

Pokud měřič pracuje v jednosměrném režimu D, je vyžadován pouze IR fototranzistor.

Sonda

Standard definuje maximální rozměry sondy, kterou lze připojit k měřiči. Musí být vybavena magnetem, protože je to jediný způsob, jak udržet sondu ve stabilní poloze.

Rozměry optické sondy

Konfigurace

Pro zobrazení dat z měřiče v Home Assistant musíte definovat senzor nebo textový senzor s příslušným OBIS kódem. Všimněte si, že měřiče podporují různé sady OBIS kódů. Ve výchozím nastavení komponenta nedefinuje žádné senzory.

Sériový port

Komponenta vyžaduje UART sběrnici. Sériový port musí být ve většině případů nastaven jako 7E1. Když je mode_d=True, musí být přenosová rychlost nastavena na hodnotu podporovanou měřičem. Obvykle 2400 nebo 9600 bps. Pro jiné režimy (mode_d=False) je přenosová rychlost vyjednána s měřičem. baud_rate je ignorován a může být jakákoli hodnota.

yaml
# Example UART configuration entry
uart:
    rx_pin: GPIO21
    tx_pin: GPIO22
    baud_rate: 9600
    data_bits: 7
    parity: EVEN
    stop_bits: 1

WARNING

Pro ESP8266 se důrazně doporučuje používat hardwarový UART. Softwarový UART nedokáže zpracovat přenosy rychlejší než 4800 bps.

Možná budete muset zakázat protokolování, pokud je optická sonda připojena k sériovému portu používanému komponentou logger.

yaml
# Nastavte baud_rate na 0 pro zakázání protokolování přes UART.
logger:
    baud_rate: 0

Platforma

Pro použití komponenty musíte v konfiguračním souboru definovat sekci platformy iec62056. Skládá se ze základních nastavení.

yaml
# Example platform configuration entry for bidirectional communication
iec62056:
  update_interval: 60s
  baud_rate_max: 9600
  battery_meter: False
yaml
# Příklad konfigurace platformy pro jednosměrnou komunikaci
iec62056:
  mode_d: True

Konfigurační proměnné

  • update_interval (Volitelné, Time): Interval pro čtení dat z měřiče. Výchozí hodnota je 15min. never zakáže aktualizace. V takovém případě by měl být použit přepínač pro spuštění čtení. Pro nepřetržité čtení použijte malou hodnotu jako 1s.
  • baud_rate_max (Volitelné, int): Omezuje maximální přenosovou rychlost na zadanou hodnotu. Ve výchozím nastavení je nastavena na 9600, protože poskytuje stabilní připojení. Pro deaktivaci nastavte na 0. Tímto způsobem můžete použít maximální možnou přenosovou rychlost 19200, pokud to měřič podporuje. Pro ESP8266 použijte softwarový UART nastavený na 4800 nebo nižší.
  • receive_timeout (Volitelné, Time): Maximální čas, po který komponent čeká na data z měřiče před nahlášením chyby přenosu. Výchozí hodnota je 3s.
  • battery_meter (Volitelné, boolean): Nastavte na true, pokud je měřič napájen z baterie. Tímto způsobem bude použita speciální sekvence zapnutí.
  • retry_delay (Volitelné, Time): V případě selhání přenosu, čas čekání před opětovným pokusem o přenos. Výchozí hodnota je 15s.
  • retry_counter_max (Volitelné, int): V případě selhání přenosu, maximální počet opakování. Výchozí hodnota je 2.
  • uart_id (Volitelné, ID: Ručně zadejte ID UART komponenty, pokud chcete použít více UART sběrnic.
  • mode_d (Volitelné, boolean): Nastavte na True, pokud měřič odesílá data každých několik sekund. Tímto způsobem je komponenta nucena pracovat v režimu D. V tomto režimu nejsou data nikdy odesílána do měřiče. Pokud je nastaveno, jakékoli jiné nastavení kromě receive_timeout je ignorováno. Nezapomeňte nastavit přenosovou rychlost UART, kterou měřič používá. Pokud si nejste jisti, zkuste 2400 7E1 nebo 9600 7E1.

WARNING

Měřiče napájené z baterií obvykle omezují počet odečtů, aby šetřily energii, např. na 4 odečty denně. Pokud měřič toto omezení neukládá, časté odečty mohou výrazně snížit životnost baterie.

Senzor

Senzor hlásí první hodnotu v závorkách ze záznamu. Pro následující data

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

je hodnota senzoru 6000.385. Pro získání druhé hodnoty (datum/čas v tomto příkladu) použijte Textový senzor.

Senzor podporuje pouze desetinné hodnoty. Pokud záznam obsahuje data v jiném formátu, musíte použít Textový senzor a případně lambda pro převod na číslo.

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

Konfigurační proměnné

  • obis (Povinné): OBIS kód.
  • Všechny ostatní možnosti z Senzor.

Textový senzor

Textový senzor poskytuje odečtená data jako text. Na rozdíl od senzoru můžete vybrat, která část odečtu je hlášena, a dokonce odeslat celý datový záznam zpět do 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

Konfigurační proměnné

  • obis (Povinné): OBIS kód. Můžete definovat více textových senzorů se stejným OBIS, ale jinou skupinou.
  • group (Volitelné, int): Skupina hodnot, 0, 1 nebo 2. Výchozí hodnota je 1. Pokud je nastavena na 0, je hlášen celý datový záznam včetně OBIS kódu. 1 hlásí první hodnotu, 2 druhou.
  • Všechny ostatní možnosti jsou z Textový senzor.

Převod dat

Pokud měřič hlásí data jako nedesetinnou hodnotu, můžete ji automaticky převést pomocí šablonového senzoru a lambda. Předpokládejme, že měřič odesílá záznam jako následující s hexadecimálně kódovanými daty:

text
0-0:96.8.0*255(ABCDEF00)

Nejprve vytvořte šablonový senzor, který bude publikovat data jako desetinnou hodnotu.

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

Nyní vytvořte textový senzor, který přijme data jako řetězec, převede je na desetinnou hodnotu a publikuje.

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

Pokaždé, když textový senzor obdrží novou hodnotu, převede ji na desítkovou soustavu a publikuje ji pomocí senzoru s id hex_to_dec_sensor. Příznak internal zabraňuje senzoru být viditelný v Home Assistant. V logu byste měli vidět:

log
[I][iec62056.component:127]: Converted HEX 'ABCDEF00' to 2882400000 decimal

Stejné výsledky lze získat pomocí Home Assistant lambd. V tomto scénáři textový senzor publikuje hexadecimální hodnotu a Home Assistant šablonový senzor provádí konverzi.

Přepínač

Přepínač poskytuje možnost spustit čtení na vyžádání. Když se stav změní z OFF na ON, komponenta zahájí přenos dat z měřiče. Přepínač můžete použít v automatizaci.

Konfigurační proměnné z Přepínač lze použít.

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

Nemůžete spustit čtení v režimu D.

Binární senzor

Nastaveno na ON, když začíná přenos do měřiče. OFF, když je přenos dokončen.

Můžete použít všechny konfigurační proměnné z Binární senzor.

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

Řešení problémů

  • Ujistěte se, že je sonda správně zarovnána s optickými prvky na měřiči.
  • Měřiče jsou obvykle instalovány v ne příliš čistých oblastech. Možná budete muset čas od času odstranit prach z optického rozhraní.
  • Pokud narazíte na chyby přenosu a BCC kontrolního součtu, snižte přenosovou rychlost pomocí nastavení baud_rate_max.
  • Pokud vaše zařízení zpracovává více senzorů, které tráví hodně času v aktualizační smyčce, možná budete muset zvýšit velikost vyrovnávací paměti sériového portu. Zejména pokud zaznamenáte problémy s přenosem, když jsou povoleny další senzory, ale ne když jsou zakázány.

Viz také