Read Kamstrup FlowIQ2200 water meter with ESPHome components

Hello

Using the v4 Esp-home components branch (GitHub - SzczepanLeon/esphome-components) with Home Assistant, an ESP32 and the CC1101 transciever module I am able to recieve encrypted telegrams from a Kamstrup FlowIQ2200 KWM2210 water meter configured with transmission behaviour drive-by C1 B frames 868 mhz.

The problem is that the telegrams will not decrypt, even with the correct DEK add.

The encrypted telegrams are recieved, but I keep getting this error message (meter name is anonymized with XXX):

[16:08:28.168][D][meters.cpp:1985]: (meter) created ESPHome flowiq2200 XXX encrypted [16:08:28.179][D][meters.cpp:909]: (meter) ESPHome(0) flowiq2200 handling telegram from XXX.M=KAW.V=3a.T=16 [16:08:28.180][D][Telegram.cpp:563]: (telegram) ELL CI=8d CC=20 (slow_resp sync) ACC=ea [16:08:28.184][D][Telegram.cpp:570]: SN=11a13a23 (AES_CTR session=1 time=3385873) CRC=d81f [16:08:28.199][D][Telegram.cpp:2028]: (wmbus) ignoring compressed telegram since format signature hash 0x905 is yet unknown. [16:08:28.199][D][Telegram.cpp:2028]: this is not a problem, since you only need wait for at most 8 telegrams [16:08:28.199][D][Telegram.cpp:2028]: (8*16 seconds) until an full length telegram arrives and then we know [16:08:28.199][D][Telegram.cpp:2028]: the format giving this hash and start decoding the telegrams properly.

The problem is that in C1 mode, the meter only transmits compact telegrams, and thus no full length telegrams are ever recieved - even after hours of waiting. I think this is also according to the wmbus EN standard.

I thought that enabling the right driver would solve that problem by being able to decode the compact frames, but it doesn’t. Is there a way to fix it?

Below is my YAML file with meter name and encryption key anonymized:

name: esphome-web-4e4e44
friendly_name: 'ESP CC1101 wMbus reader'
min_version: 2025.11.0
name_add_mac_suffix: false

esp32:
variant: esp32
framework:
type: arduino

logger:

api:

ota:

* platform: esphome

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

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: GPIO5
gdo0_pin: GPIO14
gdo2_pin: GPIO26

all_drivers: True
log_all: True

sensor:

* platform: wmbus
meter_id: 0xXXX
type: flowiq2200
key: "XXX"
sensors:
  * name: "XXX RSSI"
field: "rssi"
accuracy_decimals: 0
unit_of_measurement: "dBm"
device_class: "signal_strength"
state_class: "measurement"
entity_category: "diagnostic"
  * name: "XXX counter"
field: "total"
accuracy_decimals: 3
unit_of_measurement: "m³"
device_class: "water"
state_class: "total_increasing"
icon: "mdi:water"

And an example telegram from the meter (encrypted and meter number anonymized with xxx):
[16:27:48.510][D][mbus:024]: Received C1 B frame [16:27:48.510][I][wmbus:094]: Using selected driver flowiq2200 (detected driver was flowiq2200) [16:27:48.510][I][wmbus:100]: flowiq2200 [0xXXX] RSSI: -78dBm T: 3244372C575001103A168D203142A23A2316C773515345D1D10E160422FCB980ABF229B6CAC44E886F472A9B8286B981418272 (51) C1 B

I suspect you won’t get an answer here, you need to talk to the author of the external component.