Komponent wM-Bus do ESPHome wersja 5.x - wątek ogólny

Sorki za OFF-TOP.
Nie poddałem się bo jestem uparty.
Moje założenie było aby oddzielić najbardziej krytyczną część kodu z układu ESP i przerzucić ją na HA tj usunąłem dekoder wmbus który jest najbardziej obciążający.

Obecnie testuje że płytka ESP wysyła gotowe ramki T1 do HA a wmbusmeters je dekoduje :

ESP :

[08:36:40.055][D][wmbusmeters:351]: (wmbus) trimmed frame A "2F446850381855417462A2069F336B05C003170000000611090709090F080A080A090C0E0A070607060A060207060807"
[08:36:40.059][D][wmbusmeters:351]: (wmbus) checkWMBUSFrame "2F446850381855417462A2069F336B05C003170000000611090709090F080A080A090C0E0A070607060A060207060807"
[08:36:40.065][I][wmbus:047]: Have data (48 bytes) [RSSI: -86dBm, mode: T1 A]
[08:36:40.069][I][wmbus:056]: Telegram handled by 1 handlers
[08:36:40.228][D][packet:097]: Have data from radio (84 bytes)
[08:36:40.235][D][wmbusmeters:351]: raw packet "3A971C6AC65638D2CE65970D4DC4CECB2C5A98E59A9692CB2F2599D1658B3695963565965B434B5A335CB236A635A35A34E35C35C35337134D5B235934E35A5A935C5AC34B4D372634B34E5A935C35C34BB2C659"
[08:36:40.239][D][wmbusmeters:351]: (wmbus) trimming frame A "2F446850213255417472EED6A2069F333E05C0031F0010000C130B148B6A1616121414171D110E1512160F140813774A13120F1414138855"
[08:36:40.247][D][wmbusmeters:351]: (wmbus) trimmed frame A "2F446850213255417472A2069F333E05C0031F0010000C130B141616121414171D110E1512160F14081313120F141413"
[08:36:40.252][D][wmbusmeters:351]: (wmbus) checkWMBUSFrame "2F446850213255417472A2069F333E05C0031F0010000C130B141616121414171D110E1512160F14081313120F141413"
[08:36:40.257][I][wmbus:047]: Have data (48 bytes) [RSSI: -91dBm, mode: T1 A]
[08:36:40.264][I][wmbus:056]: Telegram handled by 1 handlers
[08:36:40.898][D][packet:097]: Have data from radio (134 bytes)
[08:36:40.903][D][wmbusmeters:351]: raw packet 

Home assistance:

[07:54:12] INFO: MQTT broker: core-mosquitto:1883
[07:54:12] INFO: Subscribing to: wmbus_bridge/sensor/wm-bus/raw
[07:54:12] INFO: Registering meters ...
[07:54:12] INFO: options.json:
[07:54:12] INFO: {"raw_topic":"wmbus_bridge/sensor/wm-bus/raw","meters":[{"id":"cold_water","meter_id":"55701281","type":"hydrodigit","mode":"T1"},{"id":"hot_water","meter_id":"55701849","type":"hydrodigit","mode":"T1"}]}
[07:54:12] INFO: Added /data/etc/wmbusmeters.d/meter-0001 (name=cold_water, driver=hydrodigit, id=55701281)
[07:54:12] INFO: Added /data/etc/wmbusmeters.d/meter-0002 (name=hot_water, driver=hydrodigit, id=55701849)
[07:54:12] INFO: Generated /data/etc/wmbusmeters.conf:
[07:54:12] INFO: [CONF] loglevel=normal
[07:54:12] INFO: [CONF] device=stdin:hex
[07:54:12] INFO: [CONF] logfile=/dev/stdout
[07:54:12] INFO: [CONF] format=json
[07:54:12] INFO: Meters directory: /data/etc/wmbusmeters.d
[07:54:12] INFO: total 16
[07:54:12] INFO: drwxr-xr-x    2 root     root          4096 Jan 28 07:54 .
[07:54:12] INFO: drwxr-xr-x    3 root     root          4096 Jan 27 18:04 ..
[07:54:12] INFO: -rw-r--r--    1 root     root            56 Jan 28 07:54 meter-0001
[07:54:12] INFO: -rw-r--r--    1 root     root            55 Jan 28 07:54 meter-0002
[07:54:12] INFO: Starting wmbusmeters...
Started config hextty on stdin listening on any
s6-rc: info: service legacy-services: stopping
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
services-up: info: copying legacy longrun wmbus_mqtt_bridge (no readiness notification)
s6-rc: info: service legacy-services successfully started
[08:33:01] INFO: MQTT broker: core-mosquitto:1883
[08:33:01] INFO: Subscribing to: wmbus_bridge/sensor/wm-bus/raw
[08:33:01] INFO: wmbusmeters loglevel: debug
[08:33:01] INFO: filter_hex_only: true
[08:33:01] INFO: debug_every_n: 10
[08:33:01] INFO: options.json:
[08:33:01] INFO: {"raw_topic":"wmbus_bridge/sensor/wm-bus/raw","loglevel":"debug","filter_hex_only":true,"debug_every_n":10,"meters":[]}
[08:33:01] INFO: Registering meters ...
[08:33:01] WARNING: Brak meterów w konfiguracji -> TRYB NASŁUCHU.
[08:33:01] WARNING: Addon wypisze wykryte meter_id + gotowy snippet YAML do wklejenia.
[08:33:01] INFO: Generated /data/etc/wmbusmeters.conf:
[08:33:01] INFO: [CONF] loglevel=debug
[08:33:01] INFO: [CONF] device=stdin:hex
[08:33:01] INFO: [CONF] logfile=/dev/stdout
[08:33:01] INFO: [CONF] format=json
[08:33:01] INFO: Meters directory: /data/etc/wmbusmeters.d
[08:33:01] INFO: total 8
[08:33:01] INFO: drwxr-xr-x    2 root     root          4096 Jan 28 08:33 .
[08:33:01] INFO: drwxr-xr-x    3 root     root          4096 Jan 27 18:04 ..
[08:33:01] INFO: Starting wmbusmeters...
(config) "device" "stdin:hex"
(wmbusmeters) version: 1.20.0
(config) using device: stdin:hextty:any 
(config) number of meters: 0
(serial) expecting devices to work
(lookup) with file/hex "stdin" hextty
(lookup) driver: hextty
(main) opening stdin:hextty:any
Started config hextty on stdin listening on any
(serial) override with devicefile: stdin
(hextty) on stdin
(serialfile) reading from stdin (override stdin)
(main) regular reset of hextty  on stdin will happen every 82800 seconds
(wmbus) no alarm (expected activity) for hextty
(serial) registered regular callback HOT_PLUG_DETECTOR(0) every 2 seconds
No meters configured. Printing id:s of all telegrams heard!
(serial) waiting for stop
(serial) received binary "346334346234303934393832353230333137303637613761303030303030306331333638373530313030303436643165323835633331306638663030303030303030303030303030303030303030303030303030303030303030303033613030303032623031303063363031303063393032303036383033303036303034303031303035303035663035303064333035303036383036303030300A"
found 154 hex chars and 1 other bytes
converted 154 hex bytes into 77 binary bytes.
(wmbus) checkWMBUSFrame "4C44B4094982520317067A7A0000000C1368750100046D1E285C310F8F00000000000000000000000000000000003A00002B0100C60100C902006803006004001005005F0500D3050068060000"
(wmbus) received full frame.
(meter) no meter handled  checking 0 templates.
(wmbus) parseDLL @0 77
(wmbus) parseELL @10 67
(wmbus) parseNWL @10 67
(wmbus) parseAFL @10 67
(wmbus) parseTPL @10 67
(dvparser) found new format "0C13046D" with hash 4e2c, remembering!
(wmbus) parseDLL @0 77
(telegram) DLL L=4c C=44 (from meter SND_NR) M=09b4 (BMT) A=03528249 VER=17 TYPE=06 (Warm Water (30°C-90°C) meter) (driver hydrodigit) DEV= RSSI=0
(wmbus) parseELL @10 67
(wmbus) parseNWL @10 67
(wmbus) parseAFL @10 67
(wmbus) parseTPL @10 67
(telegram) TPL CI=7a ACC=7a STS=00 CFG=0000 ()
Received telegram from: 03528249
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
(wmbus) 000   : 4c length (76 bytes)
(wmbus) 001   : 44 dll-c (from meter SND_NR)
(wmbus) 002   : b409 dll-mfct (BMT)
(wmbus) 004   : 49825203 dll-id (03528249)
(wmbus) 008   : 17 dll-version
(wmbus) 009   : 06 dll-type (Warm Water (30°C-90°C) meter)
(wmbus) 010   : 7a tpl-ci-field (EN 13757-3 Application Layer (short tplh))
(wmbus) 011   : 7a tpl-acc-field
(wmbus) 012   : 00 tpl-sts-field (OK)
(wmbus) 013   : 0000 tpl-cfg 0000 ( )
(wmbus) 015   : 0C dif (8 digit BCD Instantaneous value)
(wmbus) 016   : 13 vif (Volume l)
(wmbus) 017 C?: 68750100
(wmbus) 021   : 04 dif (32 Bit Integer/Binary Instantaneous value)
(wmbus) 022   : 6D vif (Date and time type)
(wmbus) 023 C?: 1E285C31
(wmbus) 027 C?: 0F manufacturer specific data 8F00000000000000000000000000000000003A00002B0100C60100C902006803006004001005005F0500D3050068060000
(wmbus) telegram from TODO ignored by all configured meters!
(wmbus) checkWMBUSFrame ""
(wmbus) less than 11 bytes, partial frame
(serial) received binary 

Jak zakończe to u siebie z powodzeniem to się podziele wynikiem.

Super pomysł widzę że już odczytuje datę i objętość, a i jeszcze to:

I chyba mi się udało…

s6-rc: info: service legacy-services successfully started
[09:21:17] INFO: MQTT broker: core-mosquitto:1883
[09:21:17] INFO: Subscribing to: wmbus_bridge/telegram
[09:21:17] INFO: wmbusmeters loglevel: normal
[09:21:17] INFO: filter_hex_only: true
[09:21:17] INFO: debug_every_n: 0
[09:21:17] INFO: options.json:
[09:21:17] INFO: {"raw_topic":"wmbus_bridge/telegram","loglevel":"normal","filter_hex_only":true,"debug_every_n":0,"meters":[]}
[09:21:17] INFO: Registering meters ...
[09:21:17] WARNING: No meters configured -> LISTEN MODE.
[09:21:17] WARNING: Zostaw addon chwilę. W logach zobaczysz: 'Received telegram from: XXXXXXXX'.
[09:21:17] WARNING: To jest DLL-ID, które wpisujesz jako meter_id.
[09:21:17] INFO: Generated /data/etc/wmbusmeters.conf:
[09:21:17] INFO: [CONF] loglevel=normal
[09:21:17] INFO: [CONF] device=stdin:hex
[09:21:17] INFO: [CONF] logfile=/dev/stdout
[09:21:17] INFO: [CONF] format=json
[09:21:17] INFO: Meters directory: /data/etc/wmbusmeters.d
[09:21:17] INFO: total 8
[09:21:17] INFO: drwxr-xr-x    2 root     root          4096 Jan 28 08:33 .
[09:21:17] INFO: drwxr-xr-x    3 root     root          4096 Jan 27 18:04 ..
[09:21:17] INFO: Starting wmbusmeters...
Started config hextty on stdin listening on any
No meters configured. Printing id:s of all telegrams heard!
Received telegram from: 41551450
          manufacturer: (TCH) Techem (0x5068)
                  type: Cold water (0x72)
                   ver: 0x74
                driver: mkradio3
Received telegram from: 03528419
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03528249
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03528221
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03575707
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03536902
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Water meter (0x07)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03534156
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Water meter (0x07)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03536903
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Water meter (0x07)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03534235
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Water meter (0x07)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03534120
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Water meter (0x07)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03528568
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03528287
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03528297
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 41467742
          manufacturer: (TCH) Techem (0x5068)
                  type: Cold water (0x72)
                   ver: 0x74
                driver: mkradio3
Received telegram from: 03528308
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03528410
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03575413
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Water meter (0x07)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: a635a5c5
          manufacturer: (CJ\) Unknown (0x8d5c)
                  type: Unknown (0x64)
                   ver: 0xa5
                driver: unknown!
Received telegram from: 03534157
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Water meter (0x07)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03534275
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Water meter (0x07)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03528495
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03534249
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Water meter (0x07)
                   ver: 0x17
                driver: hydrodigit
Received telegram from: 03528302
          manufacturer: (BMT) BMETERS, Italy (0x9b4)
                  type: Warm Water (30°C-90°C) meter (0x06)
                   ver: 0x17
                driver: hydrodigit

Widzę w logach sporo sprzętu od BMETERS i techem. Żeby to miało ręce i nogi musisz teraz tylko wyłapać które z tych numerów ID są przypisane konkretnie do twojego licznika.

Zrób mały spacer do szafki znajdź swoje fizyczne liczniki wody lub ciepła.

Spisz numery seryjnego na obudowie – zazwyczaj to 8 cyfr.

Jeden z tych numerów powinien się pokrywać z tymco widzisz w logi.

Ja swoje znam. Puściłem dla testów co widzi Wmbusmeters po stronie HA

11 postów zostało scalonych z istniejącym tematem: Odczyt licznika prądu PGE przez Wm-bus - Gama 350 Typ G35

Czyli napisales na nowo v1 albo stary komponent gateway.

To wszystko jest w repo obok.

Dla ścisłości. Wykorzystałem Twój komponent ESP z wersji 5 a po stronie HA zmodyfikowałem Addon Wmbusmeters aby czytał z wejścia STDIN.

Czyli:

esphome:
  name: esphome-web-5a16c4
  friendly_name: UltimateReader
  min_version: 2025.11.0
  name_add_mac_suffix: false

  project:
    name: wmbus.UltimateReader
    version: "5.0.1"

esp32:
  board: esp32-s3-devkitc-1
  variant: esp32s3
  framework:
    type: esp-idf

external_components:
   - source: github://SzczepanLeon/esphome-components@main
     components:  [wmbus_common, wmbus_radio]
     refresh: 0d    
    
logger:
  level: info
  logs:
    wmbus: info
    wmbusmeters: info


api:

ota:
  - platform: esphome

wifi:
  id: wifi0
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  power_save_mode: none

  ap:
    ssid: "UltimateReader Fallback"
    password: "12345678"

mqtt:
  broker: !secret mqtt_broker
  username: !secret mqtt_user
  password: !secret mqtt_password


captive_portal:

time:
  - platform: homeassistant

# --- SPI (SX1276) ---
spi:
  id: spi_lora
  clk_pin: GPIO05
  mosi_pin: GPIO06   # SDI radia (MCU->radio)
  miso_pin: GPIO03   # SDO radia (radio->MCU)


# --- I2C (OLED) ---
i2c:
  id: i2c0
  sda: GPIO18
  scl: GPIO17
  frequency: 400kHz
  scan: true

# LED statusu (bez pinów PSRAM)
output:
  - platform: gpio
    id: status_led
    pin: GPIO15

# Debug (żeby działały sensory debug)
#debug:

# --- Radio wM-Bus (SX1276) ---
wmbus_radio:
  radio_type: SX1276
  spi_id: spi_lora
  cs_pin: GPIO07
  reset_pin: GPIO08
  irq_pin:
    number: GPIO33
    mode:
      input: true
      pullup: true

  on_frame:
    then:
      - if:
          condition:
            lambda: |-
              // odfiltruj krótkie śmieci (8B itp.)
              return frame->as_hex().size() >= 30;
          then:
            - mqtt.publish:
                topic: "wmbus_bridge/telegram"
                payload: !lambda |-
                  return frame->as_hex();


A po stronie HA stworzyłem Dodatek:

a w konsekwencji :


1 polubienie

Dokladnie taka robote robi stary komponent wmbusgateway albo kazda inna nowa wersja bez zdefiniowanych sensorow

mozesz jechac po MQTT albo zwyczajjie TCP/UDP

To mi wytłumacz czemu ludzie nie korzystają z “łatwiejszej” metody ?
Je nie dekoduje w swojej wersji ramek. Właśnie po to aby nie zabijać układu. Sorki za OFF-TOP

Bo nie wiedzą, że się da (a czy metoda łatwiejsza, to też dyskusyjne)? Ja np. nie miałem pojęcia do dziś, a zainteresowałem się dodatkiem na przełomie v4/v5 i nie zgłębiałem jego historii. Wcześniej miałem działające rozwiązanie z RTL-SDR, automatyzacją wyciągającą dane z pakietu i zainstalowanym na boku wmbusmeters (konfiguracja tego jako dodatku w HA też mnie przerosła).

Poza wszystkim, rozwiązanie all-in-one Szczepana jest świetne: mam v5 bodaj z czerwca 2025, radio SX1276 i uptime ESP kilka miesięcy. Nie zamierzam tego ruszać dopóki nie będę musiał :slight_smile:

Owszem TAK , Szczepan zrobił bardzo dobrą robotę i chwała mu za to.
Tylko Ja chciałem zrobić wersję bardziej odporną na zmiany w samym ESP i możliwą do zaimplementowania na każdej płytce ( powiedzmy ) z radiem a nie milion forków i repo.

Chwała Ci za to; cieszę że się dowiedziałem o istnieniu alternatywnej metody, gdyby obecna kiedyś się wyczerpała.

Generalnie jest to wersja która już działa …u mnie.
Więc jeżeli ktoś chce wypróbować - nie widzę przeszkód

To proste - dla większości nie jest łatwiejsza.

Ja już podałem daczego wole dekodować na ESP i nie zamierzam tego ESP aktualizować.

2 polubienia

Ok. Tylko np u mnie gdy zakupiłem produkt to nie było jeszcze ESP-IDF tylko Arduino Framework a że mi w domu wymienili liczniki to napotkałem problem. Po drugie nie mam sticka na USB bo u mnie WMBUSMETERS nie czyta ze sticka . Właśnie po to tak przerobiłem.

Host + addon (dodatkowe +3–4 W)

  • 3 W → 26,28 kWh/rok → 34,16 zł/rok
  • 4 W → 35,04 kWh/rok → 45,55 zł/rok

ESP32 + CC1101 (~0,5 W)

  • 0,5 W → 4,38 kWh/rok → 5,69 zł/rok

Różnica: host+addon vs ESP+CC1101

(bo to Cię realnie interesuje ekonomicznie)

  • 2,5 W → 21,90 kWh/rok → 28,47 zł/rok
  • 3,5 W → 30,66 kWh/rok → 39,86 zł/rok

Dla szybkiego czucia skali: to jest ok. 2,37–3,32 zł miesięcznie różnicy.

Reasumując.

Nie nakłaniam absolutnie nikogo aby używać mój dodatek.
On powstał dokładnie dlatego bo napotkałem te same problemy które są opisywane w tym wątku.

Pomimo iż już Ci odpowiedziałem na Twoje pytanie musiałem poprosić GPT o analizę twojego kodu Gataway vs moje rozwiązanie.

U Ciebie ESP faktycznie emuluje dongla RTL-SDR i zachowuje model wejścia wmbusmeters.

U mnie podejście jest inne: nie symuluję sprzętu radiowego, tylko dostarczam wmbusmeters gotowe ramki wM-Bus jako dane logiczne.

To pozwala uruchomić wmbusmeters jako add-on Home Assistant bez USB/SDR i bez warstwy PHY, przy zachowaniu tego samego dekodera.

Bo zamiast symulować radio i ciągnąć warstwę sprzętową do HA, uprościłem architekturę: ESP dostarcza gotowe ramki protokołu, a ciężkie dekodowanie wykonuje wmbusmeters uruchomiony jako add-on Home Assistant.

Skąd można pobrać do testów Twój dodatek wmbus mqtt bridge?