From 205b823f05699884f9e67ef72dbc26bfdfc0358b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= Date: Wed, 22 Apr 2026 02:55:26 +0200 Subject: [PATCH 1/3] Add more registers from a KWM2231 water meter --- src/pykmp/constants.py | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/pykmp/constants.py b/src/pykmp/constants.py index eb0955b..8940d7f 100644 --- a/src/pykmp/constants.py +++ b/src/pykmp/constants.py @@ -98,12 +98,23 @@ 234: "l/imp for VA", 235: "l/imp for VB", 239: "Volume V1 hires", + 241: "MaxFlow_D", + 242: "MinFlow_D", + 243: "Reverse flow V1", + 254: "Type no", + 257: "Pulse value V1", + 258: "Pulse value V2", + 268: "Q\N{LATIN SUBSCRIPT SMALL LETTER P} averaging time", # Undocumented (259 and 260), but it matches the info given by Multical 603 in the # diagnostics display 259: "Nominal Q\N{LATIN SUBSCRIPT SMALL LETTER P} V1", 260: "Nominal Q\N{LATIN SUBSCRIPT SMALL LETTER P} V2", 266: "E1HighRes", 267: "Cooling energy E3 hires", + 279: "DIN meter ID", + # Documentation for 327-330 doesn't match what a KWM2231 water meter is sending + 327: "Target date 1", + 328: "Target date 2", 346: "Module SW rev", 347: "Customer number", 348: "Date and Time", # TODO: unknown unit 79, 28591984415535 @@ -129,6 +140,7 @@ # 388: something similar as 387? 389: "Power max month date", # 390: something similar as 389? + 394: "Config XYZ", 398: "T1 actual (one decimal)", 399: "T2 actual (one decimal)", 400: "T1-T2 (one decimal)", # Undocumented, but appears as such on Multical 603 @@ -141,8 +153,40 @@ 506: "P2 average day", 507: "P1 average hour", 508: "P2 average hour", + # Undocumented, but it "looks good" on a fresh meter from 2026 + 582: "Maybe battery remaining", + 622: "V1 extra digit", + # Undocumented, e.g., KWM2231 + 640: "Meter type text", # Undocumented, but it matches the actual interval on Multical 303 675: "wM-Bus transmission interval", + # Undocumented (692-721), but it looks like a histogram readout + 692: "Volume in flow bucket 1", + 697: "Volume in flow bucket 2", + 698: "Volume in flow bucket 3", + 699: "Volume in flow bucket 4", + 700: "Volume in flow bucket 5", + 701: "Volume in flow bucket 6", + 702: "Volume in flow bucket 7", + 703: "Volume in flow bucket 8", + 704: "Volume in flow bucket 9", + 705: "Volume in flow bucket 10", + 706: "Volume in flow bucket 11", + 707: "Volume in flow bucket 12", + 708: "Volume in flow bucket 13", + 709: "Flow bucket 1", + 710: "Flow bucket 2", + 711: "Flow bucket 3", + 712: "Flow bucket 4", + 713: "Flow bucket 5", + 714: "Flow bucket 6", + 715: "Flow bucket 7", + 716: "Flow bucket 8", + 717: "Flow bucket 9", + 718: "Flow bucket 10", + 719: "Flow bucket 11", + 720: "Flow bucket 12", + 721: "Flow bucket 13", 1001: "Fabrication No", 1002: "Time", 1003: "Date", From 4bcc1a4c30f08689fec65b9632d71cabac555730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= Date: Wed, 22 Apr 2026 10:47:57 +0200 Subject: [PATCH 2/3] Add proper names to some previously seen registers --- src/pykmp/constants.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pykmp/constants.py b/src/pykmp/constants.py index 8940d7f..8fb2a40 100644 --- a/src/pykmp/constants.py +++ b/src/pykmp/constants.py @@ -133,17 +133,17 @@ 381: "T1 time average hour", 382: "T2 time average hour", 383: "Flow V1 max year date", - # 384: something similar as 383? + 384: "Flow V1 min year date", 385: "Power max year date", - # 386: something similar as 385? + 386: "Power min year date", 387: "Flow V1 max month date", - # 388: something similar as 387? + 388: "Flow V1 min month date", 389: "Power max month date", - # 390: something similar as 389? + 390: "Power min month time", 394: "Config XYZ", 398: "T1 actual (one decimal)", 399: "T2 actual (one decimal)", - 400: "T1-T2 (one decimal)", # Undocumented, but appears as such on Multical 603 + 400: "T1-T2 (one decimal)", 404: "Meter Type", 473: "Energy E10", 474: "Energy E11", From 35b0cb20a4487998c9487eac22fd402238fb575a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= Date: Wed, 22 Apr 2026 11:51:00 +0200 Subject: [PATCH 3/3] Add registers from the log readout of a KWM2231 --- src/pykmp/constants.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/pykmp/constants.py b/src/pykmp/constants.py index 8fb2a40..c58c28a 100644 --- a/src/pykmp/constants.py +++ b/src/pykmp/constants.py @@ -112,9 +112,25 @@ 266: "E1HighRes", 267: "Cooling energy E3 hires", 279: "DIN meter ID", + 292: "Water temperature", + # FIXME(jkt): Uncertain order (293-295), check them in May 2026 when a first "valid" log entry is made + 293: "Min water temperature monthly", + 294: "Max water temperature monthly", + 295: "Avg water temperature monthly", + 296: "Min water temperature daily", + 297: "Max water temperature daily", + 298: "Avg water temperature daily", + 299: "Meter temperature", + 300: "Min meter temperature monthly", + 301: "Max meter temperature monthly", + 302: "Avg meter temperature monthly", + 303: "Min meter temperature daily", + 304: "Max meter temperature daily", + 305: "Avg meter temperature daily", # Documentation for 327-330 doesn't match what a KWM2231 water meter is sending 327: "Target date 1", 328: "Target date 2", + 338: "Data quality", 346: "Module SW rev", 347: "Customer number", 348: "Date and Time", # TODO: unknown unit 79, 28591984415535 @@ -145,6 +161,17 @@ 399: "T2 actual (one decimal)", 400: "T1-T2 (one decimal)", 404: "Meter Type", + # register 409: a combination of a bitfield and some duration tracking. Example values: + # 17184063489: dry 1-8 hrs, meter temperature too high: 9-24 hrs, no consumption: 9-24 hrs + # 17181966337: dry 1-8 hrs, meter temperature too high: 1-8 hrs, no consumption: 9-24 hrs + # 17179869185: dry 1-8 hrs, no consumption: 9-24 hrs + # 8589934593: dry 1-8 hrs, no consumption: 1-8 hrs + 409: "Info hour counter", + 440: "MaxFlow_H", + 445: "MaxFlowDate_D", + 446: "MinFlowDate_D", + # Seen in the logger. E.g. 128 is "meter temperature too high" + 458: "Info code", 473: "Energy E10", 474: "Energy E11", 477: "T3 time average day", @@ -155,6 +182,7 @@ 508: "P2 average hour", # Undocumented, but it "looks good" on a fresh meter from 2026 582: "Maybe battery remaining", + 583: "Accoustic noise last day", 622: "V1 extra digit", # Undocumented, e.g., KWM2231 640: "Meter type text",