Licznik energii cieplnej Kamstrup Multical 402

Cześć Wszystkim!
Jestem pod wrażeniem tej biblioteki : GitHub - SzczepanLeon/esphome-components
Gratulacja dla wszystkich którzy się przyczynili do jej powstania!

Zrobiłem pierwsze kilka kroków, bez problemu odczytuję licznik wody Apator :slight_smile:

Kolejny krok to licznik ciepła od Kamstrupa, z tego co rozumiem nie ma on dedykowanego “dekodera” w sensie typu w wmbusmeters. Niestety jak ustawiam typ na “unknown” nic nie jest odbierane.

Pytanie do Was czy wskażecie drogę jak zmodyfikować komponent w biblitece SzczepanLeon, żeby sobie obsłużyć telegramy z mojego Kamstrupa?

Poniżej fragment logów z wmbusmeters:

Wrzucam fragment logów

(meter) MyKamstrup: yes for me
(meter) MyKamstrup(1) kamheat  handling telegram from 62215006
(meter) MyKamstrup 62215006 "40442D2C0650216219048D2043840E14237AB934690314EF5FBB173F17E276E41EBA6D9BCC35CACA57F4CCF2CF6C3D8A0B93B4639013EB26F0AB7B619333F3B782"
(wmbus) parseDLL @0 65
(telegram) DLL L=40 C=44 (from meter SND_NR) M=2c2d (KAM) A=62215006 VER=19 TYPE=04 (Heat meter) (driver unknown!) DEV=rtlwmbus[00000001] RSSI=143
(wmbus) parseELL @10 55
(ELL) decrypting "7AB934690314EF5FBB173F17E276E41EBA6D9BCC35CACA57F4CCF2CF6C3D8A0B93B4639013EB26F0AB7B619333F3B782"
(ELL) IV 2D2C06502162190420840E1423000000
(ELL) block 0 block_size 16 offset 0
(ELL) decrypted "C83A78040F063F000004FF07D89F0D00"
(ELL) block 1 block_size 16 offset 16
(ELL) decrypted "04FF08DF060D000414852C140002FD17"
(ELL) block 2 block_size 16 offset 32
(ELL) decrypted "0000043B4B0000000259A319025DB418"
(ELL) decrypted "C83A78040F063F000004FF07D89F0D0004FF08DF060D000414852C140002FD170000043B4B0000000259A319025DB418"
(telegram) ELL CI=8d CC=20 (slow_resp sync) ACC=43 SN=840e1423 (AES_CTR session=4 time=3227880) CRC=c83a
(wmbus) parseNWL @19 46
(wmbus) parseAFL @19 46
(wmbus) parseTPL @19 46
(dvparser) found new format "040F04FF0704FF08041402FD17043B0259025D" with hash d7d6, remembering!
(telegram) TPL CI=78
telegram=|40442D2C0650216219048D2043840E1423C83A78_040F063F000004FF07D89F0D0004FF08DF060D000414852C140002FD170000043B4B0000000259A319025DB418|+347
(meters) trying field info on_time(Time)[0]...
(meters) trying field info status(Text)[1]...
(meters) trying field info total_energy_consumption(Energy)[2]...
(meters) using field info total_energy_consumption(Energy)[2] to extract 040F at offset 22
(meter) AnyEnergyVIF total_energy_consumption_kwh decoded mj default kwh value 161340 (scale 1)
(meters) trying field info total_volume(Volume)[3]...
(meters) using field info total_volume(Volume)[3] to extract 0414 at offset 42
(meter) Volume total_volume_m3 decoded m3 default m3 value 13221.2 (scale 1)
(meters) trying field info volume_flow(Flow)[4]...
(meters) using field info volume_flow(Flow)[4] to extract 043B at offset 53
(meter) VolumeFlow volume_flow_m3h decoded m3h default m3h value 0.075 (scale 1)
(meters) trying field info power(Power)[5]...
(meters) trying field info max_power(Power)[6]...
(meters) trying field info t1_temperature(Temperature)[7]...
(meters) using field info t1_temperature(Temperature)[7] to extract 0259 at offset 59
(meter) FlowTemperature t1_temperature_c decoded c default c value 65.63 (scale 1)
(meters) trying field info t2_temperature(Temperature)[8]...
(meters) using field info t2_temperature(Temperature)[8] to extract 025D at offset 63
(meter) ReturnTemperature t2_temperature_c decoded c default c value 63.24 (scale 1)
(meters) trying field info max_flow(Flow)[9]...
(meters) trying field info forward_energy(Energy)[10]...
(meters) using field info forward_energy(Energy)[10] to extract 04FF07 at offset 29
(meter) Any forward_energy_m3c decoded m3c default m3c value 892888 (scale 1)
(meters) trying field info return_energy(Energy)[11]...
(meters) using field info return_energy(Energy)[11] to extract 04FF08 at offset 36
(meter) Any return_energy_m3c decoded m3c default m3c value 853727 (scale 1)
(meters) trying field info meter_date(Text)[12]...
(meters) trying field info target_energy(Energy)[13]...
(meters) trying field info target_volume(Volume)[14]...
(meters) trying field info target_date(Text)[15]...
(meters) trying field info operating_time(Time)[16]...
(kamheat) 000   : 40 length (64 bytes)(OK)
(kamheat) 001   : 44 dll-c (from meter SND_NR)
(kamheat) 002   : 2d2c dll-mfct (KAM)
(kamheat) 004   : 06502162 dll-id (62215006)
(kamheat) 008   : 19 dll-version
(kamheat) 009   : 04 dll-type (Heat meter)
(kamheat) 010   : 8d ell-ci-field (ELL: Extended Link Layer II (8 Byte))
(kamheat) 011   : 20 ell-cc (slow_resp sync)
(kamheat) 012   : 43 ell-acc
(kamheat) 013   : 840e1423 sn (AES_CTR)
(kamheat) 017   : c83a payload crc (calculated c83a OK)
(kamheat) 019   : 78 tpl-ci-field (EN 13757-3 Application Layer (no tplh))
(kamheat) 020   : 04 dif (32 Bit Integer/Binary Instantaneous value)
(kamheat) 021   : 0F vif (Energy 10⁷ J)
(kamheat) 022 C!: 063F0000 ("total_energy_consumption_kwh":44816.666667)
(kamheat) 026   : 04 dif (32 Bit Integer/Binary Instantaneous value)
(kamheat) 027   : FF vif (Manufacturer specific)
(kamheat) 028   : 07 vife (?)
(kamheat) 029 C!: D89F0D00 ("forward_energy_m3c":892888)
(kamheat) 033   : 04 dif (32 Bit Integer/Binary Instantaneous value)
(kamheat) 034   : FF vif (Manufacturer specific)
(kamheat) 035   : 08 vife (?)
(kamheat) 036 C!: DF060D00 ("return_energy_m3c":853727)
(kamheat) 040   : 04 dif (32 Bit Integer/Binary Instantaneous value)
(kamheat) 041   : 14 vif (Volume 10⁻² m³)
(kamheat) 042 C!: 852C1400 ("total_volume_m3":13221.17)
(kamheat) 046   : 02 dif (16 Bit Integer/Binary Instantaneous value)
(kamheat) 047   : FD vif (Second extension FD of VIF-codes)
(kamheat) 048   : 17 vife (Error flags (binary))
(kamheat) 049 C?: 0000
(kamheat) 051   : 04 dif (32 Bit Integer/Binary Instantaneous value)
(kamheat) 052   : 3B vif (Volume flow l/h)
(kamheat) 053 C!: 4B000000 ("volume_flow_m3h":0.075)
(kamheat) 057   : 02 dif (16 Bit Integer/Binary Instantaneous value)
(kamheat) 058   : 59 vif (Flow temperature 10⁻² °C)
(kamheat) 059 C!: A319 ("t1_temperature_c":65.63)
(kamheat) 061   : 02 dif (16 Bit Integer/Binary Instantaneous value)
(kamheat) 062   : 5D vif (Return temperature 10⁻² °C)
(kamheat) 063 C!: B418 ("t2_temperature_c":63.24)
{"media":"heat","meter":"kamheat","name":"MyKamstrup","id":"62215006","forward_energy_m3c":892888,"return_energy_m3c":853727,"t1_temperature_c":65.63,"t2_temperature_c":63.24,"total_energy_consumption_kwh":44816.666667,"total_volume_m3":13221.17,"volume_flow_m3h":0.075,"status":"OK","timestamp":"2023-11-16T23:35:30Z","device":"rtlwmbus[00000001]","rssi_dbm":143}

oraz zrzut z dekodera wmbus:

telegram=|40442D2C0650216219048D202B140C1423633A78_040F063F000004FF07D59F0D0004FF08DC060D000414812C140002FD170000043B4400000002599819025DA318|

Auto driver  : not found!
Best driver  : kamheat 24/26
Using driver : kamheat 00/00
000   : 40 length (64 bytes)(OK)
001   : 44 dll-c (from meter SND_NR)
002   : 2d2c dll-mfct (KAM)
004   : 06502162 dll-id (62215006)
008   : 19 dll-version
009   : 04 dll-type (Heat meter)
010   : 8d ell-ci-field (ELL: Extended Link Layer II (8 Byte))
011   : 20 ell-cc (slow_resp sync)
012   : 2b ell-acc
013   : 140c1423 sn (AES_CTR)
017   : 633a payload crc (calculated 633a OK)
019   : 78 tpl-ci-field (EN 13757-3 Application Layer (no tplh))
020   : 04 dif (32 Bit Integer/Binary Instantaneous value)
021   : 0F vif (Energy 10⁷ J)
022 C!: 063F0000 ("total_energy_consumption_kwh":44816.666667)
026   : 04 dif (32 Bit Integer/Binary Instantaneous value)
027   : FF vif (Manufacturer specific)
028   : 07 vife (?)
029 C!: D59F0D00 ("forward_energy_m3c":892885)
033   : 04 dif (32 Bit Integer/Binary Instantaneous value)
034   : FF vif (Manufacturer specific)
035   : 08 vife (?)
036 C!: DC060D00 ("return_energy_m3c":853724)
040   : 04 dif (32 Bit Integer/Binary Instantaneous value)
041   : 14 vif (Volume 10⁻² m³)
042 C!: 812C1400 ("total_volume_m3":13221.13)
046   : 02 dif (16 Bit Integer/Binary Instantaneous value)
047   : FD vif (Second extension FD of VIF-codes)
048   : 17 vife (Error flags (binary))
049 C?: 0000
051   : 04 dif (32 Bit Integer/Binary Instantaneous value)
052   : 3B vif (Volume flow l/h)
053 C!: 44000000 ("volume_flow_m3h":0.068)
057   : 02 dif (16 Bit Integer/Binary Instantaneous value)
058   : 59 vif (Flow temperature 10⁻² °C)
059 C!: 9819 ("t1_temperature_c":65.52)
061   : 02 dif (16 Bit Integer/Binary Instantaneous value)
062   : 5D vif (Return temperature 10⁻² °C)
063 C!: A318 ("t2_temperature_c":63.07)

{
    "media":"heat",
    "meter":"kamheat",
    "name":"",
    "id":"62215006",
    "forward_energy_m3c":892885,
    "return_energy_m3c":853724,
    "t1_temperature_c":65.52,
    "t2_temperature_c":63.07,
    "total_energy_consumption_kwh":44816.666667,
    "total_volume_m3":13221.13,
    "volume_flow_m3h":0.068,
    "status":"OK",
    "timestamp":"2023-11-16T23:27:41Z"
}


Using: wmbusmeters: 1.14.0-48-gc4b9f0d
c4b9f0d10477cb6bb2472e1f2de5eb08ba42e7c4

@_Szczepan

  1. sprawdzasz czy w logach komponentu (ESPHome) pojawia się linia w stylu:
[22:05:39][D][wmbus:131]: Meter ID [0x00076503] RSSI: -56 dBm LQI: 128 Mode: T1 not found in configuration T: 6E4401060365070005077A5F006085FD675F811FA6BDD78C113E5DB017190A2F835FDF3CB3A4B1B860A775742E150ED5BB90D2BF77B546D5C43A82B443D90AAB12CAEFDDF54F2FC08460E61FA2C24A593A2462EAC50F31BC435E837F692BC397BE32D0DA30FC483B3A4F3CCFED835A (111)

2.1) jak się pojawia to idealnie możesz wtedy:
a) przesłać taki telegram do wmbusmeters celem zdekodowania (musisz w komponencie zdefiniować klientów)
b) dodać do komponentu “driver”

2.2) Jak się nic nie pojawia to masz opcje:
a) jesteś za daleko
b) coś nie tak z CC1101 (Ciebie nie dotyczy boi już jakieś Apatory odbierasz)
c) interesujący licznik nie nadaje na częstotliwości 868MHz żadnych ramek wM-Bus (ani T1 ani C1)

Cześć,
Rzeczywiście mam problem z odbieraniem tych ramek w ESPHOME.

Sytuacja wygląda tak, że jak korzystam z RTL_SDR i wmbusmeters:


To odbieram dane z przeszło trzydziestu pobliskich liczników (w tym z mojego), inne są oddalone o 30-200 metrów.
Przykład dla mojego licznika:

Niestety jak przechodzę na CC1101 i ESP32 to wygląda na to, że odbieram ramki tylko z pobliskich Apatorów. Zmieniłem standardową antenę typu coil na ground plane (zdjęcie poniżej). Po tej zmianie zwiększyłem zasięg jeśli chodzi o odbieranie Apatrów :slight_smile:

Zaczynam się zastanawiać, czy ta metoda wmbus_listeners_ gdzieś mi nie blokuje odbierania tych ramek z Kamstrupa?

Testowałem oczywiście bliskie położenie anteny - ok. 1,5 metra w tym samym pomieszczeniu. Dalej nic.

Będę wdzięczny za pomysły jak zrobić, żeby MeterID mojego Kamstrupa się pojawił w logach ESPHOME.

–EDIT
Wykonałem test polegający na równoległym odbieraniu sygnałów przez RTL_SDR oraz ESPHOME. Czas testu 10:45 - 11:15 (niedziela).
Poniżej rezultaty:

  1. ESPHOME + CC1101:

Zarejestrowano 19 ramek, w tym 2 gdzie odkodowano MeterID (liczniki Apator).
Prawdopodobnie pozostałe 17 ramek to liczniki Kamstrup.

  1. Wyniki z RTL_SDR + wmbusmeters z tego czasu to:

Odebrano 550 ramek.
540 z liczników Kamstrup, 10 z liczników Apator.
Zarejestrowano 36 unikalnych MeterID (28x Kamstrup, 8x Apator).

Zarejestrowano 4 unikalne wersje sprzętu:
ver: 0x05 (Apator, apator162)
ver: 0x19 (Kamstrup, unknown) → mój licznik który chciałbym odczytać
ver: 0x1c (Kamstrup, unknown)
ver: 0x34 (Kamstrup, kamheat)

Przypisując ramki, które zarejestrował ESPHOME (17) analogicznych czasów w RTL_SDR wnioskuję, że pochodzą one głównie od tych liczników:


Dzięki za pomoc!

Dlaczego tak sądzisz?
Chcesz mieć więcej danych do analizy (nie ramek) to zbieraj logi poprzez serial’a.

Jak wyglądają logi z RTL dla tego Twojego licznika? Jesteś pewien że nadaje on wM-Bus T1?

Hej,
Dzięki za odpowiedź.

Po przemyśleniu tematu muszę wrócić do punktu wyjścia i sprawić, aby mój MeterID pojawiał się w logach ESPHOME. Wskazówki mile widziane.

Z tego co się zorientowałem to mój licznik nadaje w C1.

  1. wynika to z noty katalogowej modułu WMBus (który określiłem na bazie numeru produktu na liczniku), poniżej opis tego modułu:

  2. Powtwierdzone też przez wmbusmeters, nasłuch ramek C1:

PS
Dodałem moją wersję licznika do głownej wersji biblioteki wmbusmeters:

EDIT
Poniżej analiza sygnału z mojego licznika przez RTL_433:

jaco@jaco-OS:~$ rtl_433 -A MyKamheat_868.95M_1200k.cu8
rtl_433 version 21.12 (2021-12-14) inputs file rtl_tcp RTL-SDR SoapySDR
Use -h for usage help and see https://triq.org/ for documentation.
Trying conf file at "rtl_433.conf"...
Trying conf file at "/home/jaco/.config/rtl_433/rtl_433.conf"...
Trying conf file at "/usr/local/etc/rtl_433/rtl_433.conf"...
Trying conf file at "/etc/rtl_433/rtl_433.conf"...
Registered 176 out of 207 device decoding protocols [ 1-4 8 11-12 15-17 19-23 25-26 29-36 38-60 63 67-71 73-100 102-105 108-116 119 121 124-128 130-149 151-161 163-168 170-175 177-197 199 201-207 ]
Test mode active. Reading samples from file: MyKamheat_868.95M_1200k.cu8
baseband_demod_FM: low pass filter for 1200000 Hz at cutoff 120000 Hz, 8.3 us
Detected FSK package	@0.027407s
WARNING: Undeclared field "inst_volume_flow_min_1" in [104] "Wireless M-Bus, Mode C&T, 100kbps (-f 868950000 -s 1200000)"
WARNING: Undeclared field "inst_mass_flow_0" in [104] "Wireless M-Bus, Mode C&T, 100kbps (-f 868950000 -s 1200000)"
WARNING: Undeclared field "err_ontime_d_8" in [104] "Wireless M-Bus, Mode C&T, 100kbps (-f 868950000 -s 1200000)"
WARNING: Undeclared field "inst_temperature_return_2" in [104] "Wireless M-Bus, Mode C&T, 100kbps (-f 868950000 -s 1200000)"
WARNING: Undeclared field "err_power_jh_0" in [104] "Wireless M-Bus, Mode C&T, 100kbps (-f 868950000 -s 1200000)"
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
time      : @0.027407s
model     : Wireless-MBus Mode      : C            Manufacturer: KAM
ID        : 62215006
Version   : 25           Device Type: 0x04         Device Type String: Heat
Control   : 0x44         Data Length: 63           Data      : 40442d2c0650216219048d20bbb4801a2348b20489b1b4e63d5f367a71385038b0663e9b15bd47f06f5b16503f9211a8954978386c2ad7e1c9bc75c061ddd994ec
Integrity : CRC
 Volume flow[1]: 11.309 m3/min                      Mass flow[0]: 35790031249.953 kg/h
Err OnTime[8]: 51248.000 days                       Return temperature[2]: 36.000 C
Err Power[0]: 0.000 J/h
Analyzing pulses...
Total count:  362,  width: 13.55 ms		(16264 S)
Pulse width distribution:
 [ 0] count:    1,  width:    0 us [0;0]	(   0 S)
 [ 1] count:  203,  width:   10 us [9;12]	(  12 S)
 [ 2] count:   89,  width:   20 us [19;21]	(  24 S)
 [ 3] count:   19,  width:   39 us [39;40]	(  47 S)
 [ 4] count:   34,  width:   29 us [28;31]	(  35 S)
 [ 5] count:   10,  width:   54 us [49;60]	(  65 S)
 [ 6] count:    6,  width:   74 us [69;80]	(  89 S)
Gap width distribution:
 [ 0] count:   39,  width:   29 us [25;31]	(  35 S)
 [ 1] count:  198,  width:   10 us [8;11]	(  12 S)
 [ 2] count:   78,  width:   19 us [19;21]	(  23 S)
 [ 3] count:   34,  width:   42 us [39;50]	(  51 S)
 [ 4] count:   11,  width:   63 us [60;70]	(  76 S)
 [ 5] count:    1,  width:  100 us [100;100]	( 120 S)
Pulse period distribution:
 [ 0] count:  114,  width:   19 us [19;25]	(  23 S)
 [ 1] count:   94,  width:   30 us [29;31]	(  36 S)
 [ 2] count:   78,  width:   42 us [39;51]	(  51 S)
 [ 3] count:   41,  width:   55 us [50;61]	(  66 S)
 [ 4] count:   27,  width:   77 us [69;90]	(  92 S)
 [ 5] count:    7,  width:  109 us [99;120]	( 131 S)
Pulse timing distribution:
 [ 0] count:    1,  width:    0 us [0;0]	(   0 S)
 [ 1] count:  401,  width:   10 us [8;12]	(  12 S)
 [ 2] count:  167,  width:   19 us [19;21]	(  23 S)
 [ 3] count:   43,  width:   39 us [39;41]	(  47 S)
 [ 4] count:   73,  width:   29 us [25;31]	(  35 S)
 [ 5] count:   27,  width:   54 us [49;61]	(  65 S)
 [ 6] count:   10,  width:   72 us [69;80]	(  87 S)
 [ 7] count:    1,  width:  100 us [100;100]	( 120 S)
 [ 8] count:    1,  width:    0 us [0;0]	(   0 S)
Level estimates [high, low]:  15917,     28
RSSI: -0.1 dB SNR: 27.5 dB Noise: -27.7 dB
Frequency offsets [F1, F2]:    3248,  -2909	(+59.5 kHz, -53.3 kHz)
Guessing modulation: Pulse Code Modulation (Not Return to Zero)
Attempting demodulation... short_width: 10, long_width: 10, reset_limit: 10240, sync_width: 0
Use a flex decoder with -X 'n=name,m=FSK_PCM,s=10,l=10,r=10240'
pulse_demod_pcm(): Analyzer Device
bitbuffer:: Number of rows: 1 
[00] {1356} 15 55 55 55 4b 2b 6a 54 a6 96 d0 9e ae 80 f3 c1 6c 88 0b d5 55 55 55 55 0f 55 0f 50 91 0b 4b 01 94 08 58 86 41 23 48 2e ed 20 06 88 d2 2c 81 22 6c 6d 39 8f 57 cd 9e 9c 4e 14 0e 2c 19 8f a6 c5 6f 51 fc 1b d6 c5 94 0f e4 84 6a 25 52 5e 0e 1b 0a b5 f8 72 6f 1d 70 18 77 76 65 3b 1a 55 9c 92 d2 49 de 77 e4 36 a7 cc e1 c5 ad d4 5e 17 f0 65 29 03 6b ab 8b 59 7f 8d 46 11 06 ec 6d 90 db 7b 2d 1d 07 fb b5 d9 e7 19 c4 6f 2f d7 d5 9a 5c db 50 c2 7b 9d be 04 0f d1 2e 10 c8 89 5f 8a 82 a6 26 d9 22 4b 3f d0 c5 e8 6d 70

Powinno C1 łapać, ale pamiętaj że jego obsługa jest zrobiona tylko testowo/experymentalnie (np. bez kontroli CRC).

Jest jeszcze pytanie - który format ramki? A czy B? Tylko C1 A jest obsługiwana obecnie, ale w logach zbieranych “po serialu” powinien byc slad o takiej ramce/telegramie.

Finalnie, jak juz będziesz dodawał sensor do konfiga, to dla C1 musisz dodac linię mode:

sensor:
  - platform: wmbus
    meter_id: 0x12345678
    type: ﷼
    mode: C1
    rssi:
      name: "My RSSI"

Cześć @_Szczepan dziękuję bardzo za wskazówki!

Rzeczywiście mój licznik nadaje w C1 mode B.

Dodałem obsługę tego formatu (pewnie w ograniczonym zakresie - tak żeby działało dla mojego przypadku).
To pociągnęło za sobą kilka innych modyfikacji - inna interpretacja długości ramki (L-field), inny sposób szyfrowania danych (AES CTR). Ale w końcu udało się dobić do brzegu z dobrym rezultatem:


Wszystkie zmiany są dostępne w mojej kopii Twojego repo:

Pozdrawiam!

PS
Wrzucam jeszcze konfigurację YAML:

 - platform: wmbus

    # Meter ID (usually from sticker). Can be specified as decimal or hex.
    # only hex is working for my watermeter !
    # see: https://github.com/SzczepanLeon/esphome-components/issues/6
    # edit watermeterid in the secrets file
    ## add_prefix settings to add the watermeterid to the lqi, rssi and total_water_m3
    meter_id: !secret heatmeterId1 
    mode: T1C1
    type: kamheat
    key: !secret heatmeterId1key
    add_prefix: false

    # The LQI value reported by the CC1101 is a 7 bit unsigned number with a range from 0 to 127.
    # Note that a lower value indicates a better link.
    # The LQI of a received packet will be bad (higher number) when there is lot of interference.
    lqi:
      id: my_heat_cc1101_lqi
      name: "My Heat meter LQI"
      entity_category: "diagnostic"
      unit_of_measurement: "lqi"
      state_class: "measurement"

    # The RSSI value reported by the CC1101 is a 8 bit signed number with an effective
    # range from -138 dBm to -10.5 dBm when the CC1101 is operating around 868 MHz.
    # RSSI stands for received signal strength (power) indication (in dBm).
    # A higher value indicates higher power. (internal only)
    rssi:
      id: my_heat_cc1101_rssi
      name: "My Heat meter RSSI"
      unit_of_measurement: "dBm"
      entity_category: "diagnostic"

    # get the total energy in GJ from the wmbus telegram
    total_energy_consumption_gj:
      name: "My Heat consumption"
      id: my_heat_consumption
      unit_of_measurement: "GJ"
      state_class: total_increasing
      device_class: "energy"
      accuracy_decimals: 2
      icon: mdi:gauge
    # get the forward energy in m2*C from the wmbus telegram
    total_forward_energy_m3c:
      name: "My Heat forward energy"
      id: my_heat_forward_energy
      unit_of_measurement: "m³×°C"
      state_class: total_increasing
      device_class: "energy"
      accuracy_decimals: 0
      icon: mdi:counter      
    # get the return energy in m2*C from the wmbus telegram
    total_return_energy_m3c:
      name: "My Heat return energy"
      id: my_heat_return_energy
      unit_of_measurement: "m³×°C"
      state_class: total_increasing
      device_class: "energy"
      accuracy_decimals: 0
      icon: mdi:counter      
    # get the total volume in m3 from the wmbus telegram
    total_volume_m3:
      name: "My Heat total volume"
      id: my_heat_total_volume
      unit_of_measurement: "m³"
      state_class: total_increasing
      device_class: "volume"
      accuracy_decimals: 2
      icon: mdi:counter          
    # get current flow in l/h from the wmbus telegram
    volume_flow_lh:
      name: "My Heat flow"
      id: my_heat_flow
      unit_of_measurement: "l/h"
      state_class: "measurement"
      accuracy_decimals: 0
      icon: mdi:counter       
    # get current temperature at inlet in Celcius from the wmbus telegram
    flow_temperature_c:
      name: "My Heat inlet temperature"
      id: my_heat_temp_in
      unit_of_measurement: "°C"
      state_class: "measurement"
      device_class: "temperature"
      accuracy_decimals: 2
      icon: mdi:thermometer-high            
    # get current temperature at outlet in Celcius from the wmbus telegram
    return_temperature_c:
      name: "My Heat outlet temperature"
      id: my_heat_temp_out
      unit_of_measurement: "°C"
      state_class: "measurement"
      device_class: "temperature"
      accuracy_decimals: 2
      icon: mdi:thermometer-low

PPS
Dodałem sprawdzanie CRC bo ~2x na dobę zdarzały się błędne odczyty.

2 polubienia

Mozesz zrobic pull request do mojego repo ?

Witam Wszystkich,
Jestem pełen podziwu dla Was za wiedzę i pomysły - jesteście niesamowici. Sam dopiero rozpoczynam zabawę z HA. Z góry dzięki za pomoc
Do rzeczy, Posiadam licznik “chłodu” Kamstrup multical 402, dotychczas zczytywałem dane z licznika poprzez przystawkę IR bezpośrednio do HA. Podgląd pracy pompy ciepła. Niestety, nie jest to rozwiązanie stabilne.
Od jakiegoś czasu, uruchomiłem odczyt licznika wody, na jego podstawie mierze poziom zapełnienia szamba, ESP32 + cc1101 - działa to rewelacyjnie dzięki @_Szczepan. Przyszła pora na odczyt z licznika Kamstrup i problem, czytam ramkę, ale jej nie rozpoznaje:

[08:06:58][D][mbus:023]: Processing C1 B frame
[08:06:58][D][wmbus:176]: Meter ID [0x62214696] RSSI: -51 dBm LQI: 128 Frame: C1 B not found in configuration T: 53442D2C96462162190A8D20A771E2412335A90A852C598B3D047AC64EC6311753941635A03A2EA8BCC9086A54CC2BB686EF1B9F7AE1C47265ACBEC62F7CC4B46572C0BE1A5B140BC37AA561B2F995D77B03AADC (84)
[08:06:58][E][wmbus:241]: Can't connect via TCP to 10.10.10.10:7227

Dekoder wmbus online również nie dekoduje. Byłbym wdzięczny, za jakieś wskazówki.

Potrzebujesz klucz.

btw
Na pewno korzystasz z sekcji client w YAMLu?

klucz ? deszyfrujący?
wmbus
mam typ 402-0-35, tu nic nie piszą o szyfrowaniu
Sekcja clients jest:

wmbus:
  mosi_pin: GPIO13
  miso_pin: GPIO12
  clk_pin:  GPIO14
  cs_pin:   GPIO15
  gdo0_pin: GPIO5
  gdo2_pin: GPIO4
  led_pin: GPIO0
  led_blink_time: "1s"

  clients:
    - name: "wmbusmeters"
      ip_address: "10.10.10.10"
      port: 7227
        #7227

@angler jasna sprawa

@tbyli prośba o zastosowanie:
Jak prawidłowo zamieszczać YAML, inny kod lub logi w postach na forum

To zalezy od konfiguracji. U Ciebie jest wymagany klucz (raczej).

A korzystasz z niej?

A gdzie taki klucz znaleźć? :frowning:

Czy korzystam z sekcji clients, tak mi się wydaje, ale mam bład:

[09:26:09][E][wmbus:241]: Can't connect via TCP to 10.10.10.10:7227

W logach Wmbusmeters

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
cont-init: info: running /etc/cont-init.d/nginx.sh
cont-init: info: /etc/cont-init.d/nginx.sh exited 0
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
services-up: info: copying legacy longrun nginx (no readiness notification)
s6-rc: info: service legacy-services successfully started
[09:40:52] INFO: CONFIG_CONF ...
[09:40:52] INFO: {"device":"auto:t1c1","donotprobe":"/dev/ttyAMA0","format":"json","logfile":"/dev/stdout","loglevel":"normal","logtelegrams":false,"shell":"/wmbusmeters/mosquitto_pub.sh \"wmbusmeters/$METER_NAME\" \"$METER_JSON\""}
[09:40:52] INFO: CONFIG_METERS ...
[09:40:52] INFO: [{"driver":"kamheat","id":"62214696","key":"00000000000000000000000000000000","name":"kam"}]
[09:40:52] INFO: Syncing wmbusmeters configuration ...
[09:40:53] INFO: Registering meters ...
[09:40:53] INFO: Adding meter-0001 ...
[09:40:53] INFO: Generating MQTT configuration ... 
[09:40:54] INFO: Broker core-mosquitto will be used.
[09:40:54] INFO: 
MQTT Discovery ...
[09:40:54] INFO:  Adding meter: kam ...
[09:40:55] INFO:   Add/update topic: homeassistant/sensor/wmbusmeters/62214696_forward_energy_kwh/config
[09:40:55] INFO:   Add/update topic: homeassistant/sensor/wmbusmeters/62214696_return_energy_kwh/config
[09:40:55] INFO:   Add/update topic: homeassistant/sensor/wmbusmeters/62214696_rssi_dbm/config
[09:40:55] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_FLOW_INCREASED/config
[09:40:55] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_FLOW_SENSOR_WEAK_OR_AIR/config
[09:40:56] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_LOW_BATTERY_LEVEL/config
[09:40:56] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_SENSOR_T1_ABOVE_MEASURING_RANGE/config
[09:40:56] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_SENSOR_T1_BELOW_MEASURING_RANGE/config
[09:40:56] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_SENSOR_T2_ABOVE_MEASURING_RANGE/config
[09:40:56] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_SENSOR_T2_BELOW_MEASURING_RANGE/config
[09:40:57] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_TEMP_DIFF_WRONG_POLARITY/config
[09:40:57] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_UNKNOWN/config
[09:40:57] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_VOLTAGE_INTERRUPTED/config
[09:40:57] INFO:   Add/update topic: homeassistant/binary_sensor/wmbusmeters/62214696_status_WRONG_FLOW_DIRECTION/config
[09:40:57] INFO:   Add/update topic: homeassistant/sensor/wmbusmeters/62214696_t1_temperature_c/config
[09:40:58] INFO:   Add/update topic: homeassistant/sensor/wmbusmeters/62214696_t2_temperature_c/config
[09:40:58] INFO:   Add/update topic: homeassistant/sensor/wmbusmeters/62214696_total_energy_consumption_kwh/config
[09:40:58] INFO:   Add/update topic: homeassistant/sensor/wmbusmeters/62214696_total_volume_m3/config
[09:40:58] INFO:   Add/update topic: homeassistant/sensor/wmbusmeters/62214696_volume_flow_m3h/config
[09:40:58] INFO: MQTT Discovery cleanup...
[09:40:59] INFO: Starting web configuration service.
[09:40:59] INFO: Running wmbusmeters ...
Not a valid device "auto:t1c1"
s6-rc: info: service legacy-services: stopping
[08:40:59] INFO: Service restart after closing
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped

Może błąd jest w konfiguracji Wmbusmeters :frowning:

Spytam inaczej, czy serwer wmbusmeters masz pod IP 10.10.10.10 na porcie 7227

Jeśli to instalacja jako Dodatek do HA to jest to IP HA, i musi oczywiście to być adres osiągalny dla zbudowanego odbiornika na bazie tu opisywanego projektu.

ALE ten Dodatek musi być skonfigurowany zgodnie z dokumentacją
https://github.com/SzczepanLeon/esphome-components/blob/main/docs/wmbus.md

a z jego loga widać, że konfiguracja jest całkiem inna

a skonfigurowałeś pod nieokreślonego dongla USB (konkretniej to jakiegoś który dałby się wykryć, bo nawet zgodne dongle USB nie zawsze są możliwe do wykrycia), a nie dla uzyskiwania telegramów po sieci.

Tak, HA 10.10.10.10:
Zmieniłem na komunikacje po UDP:

    - name: "wmbusmeters"
      ip_address: "10.10.10.10"
      port: 8484
#      format: RTLWMBUS
      transport: UDP
        #7227

Teraz już na ESP nie mam błędu:

[10:57:33][D][mbus:023]: Processing C1 B frame
[10:57:33][D][wmbus:176]: Meter ID [0x62214696] RSSI: -52 dBm LQI: 128 Frame: C1 B not found in configuration T: 53442D2C96462162190A8D202541ED412373E3A73DC2F0AD1835D28B93153AE37EB23E7830367BA01362345F565E9D20357E19D68DBAE23956C01AADA191D96FC55158EB6FB9B01C3E928D69034B892AA9B23994 (84)
[10:57:49][D][mbus:023]: Processing C1 B frame
[10:57:49][D][wmbus:176]: Meter ID [0x62214696] RSSI: -52 dBm LQI: 128 Frame: C1 B not found in configuration T: 53442D2C96462162190A8D202641ED412373E3A73DC2F0AD1835D28B93153AE37EB23E7830367BA01362345F565E9D20357E19D68DBAE23956C01AADA191D96FC55158EB6FB9B01C3E928D69034B892AA9B23994 (84)

Problem jest w braku klucza, jak wskazał @_Szczepan
Tylko jak go uzyskać :frowning:

Cześć!
Temat uzyskania klucza od Kamstrupa nie jest taki straszny.

Wystarczy zarejestrować swój licznik na swoim koncie klienta.
Załączam krótką instrukcję:

W moim wypadku trochę zajęło zanim klucz się pojawił na portalu (2 tygodnie?) ale nie zaglądałem tam regularnie, więc mogę się mylić.

Powodzenia!

3 polubienia

Super! Wielkie dzięki za pomoc!

Niestety taki fuckup:
kam

Zostaje pytanie, czy moja wersja 402-0-35 nie ma szyfrowania? Nadaje w inny sposób? Może jest różnica pomiędzy licznikiem ciepła a licznikiem chłodu jaki ja posiadam?
Pytania chyba zostaną bez odpowiedzi :frowning:

Raz jeszcze wielkie dzięki.

Może głupie pytanie z mojej strony, ale czy uzupełniłeś pole Device Code?

Nie robiłem tego nigdy, bo nie mam takiego licznika, ale widzę jeszcze jedno - w instrukcji są same cyfry bez KAM.