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.
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.
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ł
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.
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.
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.