Skip to content

Commit 657ddd5

Browse files
committed
fix(parser): parse electricity data from sagemcom meters
1 parent 8bd8575 commit 657ddd5

File tree

3 files changed

+128
-12
lines changed

3 files changed

+128
-12
lines changed

src/parsers/cosem.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,36 +33,36 @@ export const COSEM_PARSERS: COSEMDecoder[] = [
3333
},
3434
},
3535
{
36-
regex: /^1-0:1\.8\.(\d+)\((\d+(\.\d+)?)\*kWh\)/,
36+
regex: /^1-(\d):1\.8\.(\d+)\((\d+(\.\d+)?)\*kWh\)/,
3737
parser: ({ regexResult, result }) => {
38-
const tariff = parseInt(regexResult[1], 10);
38+
const tariff = parseInt(regexResult[2], 10);
3939

4040
if (tariff === 0) {
4141
// This is the total received electricity
4242
result.electricity.total = result.electricity.total ?? {};
43-
result.electricity.total.received = parseFloat(regexResult[2]);
43+
result.electricity.total.received = parseFloat(regexResult[3]);
4444
} else {
4545
// This is a specific tariff
4646
result.electricity.tariffs = result.electricity.tariffs ?? {};
4747
result.electricity.tariffs[tariff] = result.electricity.tariffs[tariff] ?? {};
48-
result.electricity.tariffs[tariff].received = parseFloat(regexResult[2]);
48+
result.electricity.tariffs[tariff].received = parseFloat(regexResult[3]);
4949
}
5050
},
5151
},
5252
{
53-
regex: /^1-0:2\.8\.(\d+)\((\d+(\.\d+)?)\*kWh\)/,
53+
regex: /^1-(\d):2\.8\.(\d+)\((\d+(\.\d+)?)\*kWh\)/,
5454
parser: ({ regexResult, result }) => {
55-
const tariff = parseInt(regexResult[1], 10);
55+
const tariff = parseInt(regexResult[2], 10);
5656

5757
if (tariff === 0) {
5858
// This is the total received electricity
5959
result.electricity.total = result.electricity.total ?? {};
60-
result.electricity.total.returned = parseFloat(regexResult[2]);
60+
result.electricity.total.returned = parseFloat(regexResult[3]);
6161
} else {
6262
// This is a specific tariff
6363
result.electricity.tariffs = result.electricity.tariffs ?? {};
6464
result.electricity.tariffs[tariff] = result.electricity.tariffs[tariff] ?? {};
65-
result.electricity.tariffs[tariff].returned = parseFloat(regexResult[2]);
65+
result.electricity.tariffs[tariff].returned = parseFloat(regexResult[3]);
6666
}
6767
},
6868
},
@@ -73,15 +73,15 @@ export const COSEM_PARSERS: COSEMDecoder[] = [
7373
},
7474
},
7575
{
76-
regex: /^1-0:1\.7\.0\((\d+(\.\d+)?)\*kW\)/,
76+
regex: /^1-(\d):1\.7\.0\((\d+(\.\d+)?)\*kW\)/,
7777
parser: ({ regexResult, result }) => {
78-
result.electricity.powerReceivedTotal = parseFloat(regexResult[1]);
78+
result.electricity.powerReceivedTotal = parseFloat(regexResult[2]);
7979
},
8080
},
8181
{
82-
regex: /^1-0:2\.7\.0\((\d+(\.\d+)?)\*kW\)/,
82+
regex: /^1-(\d):2\.7\.0\((\d+(\.\d+)?)\*kW\)/,
8383
parser: ({ regexResult, result }) => {
84-
result.electricity.powerReturnedTotal = parseFloat(regexResult[1]);
84+
result.electricity.powerReturnedTotal = parseFloat(regexResult[2]);
8585
},
8686
},
8787
{

tests/telegrams/sagemcom-xt211.json

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
{
2+
"raw": "/GRE5\\\\12341234_A\r\n\r\n0-0:1.0.0(123412341234W)\r\n0-0:0.0.0(123412341234)\r\n1-1:1.8.1(001595.070*kWh)\r\n1-1:1.8.2(005216.778*kWh)\r\n1-1:2.8.1(004478.038*kWh)\r\n1-1:2.8.2(000004.648*kWh)\r\n0-0:96.14.0(0001)\r\n1-1:1.7.0(01.622*kW)\r\n1-1:2.7.0(00.000*kW)\r\n0-0:96.7.21(00018)\r\n0-0:96.7.9(00004)\r\n1-0:99.97.0(2)(0-0:96.7.19)(240523144934S)(0005564711*s)(241109083138W)(0000000124*s)\r\n1-0:32.32.0(00002)\r\n1-0:52.32.0(00001)\r\n1-0:72.32.0(00001)\r\n1-0:32.36.0(00000)\r\n1-0:52.36.0(00000)\r\n1-0:72.36.0(00000)\r\n1-0:32.7.0(238.9*V)\r\n1-0:52.7.0(231.9*V)\r\n1-0:72.7.0(239.7*V)\r\n1-0:31.7.0(005.15*A)\r\n1-0:51.7.0(017.19*A)\r\n1-0:71.7.0(005.02*A)\r\n0-0:96.13.0()\r\n0-0:96.1.4(12345)\r\n0-0:96.1.2(202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020)\r\n1-0:21.7.0(00.000*kW)\r\n1-0:22.7.0(01.175*kW)\r\n1-0:41.7.0(03.946*kW)\r\n1-0:42.7.0(00.000*kW)\r\n1-0:61.7.0(00.000*kW)\r\n1-0:62.7.0(01.148*kW)\r\n0-0:96.13.1()\r\n1-1:1.6.0(250315014500W)(15.206*kW)\r\n0-0:98.1.0(12)\r\n1-0:1.4.0(00.288*kW)\r\n!3BA5\r\n",
3+
"header": {
4+
"identifier": "\\\\12341234_A",
5+
"xxx": "GRE",
6+
"z": "5"
7+
},
8+
"metadata": {
9+
"timestamp": "123412341234W",
10+
"unknownLines": [
11+
"0-0:0.0.0(123412341234)",
12+
"1-0:99.97.0(2)(0-0:96.7.19)(240523144934S)(0005564711*s)(241109083138W)(0000000124*s)",
13+
"0-0:96.1.4(12345)",
14+
"0-0:96.1.2(202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020)",
15+
"1-1:1.6.0(250315014500W)(15.206*kW)",
16+
"0-0:98.1.0(12)",
17+
"1-0:1.4.0(00.288*kW)"
18+
],
19+
"events": {
20+
"powerFailures": 18,
21+
"longPowerFailures": 4,
22+
"voltageSags": {
23+
"l1": 2,
24+
"l2": 1,
25+
"l3": 1
26+
},
27+
"voltageSwells": {
28+
"l1": 0,
29+
"l2": 0,
30+
"l3": 0
31+
}
32+
},
33+
"textMessage": "",
34+
"numericMessage": 0
35+
},
36+
"electricity": {
37+
"tariffs": {
38+
"1": {
39+
"received": 1595.07,
40+
"returned": 4478.038
41+
},
42+
"2": {
43+
"received": 5216.778,
44+
"returned": 4.648
45+
}
46+
},
47+
"currentTariff": 1,
48+
"powerReceivedTotal": 1.622,
49+
"powerReturnedTotal": 0,
50+
"voltage": {
51+
"l1": 238.9,
52+
"l2": 231.9,
53+
"l3": 239.7
54+
},
55+
"current": {
56+
"l1": 5.15,
57+
"l2": 17.19,
58+
"l3": 5.02
59+
},
60+
"powerReceived": {
61+
"l1": 0,
62+
"l2": 3.946,
63+
"l3": 0
64+
},
65+
"powerReturned": {
66+
"l1": 1.175,
67+
"l2": 0,
68+
"l3": 1.148
69+
}
70+
},
71+
"mBus": {},
72+
"crc": {
73+
"value": 15269,
74+
"valid": false
75+
}
76+
}

tests/telegrams/sagemcom-xt211.txt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/GRE5\\12341234_A
2+
3+
0-0:1.0.0(123412341234W)
4+
0-0:0.0.0(123412341234)
5+
1-1:1.8.1(001595.070*kWh)
6+
1-1:1.8.2(005216.778*kWh)
7+
1-1:2.8.1(004478.038*kWh)
8+
1-1:2.8.2(000004.648*kWh)
9+
0-0:96.14.0(0001)
10+
1-1:1.7.0(01.622*kW)
11+
1-1:2.7.0(00.000*kW)
12+
0-0:96.7.21(00018)
13+
0-0:96.7.9(00004)
14+
1-0:99.97.0(2)(0-0:96.7.19)(240523144934S)(0005564711*s)(241109083138W)(0000000124*s)
15+
1-0:32.32.0(00002)
16+
1-0:52.32.0(00001)
17+
1-0:72.32.0(00001)
18+
1-0:32.36.0(00000)
19+
1-0:52.36.0(00000)
20+
1-0:72.36.0(00000)
21+
1-0:32.7.0(238.9*V)
22+
1-0:52.7.0(231.9*V)
23+
1-0:72.7.0(239.7*V)
24+
1-0:31.7.0(005.15*A)
25+
1-0:51.7.0(017.19*A)
26+
1-0:71.7.0(005.02*A)
27+
0-0:96.13.0()
28+
0-0:96.1.4(12345)
29+
0-0:96.1.2(202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020)
30+
1-0:21.7.0(00.000*kW)
31+
1-0:22.7.0(01.175*kW)
32+
1-0:41.7.0(03.946*kW)
33+
1-0:42.7.0(00.000*kW)
34+
1-0:61.7.0(00.000*kW)
35+
1-0:62.7.0(01.148*kW)
36+
0-0:96.13.1()
37+
1-1:1.6.0(250315014500W)(15.206*kW)
38+
0-0:98.1.0(12)
39+
1-0:1.4.0(00.288*kW)
40+
!3BA5

0 commit comments

Comments
 (0)