esphome_elektromer_han/README.cz.md

14 KiB

ESPHome DLMS/Cosem PUSH RS485 čtení

Maintained GitHub license GitHub Repo stars GitHub issues GitHub Issues or Pull Requests GitHub Downloads (all assets, all releases) GitHub code size in bytes

[English Version]

Můj poskytovatel elektřiny (ČEZ Distribuce) mi právě nainstaloval nový chytrý elektroměr. Až do teď jsem používal Home Assistant Glow pro sledování spotřeby domácnosti. Takže jsem byl nadšený, že se konečně dostanu k novému elektroměru a zkusím z něj číst data. Bohužel to nebylo tak jednoduché, jak jsem doufal, ale po mnoha neúspěšných pokusech se mi to povedlo rozchodit a chci se s vámi podělit o zkušenosti.

Sagecom XT211 - Můj elektroměr

Stránky ČEZ Distribuce pro Sagecom XT211 AMM | Datasheet

Sagecom XT211

Sagecom XT211 je třífázový chytrý elektroměr podporující protokol DLMS/COSEM pro datovou komunikaci. Má integrované RS485 rozhraní, které lze použít pro čtení dat. Elektroměr je nastavený na PUSH komunikaci, což znamená, že každých 60 sekund sám odesílá data bez nutnosti dotazování.

Sagecom XT211 port

V mém případě byl port elektroměru připojen do zařízení WM-RelayBox, které slouží k dálkovému odpojování dodávky elektřiny. Rozhraní RS485 je přístupné přes RJ12 port na zařízení.

WM-RelayBox

WM-RelayBox

Datasheet | Installation Guide | Quick Guide

RelayBox se připojuje k elektroměru (přes jeho RJ12 E-Meter port) a přijímá jednosměrné DLMS/COSEM PUSH zprávy a příkazy z Head-end systému prostřednictvím elektroměru.

Potom provádí požadované akce relé a zároveň odesílá všechna data z elektroměru do zákaznického rozhraní HAN / P1 (oddělený, galvanicky izolovaný RJ12 port).

WM-RelayBox ports

Zákaznické rozhraní HAN

HAN port je izolovaný RJ12 port poskytující přístup k datům odesílaným elektroměrem. Port využívá RS485 komunikaci s následujícím zapojením:

HAN port pinout HAN port pinout CEZ

Některé zdroje uvádí, že pin 6 je připojen k zemi, jiné že se nepoužívá. Já mám připojené jen piny 3 a 4, protože pro RS485 potřebuji jen datové vodiče (a měl jsem jen RJ11 kabel bez pinů 1 a 6).

Pin Signal
1 Not used
2 Not used
3 Data A (+)
4 Data B (-)
5 Not used
6 GND

RS485 na TTL převodník

Pro připojení HAN portu do ESPHome zařízení jsem použil RS485 na TTL převodník. Konkrétně tento modul z AliExpressu TTL To RS485, ale existuje mnoho podobných.

RS485 to TTL converter

Parametry RS485

Parametry jsou definované v dokumentu připojovací podmínky NN od ČEZ Distribuce:

RS485 parameters

Parameter Hodnota
Baud rate 9600 bps
Data bits 8
Start bits 0
Stop bits 1
Parity None
Flow control None

PulseMeter (Home Assistant Glow)

Na Home Assistant Glow jsem měl rád že se hodnoty aktualizovaly celkem rychle (podle frekvence pulzů). Nový elektroměr však posílá PUSH zprávy jen každých 60 sekund, což není ideální pro sledování okamžité spotřeby.

Takže jsem to zkombinoval: PulseMeter používám pro okamžitý příkon (W) a DLMS/Cosem z ESPHome pro energii (kWh).

Více o PulseMeteru najdeš v dokumentaci Home Assistant Glow documentation.

LM393 Fotodiodový senzor

LM393 Photo-diode sensor

Montáž

ESPHome zařízení a RS485 převodník jsem dal do malé projektové krabičky.

Box.stl

Project Box

Krabičku pro fotodiodu jsem převzal z Home Assistant Glow.

Sensor_bottom_side_v1.stl

Sensor Box bottom

Sensor_top_side_v1.stl

Sensor Box top

Vyrobil jsem rám pro upevnění senzoru na elektroměr XT211.

Frame XT211 Wide.stl

Frame XT211 Wide

Schéma zapojení

Wiring diagram

LM393 fotodioda:

  • VCC → 5V
  • GND → GND
  • DO (Digitální výstup) → GPIO6
  • AO (Analogový výstup) → GPIO5 (analogový vstup, volitelné)

RS485 na TTL převodník:

  • VCC → 5V
  • GND → GND
  • TXD → RX (GPIO21)
  • RXD → TX (GPIO22)

HAN port (RJ12 / RJ11):

  • B- (Data B) → HAN pin 4
  • A+ (Data A) → HAN pin 3
  • GND → pin 6 (volitelné)

Activity LED (volitelné):

  • Anoda → GPIO4 (+ 220 ohmový rezistor)
  • Katoda → GND

Power Led (volitelné):

  • Anoda → 5V (+ 4700 ohmový rezistor - pro nižší jas)
  • Katoda → GND

Custom ESPHome komponenta

Existují dvě verze komponenty v tomto repozitáři:

  • xt211 - původní verze, kterou jsem použil pro svůj setup, založená na esphome-dlms-cosem

  • dlms_push - napsaná od začátku (už nepoužívá Gurux knihovny) se strukturou esphome komponentů, je flexibilnější a snazší na údržbu.

  • Používám a budu udržovat verzi dlms_push, ale verze xt211 je stále k dispozici pro referenci a pro ty, kteří ji chtějí použít tak, jak je.

ESPHome konfigurace

Kompletní konfigurace: esphome-smartmeter.yaml

esp32:
  variant: esp32c3
  framework:
    type: esp-idf

Přidej externí komponentu:

external_components:
  - source: github://Tomer27cz/xt211
    components: [dlms_push]
    refresh: 1s

Konfigurační možnosti jsou:

  • show_log (volitelné, výchozí: false) - zda zobrazit log komunikace DLMS/COSEM. To je užitečné pro ladění a první nastavení, ale může být docela obsáhlé.
  • receive_timeout (volitelné, výchozí: 50ms) - časový limit pro přijímání dat z elektroměru. Pokud elektroměr během této doby nepošle žádná data, komunikace se považuje za ukončenou a bude zpracována.
  • custom_pattern (volitelné) - vlastní vzor COSEM objektů

Až bude komponenta fungovat, můžeš nastavit show_log na false, aby se logy přestaly zobrazovat.

uart:
  id: bus_1
  tx_pin: GPIO20
  rx_pin: GPIO21
  baud_rate: 9600
  data_bits: 8
  parity: NONE
  stop_bits: 1

dlms_push:
  id: my_dlms_meter
  uart_id: bus_1

Number sensor (sensor)

Moje spotřeba elektřiny se měří v kWh, ale elektroměr odesílá hodnotu ve Wh. Proto používám lambda filtr k převodu hodnoty z Wh na kWh vydělením 1000.

sensor:
  - platform: dlms_push
    id: active_energy_consumed
    name: "Energy"
    obis_code: 1.0.1.8.0.255
    unit_of_measurement: kWh
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing
    filters:
      - lambda: "return x/1000.0;"

Binary sensor (binary_sensor)

Binární senzor má hodnotu false, pokud je hodnota 0, a hodnotu true, pokud je hodnota jakákoli jiná.

binary_sensor:
  - platform: dlms_push
    name: "Relay 1"
    obis_code: 0.1.96.3.10.255

Text sensor (text_sensor)

text_sensor:
  - platform: dlms_push
    name: "Serial number"
    obis_code: 0.0.96.1.1.255
    entity_category: diagnostic

Pulzní měřič (pulse_meter) - pro monitorování spotřeby energie (W) v reálném čase

time:
  - platform: homeassistant
    id: homeassistant_time

number:
  - platform: template
    id: select_pulse_rate
    name: 'Puls rate - imp/kWh'
    optimistic: true
    mode: box
    min_value: 100
    max_value: 10000
    step: 100
    restore_value: yes
    initial_value: 1000

sensor:
  - platform: pulse_meter
    name: 'Pulse Power Consumption'
    id: sensor_energy_pulse_meter
    unit_of_measurement: 'W'
    state_class: measurement
    device_class: power
    icon: mdi:flash-outline
    accuracy_decimals: 0
    pin: GPIO6

    on_raw_value: 
      then:
        - switch.turn_on: indicator_led
        - delay: 100ms
        - switch.turn_off: indicator_led  
    on_value:
      then:
        - sensor.template.publish:
            id: power_consumption
            state: !lambda 'return x;'
    
    # dont know what this does but it was commented out
    internal_filter: 100ms
    
    filters:
      # Sensor can quickly transition between on and off (unintendet bevaior)
      # this meter has max load of 13.27 kW (32A - 3 Phase - 240V) = pulse every 270ms at full load
      - debounce: 100ms
      # multiply value = (60 / imp value) * 1000
      # - multiply: 60
      # Clamp to physically possible max (13.3 kW) - if larger then drop the value
      - lambda: |-
          float watts = x * ((60.0 / id(select_pulse_rate).state) * 1000.0);
          if (watts > 13300.0) return NAN;
          return watts;          

      # Update the sensor with an average every 10th second. See
      # https://github.com/klaasnicolaas/home-assistant-glow/#reduce-the-amount-of-data-the-sensors-produce
      # for more information.
      #- throttle_average: 10s
      
      # filter out impossible numbers
      - filter_out: NaN

Kombinace spotřeby energie ze senzorů PulseMeter a DLMS/Cosem

Vytvoříme senzor template, který kombinuje spotřebu energie ze senzorů PulseMeter a DLMS/Cosem. Pokaždé, když se kterýkoli ze senzorů aktualizuje, aktualizuje se i kombinovaný senzor.

sensor:
  - platform: template
    id: power_consumption
    name: "Power Consumption"
    unit_of_measurement: 'W'
    accuracy_decimals: 0
    device_class: power
    state_class: measurement
    icon: mdi:flash

  [... pulzní měřič z výše uvedeného configu ...]
  
  - platform: dlms_push
    id: active_power
    name: "Active power consumption"
    obis_code: 1.0.1.7.0.255
    unit_of_measurement: W
    accuracy_decimals: 0
    device_class: power
    state_class: measurement
    on_value:
      then:
        - sensor.template.publish:
            id: power_consumption
            state: !lambda 'return x;'

OBIS kódy ČEZ Distribuce XT211

Úplný seznam OBIS kódů naleznete v dokumentu vp_1-13.pdf od ČEZ Distribuce.

OBIS kód Hodnota Popis
0-0:96.1.1.255 SN meter Výrobní číslo elektroměru (Device ID)
0-0:96.3.10.255 stav odpojovače Indikace stavu odpojovače
0-0:17.0.0.255 limiter Hodnota pro limiter
0-1:96.3.10.255 stav relé R1 Stav relé R1
0-2:96.3.10.255 stav relé R2 Stav relé R2
0-3:96.3.10.255 stav relé R3 Stav relé R3
0-4:96.3.10.255 stav relé R4 Stav relé R4
0-0:96.14.0.255 aktuální tarif Aktuální tarif
1-0:1.7.0.255 P+ Okamžitý činný výkon odběru
1-0:21.7.0.255 P+ L1 Okamžitý činný výkon v L1
1-0:41.7.0.255 P+ L2 Okamžitý činný výkon v L2
1-0:61.7.0.255 P+ L3 Okamžitý činný výkon v L3
1-0:2.7.0.255 P- Okamžitý činný výkon dodávky
1-0:22.7.0.255 P- L1 Okamžitý činný výkon v L1
1-0:42.7.0.255 P- L2 Okamžitý činný výkon v L2
1-0:62.7.0.255 P- L3 Okamžitý činný výkon v L3
1-0:1.8.0.255 A+ Činná energie (+A)
1-0:1.8.1.255 A+ T1 Činná energie tarif 1 (+A)
1-0:1.8.2.255 A+ T2 Činná energie tarif 2 (+A)
1-0:1.8.3.255 A+ T3 Činná energie tarif 3 (+A)
1-0:1.8.4.255 A+ T4 Činná energie tarif 4 (+A)
1-0:2.8.0.255 A- Činná energie (-A)

Finální setup

Finální konfigurační soubor ESPHome naleznete zde: esphome-smartmeter.yaml

Meter final setup

Relay final setup

Finální setup má:

  • Zařízení ESPHome s komponentou DLMS/Cosem
  • Převodník RS485 na TTL
  • Fotodiodový senzor LM393 pro PulseMeter
  • Namontované uvnitř projektové krabičky
  • Připojené k HAN portu WM-RelayBoxu
  • Připojené k Home Assistant přes integraci ESPHome
  • Activity LED pro indikaci detekce pulzu
  • Power LED pro indikaci stavu napájení
  • Napájení přes 5V napájecí zdroj (z USB napájecího adaptéru)

Poděkování

  • latonita - za původní komponentu esphome-dlms-cosem