Alternatywa: wM-Bus „RAW-only” (ESP = radio) + dekodowanie po stronie HA/Linux
Jeśli masz dość kombinowania z „pełnym” dekodowaniem na ESP (RAM/CPU, zawieszki od logów, updaty ESPHome, sterowniki liczników na mikrokontrolerze), to to rozwiązanie idzie w drugą stronę:
ESP robi tylko RF → MQTT (surowy telegram HEX), a dekodowanie robi wmbusmeters po stronie Home Assistant / Linux.
Co dostajesz (ważne: to są 2 osobne projekty):
Dwa niezależne komponenty, które ze sobą współpracują.
1) ESPHome: „wM-Bus Bridge (RAW-only)”
- obsługa SX1262 => HELTEC V4 / SX1276
- odbiór ramek T1 / C1
- publikacja telegramu jako HEX na MQTT (ESP jest tylko radiem)
- opcjonalna diagnostyka (dropy / summary)
Pełny opis funkcjonalności jest w pliku README.md na Githubie.
https://github.com/Kustonium/esphome-wmbus-bridge-rawonly
2) HA / Docker: „wMBus MQTT Bridge” (wmbusmeters + wejście z MQTT)
- subskrybuje topic z telegramami HEX
- podaje je do wmbusmeters przez
stdin:hex - publikuje wynik jako MQTT state + (opcjonalnie) MQTT Discovery do HA
- ma tryb LISTEN: gdy
meters[]puste, w logach wypisuje wykryte ID i sugerowany driver
Jak to działa (schemat)
ESP → MQTT (HEX telegram) → wmbusmeters (stdin:hex) → MQTT JSON/state + Discovery → Home Assistant
Domyślnie telegramy lecą na topic:
wmbus_bridge/nazwa/telegram
- gdzie "nazwa" to dowolna nazwa nadana przez użytkownika.
Instalacja w 5 minut
A) ESPHome (radio + MQTT)
- Wgrywasz YAML z przykładu (SX1262 albo SX1276).
- Najważniejsze: w
on_framepublikujesz HEX na MQTT.
Minimalny wzór:
external_components:
- source: github://Kustonium/esphome-wmbus-bridge-rawonly@main
components: [wmbus_radio]
refresh: 0s
wmbus_radio:
radio_type: SX1262 # albo SX1276
# ... piny SPI/radia ...
on_frame:
then:
- mqtt.publish:
topic: "wmbus_bridge/nazwa/telegram"
payload: !lambda |-
return frame->as_hex();
B) Home Assistant (addon) ALBO Docker (standalone)
Masz dwa warianty uruchomienia dekodera:
1) Add-on w Home Assistant
- instalujesz repo dodatku (fork wmbusmeters-ha-addon)
- po chwili w logach zobaczysz wykryte ID (DLL-ID) i sugestię drivera → dopiero wtedy wpisujesz liczniki do
meters.
2) Docker na Linuxie (bez HA)
- uruchamiasz kontener z podmontowanym
/config - po pierwszym starcie edytujesz
options.json(topic, broker, meters) i restartujesz kontener
Konfiguracja liczników (po wykryciu ID)
Wpis licznika to standard wmbusmeters: id/meter_id, type, opcjonalnie key.
Przykład:
{
"meters": [
{
"meter_id": "03528221",
"id": "Zimna Woda",
"type": "hydrodigit",
"key": "00112233445566778899AABBCCDDEEFF"
}
]
}
Dla kogo to jest (i dla kogo nie)
To jest dla Ciebie, jeśli:
- chcesz prosto i stabilnie
- nie chcesz wpychać dekodera i driverów liczników do ESP
- wolisz mieć dekodowanie na HA/Linux (łatwiej debugować, łatwiej aktualizować)
To nie jest dla Ciebie, jeśli:
- upierasz się, że wszystko ma się dekodować lokalnie na ESP i bez MQTT
==========================================================================
1. Projekt A czyli ESP - przykład yaml w katalogu examples:
Po kompilacji i uruchomieniu w logach ESP powinno być widoczne:
[09:34:44.750][I][app:215]: ESPHome version 2026.2.1 compiled on 2026-02-24 09:32:34 +0100
[09:34:44.786][I][app:222]: ESP32 Chip: ESP32-S3 rev0.2, 2 core(s)
[09:34:44.786][I][wmbus:371]: Have data (77 bytes) [RSSI: -56dBm, mode: T1 A]
[09:34:46.128][W][wmbus:341]: DROPPED packet: reason=decode_failed mode=T1 want=0 got=0 raw_got=134 RSSI=-93dBm
[09:34:46.174][W][wmbus:348]: DROPPED raw(hex)=73471c8dc5a595ab1664e58b35359a2cd69a4e64e95965965965b434b3934d358d59658c6b138e3a566ca5a98b2ce5a9b2959658d5965965965965965965965965962e659a2e32f45965965965964ec59659672358d5963a658e59659c58b5966964f1f2548b59672578b596b2358b5962da59c596c7259c5966a57263b4599596596d2364e5
[09:34:46.736][W][wmbus:341]: DROPPED packet: reason=decode_failed mode=T1 want=0 got=0 raw_got=134 RSSI=-92dBm
[09:34:46.775][W][wmbus:348]: DROPPED raw(hex)=73471c8bc5a535c6a564b58b35359370d9a94e66535965965965b434b65694b58d59659c6b13933a566cc8b8d62ce5a9b295965965965965965965965965965965966935933727235965965965966695965963b258d5965a558e596ca358e5966b194ba4b58b5969b259c5964d95995962d659a596cb159a596391c96c4b5935965962f168b5
[09:34:47.403][W][wmbus:341]: DROPPED packet: reason=decode_failed mode=T1 want=0 got=0 raw_got=134 RSSI=-95dBm
[09:34:47.409][W][wmbus:348]: DROPPED raw(hex)=73471c8dc5a164db1164e58b35359a94d70b4e63a5596d965965b434a94b69a58d59659c6b138e3a566c7134ec2ce5a9b29596596596596596596196596796596596c6c599d344db5961965965963a55965964d359659636658d5969ac59c7964d9d1a16359e5964f158e596a7158e796db258bd9671359c59649339671c599596596d2364e5
[09:34:50.144][W][wmbus:341]: DROPPED packet: reason=dll_crc_failed mode=C1 want=60 got=60 raw_got=62 RSSI=-94dBm
[09:34:50.149][W][wmbus:348]: DROPPED raw(hex)=54cd334468502001748427047cbc7a5f002025d0253529bec493809604c76e68a936dc88093d76e0a95456724e5483f9ad7e0946db6bcd0f7e8d72c571dd
[09:34:50.260][I][wmbus:371]: Have data (77 bytes) [RSSI: -55dBm, mode: T1 A]
[09:34:50.663][I][wmbus:371]: Have data (77 bytes) [RSSI: -59dBm, mode: T1 A]
[09:34:50.850][I][wmbus:371]: Have data (77 bytes) [RSSI: -89dBm, mode: T1 A]
[09:34:57.027][I][wmbus:371]: Have data (77 bytes) [RSSI: -64dBm, mode: T1 A]
[09:35:02.405][I][wmbus:371]: Have data (77 bytes) [RSSI: -78dBm, mode: T1 A]
[09:35:04.675][I][wmbus:371]: Have data (77 bytes) [RSSI: -76dBm, mode: T1 A]
[09:35:06.905][W][wmbus:341]: DROPPED packet: reason=decode_failed mode=T1 want=0 got=0 raw_got=84 RSSI=-94dBm
[09:35:06.909][W][wmbus:348]: DROPPED raw(hex)=3a971c6ac6562dc38e65970d4dc68e65ac7198e59a9692cb70d5a9b165992e35965965965a35a935a5a94e64d334b34b36636635934d3565b234e35c34b34d34e35c35c34b97435936636334b5a335635a60bc96
[09:35:06.909][I][wmbus:371]: Have data (143 bytes) [RSSI: -57dBm, mode: T1 A]
[09:35:08.445][I][wmbus:371]: Have data (77 bytes) [RSSI: -47dBm, mode: T1 A]
[09:35:09.713][I][wmbus:371]: Have data (77 bytes) [RSSI: -83dBm, mode: T1 A]
[09:35:16.472][I][wmbus:371]: Have data (77 bytes) [RSSI: -78dBm, mode: T1 A]
[09:35:19.921][I][wmbus:371]: Have data (77 bytes) [RSSI: -73dBm, mode: T1 A]
[09:35:19.934][W][wmbus:341]: DROPPED packet: reason=decode_failed mode=T1 want=0 got=0 raw_got=134 RSSI=-94dBm
[09:35:19.934][W][wmbus:348]: DROPPED raw(hex)=73470dcdc5a52cbb0b64e58b35359a64ba1c4e69ac5965965965b434b72d4d658b59659c2b139a3a566c6b23b12ce5a9b2919659649451659659659659659659659668b5b139a18b5965965945968f259659638e58e596b1658b596c8e59c5b62f1a6658b59a5963b25935966565ac5964f64a55968da5a6596c93a537165a35965964cb5a95
[09:35:20.292][I][wmbus:371]: Have data (77 bytes) [RSSI: -75dBm, mode: T1 A]
co będzie świadczyło iż płytka odbiera telegramy z urządzeń.
==========================================================================
Projekt 2 czy Wmbusmeters po stronie HA/Docker:
Po stronie HA należy wejść w Dodatki => Na dole "Sklep z Dodatkami " => prawy górny róg => 3 kropeczki => Repozytoria => Wkleić link:
https://github.com/Kustonium/homeassistant-wmbus-mqtt-bridge.git
“+Dodaj” => Zamknij.
Na dole pokaże się
Wchodzimy => Zainstaluj.
Następnie wchodzimy w zakładkę Konfiguracja
RAW topic wpisujemy : wmbus_bridge/+/telegram
=> Domyślnie dodatek sam wykrywa czy jest uruchomiony w HA i wtedy sam bierze właściwy Broker , można mu wskazac swój =<
Jeżeli pola meters są puste , uruchamiamy dodatek i wchodzimy w zakładkę Logi :
W tym trybie dodatek pokazuje co słyszy.
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
[09:43:28] INFO: MQTT broker: core-mosquitto:1883
[09:43:28] INFO: Subscribing to: wmbus_bridge/telegram
[09:43:28] INFO: wmbusmeters loglevel: normal
[09:43:28] INFO: filter_hex_only: true
[09:43:28] INFO: debug_every_n: 0
[09:43:28] INFO: discovery_enabled: true (prefix=homeassistant, retain=true)
[09:43:28] INFO: state_prefix: wmbusmeters (retain=false)
[09:43:28] INFO: options.json:
[09:43:28] INFO: {"raw_topic":"wmbus_bridge/telegram","loglevel":"normal","filter_hex_only":true,"debug_every_n":0,"discovery_enabled":true,"discovery_prefix":"homeassistant","discovery_retain":true,"state_prefix":"wmbusmeters","state_retain":false,"meters":[]}
[09:43:28] INFO: Registering meters ...
[09:43:28] WARNING: No meters configured -> LISTEN MODE.
[09:43:28] WARNING: Zostaw addon chwilę. W logach zobaczysz: 'Received telegram from: XXXXXXXX'.
[09:43:28] WARNING: To jest DLL-ID, które wpisujesz jako meter_id.
[09:43:28] INFO: Generated /data/etc/wmbusmeters.conf:
[09:43:28] INFO: [CONF] loglevel=normal
[09:43:28] INFO: [CONF] device=stdin:hex
[09:43:28] INFO: [CONF] logfile=/dev/stdout
[09:43:28] INFO: [CONF] format=json
[09:43:28] INFO: Meters directory: /data/etc/wmbusmeters.d
[09:43:28] INFO: total 8
[09:43:28] INFO: drwxr-xr-x 2 root root 4096 Feb 1 09:43 .
[09:43:28] INFO: drwxr-xr-x 3 root root 4096 Feb 1 09:43 ..
[09:43:28] INFO: Starting wmbusmeters...
Started config hextty on stdin listening on any
No meters configured. Printing id:s of all telegrams heard!
Received telegram from: 41553221
manufacturer: (TCH) Techem (0x5068)
type: Cold water (0x72)
ver: 0x74
driver: mkradio3
[09:43:29] WARNING: === NEW METER CANDIDATE DETECTED ===
[09:43:29] WARNING: Received telegram from: 41553221
[09:43:29] WARNING: Suggested driver: mkradio3
[09:43:29] WARNING: Paste into add-on options:
[09:43:29] WARNING: meters:
[09:43:29] WARNING: - id: meter_41553221
[09:43:29] WARNING: meter_id: "41553221"
[09:43:29] WARNING: type: mkradio3
[09:43:29] WARNING: key: NOKEY
[09:43:29] WARNING: ==================================
Received telegram from: 03534275
manufacturer: (BMT) BMETERS, Italy (0x9b4)
type: Water meter (0x07)
ver: 0x17
driver: hydrodigit
[09:43:30] WARNING: === NEW METER CANDIDATE DETECTED ===
[09:43:30] WARNING: Received telegram from: 03534275
[09:43:30] WARNING: Suggested driver: hydrodigit
[09:43:30] WARNING: Paste into add-on options:
[09:43:30] WARNING: meters:
[09:43:30] WARNING: - id: meter_03534275
[09:43:30] WARNING: meter_id: "03534275"
[09:43:30] WARNING: type: hydrodigit
[09:43:30] WARNING: key: NOKEY
[09:43:31] WARNING: ==================================
Received telegram from: 41551279
manufacturer: (TCH) Techem (0x5068)
type: Warm water (0x62)
ver: 0x74
driver: mkradio3
[09:43:33] WARNING: === NEW METER CANDIDATE DETECTED ===
[09:43:33] WARNING: Received telegram from: 41551279
[09:43:33] WARNING: Suggested driver: mkradio3
[09:43:33] WARNING: Paste into add-on options:
[09:43:33] WARNING: meters:
[09:43:33] WARNING: - id: meter_41551279
[09:43:33] WARNING: meter_id: "41551279"
[09:43:33] WARNING: type: mkradio3
[09:43:33] WARNING: key: NOKEY
[09:43:33] WARNING: ==================================
Received telegram from: 03528495
manufacturer: (BMT) BMETERS, Italy (0x9b4)
type: Warm Water (30°C-90°C) meter (0x06)
ver: 0x17
driver: hydrodigit
[09:43:33] WARNING: === NEW METER CANDIDATE DETECTED ===
[09:43:33] WARNING: Received telegram from: 03528495
[09:43:33] WARNING: Suggested driver: hydrodigit
[09:43:33] WARNING: Paste into add-on options:
[09:43:33] WARNING: meters:
[09:43:33] WARNING: - id: meter_03528495
[09:43:33] WARNING: meter_id: "03528495"
[09:43:33] WARNING: type: hydrodigit
[09:43:33] WARNING: key: NOKEY
[09:43:33] WARNING: ==================================
Received telegram from: 03534157
manufacturer: (BMT) BMETERS, Italy (0x9b4)
type: Water meter (0x07)
ver: 0x17
driver: hydrodigit
[09:43:33] WARNING: === NEW METER CANDIDATE DETECTED ===
[09:43:33] WARNING: Received telegram from: 03534157
[09:43:33] WARNING: Suggested driver: hydrodigit
[09:43:33] WARNING: Paste into add-on options:
[09:43:33] WARNING: meters:
[09:43:33] WARNING: - id: meter_03534157
[09:43:33] WARNING: meter_id: "03534157"
[09:43:33] WARNING: type: hydrodigit
[09:43:33] WARNING: key: NOKEY
[09:43:33] WARNING: ==================================
Received telegram from: 03534249
manufacturer: (BMT) BMETERS, Italy (0x9b4)
type: Water meter (0x07)
ver: 0x17
driver: hydrodigit
[09:43:38] WARNING: === NEW METER CANDIDATE DETECTED ===
[09:43:38] WARNING: Received telegram from: 03534249
[09:43:38] WARNING: Suggested driver: hydrodigit
[09:43:38] WARNING: Paste into add-on options:
[09:43:38] WARNING: meters:
[09:43:38] WARNING: - id: meter_03534249
[09:43:38] WARNING: meter_id: "03534249"
[09:43:38] WARNING: type: hydrodigit
[09:43:38] WARNING: key: NOKEY
[09:43:38] WARNING: ==================================
Received telegram from: 03528302
manufacturer: (BMT) BMETERS, Italy (0x9b4)
type: Warm Water (30°C-90°C) meter (0x06)
ver: 0x17
driver: hydrodigit
[09:43:38] WARNING: === NEW METER CANDIDATE DETECTED ===
[09:43:38] WARNING: Received telegram from: 03528302
[09:43:38] WARNING: Suggested driver: hydrodigit
[09:43:38] WARNING: Paste into add-on options:
[09:43:38] WARNING: meters:
[09:43:38] WARNING: - id: meter_03528302
[09:43:38] WARNING: meter_id: "03528302"
[09:43:38] WARNING: type: hydrodigit
[09:43:38] WARNING: key: NOKEY
[09:43:38] WARNING: ==================================
Received telegram from: 41467340
manufacturer: (TCH) Techem (0x5068)
type: Cold water (0x72)
ver: 0x74
driver: mkradio3
[09:43:38] WARNING: === NEW METER CANDIDATE DETECTED ===
[09:43:38] WARNING: Received telegram from: 41467340
[09:43:38] WARNING: Suggested driver: mkradio3
[09:43:38] WARNING: Paste into add-on options:
[09:43:38] WARNING: meters:
[09:43:38] WARNING: - id: meter_41467340
[09:43:38] WARNING: meter_id: "41467340"
[09:43:38] WARNING: type: mkradio3
[09:43:38] WARNING: key: NOKEY
[09:43:38] WARNING: ==================================
Received telegram from: 03551587
manufacturer: (BMT) BMETERS, Italy (0x9b4)
type: Water meter (0x07)
ver: 0x17
driver: hydrodigit
[09:43:39] WARNING: === NEW METER CANDIDATE DETECTED ===
[09:43:39] WARNING: Received telegram from: 03551587
[09:43:39] WARNING: Suggested driver: hydrodigit
[09:43:39] WARNING: Paste into add-on options:
[09:43:39] WARNING: meters:
[09:43:39] WARNING: - id: meter_03551587
[09:43:39] WARNING: meter_id: "03551587"
[09:43:39] WARNING: type: hydrodigit
[09:43:39] WARNING: key: NOKEY
[09:43:39] WARNING: ==================================
Received telegram from: 03528099
manufacturer: (BMT) BMETERS, Italy (0x9b4)
type: Warm Water (30°C-90°C) meter (0x06)
ver: 0x17
driver: hydrodigit
[09:43:44] WARNING: === NEW METER CANDIDATE DETECTED ===
[09:43:44] WARNING: Received telegram from: 03528099
[09:43:44] WARNING: Suggested driver: hydrodigit
[09:43:44] WARNING: Paste into add-on options:
[09:43:44] WARNING: meters:
[09:43:44] WARNING: - id: meter_03528099
[09:43:44] WARNING: meter_id: "03528099"
[09:43:44] WARNING: type: hydrodigit
[09:43:44] WARNING: key: NOKEY
[09:43:44] WARNING: ==================================
Co pozwala w sposób jednoznaczny ustalić przez użytkownika jego liczniki, które w następnym kroku dodajemy w oknie Konfiguracji jako meters po naciśnięciu Utwórz:
id => przyjazna nazwa
meter_id => cyfra urządzenia użytkownika
type => tzw driver z rozwijalnej listy lub tryb auto
key = > klucz szyfrujący ( jeżeli urządzenie nie ma klucza nic nie wpisujemy ).
I na końcu Utwórz.
Po utworzenie zatwierdzamy zmiany
Potwierdzamy że dodatek ma się zrestartować.
Wchodzimy z powrotem do zakładki Logi dodatku :
[09:55:24] INFO: MQTT broker: core-mosquitto:1883
[09:55:24] INFO: Subscribing to: wmbus_bridge/telegram
[09:55:24] INFO: wmbusmeters loglevel: normal
[09:55:24] INFO: filter_hex_only: true
[09:55:24] INFO: debug_every_n: 0
[09:55:24] INFO: discovery_enabled: true (prefix=homeassistant, retain=true)
[09:55:24] INFO: state_prefix: wmbusmeters (retain=false)
[09:55:24] INFO: options.json:
[09:55:24] INFO: {"raw_topic":"wmbus_bridge/telegram","loglevel":"normal","filter_hex_only":true,"debug_every_n":0,"discovery_enabled":true,"discovery_prefix":"homeassistant","discovery_retain":true,"state_prefix":"wmbusmeters","state_retain":false,"meters":[{"meter_id":"03528221","id":"Zimna Woda","type":"hydrodigit"},{"id":"Ciepła woda","meter_id":"03534159","type":"hydrodigit"}]}
[09:55:24] INFO: Registering meters ...
[09:55:24] INFO: Added /data/etc/wmbusmeters.d/meter-0001 (name=Zimna Woda, driver=hydrodigit, id=03528221)
[09:55:24] INFO: Added /data/etc/wmbusmeters.d/meter-0002 (name=Ciepła woda, driver=hydrodigit, id=03534159)
[09:55:24] INFO: Generated /data/etc/wmbusmeters.conf:
[09:55:24] INFO: [CONF] loglevel=normal
[09:55:24] INFO: [CONF] device=stdin:hex
[09:55:24] INFO: [CONF] logfile=/dev/stdout
[09:55:24] INFO: [CONF] format=json
[09:55:24] INFO: Meters directory: /data/etc/wmbusmeters.d
[09:55:24] INFO: total 16
[09:55:24] INFO: drwxr-xr-x 2 root root 4096 Feb 1 09:55 .
[09:55:24] INFO: drwxr-xr-x 3 root root 4096 Feb 1 09:43 ..
[09:55:24] INFO: -rw-r--r-- 1 root root 56 Feb 1 09:55 meter-0001
[09:55:24] INFO: -rw-r--r-- 1 root root 58 Feb 1 09:55 meter-0002
[09:55:24] INFO: Starting wmbusmeters...
Started config hextty on stdin listening on any
{"_":"telegram","media":"water","meter":"hydrodigit","name":"Ciepła woda","id":"03534159","backflow_m3":0,"meter_datetime":"2026-02-01 10:01","total_m3":17.593,"voltage_v":3.7,"contents":"BATTERY_VOLTAGE FRAUD_DATE LEAK_DATE BACKFLOW","fraud_date":"2000-00-00","fraud_type":"no type info","leak_date":"2000-00-00","timestamp":"2026-02-01T08:56:01Z"}
[09:56:01] INFO: MQTT discovery published for id=03534159 (topic=homeassistant/sensor/wmbus_03534159/total_m3/config)
I czekamy aż dane urządzenie prześle swoje dane - tu widać że przesłało.
Finalnie wchodzimy w ustawienia => Urządzenia oraz usługi => MQTT:
Na moim przykładzie widać dodany licznik od ciepłej wody.










