Wmbus měřidla

Napsal uživatel Stopka dne

Po deseti letech se nám v bytovém družstvu vybyly baterie u radiátorových měřidel spotřeby tepla. Zároveň přišla povinnost mít pravidelný dálkový odečet spotřeby teplé vody. V družstvu tak nakoupili nové vodoměry i radiátorová měřidla s podporou dálkového odečtu. A tak mě napadlo: nebylo by pěkné napojit živá data o spotřebě do domácího systému?

Příjem

Z dokumentace měřidel jsem zjistil, že naměřené hodnoty se odesílají přes protokol wmbus. Je to úsporný protokol na posílání krátkých zpráviček v bezlicenčním frekvenčním pásmu. Tahle měřidla vše posílají na frekvenci 868.950Mhz.

Podle této specifikace jsem hledal hardwarové řešení. Napadlo mě, že by na příjem takových zpráviček mohl existovat nějaký Arduino modul, a že by místo arduina by šlo použít nějaký procesor z rodiny ESP. A že vůbec nejlepší by bylo, kdyby byl modul podporovaný softwarem ESPHome.

Hledání bylo v celku úspěšné: Existuje modul CC1101. Ten sice nemá přímou podporu v ESPHome, ale jakýsi uživatel SzczepanLeon pro tento modul a přesně pro tento protokol vyvíjí ESPHome plugin.

Objednal jsem tedy radiový modu CC1101 i vývojovou desku Nodemcu-32S, vše propojil a nahrál základní konfiguraci ESPHome s wmbus pluginem. Funguje! V logu vidím jednotlivé přijaté zprávičky.

Parsování

Dalším krokem je vydolovat ze zpráv naměřené hodnoty a dostat je do Home assistenta. Plugin zprávy parsuje knihovnou wmbusmeters, která zároveň má užitečný web https://wmbusmeters.org. Tam lze vložit přijaté datagramy z logu a zjistit co v nich je za data.

Aby ESPHome mohl parsovat musí se nastavit "senzory". K tomu potřebuju pro každý měřák zjistit následující:

ID měřidla

Každá zpráva obsahuje nešifrovaný identifikátor vysílajícího měřidla. To má každý měřák na sobě vyražený, jednoduše jsem tedy mohl párovat, které zprávy nesou hodnoty k mému bytu.

Klíč

Zpráva obsahuje výše zmíněné ID, typ měřidla (voda/hca = teplo) a pár dalších metadat. Naměřené hodnoty se ale posílají šifrovaně. Tady mi naštěstí vyšlo bytové družstvo vstříc a klíče k měřákům v mém bytě mi poskytlo.

Driver

Každý výrobce má formát naměřených hodnot trochu jiný, je tedy potřeba zjistit výrobce měřidla a nejlépe i verzi meřidla. Najít takhle detailní specifikaci měřidla se mi nepodařilo, ale když už jsem znal klíč k měřidlu, web wmbusmeters.org dokázal v "auto" režimu rozpoznat správný driver pro získání naměřených hodnot.

Má měřidla jsou asi nějaký novější model, protože detekovaný driver nefunguje na 100%. Ve zprávě je několik informací, které nelze přečíst. Ale to zásadní, čisté naměřené hodnoty spotřeby tepla a vody mi vyčíst jde.

Výsledek

Hodnoty se mi průběžně propisují do Home assistenta. Úspěch. Chvíli jsem hledal pro přijímač místo, kde bude dostatečný signál na příjem všech měřáků. Také jsem zjistil, že měřáky kvůli úspoře energie vysílají jen v pracovní dny a v pracovní době od 8 do 18 hodin. Sesbírané hodnoty proto nejsou tak kontinuální jak by mohly. Ale mimo to to funguje hezky.

Výsledná ESP Home konfigurace vypadá následovně:

substitutions:
  id: wmbus1

esphome:
  name: wmbus1

esp32:
  board: nodemcu-32s

wifi:
  ssid: !secret iot_wifi_ssid
  password: !secret iot_wifi_password

api:
  encryption:
    key: !secret wmbus1_api_key

ota:
  - platform: esphome
    password: !secret wmbus1_ota_password

logger:

status_led: 
  pin: GPIO2

time:
  - platform: sntp
    id: time_sntp

button:
  - platform: restart
    internal: True
    id: reset_button
    name: "Reset button"

external_components:
  - source: github://SzczepanLeon/esphome-components@version_4
    refresh: 0d
    components: [ wmbus ]

wmbus:
  frequency: 868.950
  mosi_pin: GPIO13
  miso_pin: GPIO12
  clk_pin:  GPIO14
  cs_pin:   GPIO15
  gdo0_pin: GPIO17
  gdo2_pin: GPIO16

  led_pin: GPIO21

  sync_mode: false
  all_drivers: false
  log_all: true

sensor:
  - platform: wmbus
    meter_id: 0x24334557
    key: !secret wmbus1_key_24334557
    type: "iwmtx5"
    sensors:
      - field: "total"
        name: Hot water
        unit_of_measurement: "m³"
        icon: "mdi:water-thermometer"
        accuracy_decimals: 3
        state_class: total_increasing
        device_class: volume
      - field: "rssi"
        name: "Hot water RSSi"
        unit_of_measurement: "dBm"
        accuracy_decimals: 0
        device_class: "signal_strength"
        state_class: "measurement"
        entity_category: "diagnostic"
  - platform: wmbus
    meter_id: 0x93098480
    key: !secret wmbus1_key_93098480
    type: "hydroclima"
    sensors:
      - field: "current_consumption"
        name: Bedroom heat cost allocator
        unit_of_measurement: "hca"
        icon: "mdi:radiator"
        state_class: total_increasing
        accuracy_decimals: 0
      - field: "rssi"
        name: "Bedroom heat cost allocator RSSi"
        unit_of_measurement: "dBm"
        accuracy_decimals: 0
        device_class: "signal_strength"
        state_class: "measurement"
        entity_category: "diagnostic"
  - platform: wmbus
    meter_id: 0x93098479
    key: !secret wmbus1_key_93098479
    type: "hydroclima"
    sensors:
      - field: "current_consumption"
        name: Childroom heat cost allocator
        unit_of_measurement: "hca"
        icon: "mdi:radiator"
        state_class: total_increasing
        accuracy_decimals: 0
      - field: "rssi"
        name: "Childroom heat cost allocator RSSi"
        unit_of_measurement: "dBm"
        accuracy_decimals: 0
        device_class: "signal_strength"
        state_class: "measurement"
        entity_category: "diagnostic"
  - platform: wmbus
    meter_id: 0x93098478
    key: !secret wmbus1_key_93098478
    type: "hydroclima"
    sensors:
      - field: "current_consumption"
        name: Livingroom heat cost allocator
        unit_of_measurement: "hca"
        icon: "mdi:radiator"
        state_class: total_increasing
        accuracy_decimals: 0
      - field: "rssi"
        name: "Livingroom heat cost allocator RSSi"
        unit_of_measurement: "dBm"
        accuracy_decimals: 0
        device_class: "signal_strength"
        state_class: "measurement"
        entity_category: "diagnostic"
Další obrázky