From f3c4f1fd2e47d2188bb28cc7fcb428a3da214696 Mon Sep 17 00:00:00 2001 From: Niels de Boer Date: Mon, 28 Apr 2025 11:02:31 +0200 Subject: [PATCH] chore: allow lowercase characters --- src/parsers/cosem.ts | 18 ++--- .../dsmr-5.0-spec-example-lowercase.json | 79 +++++++++++++++++++ .../dsmr-5.0-spec-example-lowercase.txt | 38 +++++++++ 3 files changed, 126 insertions(+), 9 deletions(-) create mode 100644 tests/telegrams/dsmr-5.0-spec-example-lowercase.json create mode 100644 tests/telegrams/dsmr-5.0-spec-example-lowercase.txt diff --git a/src/parsers/cosem.ts b/src/parsers/cosem.ts index bbfd3db..03053ff 100644 --- a/src/parsers/cosem.ts +++ b/src/parsers/cosem.ts @@ -194,42 +194,42 @@ export const COSEM_PARSERS: COSEMDecoder[] = [ }, }, { - regex: /^1-0:32\.7\.0\((\d+(\.\d+)?)\*V\)/, + regex: /^1-0:32\.7\.0\((\d+(\.\d+)?)\*(V|v)\)/, parser: ({ regexResult, result }) => { result.electricity.voltage = result.electricity.voltage ?? {}; result.electricity.voltage.l1 = parseFloat(regexResult[1]); }, }, { - regex: /^1-0:52\.7\.0\((\d+(\.\d+)?)\*V\)/, + regex: /^1-0:52\.7\.0\((\d+(\.\d+)?)\*(V|v)\)/, parser: ({ regexResult, result }) => { result.electricity.voltage = result.electricity.voltage ?? {}; result.electricity.voltage.l2 = parseFloat(regexResult[1]); }, }, { - regex: /^1-0:72\.7\.0\((\d+(\.\d+)?)\*V\)/, + regex: /^1-0:72\.7\.0\((\d+(\.\d+)?)\*(V|v)\)/, parser: ({ regexResult, result }) => { result.electricity.voltage = result.electricity.voltage ?? {}; result.electricity.voltage.l3 = parseFloat(regexResult[1]); }, }, { - regex: /^1-0:31\.7\.0\((\d+(\.\d+)?)\*A\)/, + regex: /^1-0:31\.7\.0\((\d+(\.\d+)?)\*(A|a)\)/, parser: ({ regexResult, result }) => { result.electricity.current = result.electricity.current ?? {}; result.electricity.current.l1 = parseFloat(regexResult[1]); }, }, { - regex: /^1-0:51\.7\.0\((\d+(\.\d+)?)\*A\)/, + regex: /^1-0:51\.7\.0\((\d+(\.\d+)?)\*(A|a)\)/, parser: ({ regexResult, result }) => { result.electricity.current = result.electricity.current ?? {}; result.electricity.current.l2 = parseFloat(regexResult[1]); }, }, { - regex: /^1-0:71\.7\.0\((\d+(\.\d+)?)\*A\)/, + regex: /^1-0:71\.7\.0\((\d+(\.\d+)?)\*(A|a)\)/, parser: ({ regexResult, result }) => { result.electricity.current = result.electricity.current ?? {}; result.electricity.current.l3 = parseFloat(regexResult[1]); @@ -281,21 +281,21 @@ export const COSEM_PARSERS: COSEMDecoder[] = [ }, }, { - regex: /^1-0:22\.7\.0\((\d+(\.\d+)?)\*kW\)/, + regex: /^1-0:22\.7\.0\((\d+(\.\d+)?)\*(kW|kw)\)/, parser: ({ regexResult, result }) => { result.electricity.powerReturned = result.electricity.powerReturned ?? {}; result.electricity.powerReturned.l1 = parseFloat(regexResult[1]); }, }, { - regex: /^1-0:42\.7\.0\((\d+(\.\d+)?)\*kW\)/, + regex: /^1-0:42\.7\.0\((\d+(\.\d+)?)\*(kW|kw)\)/, parser: ({ regexResult, result }) => { result.electricity.powerReturned = result.electricity.powerReturned ?? {}; result.electricity.powerReturned.l2 = parseFloat(regexResult[1]); }, }, { - regex: /^1-0:62\.7\.0\((\d+(\.\d+)?)\*kW\)/, + regex: /^1-0:62\.7\.0\((\d+(\.\d+)?)\*(kW|kw)\)/, parser: ({ regexResult, result }) => { result.electricity.powerReturned = result.electricity.powerReturned ?? {}; result.electricity.powerReturned.l3 = parseFloat(regexResult[1]); diff --git a/tests/telegrams/dsmr-5.0-spec-example-lowercase.json b/tests/telegrams/dsmr-5.0-spec-example-lowercase.json new file mode 100644 index 0000000..30a67e5 --- /dev/null +++ b/tests/telegrams/dsmr-5.0-spec-example-lowercase.json @@ -0,0 +1,79 @@ +{ + "raw": "/ISk5\\2MT382-1000\r\n\r\n1-3:0.2.8(50)\r\n0-0:1.0.0(101209113020W)\r\n0-0:96.1.1(4B384547303034303436333935353037)\r\n1-0:1.8.1(123456.789*kwh)\r\n1-0:1.8.2(123456.789*kwh)\r\n1-0:2.8.1(123456.789*kwh)\r\n1-0:2.8.2(123456.789*kwh)\r\n0-0:96.14.0(0002)\r\n1-0:1.7.0(01.193*kw)\r\n1-0:2.7.0(00.000*kw)\r\n0-0:96.7.21(00004)\r\n0-0:96.7.9(00002)\r\n1-0:99.97.0(2)(0-0:96.7.19)(101208152415W)(0000000240*s)(101208151004W)(0000000301*s)\r\n1-0:32.32.0(00002)\r\n1-0:52.32.0(00001)\r\n1-0:72.32.0(00000)\r\n1-0:32.36.0(00000)\r\n1-0:52.36.0(00003)\r\n1-0:72.36.0(00000)\r\n0-0:96.13.0(303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F)\r\n1-0:32.7.0(220.1*v)\r\n1-0:52.7.0(220.2*v)\r\n1-0:72.7.0(220.3*v)\r\n1-0:31.7.0(001*a)\r\n1-0:51.7.0(002*a)\r\n1-0:71.7.0(003*a)\r\n1-0:21.7.0(01.111*kw)\r\n1-0:41.7.0(02.222*kw)\r\n1-0:61.7.0(03.333*kw)\r\n1-0:22.7.0(04.444*kw)\r\n1-0:42.7.0(05.555*kw)\r\n1-0:62.7.0(06.666*kw)\r\n0-1:24.1.0(003)\r\n0-1:96.1.0(3232323241424344313233343536373839)\r\n0-1:24.2.1(101209112500W)(12785.123*m3)\r\n!EF2F\r\n", + "header": { + "identifier": "\\2MT382-1000", + "xxx": "ISk", + "z": "5" + }, + "metadata": { + "dsmrVersion": 5, + "timestamp": "101209113020W", + "equipmentId": "4B384547303034303436333935353037", + "events": { + "powerFailures": 4, + "longPowerFailures": 2, + "voltageSags": { + "l1": 2, + "l2": 1, + "l3": 0 + }, + "voltageSwells": { + "l1": 0, + "l2": 3, + "l3": 0 + } + }, + "unknownLines": [ + "1-0:99.97.0(2)(0-0:96.7.19)(101208152415W)(0000000240*s)(101208151004W)(0000000301*s)" + ], + "textMessage": "303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F" + }, + "electricity": { + "tariffs": { + "1": { + "received": 123456.789, + "returned": 123456.789 + }, + "2": { + "received": 123456.789, + "returned": 123456.789 + } + }, + "currentTariff": 2, + "powerReceivedTotal": 1.193, + "powerReturnedTotal": 0, + "voltage": { + "l1": 220.1, + "l2": 220.2, + "l3": 220.3 + }, + "current": { + "l1": 1, + "l2": 2, + "l3": 3 + }, + "powerReceived": { + "l1": 1.111, + "l2": 2.222, + "l3": 3.333 + }, + "powerReturned": { + "l1": 4.444, + "l2": 5.555, + "l3": 6.666 + } + }, + "mBus": { + "1": { + "deviceType": 3, + "equipmentId": "3232323241424344313233343536373839", + "timestamp": "101209112500W", + "value": 12785.123, + "unit": "m3" + } + }, + "crc": { + "value": 61231, + "valid": false + } +} \ No newline at end of file diff --git a/tests/telegrams/dsmr-5.0-spec-example-lowercase.txt b/tests/telegrams/dsmr-5.0-spec-example-lowercase.txt new file mode 100644 index 0000000..6d0a03c --- /dev/null +++ b/tests/telegrams/dsmr-5.0-spec-example-lowercase.txt @@ -0,0 +1,38 @@ +/ISk5\2MT382-1000 + +1-3:0.2.8(50) +0-0:1.0.0(101209113020W) +0-0:96.1.1(4B384547303034303436333935353037) +1-0:1.8.1(123456.789*kwh) +1-0:1.8.2(123456.789*kwh) +1-0:2.8.1(123456.789*kwh) +1-0:2.8.2(123456.789*kwh) +0-0:96.14.0(0002) +1-0:1.7.0(01.193*kw) +1-0:2.7.0(00.000*kw) +0-0:96.7.21(00004) +0-0:96.7.9(00002) +1-0:99.97.0(2)(0-0:96.7.19)(101208152415W)(0000000240*s)(101208151004W)(0000000301*s) +1-0:32.32.0(00002) +1-0:52.32.0(00001) +1-0:72.32.0(00000) +1-0:32.36.0(00000) +1-0:52.36.0(00003) +1-0:72.36.0(00000) +0-0:96.13.0(303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F303132333435363738393A3B3C3D3E3F) +1-0:32.7.0(220.1*v) +1-0:52.7.0(220.2*v) +1-0:72.7.0(220.3*v) +1-0:31.7.0(001*a) +1-0:51.7.0(002*a) +1-0:71.7.0(003*a) +1-0:21.7.0(01.111*kw) +1-0:41.7.0(02.222*kw) +1-0:61.7.0(03.333*kw) +1-0:22.7.0(04.444*kw) +1-0:42.7.0(05.555*kw) +1-0:62.7.0(06.666*kw) +0-1:24.1.0(003) +0-1:96.1.0(3232323241424344313233343536373839) +0-1:24.2.1(101209112500W)(12785.123*m3) +!EF2F