Skip to content

Commit 276de10

Browse files
committed
Add support for parsing of datetime type 79
The new year's eve of 2024 is from a real-world meter data, the other test is from a KMP document (adjusted for the "number of bytes" and "size and exponent" bytes).
1 parent 7a9a62f commit 276de10

3 files changed

Lines changed: 23 additions & 0 deletions

File tree

src/pykmp/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@
235235
64: "Datetime",
236236
65: "imp/l",
237237
66: "l/imp",
238+
79: "DST YY-MM-DD hh:mm:ss",
238239
85: "%RH",
239240
86: "%O\N{SUBSCRIPT TWO}",
240241
87: "m/s",

src/pykmp/registers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ def from_register_data(cls, reg: messages.RegisterData) -> Self:
5959
# mm-dd
6060
d = int.from_bytes(reg.value[2:], 'big')
6161
value_str = f'{(d // 100 % 100):02}-{(d % 100):02}'
62+
case 0x4f:
63+
# DST yy:mm:dd hh:mm:ss
64+
dst = reg.value[2]
65+
value_str = f'{(2000 + reg.value[3]):02}-{reg.value[4]:02}-{reg.value[5]:02} ' \
66+
+ f'{reg.value[6]:02}:{reg.value[7]:02}:{reg.value[8]:02}' \
67+
+ f'{"+" if dst > 0 else "-"}{(dst // 60):02}:{(dst % 60):02}'
6268
case _:
6369
value_dec = codec.FloatCodec.decode(reg.value)
6470
return cls(

tests/test_registers.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,22 @@
5252
None,
5353
'mm:dd',
5454
),
55+
pytest.param(
56+
348,
57+
79,
58+
'07 00 00 18 0c 1f 00 00 04',
59+
'2024-12-31 00:00:04-00:00',
60+
None,
61+
'DST YY-MM-DD hh:mm:ss',
62+
),
63+
pytest.param(
64+
348,
65+
79,
66+
'07 00 3C 10 06 1E 0E 30 37',
67+
'2016-06-30 14:48:55+01:00',
68+
None,
69+
'DST YY-MM-DD hh:mm:ss',
70+
),
5571
]
5672
)
5773
def test_register_parsing(id_, unit, blob_with_size, value_str, value_dec, unit_str):

0 commit comments

Comments
 (0)