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

Jeśli nie będziesz nic nadawał to nie powinno, ryzyko jest, bo nie wiadomo co robi sterownik (tj. ja nie wiem, ale mamy tu autora komponentu, to może wie co robi z radiem).

Na zdroworozsądkową logikę już zainicjalizowane radio nie powinno uruchamiać nadajnika jeśli jego rola to ciągły nasłuch.

Może odkręcić bo nadawanie jest po WIFI więc nic się nie stanie.

Celowo postawiłem płytkę z SX1262 koło routera, gdzie mam wszystko skomasowane czyli dużo zakłóceń.
Fakt że to goła płytka , bez obudowy z drucikiem-antenką.

Efekt w log :

[11:57:34.358][I][wmbus:391]: Have data (77 bytes) [RSSI: -87dBm, mode: T1 A]
[11:57:45.503][I][wmbus:391]: Have data (77 bytes) [RSSI: -74dBm, mode: T1 A]
[11:57:50.697][I][wmbus:230]: DIAG summary published to wmbus/diag/error (total=21 ok=12 truncated=0 dropped=9 crc_failed=0)
[11:57:50.729][W][wmbus:240]: DIAG hint: T1_SYMBOL_ERRORS | T1: dużo błędnych symboli 3-of-6; możliwe błędy bitów/zakłócenia
[11:57:56.726][I][wmbus:391]: Have data (77 bytes) [RSSI: -85dBm, mode: T1 A]

Gdzie jak była oddalona to zero takich komunikatów.

Postawiłem obie płytki w ten sposób :

Obie działają na tym samym kodzie.

Efekt poniżej :

SX1272:

INFO Successful handshake with esphome-web-5a16c4 @ 192.168.100.76 in 0.008s
[12:09:45.012][I][app:215]: ESPHome version 2026.2.2 compiled on 2026-02-26 05:52:26 +0100
[12:09:45.064][I][app:222]: ESP32 Chip: ESP32-S3 rev0.2, 2 core(s)
[12:09:45.924][I][wmbus:391]: Have data (77 bytes) [RSSI: -91dBm, mode: T1 A]
[12:10:07.752][I][wmbus:391]: Have data (77 bytes) [RSSI: -82dBm, mode: T1 A]
[12:10:08.159][I][wmbus:391]: Have data (143 bytes) [RSSI: -63dBm, mode: T1 A]
[12:10:12.066][I][wmbus:391]: Have data (77 bytes) [RSSI: -74dBm, mode: T1 A]
[12:10:14.797][I][wmbus:391]: Have data (77 bytes) [RSSI: -70dBm, mode: T1 A]
[12:10:21.473][I][wmbus:391]: Have data (77 bytes) [RSSI: -61dBm, mode: T1 A]
[12:10:21.473][I][wmbus:391]: Have data (77 bytes) [RSSI: -88dBm, mode: T1 A]
[12:10:24.793][I][wmbus:391]: Have data (77 bytes) [RSSI: -92dBm, mode: T1 A]
[12:10:27.539][I][wmbus:391]: Have data (77 bytes) [RSSI: -60dBm, mode: T1 A]
[12:10:35.048][I][wmbus:391]: Have data (48 bytes) [RSSI: -88dBm, mode: T1 A]
[12:10:35.059][I][wmbus:230]: DIAG summary published to wmbus/diag (total=21 ok=12 truncated=0 dropped=9 crc_failed=0)
[12:10:35.063][I][wmbus:238]: DIAG hint: OK | wygląda dobrze
[12:10:35.722][I][wmbus:391]: Have data (77 bytes) [RSSI: -64dBm, mode: T1 A]
[12:10:37.907][I][wmbus:391]: Have data (77 bytes) [RSSI: -89dBm, mode: T1 A]
[12:10:38.161][I][wmbus:391]: Have data (143 bytes) [RSSI: -61dBm, mode: T1 A]
[12:10:38.335][I][wmbus:391]: Have data (77 bytes) [RSSI: -76dBm, mode: T1 A]
[12:10:39.535][I][wmbus:391]: Have data (77 bytes) [RSSI: -83dBm, mode: T1 A]
[12:10:43.935][I][wmbus:391]: Have data (77 bytes) [RSSI: -92dBm, mode: T1 A]
[12:10:49.951][I][wmbus:391]: Have data (77 bytes) [RSSI: -87dBm, mode: T1 A]
[12:10:54.485][I][wmbus:391]: Have data (77 bytes) [RSSI: -87dBm, mode: T1 A]
[12:10:55.612][I][wmbus:391]: Have data (77 bytes) [RSSI: -90dBm, mode: T1 A]
[12:10:57.643][I][wmbus:391]: Have data (77 bytes) [RSSI: -103dBm, mode: T1 A]
[12:10:58.751][I][wmbus:391]: Have data (77 bytes) [RSSI: -81dBm, mode: T1 A]
[12:11:01.743][I][wmbus:391]: Have data (77 bytes) [RSSI: -80dBm, mode: T1 A]

SX1262:

NFO Successful handshake with esphome-web-ca0448 @ 192.168.100.84 in 0.010s
[12:09:47.907][I][app:215]: ESPHome version 2026.2.0 compiled on 2026-02-26 11:00:04 +0100
[12:09:47.951][I][app:222]: ESP32 Chip: ESP32-S3 rev0.2, 2 core(s)
[12:09:50.797][I][wmbus:230]: DIAG summary published to wmbus/diag/error (total=16 ok=13 truncated=0 dropped=3 crc_failed=0)
[12:09:50.800][I][wmbus:238]: DIAG hint: OK | wygląda dobrze
[12:09:56.542][I][wmbus:391]: Have data (77 bytes) [RSSI: -77dBm, mode: T1 A]
[12:10:07.775][I][wmbus:391]: Have data (77 bytes) [RSSI: -84dBm, mode: T1 A]
[12:10:08.167][I][wmbus:391]: Have data (143 bytes) [RSSI: -84dBm, mode: T1 A]
[12:10:12.088][I][wmbus:391]: Have data (77 bytes) [RSSI: -81dBm, mode: T1 A]
[12:10:13.358][I][wmbus:391]: Have data (48 bytes) [RSSI: -86dBm, mode: T1 A]
[12:10:17.434][I][wmbus:391]: Have data (77 bytes) [RSSI: -80dBm, mode: T1 A]
[12:10:26.315][I][wmbus:391]: Have data (77 bytes) [RSSI: -81dBm, mode: T1 A]
[12:10:27.556][I][wmbus:391]: Have data (77 bytes) [RSSI: -80dBm, mode: T1 A]
[12:10:30.425][I][wmbus:391]: Have data (48 bytes) [RSSI: -84dBm, mode: T1 A]
[12:10:35.070][I][wmbus:391]: Have data (48 bytes) [RSSI: -80dBm, mode: T1 A]
[12:10:35.742][I][wmbus:391]: Have data (77 bytes) [RSSI: -81dBm, mode: T1 A]
[12:10:38.350][I][wmbus:391]: Have data (77 bytes) [RSSI: -81dBm, mode: T1 A]
[12:10:44.702][I][wmbus:391]: Have data (77 bytes) [RSSI: -73dBm, mode: T1 A]
[12:10:50.796][I][wmbus:230]: DIAG summary published to wmbus/diag/error (total=20 ok=13 truncated=0 dropped=7 crc_failed=0)
[12:10:50.843][I][wmbus:238]: DIAG hint: OK | wygląda dobrze
[12:10:55.628][I][wmbus:391]: Have data (77 bytes) [RSSI: -86dBm, mode: T1 A]
[12:10:57.660][I][wmbus:391]: Have data (77 bytes) [RSSI: -80dBm, mode: T1 A]
[12:10:58.762][I][wmbus:391]: Have data (77 bytes) [RSSI: -80dBm, mode: T1 A]
[12:11:01.760][I][wmbus:391]: Have data (77 bytes) [RSSI: -84dBm, mode: T1 A]

W tym samym czasie płytka z SX1272 przeczytała więcej telegramów - co absolutnie niczego nie dowodzi bo to są dwie różne architektury.

Ponieważ ciągle się uczę i mam jako taki pomysł na ten swój projekt…
Dorobiłem aby po stronie ESP również pokazywał co czyta:

INFO Successful handshake with esphome-web-ca0448 @ 192.168.100.84 in 0.008s
[12:32:47.179][I][app:215]: ESPHome version 2026.2.2 compiled on 2026-02-28 12:32:01 +0100
[12:32:47.222][I][app:222]: ESP32 Chip: ESP32-S3 rev0.2, 2 core(s)
[12:32:53.506][I][wmbus:494]: Have data (77 bytes) [RSSI: -78dBm, mode: T1 A, mfr:BMT id:03575707 ver:23 type:6 ci:7A]
[12:32:55.065][I][wmbus:494]: Have data (143 bytes) [RSSI: -74dBm, mode: T1 A, mfr:NES id:00089907 ver:3 type:2 ci:7A]
[12:32:59.898][I][wmbus:494]: Have data (77 bytes) [RSSI: -81dBm, mode: T1 A, mfr:BMT id:03534121 ver:23 type:7 ci:7A]
[12:33:01.226][I][wmbus:494]: Have data (77 bytes) [RSSI: -81dBm, mode: T1 A, mfr:BMT id:03528275 ver:23 type:6 ci:7A]
[12:33:02.786][I][wmbus:494]: Have data (77 bytes) [RSSI: -85dBm, mode: T1 A, mfr:BMT id:03546590 ver:23 type:6 ci:7A]
[12:33:10.096][I][wmbus:494]: Have data (77 bytes) [RSSI: -82dBm, mode: T1 A, mfr:BMT id:03575413 ver:23 type:7 ci:7A]
[12:33:16.152][I][wmbus:494]: Have data (77 bytes) [RSSI: -79dBm, mode: T1 A, mfr:BMT id:03534128 ver:23 type:7 ci:7A]

Próbowałem odpalić to u siebie ale mqtt usilnie próbuje się dobić do mojego brokera przez szyfrowane połączenie. Jest jakiś cywilizowany sposób na obejście tego?

MQTT nie szyfruje - dostęp jest jawny. Tak jest to zrobione że transmisja jest po MQTT od ESP
Ja nie dekoduje niczego po stronie ESP.
Możesz mu podać do MQTT z czapy dane w ESP. Kod zadziała tylko będzie pluł WARN-ami.

@Krzyszof_K FYI, ja tak działam od ~1.5 roku. Wysyłam HEX na port, na którym nasłuchuje wmbusmeters, tworzy on JSONa, którego wysyłam przez MQTT za pomocą mosquitto. Zrobione zgodnie z instrukcją na wmbusmeters. Do tego trzeba było zbudować wiadomość MQTT discovery, ale jeśli ktoś korzysta z dodatku w HA to one już tam są (ja nie korzystam).

Co mi to daje? Wykorzystuję funkcji typu kalkulacja (np. konwersja kWh→ GJ dla ciepłomierza - tak wiem, można zmienić w HA, ale wolę mieć już wprost moje jednostki). Oraz korzystam ze sterowników XMQ niedostępnych w ESPHome. Poza tym mam też przewodowe bramki M-Bus, więc niejako naturalnie poszedłem w tym kierunku.

Ok - czyli robisz PRAWIE to samo co Ja tyle że u mnie po stronie ESP dodałem pełną diagnostykę radia.

Nie udało mi się tego obejść, nie byłem w stanie wymusić komunikacji bez tls. W każdym razie wygenerowałem te certyfikaty po stronie mosquitto i ESP i zaczęło działać. To jest ten sam problem zgłaszany w tym wątku: ESP-IDF mqtt uses secured connection by default? · Issue #5788 · esphome/issues · GitHub

Mała sugestia, dałoby się dodać obok odczytów licznika również RSSI? Pewnie do wyciągnięcia z diagnostyki, ale jednak fajnie byłoby mieć to powiązane z tym konkretnym licznikiem, który obserwujemy.

Jest dodane i w logu to widać. Dopisuje opcje aby licznik usera był wyróżniony.

Wystarczy dopisać w YAML:

wmbus_radio:
  radio_type: SX1262
  # SX1262: obejście limitu ~255B + stabilniejszy RX u Ciebie
  long_gfsk_packets: true
  # Highlight (opcjonalnie)
  highlight_meters:
    - "00089907"
  highlight_tag: "wmbus_user"
  highlight_prefix: "★ "
  highlight_ansi: true

W logu licznik będzie wyróżniony ★

[10:13:03.373][I][wmbus:522]: Have data (77 bytes) [RSSI: -83dBm, mode: T1 A, mfr:BMT id:03528297 ver:23 type:6 ci:7A]
[10:13:06.613][I][wmbus:522]: Have data (77 bytes) [RSSI: -69dBm, mode: T1 A, mfr:BMT id:03534159 ver:23 type:7 ci:7A]
[10:13:12.612][I][wmbus_user:514]: ★ Have data (143 bytes) [RSSI: -68dBm, mode: T1 A, mfr:NES id:00089907 ver:3 type:2 ci:7A]
[10:13:29.557][I][wmbus:522]: Have data (77 bytes) [RSSI: -75dBm, mode: T1 A, mfr:BMT id:03528499 ver:23 type:6 ci:7A]
[10:13:34.130][I][wmbus:522]: Have data (77 bytes) [RSSI: -85dBm, mode: T1 A, mfr:BMT id:03534237 ver:23 type:7 ci:7A]

Ale to siedzi tylko w logu, trochę nieprzyjazne do parsowania przez mqtt. Może dorzucić do wmbus/diag po prostu?

Mogę - tylko poczekaj bo mi się to posypało :slight_smile:.
Może inaczej : to jest tak czy siak wysyłane tylko czego oczekujesz ?
Bo ESP nadaje wszystko co słyszy.
Bo troszkę nie rozumiem Twojego Pytania.

Jeśli dobrze widzę i rozumiem (popraw mnie jeśli bredzę), to na wmbus/diag publikowane są tylko problematyczne ramki (event: dropped) i summary. A fajnie byłoby widzieć też te poprawnie przetworzone. W zasadzie głównie o to mi chodzi. I żeby móc sobie później z tego wyciągnąć RSSI mojego licznika, podpiąć to pod jakiś sensor i mieć to na wykresie.

A co rozumiesz pod pojęciem pełna diagnostyka radia?

Odsyłam do pliku README.MD w repo bo tego jest dużo dodane - nie wszystko opisałem w poście.

Czyli chcesz np w oddzielnym topic aby był wystawiony wyłącznie Twój licznik/i ?
Poprawne są w topic nazwa/debug :

e[0;32m[I][wmbus:522]: Have data (77 bytes) [RSSI: -66dBm, mode: T1 A, mfr:BMT id:03534159 ver:23 type:7 ci:7A]e[0m

Może na wmbus/diag publikować cos takiego, wtedy nawet można pominąć fakt, czy to jest mój licznik czy nie, można sobie to łatwo wyciągnąć po stronie HA:
{“event”:”received”,“mode”:“T1”,“rssi”:-72,…,”meter_id”: 123456}
Z tego co jest na /debug też można jakimś regexem. Ale z tego jest łatwiej, a pod topic “diag” nadaje się jak najbardziej moim zdaniem :slight_smile:

Tyle że w diag już lądują te odrzucone. A z jakiego powodu to kod wskazuje dlaczego w “reason”.

Tak, odrzucone widzę. Nie widzę powodu, dlaczego nie miałoby tam też być tych odebranych, przetworzonych z dodatkowym info na temat sygnału - w końcu to też diagnostyka.

Ostatecznie to Twój kod więc jeżeli nie pasuje do ogólnej koncepcji to rozumiem, spróbuję innych metod :slight_smile:

ESP ma być tylko głupim radiem. Moge dodać że tylko zdefiniowane liczniki będą wysyłane a reszta pomijana. Bo obecnie wszystkie poprawne liczniki są wysyłane i je widać w topic/diag.