Alternatywa: “odchudzony” komponent ESPHome (wM-BUS) – tylko RF→MQTT, dekodowanie poza ESP

Jak dokładnie ma być skonfigurowany wmbusmeters Home Assistant Add-on ?
Przy takiej konfiguracji:
device=/dev/null
donotprobe=/dev/ttyAMA0net
format=json
logfile=/dev/stdout
loglevel=normal
logtelegrams=true
shell=/wmbusmeters/mosquitto_pub.sh “wmbusmeters/$METER_NAME” “$METER_JSON”
raw_topic=wmbus_bridge/telegram

mam błąd :
[19:42:10] INFO: Running wmbusmeters …

No such key: raw_topic

You have to specify the expected device type for the tty /dev/null

[18:42:10] WARNING: wmbusmeters exited with status 1.

Tak jak w opisie - jak uruchomisz dodatek bez wpisywania czegokolwiek on jest w trybie słuchania. W log pokazuje co słyszy.
Dopiero jak wpiszesz co chcesz słuchać czyli ID to on zacznie tylko je wyłapywać.
Napisałeś jako addon HA. Nic absolutnie nie wpisujesz do jego plików konfiguracyjnych - on słucha wyłącznie z wejścia które mu zdefiniowałem.

ale piszesz żeby tak ustawić dodatek:

a ja otrzymuję błąd że nie ma takiego klucza jak raw_topic
liczniki mam skonfigurowane

Nic nie wpisujesz - poprawiłem już opis bo to błąd.

na jakim porcie ten dodatek nasłuchuje ?
9011 UDP
9012 TCP ?

On nie słucha po TCP/UDP a STDIN/HEX

ok, telegramy idą na MQTT:


ale wmbusmeter addon ich nie czyta. Jest uruchomiony na defaultowych ustawieniach zgodnie z instrukcją:

[16:13:54] INFO: Starting web configuration service.

[16:13:54] INFO: Starting wmbusmeters service.

s6-rc: info: service legacy-services successfully started

[16:13:54] INFO: CONFIG_CONF ...

[16:13:54] INFO: {"loglevel":"normal","device":"auto:t1","donotprobe":"/dev/ttyAMA0","logtelegrams":"false","format":"json","logfile":"/dev/stdout","shell":"/wmbusmeters/mosquitto_pub.sh \"wmbusmeters/$METER_NAME\" \"$METER_JSON\""}

[16:13:54] INFO: CONFIG_METERS ...

[16:13:54] INFO: []

[16:13:54] INFO: Syncing wmbusmeters configuration ...

[16:13:54] INFO: Registering meters ...

[16:13:54] INFO: Generating MQTT configuration ...

[16:13:55] INFO: MQTT service found, fetching credentials ...

[16:13:55] INFO: Broker core-mosquitto will be used.

[16:13:55] INFO: MQTT Discovery cleanup...

[16:13:55] INFO: Starting Nginx...

2026/02/23 16:13:55 [notice] 93#93: using the "epoll" event method

2026/02/23 16:13:55 [notice] 93#93: nginx/1.28.0

2026/02/23 16:13:55 [notice] 93#93: OS: Linux 6.12.67-haos

2026/02/23 16:13:55 [notice] 93#93: getrlimit(RLIMIT_NOFILE): 1024:524288

2026/02/23 16:13:55 [notice] 93#93: start worker processes

2026/02/23 16:13:55 [notice] 93#93: start worker process 218

[16:13:56] INFO: Running wmbusmeters ...

No wmbus device detected, waiting for a device to be plugged in.

No meters configured. Printing id:s of all telegrams heard!

No meters configured. Printing id:s of all telegrams heard!

Widzę że uruchomiłeś to jako Docker.
Tu jest ciut inna filozofia.
Program sam tworzy pliki konfiguracyjne.
Wg mnie wziąłeś niewłaściwy entry point do dockera bo mój addon ma je dwa.
A chyba zainstalowałeś oficjalny Wmbusmeters co wskazuje log.
W katalogu Docker/Examples repo masz pliki do Dockera.

services:
  mosquitto:
    image: eclipse-mosquitto:2
    container_name: mosquitto
    ports:
      - "1883:1883"
    volumes:
      - ./mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf:ro
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
    restart: unless-stopped

  wmbus:
    build:
      context: ../..
      dockerfile: Dockerfile
      target: docker
    container_name: wmbus
    depends_on:
      - mosquitto
    volumes:
      - ./config:/config
    restart: unless-stopped

A skoro możesz instalować Wmbumeters normalnie to mój dodatek teoretycznie powinien dać się zainstalować w HA.

ok, za dużo kombinowałem w oryginalnym wmbusmetrem i z wsadem SzczepanLeon. Teraz wszystko zagrało. Ale żeby nie było tak pięknie to…
Mam dwa liczniki, energi amiplus i wody flowiq2020. Dekodowanie ramek z licznika energi jest bezbłedna, niestety z licznika wody jest problem z dekrypcja. meter_id i key są w 100% prawidłowe. Dwa razy zakładałem licznik w konfiguracji. na innej płytce esp32 na tym kluczu wszystko ładnie się dekoduje.

(meter) cold_water(1) flowiq2200 handling telegram from 54445422.M=KAW.V=3c.T=16

(meter) cold_water 54445422.M=KAW.V=3c.T=16 “3444372C225444543C168D202040E7332015E8F89CCFCF55200B1AC49897EB384B5589DDC52B067C8A0F24F4C4CF672A64D2963C5D”

(telegram) DLL L=34 C=44 (from meter SND_NR) M=2c37 (KAW) A=54445422 VER=3c TYPE=16 (Cold water meter) (driver flowiq2200) DEV= RSSI=0

(wmbus) WARNING! decrypted payload crc failed check, did you use the correct decryption key? 32a5 payload crc (calculated 50ac) Permanently ignoring telegrams from id: 54445422 mfct: (KAW) Kamstrup, Denmark (0x2c37) type: Cold water meter (0x16) ver: 0x3c

Dzięki. Poprawie to w kodzie bo mam na sztywno ustawione które ma odbierać.

Poprawiłem - to było wyłącznie dla płytki SX1262 więc teraz teoretycznie powinno być OK.

Niestety nie pomogło. Ja mam radio SX1276 (Lora T3S3)

(meter) cold_water: for me? 54445422.M=KAW.V=3c.T=16 in 54445422

(meter) cold_water: yes for me

(meter) cold_water(1) flowiq2200 handling telegram from 54445422.M=KAW.V=3c.T=16

(meter) cold_water 54445422.M=KAW.V=3c.T=16 "3444372C225444543C168D20B1E2ED33206A8219A63990D31633D20D16CF0A581892948A5B0644956F00A2B4B1CB7A30745B2A49F9"

(wmbus) parseDLL @0 53

(telegram) DLL L=34 C=44 (from meter SND_NR) M=2c37 (KAW) A=54445422 VER=3c TYPE=16 (Cold water meter) (driver flowiq2200) DEV= RSSI=0

(wmbus) parseELL @10 43

(ELL) decrypting "6A8219A63990D31633D20D16CF0A581892948A5B0644956F00A2B4B1CB7A30745B2A49F9"

(ELL) IV 372C225444543C1620E2ED3320000000

(ELL) block 0 block_size 16 offset 0

(ELL) decrypted "5EB2790509A68400000000D0AA000053"

(ELL) block 1 block_size 16 offset 16

(ELL) decrypted "0406600006600041320A12000007D200"

(ELL) block 2 block_size 4 offset 32

(ELL) decrypted "000FAC12"

(ELL) decrypted "5EB2790509A68400000000D0AA0000530406600006600041320A12000007D200000FAC12"

(wmbus) WARNING! decrypted payload crc failed check, did you use the correct decryption key? 5eb2 payload crc (calculated 613f) Permanently ignoring telegrams from id: 54445422 mfct: (KAW) Kamstrup, Denmark (0x2c37) type: Cold water meter (0x16) ver: 0x3c

Poprawię tym razem, ale do wstawiania yaml/logów użyj znaku(`)(akcent grawis) który znajduje się na klawiszu razem z tyldą(~), a dokładnie trzy razy (```) i zamknij tak samo

Czyli:
```
logi lub kod
```

1 polubienie

Spróbuj tak .
Jeżeli masz dwie płytki porównaj hexy na tym samym sofcie.
Jeżeli masz jedną to wgraj inny soft i porównaj hexy.
Zobacz do log płytki czy ona widzi to jako C1/2.
Ja nie mam takowego licznika niestety .

EDIT - poprawiłem kod.

O co Cię teraz proszę :

U Ciebie to nie wygląda jak “zły klucz”, tylko jak uszkodzone telegramy po radiu, a wmbusmeters wtedy często mylnie wyświetla wrong key i potrafi jeszcze licznik zablokować (Permanently ignoring…).

Teraz mam w firmware diagnostykę, która rozdziela te dwa przypadki.

Co proszę wklej

  1. Jedną wiadomość MQTT z topicu wmbus/diag (event: summary)
  2. 10–20 linii logu z ESPHome, żeby było widać:
  • Have data (... mode: C1 ...) albo
  • DROPPED ... mode=C1 reason=...

Jak to czytać (prosto)

  • Jeśli w wmbus/diag w sekcji c1 masz ok > 0 (czyli choć czasem przechodzą poprawne telegramy DLL CRC), a wmbusmeters dalej krzyczy o CRC po decrypt → wtedy to klucz/konfiguracja albo wmbusmeters ma blacklistę po wcześniejszych próbach.
    Wtedy trzeba wyczyścić “permanently ignoring”/stan wmbusmeters i dopiero testować key.
  • Jeśli w wmbus/diag c1 ma ok = 0 i crc_failed = total oraz avg_drop_rssi typu -95…-100 dBm, to nie ma sensu grzebać w key: telegramy padają na CRC już na warstwie radiowej/DLL → problem to RF (anteny/pozycja/zakłócenia).

Co robić gdy to RF

  • antena 868 MHz (nie “jakaś losowa”),
  • przestaw odbiornik/antenę (czasem 30–50 cm robi różnicę),
  • odsuń od USB/zasilaczy/routera,
  • jeśli licznik jest w trudnym miejscu (szacht/piwnica) – często jedyne sensowne rozwiązanie to postawić odbiornik bliżej licznika.

Podeślij wmbus/diag + 2–3 linie z Have data/DROPPED.

Abyś wiedział czego szukać to tak to wygląda:

A ponieważ dorobiłem jeszcze aby nie czytać encyklopedii to :

{
  "event": "summary",
  "total": 31,
  "ok": 21,
  "truncated": 0,
  "dropped": 10,
  "crc_failed": 1,
  "crc_fail_pct": 3,
  "drop_pct": 32,
  "trunc_pct": 0,
  "avg_ok_rssi": -74,
  "avg_drop_rssi": -93,
  "t1": {
    "total": 30,
    "ok": 21,
    "dropped": 9,
    "per_pct": 30,
    "crc_failed": 0,
    "crc_pct": 0,
    "avg_ok_rssi": -74,
    "avg_drop_rssi": -93,
    "sym_total": 5290,
    "sym_invalid": 82,
    "sym_invalid_pct": 1
  },
  "c1": {
    "total": 1,
    "ok": 0,
    "dropped": 1,
    "per_pct": 100,
    "crc_failed": 1,
    "crc_pct": 100,
    "avg_ok_rssi": 0,
    "avg_drop_rssi": -94
  },
  "dropped_by_reason": {
    "too_short": 0,
    "decode_failed": 9,
    "dll_crc_failed": 1,
    "unknown_preamble": 0,
    "l_field_invalid": 0,
    "unknown_link_mode": 0,
    "other": 0
  },
  "reasons_sum": 10,
  "reasons_sum_mismatch": 0,
  "hint_code": "C1_INTERFERENCE_OR_RX",
  "hint_en": "C1 frames fail DLL CRC despite decent RSSI; check interference/RX settings",
  "hint_pl": "C1: CRC DLL nie przechodzi mimo niezłego RSSI; sprawdź zakłócenia/ustawienia RX"
}

Na końcu telegramu jest podpowiedź rozwiązania problemu.

zrobiłem aktualizację po Twojej poprawce. Odczyt jest prawidłowo. Nie wiem co wcześniej napisałeś czy ten edit czy info o diagnostyce ale podsyłam diagnostykę:

{"event":"summary","total":9,"ok":7,"truncated":0,"dropped":2,"crc_failed":2,"crc_fail_pct":22,"drop_pct":22,"trunc_pct":0,"avg_ok_rssi":-67,"avg_drop_rssi":-101,"t1":{"total":2,"ok":2,"dropped":0,"per_pct":0,"crc_failed":0,"crc_pct":0,"avg_ok_rssi":-52,"avg_drop_rssi":0,"sym_total":688,"sym_invalid":0,"sym_invalid_pct":0},"c1":{"total":7,"ok":5,"dropped":2,"per_pct":28,"crc_failed":2,"crc_pct":28,"avg_ok_rssi":-73,"avg_drop_rssi":-101},"dropped_by_reason":{"too_short":0,"decode_failed":0,"dll_crc_failed":2,"unknown_preamble":0,"l_field_invalid":0,"unknown_link_mode":0,"other":0},"reasons_sum":2,"reasons_sum_mismatch":0,"hint_code":"OK","hint_en":"looks good","hint_pl":"wygląda dobrze"}
10:50:02.851][W][wmbus:341]: DROPPED packet: reason=dll_crc_failed mode=C1 want=53 got=53 raw_got=55 RSSI=-95dBm
[10:50:02.857][W][wmbus:348]: DROPPED raw(hex)=543d3444372c815344543c168d20f0b229342060ac895d113c9dd32843a3f04dba11d817c96d5608f5bbc653c53e0e29203c9ab937f161
[10:50:04.411][W][wmbus:341]: DROPPED packet: reason=dll_crc_failed mode=C1 want=53 got=53 raw_got=55 RSSI=-100dBm
[10:50:04.420][W][wmbus:348]: DROPPED raw(hex)=543d3444372e2354445414168d203fc72834203cb90f8322a261a41e16ffc2d404fa72151014609622440772bc9c43f17991946c4c7b8c
10:59:20.604][W][wmbus:341]: DROPPED packet: reason=dll_crc_failed mode=C1 want=181 got=181 raw_got=183 RSSI=-103dBm
[10:59:20.610][W][wmbus:348]: DROPPED raw(hex)=543db4443724215444543c1f8d206053293420a205ecc1038f61f6a6fa76dd73004282e8c003c930d533e0f381425c4363a9d96f63215b1309d001c4dbc13c77efc18901594fc29ac8523b8720f176b8c5c0985d0bc0f57b90c441217e79cae5b3cf9efd8cf4c006181626dfb77e727f41c3360d73b303b508bf018020044fcbdc72b1bf2451910699b401c40e6f047cf1a45c2ba5fcc2b970a12991290ae6008b71bdded233548dde07679515c5c33f96054053bd0048
[10:59:21.594][W][wmbus:341]: DROPPED packet: reason=dll_crc_failed mode=C1 want=53 got=53 raw_got=55 RSSI=-94dBm
[10:59:21.602][W][wmbus:348]: DROPPED raw(hex)=543d3444372c815344543c168d2012502a343026a6667ad74b4839e05e7e1affb06d0f6f61be8550f324728ad92e0dc57212f202195cd3
[10:59:27.045][W][wmbus:431][radio_recv]: Failed to read data
[10:59:33.198][I][wmbus:218]: DIAG summary published to wmbus/diag (total=8 ok=6 truncated=0 dropped=2 crc_failed=2)
[10:59:36.351][W][wmbus:341]: DROPPED packet: reason=dll_crc_failed mode=C1 want=66 got=66 raw_got=68 RSSI=-101dBm
[10:59:36.394][W][wmbus:348]: DROPPED raw(hex)=543d4141372c213c44542c1689616960203ca87f1e90784f5de27edf8fff7d14761e631f65ab15b87e76e7048cd6e1fce0787cdefb6e1dee5377fb495110c8c1fb4b5020
[10:59:37.954][I][wmbus:371]: Have data (51 bytes) [RSSI: -93dBm, mode: C1 B]

faktycznie wygląda jakby miał uszkodzone ramki ale tylko z licznika wody który jest w tym samym pomieszczeniu co antena. Z kolei odczyty z licznika prądu są prawidłowe pomimo że jest za dwoma grubymi ścianami w odległości ok 8m

To prawdopodobnie jest RF czyli spróbuj gdzieś indziej postawić płytkę. Czyli zmień warunki odbioru.

Wiem że antena robi najważniejszą robotę. Z doświadczenia które radio jest najbardziej czułe i obsłuży dwa nadajniki (amiplus T1, flowiq2200 C1) ?
W projektach dotyczących wmbus widzę CC1101, SX1262, SX1276.
Do aktualnie testowanego układu Lora TTGO T3S3 domówiłem antenę +5dB. Jak przyjdzie to sprawdzę czy coś pomoże.

Dopisz w YAML :

wmbus_radio:
  diagnostic_topic: "wmbus/diag"
  diagnostic_summary_interval: 60s
  diagnostic_publish_raw: true        # wtedy przy DROP pokaże też raw(hex)
  diagnostic_verbose: false           # więcej gadania w diag (jeśli masz taką opcję)

Kod poprawiony ( THX ) - dorobione czy to jest przesterowanie sygnału.

Co do hardware nie ma wiedzy co jest lepsze czy gorsze.

w logu ESP będzie coś takiego :

[11:38:30.835][I][wmbus:230]: DIAG summary published to wmbus/diag (total=19 ok=10 truncated=0 dropped=9 crc_failed=1)
[11:38:30.840][W][wmbus:240]: DIAG hint: C1_INTERFERENCE_OR_RX | C1: CRC DLL nie przechodzi mimo niezłego RSSI; sprawdź zakłócenia/ustawienia RX

Dla trybów C1 i T1 to potrzebujesz odbiornika, a nie nadajnika (wszystkie te układy to nadajniko-odbiorniki = transceivery).

Z mojego doświadczenia SX1276 okazał się być o niebo lepszy od CC1101 pod względem odbioru (w innym projekcie, nie wiem czy to kwestia czułości czy jakości kodu ich sterowników, jakkolwiek Semtechy to konstrukcje sprzed około 10 lat, a TI mniej więcej sprzed koło 20 - konkretniej 21 lat temu TI kupił ChipCon’a, który je zaprojektował, co nie zmienia faktu, że CC1101 nadal jest w masowej produkcji, więc nie może być beznadziejny, może to była kwestia jakości chińskich płytek CC1101, które miałem).

mini OFF TOPIC
BTW - TI zapowiada, że kupi Silicon Labs, więc może być przewrót na rynku chipsetów Zigbee/Thread

Swoją drogą w tej sytuacji to ja bardziej stawiam na przesterowanie radia niż na zbyt niski sygnał.
Jeśli antena jest odkręcania (złącze SMA) to nie ma nic prostszego niż ją odkręcić i wtedy sprawdzić warunki odbioru.

uruchomienie bez anteny nie powoduje uszkodzenia radia ?