Komponent wM-Bus do ESPHome (SzczepanLeon) wersja 4.x - wątek ogólny

v5 na 2025.12.1 i esp32c3 z aliexpres
wieczorem jeszcze te piny chce sprawdzić i wrzuce kod.
v4 sypało na 2025.12.1 ani na 2025.7, juz nie pamiętam co, ale chyba wszystkie drivery lądował i bin był za duzy, a jak forka od kogoś wziąłem to był bootloop.
teraz całkiem fajnie leci na v5 z cc1101.

Wyjątkowo slaby pomysł, bo nie tylko przełącznik może ustawić niepożądany stan na takim GPIO, ale też jakaś inna elektronika (nie należy ich wykorzystywać dla GDOx), swoją drogą świetne wytłumaczenie tego ostrzeżenia jest już w FAQ

Doskonale wiem co się może wydarzyć. Sęk w tym że w moich zastosowaniach skutkuje to co najwyżej opuszczeniem rolety przez sekundę albo włączeniem światła na sekundę (tak, tu spieprzyłem akurat). Ale w takich przypadkach jak i2c to nie robi wrażenia na podłączonych urządzeniach (czy to wyświetlacz czy mcp23017).

no dobra, pewnie nie w ten wątek powinienem to wrzucać ale w sumie to nie wiem juz w który lepiej pasuje :slight_smile: pozwólcie, że już nie będę na polski przepisywał :slight_smile:

Here is my code with ESPhome 2025.12.1
I used source: github://enr0c/esphome-components@main to get CC1101 with framework: type: esp-idf and
- source: github://SzczepanLeon/esphome-components@main because smthg is mashed up with [ wmbus_meter ] in enr0c fork and got errors when adding wmbus_meter: to my yaml.
My pinout board is like this one

esp32:
  board: esp32-c3-devkitm-1
  framework:
    type: esp-idf

logger:
  level: WARN
  baud_rate: 115200

time:
  - platform: homeassistant

external_components:
  - source: github://SzczepanLeon/esphome-components@main
    refresh: 1d
    components:
      - wmbus_meter
      - wmbus_common
  - source: github://enr0c/esphome-components@main
    components: [ wmbus_radio ]
    refresh: 1d

spi:
  clk_pin:  GPIO4 # green/white
  mosi_pin: GPIO6  # green 
  miso_pin: GPIO5  # blue 
  interface: hardware

wmbus_radio:
  radio_type: CC1101
  cs_pin:   GPIO7  # brown/white
  gdo2_pin: GPIO1  # blue/white
  gdo0_pin: GPIO0  # brown
  frequency: 868.950

wmbus_meter:
  - id: water_meter_apator
    meter_id: 0x01234567  ######## enter your APATOR meter ID here ###########
    type: apator162
    key: "00000000000000000000000000000000"

sensor:
  - platform: wmbus_meter
    parent_id: water_meter_apator #Water meter Apator
    field: total_m3
    device_class: water
    name: C3_Apator water meter - state
    accuracy_decimals: 3
    state_class: total_increasing
    unit_of_measurement: "m³"
  - platform: wmbus_meter
    parent_id: water_meter_apator
    field: rssi_dbm
    name: C3_Apator water meter - RSSI
    unit_of_measurement: "dBm"

in logs many FIFO overflow while waiting for sync, flushing
I think because of many others meters in my neighborhood.
but I can read my apator meter.

Wcześniejsze próby albo kończyły się bootlopem, albo zaciągało wszystkie drivery i obraz byl za duzy dla esp32c3.

1 polubienie

od kilku dni kombinuję z kodem i nie potrafię go zmusić do współpracy.
zbudowałem układ do odczytu licznika Apator. W/g mnie kod jest poprawny i kompiluje się, ale być może jest jakieś ale.
tu mam ostatnie logi:

INFO ESPHome 2026.1.2
INFO Reading configuration /config/esphome/water-meter.yaml...
INFO Detected timezone 'Europe/Warsaw'
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq/#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from water-meter.local using esphome API
INFO Successfully resolved water-meter.local in 0.130s
INFO Successfully connected to water-meter @ 192.168.0.76 in 0.007s
INFO Successful handshake with water-meter @ 192.168.0.76 in 0.095s
[18:01:22.014][I][app:206]: ESPHome version 2026.1.2 compiled on 2026-01-27 16:22:45 +0100
[18:01:22.018][I][app:213]: ESP32 Chip: ESP32 r3.1, 2 core(s)
[18:01:22.018][W][app:222]: Set minimum_chip_revision: "3.1" to reduce binary size
[18:01:22.022][C][logger:316]: Logger:
[18:01:22.022][C][logger:316]:   Max Level: DEBUG
[18:01:22.022][C][logger:316]:   Initial Level: DEBUG
[18:01:22.023][C][logger:322]:   Log Baud Rate: 115200
[18:01:22.023][C][logger:322]:   Hardware UART: UART0
[18:01:22.023][C][logger:332]:   Task Log Buffer Size: 768 bytes
[18:01:22.043][C][captive_portal:128]: Captive Portal:
[18:01:22.044][C][wifi:1304]: WiFi:
[18:01:22.044][C][wifi:1304]:   Local MAC: F0:24:F9:59:BE:EC
[18:01:22.044][C][wifi:1304]:   Connected: YES
[18:01:22.044][C][wifi:1037]:   IP Address: 192.168.0.76
[18:01:22.047][C][wifi:1048]:   SSID: [redacted]
[18:01:22.047][C][wifi:1048]:   BSSID: [redacted]
[18:01:22.047][C][wifi:1048]:   Hostname: 'water-meter'
[18:01:22.047][C][wifi:1048]:   Signal strength: -59 dB ▂▄▆█
[18:01:22.047][C][wifi:1048]:   Channel: 11
[18:01:22.047][C][wifi:1048]:   Subnet: 255.255.255.0
[18:01:22.047][C][wifi:1048]:   Gateway: 192.168.0.1
[18:01:22.047][C][wifi:1048]:   DNS1: 192.168.0.1
[18:01:22.047][C][wifi:1048]:   DNS2: 0.0.0.0
[18:01:22.064][C][sntp:059]: SNTP Time:
[18:01:22.065][C][sntp:062]:   Server 0: '0.pool.ntp.org'
[18:01:22.068][C][sntp:062]:   Server 1: '1.pool.ntp.org'
[18:01:22.086][C][sntp:062]:   Server 2: '2.pool.ntp.org'
[18:01:22.087][C][time:028]: Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[18:01:22.094][C][esphome.ota:075]: Over-The-Air updates:
[18:01:22.094][C][esphome.ota:075]:   Address: water-meter.local:3232
[18:01:22.094][C][esphome.ota:075]:   Version: 2
[18:01:22.101][C][esphome.ota:082]:   Password configured
[18:01:22.101][C][safe_mode:021]: Safe Mode:
[18:01:22.101][C][safe_mode:021]:   Successful after: 60s
[18:01:22.101][C][safe_mode:021]:   Invoke after: 10 attempts
[18:01:22.101][C][safe_mode:021]:   Duration: 300s
[18:01:22.116][C][safe_mode:038]:   Bootloader rollback: support unknown
[18:01:22.135][C][web_server.ota:231]: Web Server OTA
[18:01:22.136][C][api:221]: Server:
[18:01:22.136][C][api:221]:   Address: water-meter.local:6053
[18:01:22.136][C][api:221]:   Listen backlog: 4
[18:01:22.136][C][api:221]:   Max connections: 8
[18:01:22.140][C][api:228]:   Noise encryption: YES
[18:01:22.157][C][mdns:177]: mDNS:
[18:01:22.157][C][mdns:177]:   Hostname: water-meter
[18:01:22.157][C][wmbus:413]: wM-Bus v4.2.1-1.17.1-b8f4a945:
[18:01:22.158][C][wmbus:431]:   Chip ID: ECBE59F924F0
[18:01:22.158][C][wmbus:433]:   CC1101 frequency: 868.950 MHz
[18:01:22.158][C][wmbus:434]:   CC1101 SPI bus:
[18:01:22.163][C][wmbus:152]:     MOSI Pin: GPIO23
[18:01:22.168][C][wmbus:152]:     MISO Pin: GPIO19
[18:01:22.169][C][wmbus:152]:     CLK Pin:  GPIO18
[18:01:22.172][C][wmbus:152]:     CS Pin:   GPIO15
[18:01:22.185][C][wmbus:152]:     GDO0 Pin: GPIO4
[18:01:22.185][C][wmbus:152]:     GDO2 Pin: GPIO27
[18:01:22.190][C][wmbus:449]:   Available drivers: wme5, weh_07, watertech, waterstarm, vario451mid, vario451, vario411, unknown, unismart, ultrimis, ultraheat, tsd2, topaseskr, supercom587, sontex868, sharky774, sharky, sensostar, rfmtx1, rfmamb, qwater, qualcosonic, qsmoke, qheat_55_us, qheat, qcaloric, q400, pollucomf, piigth, omnipower, nemo, munia, multical21, mkradio4a, mkradio4, mkradio3, minomess, microclima, lse_08, lse_07_17, lansenth, lansensm, lansenrp, lansenpu, lansendw, kampress, kamheat, izar, iwm
[18:01:22.220][C][wmbus:463]:   Meter:
[18:01:22.220][C][wmbus:464]:     ID: 57700418 [0x03707042]
[18:01:22.229][C][wmbus:465]:     Type: apator162
[18:01:22.248][C][wmbus:466]:     Key: '00000000000000000000000000000000'
[18:01:22.249][C][wmbus:468]:     Field: 'rssi'
[18:01:22.252][C][wmbus:016]:      Name: 'licznik zimnej wody RSSi'
[18:01:22.252][C][wmbus:016]:        State Class: 'measurement'
[18:01:22.252][C][wmbus:016]:        Unit of Measurement: 'dBm'
[18:01:22.252][C][wmbus:016]:        Accuracy Decimals: 0
[18:01:22.260][C][wmbus:026]:        Device Class: 'signal_strength'
[18:01:22.261][C][wmbus:468]:     Field: 'total'
[18:01:22.270][C][wmbus:016]:      Name: 'licznik zimnej wody'
[18:01:22.270][C][wmbus:016]:        State Class: 'total_increasing'
[18:01:22.270][C][wmbus:016]:        Unit of Measurement: 'm³'
[18:01:22.270][C][wmbus:016]:        Accuracy Decimals: 3
[18:01:22.290][C][wmbus:026]:        Device Class: 'water'
[18:01:22.290][C][wmbus:030]:        Icon: 'mdi:water'
[18:04:19.483][D][mbus:035]: Received T1 A frame
[18:04:38.699][D][mbus:035]: Received T1 A frame
[18:07:57.938][D][esp-idf:000][wifi]: E (3248466) wifi:
[18:07:57.938][D][esp-idf:000][wifi]: BIP replay detected
[18:07:57.938][D][esp-idf:000][wifi]: 
INFO Processing unexpected disconnect from ESPHome API for water-meter @ 192.168.0.76
WARNING Disconnected from API
INFO Successfully resolved water-meter @ 192.168.0.76 in 0.902s
INFO Successfully connected to water-meter @ 192.168.0.76 in 0.021s
INFO Successful handshake with water-meter @ 192.168.0.76 in 0.091s
[18:10:46.664][D][sntp:100]: Synchronized time: 2026-01-27 18:10:46
[18:11:14.334][I][safe_mode:066]: Boot seems successful; resetting boot loop counter
[18:11:14.820][D][esp32.preferences:155]: Writing 1 items: 0 cached, 1 written, 0 failed

niby coś odbiera ale nie wygląda to jak u innych.

tu jest to co mam na ESP32

esphome:
  name: water-meter
  friendly_name: water meter

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "I50izzxOxnVwKGvReQclm8sZVwGYmPSC+pFi+Zl3oW4="

ota:
  - platform: esphome
    password: "8f19cd0d7454f4ff81328d779c748eb0"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Water-Meter Fallback Hotspot"
    password: "TkJJASEEPHZa"

captive_portal:
  
time:
  - platform: sntp
    id: time_sntp

external_components:
  - source: github://SzczepanLeon/esphome-components@version_4
    components: [ wmbus ]

wmbus:
  mosi_pin: GPIO23
  miso_pin: GPIO19
  clk_pin:  GPIO18
  cs_pin:   GPIO15
  gdo0_pin: GPIO4
  gdo2_pin: GPIO27


  frequency: 868.950
  all_drivers: True
  sync_mode: True
  log_all: True

sensor:
# add driver to compile list (will be available for autodetect), don't create sensor
  - platform: wmbus
    type: itron

# add sensor with defined type (driver will be also added to compile list)
  - platform: wmbus
    meter_id: 0x3707042
    type: apator162
    key: "00000000000000000000000000000000"
    sensors:
      - name: "licznik zimnej wody RSSi"
        field: "rssi"
        accuracy_decimals: 0
        unit_of_measurement: "dBm"
        device_class: "signal_strength"
        state_class: "measurement"
        entity_category: "diagnostic"
      - name: "licznik zimnej wody"
        field: "total"
        accuracy_decimals: 3
        unit_of_measurement: "m³"
        device_class: "water"
        state_class: "total_increasing"
        icon: "mdi:water"

konsekwencją tego mój licznik w HA jest nieznany.
czy mogę prosić o wskazówki?

W tym logu powyżej tego co cytuję jest tylko informacja dotycząca tego co wrzuciłeś w YAML, ale nie ma żadnego śladu działania, co było później?

Skąd wiesz, że nakładka ma idetyfikator

ID: 57700418 [0x03707042]

praszam nie wkleiło się wszystko, jaki się zaciągnie to wkleję.

  • bo taki numer ma nakładka 3707042

A nasłuchałeś wcześniej (bez zdefiniowanego sensora) jakikolwiek telegram z pasującego ID?

nie, przepisałem nr z nalepki. a wszystko robiłem z tego poradnika https://youtu.be/hL_AvQIUX_M?si=t_NDvuEXHoV4O6j-
prawdę mówiąc, nie mam pojęcia jak zrobić taki nasłuch

Dla Apatora 16-2 nie stwierdziłem żadnego sensownego powiązania numeru z nalepki z identyfikatorem, więc trzeba nasłuchać i porównując rozkodowane tam wartości
https://wmbusmeters.org/
rozpoznać swój licznik.

Zawsze wystarczało nie definiować sensora, nie wiem jak jest obecnie (bo swojego działającego i innego niż CC1101 sprzętu nie będę ruszał, a nie mam teraz innego “do zabawy”)

[18:33:04.497][C][wmbus:464]:     ID: 57700418 [0x03707042]
[18:33:04.518][C][wmbus:465]:     Type: apator162
[18:33:04.526][C][wmbus:466]:     Key: '00000000000000000000000000000000'
[18:33:04.526][C][wmbus:468]:     Field: 'rssi'
[18:33:04.530][C][wmbus:016]:      Name: 'licznik zimnej wody RSSi'
[18:33:04.530][C][wmbus:016]:        State Class: 'measurement'
[18:33:04.530][C][wmbus:016]:        Unit of Measurement: 'dBm'
[18:33:04.530][C][wmbus:016]:        Accuracy Decimals: 0
[18:33:04.538][C][wmbus:026]:        Device Class: 'signal_strength'
[18:33:04.538][C][wmbus:468]:     Field: 'total'
[18:33:04.547][C][wmbus:016]:      Name: 'licznik zimnej wody'
[18:33:04.547][C][wmbus:016]:        State Class: 'total_increasing'
[18:33:04.547][C][wmbus:016]:        Unit of Measurement: 'm³'
[18:33:04.547][C][wmbus:016]:        Accuracy Decimals: 3
[18:33:04.571][C][wmbus:026]:        Device Class: 'water'
[18:33:04.571][C][wmbus:030]:        Icon: 'mdi:water'
[18:37:25.662][D][mbus:035]: Received T1 A frame
[18:39:30.761][D][mbus:035]: Received T1 A frame
[18:40:46.770][D][sntp:100]: Synchronized time: 2026-01-27 18:40:46

Tak to mniej więcej wygląda, żadnych ciągów cyfr nie odbieram

Dobra, weź to popraw bo masz tam czeski błąd i przez to cały konfig leży. Sprzętowo jest ok skoro w logach widzisz te ramki T1.

Zmień koniecznie type na izar, bo te apatory prawie zawsze na tym siedzą.

wrzuć to tak i zobacz czy ruszy:

wmbus:
  mosi_pin: GPIO23
  miso_pin: GPIO19
  clk_pin: GPIO18
  cs_pin: GPIO15
  gdo0_pin: GPIO4
  gdo2_pin: GPIO27
  frequency: 868.950
  log_all: True

sensor:
  - platform: wmbus
    meter_id: 57700418 #Dałem w dec bo dziwnie mi się to widziało
    type: izar
    sensors:
      - name: "woda_rssi"
        field: "rssi"
      - name: "woda_stan"
        field: "total"

jak w HA dalej masz “unknown” to poczekaj parę minut te odczyty nie wpadają co sekundę. Jak po kwadransie nic nie wskoczy, to może być problem z kluczem szyfrującym, zwłaszcza jak to nowy licznik w bloku. wtedy bez aes nic nie zdziałasz i w logach będziesz miał tylko rssi a stan wody zero.

daj znać czy po zmianie na izara i poprawieniu idka w pokazało się w końcu.

Nadal ten log jest pusty, ale wywal sensor, bo mając źle zdefiniowany ID na 100% niczego nie odbierze

Jeśli będzie problem z kluczem, to powinno to być w logu,
swoją drogą jeśli błędnie rozkodowany telegram ma datę 1 stycznia 1970 roku to zwykle jest to problem z kluczem
A i jeszcze jedno - wszyscy, o których słyszałem, że mają akurat ten model nakładki mają klucz fabryczny = 32 zera (i potwierdził to jeden z forumowiczów produkujący sprzęt do nasłuchu nakładek, który ma niewątpliwie większy przemiał takich informacji niż ktokolwiek z nas)

@Ryszard wybacz ale nie mam czasu na oglądanie wideo

Wideo jest dobre(oglądałem kiedyś)

Jeśli chodzi o konfigurowanie nasłuchu to wystarczy dać:

  all_drivers: True
  log_all: True
  sync_mode: False

wywal całkowicie sensor i wklej to:

sensor:
  - platform: wmbus
    type: izar         # Większość nowych apatorów w pl to defacto Izar
  - platform: wmbus
    type: apator162    # Zostawiamy dla pewności

I szukaj w logach meter ID.

Na razie mi się kompiluje to poprzednie, ale jak nie będzie efektu to spróbuję jak radzisz.

No raczej nie.
Apator162 w 99% miał naklejke z ID (i był to juz HEX tylko nie drukowali 0x).
Izar to epopeja jezeli chodzi o ID - raczej to co wydrukowane to nie to co raportowane.

To tu mamy opinie eksperta.

A ja bym zmienił tak jak w nasłuchu:

No i zostawić ten:

Mamy, jednak nie zmienia to faktu, że akurat mam te Apatory i ID z naklejki nie ma nic wspólnego z faktycznie nadawanym ID (nie twierdzę, że zawsze i bezwzględnie, ale wystarczy jedna jedna instalacja w której są od czapy i już regułę, że jakoby się zgadzają trafia szlag, ale skoro u mnie się nie zgadza, to takich przypadków jest minimum kilkanaście tysięcy), więc polecam nasłuchiwać (wcześniej miałem Apatory 8 i tam istotnie ID się zgadzał, choć chyba trzeba było przeliczyć dec->hex albo odwrotnie).

Hey, wgrałem wg zaleceń, mam nadzieję, że poprawnie:

wmbus:
  mosi_pin: GPIO23   # zielony
  miso_pin: GPIO19   # fiolet
  clk_pin:  GPIO18   # niebieski
  cs_pin:   GPIO15   # czarny
  gdo0_pin: GPIO4    # biały
  gdo2_pin: GPIO27   # szary


  frequency: 868.950
  all_drivers: True
  sync_mode: False
  log_all: True

sensor:
  - platform: wmbus
    type: izar         # Większość nowych apatorów w pl to defacto Izar
  - platform: wmbus
    type: apator162    # Zostawiamy dla pewności

I przez 20 minut nie odebrał nic. Kabelkologia sprawdzona.
Czyżby płytka padła? Ale wczoraj coś odbierał…

[18:11:31.525][C][api:221]:   Address: water-meter.local:6053
[18:11:31.525][C][api:221]:   Listen backlog: 4
[18:11:31.525][C][api:221]:   Max connections: 8
[18:11:31.532][C][api:228]:   Noise encryption: YES
[18:11:31.532][C][mdns:177]: mDNS:
[18:11:31.532][C][mdns:177]:   Hostname: water-meter
[18:11:31.543][C][wmbus:413]: wM-Bus v4.2.1-1.17.1-b8f4a945:
[18:11:31.543][C][wmbus:431]:   Chip ID: ECBE59F924F0
[18:11:31.543][C][wmbus:433]:   CC1101 frequency: 868.950 MHz
[18:11:31.553][C][wmbus:434]:   CC1101 SPI bus:
[18:11:31.553][C][wmbus:152]:     MOSI Pin: GPIO23
[18:11:31.553][C][wmbus:152]:     MISO Pin: GPIO19
[18:11:31.559][C][wmbus:152]:     CLK Pin:  GPIO18
[18:11:31.559][C][wmbus:152]:     CS Pin:   GPIO15
[18:11:31.564][C][wmbus:152]:     GDO0 Pin: GPIO4
[18:11:31.571][C][wmbus:152]:     GDO2 Pin: GPIO27
[18:11:31.572][C][wmbus:449]:   Available drivers: wme5, weh_07, watertech, waterstarm, vario451mid, vario451, vario411, unknown, unismart, ultrimis, ultraheat, tsd2, topaseskr, supercom587, sontex868, sharky774, sharky, sensostar, rfmtx1, rfmamb, qwater, qualcosonic, qsmoke, qheat_55_us, qheat, qcaloric, q400, pollucomf, piigth, omnipower, nemo, munia, multical21, mkradio4a, mkradio4, mkradio3, minomess, microclima, lse_08, lse_07_17, lansenth, lansensm, lansenrp, lansenpu, lansendw, kampress, kamheat, izar, iwm
[18:11:57.621][D][sntp:100]: Synchronized time: 2026-01-28 18:11:57
[18:12:26.315][I][safe_mode:066]: Boot seems successful; resetting boot loop counter
[18:12:30.487][D][esp32.preferences:155]: Writing 1 items: 0 cached, 1 written, 0 failed
[18:16:31.191][D][wifi:2112]: Roam scan (-63 dBm, attempt 1/3)
[18:21:31.192][D][wifi:2112]: Roam scan (-71 dBm, attempt 2/3)
[18:26:31.200][D][wifi:2112]: Roam scan (-72 dBm, attempt 3/3)
[18:26:57.671][D][sntp:100]: Synchronized time: 2026-01-28 18:26:57

“nasłuch” nic nie dał wpisałem jeszcze numery które mam na rachunku za wodę i coś tam odbiera, ale nie to, na co czekam.
jak to tłumaczyć?

[19:13:11.000][D][mbus:035]: Received T1 A frame