Problem z dekodowaniem telegramów przez ESP32 C3, CC1101, Apator 162

Cześć.

Zaczynam moją przygodę z ESP Home, na pierwszy ogień poszedł odczyt wodomierza z nakładką Apator 16-2. Udało mi się skonfigurować ESP32 C3 SuperMini z CC1101 (z zachowanym pinoutem) według YAMLA esphome-components/ESP32-C3_SuperMini_CC1101.yaml at main · SzczepanLeon/esphome-components · GitHub

Niestety, telegramy są interpretowane połowiczo przez ESP 32 - odczytywana jest pierwsza część w trybie T1 (id licznika, typ pomiaru, siła sygnału, itp), jednak nie pojawiają się informacje o zużyciu wody. Po wklejeniu telegramu do wmbusmeters.org pojawia się:

telegram=|3E4401067500240705077A150030852F2F_0F05B0D59A8900004385028772973956393901710B00102F9101007101C17601009D3F0100A0E7A2C704FFFF5B5E|

Auto driver : apator162
Similar driver : apator162 46/46
Using driver : apator162 00/00
000 : 3e length (62 bytes)
001 : 44 dll-c (from meter SND_NR)
002 : 0106 dll-mfct (APA)
004 : 75002407 dll-id (07240075)
008 : 05 dll-version
009 : 07 dll-type (Water meter)
010 : 7a tpl-ci-field (EN 13757-3 Application Layer (short tplh))
011 : 15 tpl-acc-field
012 : 00 tpl-sts-field (OK)
013 : 3085 tpl-cfg 8530 (bidirectional AES_CBC_IV nb=3 cntn=0 ra=0 hc=0 )
015 : 2f2f decrypt check bytes (OK)
017 C!: 0F manufacturer specific data 05B0D59A8900004385028772973956393901710B00102F9101007101C17601009D3F0100A0E7A2C704FFFF5B5E
decode(state = ambiguous
off = 0
xmlns:ixml = http://invisiblexml.org/NS)
{
‘0F’
status(off = 2) = 05B0D59A890000
days(off = 16) = 8502
woot_8x(off = 20) = 72973956393901710B00
total(dvk = 0413
off = 40) = 2F910100
woot_71(off = 48) = 01C17601009D3F0100
woot_A0(off = 66) = E7A2C704
checksum(off = 74) = FFFF5B5E
}
037 C!: *** 2F910100 (“total_m3”:102.703)

{
“_”:“telegram”,
“media”:“water”,
“meter”:“apator162”,
“name”:“”,
“id”:“07240075”,
“total_m3”:102.703,
“timestamp”:“2026-05-16T18:17:20Z”
}

Using: wmbusmeters: 2.0.0-409-g5e67939b
5e67939bcbb2c640c58387bf5d5ef1843beda875

W tej sekcji 037 są dane dotyczące zużycia wody, jednakże nie wiem, jak je odczytać przez ESP 32.

Przykładowy log z ESP32:

[20:50:26.230][D][wmbusmeters:351]: (wmbus) trimming frame A “3E44010689002407050709E57A700030853695BC63016A03E35E8A53131540AEC210F553CD73F2C41B721BAAA108A67463CD24A56939A6FEDAB16E9F12FFEAC07A177BBCE3A64126F2”
[20:50:26.240][D][wmbusmeters:351]: (wmbus) trimming frame A “3E44010689002407050709E57A700030853695BC63016A03E35E8A53131540AEC210F553CD73F2C41B721BAAA108A67463CD24A56939A6FEDAB16E9F12FFEAC07A177BBCE3A64126F2”
[20:50:26.255][D][wmbusmeters:351]: (wmbus) trimmed frame A “3E4401068900240705077A700030853695BC63016A03E35E8A5340AEC210F553CD73F2C41B721BAAA10863CD24A56939A6FEDAB16E9F12FFEAC07BBCE3A641”
[20:50:26.275][D][wmbusmeters:351]: (wmbus) checkWMBUSFrame “3E4401068900240705077A700030853695BC63016A03E35E8A5340AEC210F553CD73F2C41B721BAAA10863CD24A56939A6FEDAB16E9F12FFEAC07BBCE3A641”
[20:50:26.297][D][main:573]: Frame received: RSSI=-50dBm, Mode=T1, Data=3e4401068900240705077a700030853695bc63016a03e35e8a5340aec210f553cd73f2c41b721baaa10863cd24a56939a6fedab16e9f12ffeac07bbce3a641
[20:50:26.314][D][wmbusmeters:779]: (meter) apator162-07240089(0) apator162 handling telegram from 07240089.M=APA.V=05.T=07
[20:50:26.322][D][wmbusmeters:267]: (telegram) DLL L=3e C=44 (from meter SND_NR) M=0601 (APA) A=07240089 VER=05 TYPE=07 (Water meter) (driver apator162) DEV=MonitorWodyApator2 RSSI=-50
[20:50:26.346][D][wmbusmeters:322]: (telegram) TPL CI=7a
[20:50:26.346][D][wmbusmeters:326]: ACC=70 STS=00 CFG=8530 (bidirectional AES_CBC_IV nb=3 cntn=0 ra=0 hc=0)
[20:50:26.346][W][component:522]: wmbus_radio took a long time for an operation (147 ms), max is 30 ms
[20:50:26.460][S][sensor]: ‘Licznik Ogrodowy RSSI’ >> -50 dBm

Proszę o pomoc.

Masz szyfrowaną transmisje.

W logu masz:

CFG=8530 (bidirectional AES_CBC_IV ...)

czyli telegram Apatora 16-2 jest szyfrowany AES-CBC.

Wklej YAML

Tu jest mój YAML:

esphome:
  name: monitorwodyapator2
  friendly_name: MonitorWodyApator2

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

logger:
  hardware_uart: USB_CDC
  level: DEBUG

time:
  - platform: sntp
    

# Enable Home Assistant API
api:
  encryption:
    key: (…)

ota:
  - platform: esphome
    password: (…)

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Monitorwodyapator2"
    password: (…)

captive_portal:

external_components:
  - source: github://SzczepanLeon/esphome-components@main
    components: [ wmbus_radio, wmbus_common, wmbus_meter ]

wmbus_common:
    drivers:
    - apator162

spi:
  clk_pin: GPIO5   # SCK
  mosi_pin: GPIO6  # MOSI
  miso_pin: GPIO7  # MISO

wmbus_radio:
  radio_type: CC1101
  cs_pin: GPIO4
  irq_pin: GPIO3

  # frequency: 868.95MHz   # Optional. Range: 300–928 MHz. Default: 868.95 MHz
  on_frame:
    - then:
        - logger.log:
            format: "Frame received: RSSI=%ddBm, Mode=%s, Data=%s"
            args: [ 'frame->rssi()', 'toString(frame->link_mode())', 'frame->as_hex().c_str()' ]

wmbus_meter:
  # --- Licznik Główny ---
  - id: apator_glowny
    meter_id: 0x7240075
    type: apator162
    key: "0000000000000000"
    mode:
      - T1

  # --- Licznik Ogrodowy ---
  - id: apator_ogrodowy
    meter_id: 0x7240089
    type: apator162
    key: "0000000000000000"
    mode:
     - T1

# Sekcja sensorów przekazująca stany do Home Assistant
sensor:
  # --- SENSORY DLA LICZNIKA GŁÓWNEGO ---
  - platform: wmbus_meter
    parent_id: apator_glowny
    field: total_m3
    name: "Licznik Glowny Stan"
    unit_of_measurement: "m³"
    device_class: water
    state_class: total_increasing
    accuracy_decimals: 3
    icon: "mdi:water"

  - platform: wmbus_meter
    parent_id: apator_glowny
    field: rssi_dbm
    name: "Licznik Glowny RSSI"
    unit_of_measurement: "dBm"
    device_class: signal_strength
    state_class: measurement
    entity_category: diagnostic
    accuracy_decimals: 0

  # --- SENSORY DLA LICZNIKA OGRODOWEGO ---
  - platform: wmbus_meter
    parent_id: apator_ogrodowy
    field: total_m3
    name: "Licznik Ogrodowy Stan"
    unit_of_measurement: "m³"
    device_class: water
    state_class: total_increasing
    accuracy_decimals: 3
    icon: "mdi:water-pump"

  - platform: wmbus_meter
    parent_id: apator_ogrodowy
    field: rssi_dbm
    name: "Licznik Ogrodowy RSSI"
    unit_of_measurement: "dBm"
    device_class: signal_strength
    state_class: measurement
    entity_category: diagnostic
    accuracy_decimals: 0

  # --- SENSORY DIAGNOSTYCZNE MODUŁU ESP32-C3 ---
  - platform: wifi_signal
    name: "ESP WiFi Signal"
    id: wifi_signal_db
    update_interval: 60s
    unit_of_measurement: "dBm"
    device_class: signal_strength
    state_class: measurement
    entity_category: diagnostic
    accuracy_decimals: 0

  - platform: uptime
    name: "ESP Uptime"
    update_interval: 60s
    entity_category: diagnostic

binary_sensor:
  - platform: status
    name: "ESP Status Połączenia"
    entity_category: diagnostic

button:
  - platform: restart
    name: "Restart ESP"
    entity_category: diagnostic

Zmienił się trochę log - skompilowałem jeszcze raz kod jak wyżej:

[21:30:59.214][D][packet:097]: Have data from radio (110 bytes)
[21:30:59.218][D][wmbusmeters:351]: raw packet "2F271C58D59AB2559639C5935995935A5C994E64CE5962D6B1934E6717232CD9936A99ACC5399CD1339AC537254F43A6CA5653A7496C9A55B4D0BB198EC599CA566CD0D9B296C4D995939935994B699D0BC8D3656B49A3C564F42F4C9CC967235A54F45A9B31B2369A693CA98F25"
[21:30:59.235][D][wmbusmeters:351]: (wmbus) trimming frame A "3E44010689002407050709E57A72003085125D4B31A76FA8D7A4C726D7497C2AE957FC98A90CC385B805E958C1AE98759525159365C3E1196CABD07C3CE4E04B097C0F8D8B6667EFBE"
[21:30:59.254][D][wmbusmeters:351]: (wmbus) trimming frame A "3E44010689002407050709E57A72003085125D4B31A76FA8D7A4C726D7497C2AE957FC98A90CC385B805E958C1AE98759525159365C3E1196CABD07C3CE4E04B097C0F8D8B6667EFBE"
[21:30:59.271][D][wmbusmeters:351]: (wmbus) trimmed frame A "3E4401068900240705077A72003085125D4B31A76FA8D7A4C7267C2AE957FC98A90CC385B805E958C1AE9525159365C3E1196CABD07C3CE4E04B0F8D8B6667"
[21:30:59.288][D][wmbusmeters:351]: (wmbus) checkWMBUSFrame "3E4401068900240705077A72003085125D4B31A76FA8D7A4C7267C2AE957FC98A90CC385B805E958C1AE9525159365C3E1196CABD07C3CE4E04B0F8D8B6667"
[21:30:59.305][D][main:573]: Frame received: RSSI=-48dBm, Mode=T1, Data=3e4401068900240705077a72003085125d4b31a76fa8d7a4c7267c2ae957fc98a90cc385b805e958c1ae9525159365c3e1196cabd07c3ce4e04b0f8d8b6667
[21:30:59.335][D][wmbusmeters:779]: (meter) apator162-07240089(0) apator162  handling telegram from 07240089.M=APA.V=05.T=07
[21:30:59.341][D][wmbusmeters:267]: (telegram) DLL L=3e C=44 (from meter SND_NR) M=0601 (APA) A=07240089 VER=05 TYPE=07 (Water meter) (driver apator162) DEV=MonitorWodyApator2 RSSI=-48
[21:30:59.347][D][wmbusmeters:351]: (TPL) AES CBC IV decrypting "125D4B31A76FA8D7A4C7267C2AE957FC98A90CC385B805E958C1AE9525159365C3E1196CABD07C3CE4E04B0F8D8B6667"
[21:30:59.371][D][wmbusmeters:357]: (TPL) decrypted  "BF0721767EF0732A6260141F2F7F7CA26D3D088E1B34B1B0AA5530845EE7E8944925A87D990AEAB0F87062CDF034EB7D"
[21:30:59.377][D][wmbusmeters:322]: (telegram) TPL CI=7a
[21:30:59.381][D][wmbusmeters:326]:  ACC=72 STS=00 CFG=8530 (bidirectional AES_CBC_IV nb=3 cntn=0 ra=0 hc=0)
[21:30:59.501][S][sensor]: 'Licznik Ogrodowy RSSI' >> -48 dBm
[21:31:22.481][S][sensor]: 'ESP WiFi Signal' >> -48 dBm
[21:31:23.492][S][sensor]: 'ESP Uptime' >> 365 s
[21:32:22.485][S][sensor]: 'ESP WiFi Signal' >> -48 dBm
[21:32:23.491][S][sensor]: 'ESP Uptime' >> 425 s
[21:33:22.486][S][sensor]: 'ESP WiFi Signal' >> -49 dBm
[21:33:23.505][S][sensor]: 'ESP Uptime' >> 485 s

A tu wmbusmeters po wklejeniu linijki [21:30:59.288][D][wmbusmeters:351]: (wmbus) checkWMBUSFrame “3E4401068900240705077A72003085125D4B31A76FA8D7A4C7267C2AE957FC98A90CC385B805E958C1AE9525159365C3E1196CABD07C3CE4E04B0F8D8B6667” z użyciem klucza 0000000000000000:

telegram=|3E4401068900240705077A720030852F2F_0F57B0D59A890000438102806C6D186D6D180105000010122700007101852600005F260000A0ADA2C704FFFF5024|

Auto driver    : apator162
Similar driver : apator162 46/46
Using driver   : apator162 00/00
000   : 3e length (62 bytes)
001   : 44 dll-c (from meter SND_NR)
002   : 0106 dll-mfct (APA)
004   : 89002407 dll-id (07240089)
008   : 05 dll-version
009   : 07 dll-type (Water meter)
010   : 7a tpl-ci-field (EN 13757-3 Application Layer (short tplh))
011   : 72 tpl-acc-field
012   : 00 tpl-sts-field (OK)
013   : 3085 tpl-cfg 8530 (bidirectional AES_CBC_IV nb=3 cntn=0 ra=0 hc=0 )
015   : 2f2f decrypt check bytes (OK)
017 C!: 0F manufacturer specific data 57B0D59A890000438102806C6D186D6D180105000010122700007101852600005F260000A0ADA2C704FFFF5024
decode(state      = ambiguous
       off        = 0
       xmlns:ixml = http://invisiblexml.org/NS)
{
    '0F'
    status(off = 2) = 57B0D59A890000
    days(off = 16) = 8102
    woot_8x(off = 20) = 6C6D186D6D1801050000
    total(dvk = 0413
          off = 40) = 12270000
    woot_71(off = 48) = 01852600005F260000
    woot_A0(off = 66) = ADA2C704
    checksum(off = 74) = FFFF5024
}
037 C!: *** 12270000 ("total_m3":10.002)

{
    "_":"telegram",
    "media":"water",
    "meter":"apator162",
    "name":"",
    "id":"07240089",
    "total_m3":10.002,
    "timestamp":"2026-05-16T19:42:05Z"
}


Using: wmbusmeters: 2.0.0-409-g5e67939b
5e67939bcbb2c640c58387bf5d5ef1843beda875

Pozdrawiam!

wmbus_meter:
  - id: apator_glowny
    meter_id: 0x07240075
    type: apator162
    key: "00000000000000000000000000000000"
    mode:
      - T1

  - id: apator_ogrodowy
    meter_id: 0x07240089
    type: apator162
    key: "00000000000000000000000000000000"
    mode:
      - T1

Muszą być 32 zera.
Również pozdro :slight_smile:

Super! Bardzo dziękuję!

Swoją drogą, to jest bardzo ciekawe kodowanie, jeśli wmbusmeters deszyfruje i 16 zer i 32 zera…

Musiał bym Ci długi wykład strzelić :slight_smile: Ale uwierz mi że tak jest.