Skip to content

Commit 9d796f1

Browse files
authored
Merge pull request #20 from athombv/master
mmip
2 parents 77d7e6e + e642c4d commit 9d796f1

File tree

6 files changed

+97
-5
lines changed

6 files changed

+97
-5
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@athombv/dsmr-parser",
3-
"version": "1.1.0",
3+
"version": "1.1.1",
44
"description": "DSMR Parser for Smart Meters",
55
"type": "module",
66
"main": "dist/index.js",

src/parsers/dsmr.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ export const DSMRParser = (options: DSMRParserOptions): DSMRParserResult => {
7373
mBus: {},
7474
};
7575

76+
let objectsParsed = 0;
77+
7678
for (const [lineNumber, line] of lines.entries()) {
7779
if (line.startsWith('/')) {
7880
// Beginning of telegram
@@ -102,6 +104,8 @@ export const DSMRParser = (options: DSMRParserOptions): DSMRParserResult => {
102104
if (!isLineParsed) {
103105
result.metadata.unknownLines = result.metadata.unknownLines ?? [];
104106
result.metadata.unknownLines.push(line);
107+
} else {
108+
objectsParsed++;
105109
}
106110
}
107111
}
@@ -114,8 +118,8 @@ export const DSMRParser = (options: DSMRParserOptions): DSMRParserResult => {
114118
});
115119
}
116120

117-
if (result.header.identifier === '' || result.header.xxx === '' || result.header.z === '') {
118-
throw new DSMRParserError('Invalid telegram. Missing header');
121+
if (objectsParsed === 0) {
122+
throw new DSMRParserError('Invalid telegram. No COSEM objects found.');
119123
}
120124

121125
return result;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
{
2+
"raw": "/KAM5\r\n\r\n0-0:1.0.0(250000000000W)\r\n1-0:1.8.0(00000123.321*kWh)\r\n1-0:2.8.0(00000456.654*kWh)\r\n1-0:3.8.0(00001234.432*kVArh)\r\n1-0:4.8.0(00005678.765*kVArh)\r\n1-0:1.7.0(0002.424*kW)\r\n1-0:2.7.0(0000.000*kW)\r\n1-0:3.7.0(0001.229*kVAr)\r\n1-0:4.7.0(0000.000*kVAr)\r\n1-0:21.7.0(0000.682*kW)\r\n1-0:41.7.0(0000.750*kW)\r\n1-0:61.7.0(0000.992*kW)\r\n1-0:22.7.0(0000.000*kW)\r\n1-0:42.7.0(0000.000*kW)\r\n1-0:62.7.0(0000.000*kW)\r\n1-0:23.7.0(0000.391*kVAr)\r\n1-0:43.7.0(0000.490*kVAr)\r\n1-0:63.7.0(0000.348*kVAr)\r\n1-0:24.7.0(0000.000*kVAr)\r\n1-0:44.7.0(0000.000*kVAr)\r\n1-0:64.7.0(0000.000*kVAr)\r\n1-0:32.7.0(225.4*V)\r\n1-0:52.7.0(229.4*V)\r\n1-0:72.7.0(225.9*V)\r\n1-0:31.7.0(003.4*A)\r\n1-0:51.7.0(003.9*A)\r\n1-0:71.7.0(004.6*A)\r\n!3AF8\r\n",
3+
"header": {
4+
"identifier": "",
5+
"xxx": "KAM",
6+
"z": "5"
7+
},
8+
"metadata": {
9+
"timestamp": "250000000000W",
10+
"unknownLines": [
11+
"1-0:3.8.0(00001234.432*kVArh)",
12+
"1-0:4.8.0(00005678.765*kVArh)",
13+
"1-0:3.7.0(0001.229*kVAr)",
14+
"1-0:4.7.0(0000.000*kVAr)",
15+
"1-0:23.7.0(0000.391*kVAr)",
16+
"1-0:43.7.0(0000.490*kVAr)",
17+
"1-0:63.7.0(0000.348*kVAr)",
18+
"1-0:24.7.0(0000.000*kVAr)",
19+
"1-0:44.7.0(0000.000*kVAr)",
20+
"1-0:64.7.0(0000.000*kVAr)"
21+
]
22+
},
23+
"electricity": {
24+
"total": {
25+
"received": 123.321,
26+
"returned": 456.654
27+
},
28+
"powerReceivedTotal": 2.424,
29+
"powerReturnedTotal": 0,
30+
"powerReceived": {
31+
"l1": 0.682,
32+
"l2": 0.75,
33+
"l3": 0.992
34+
},
35+
"powerReturned": {
36+
"l1": 0,
37+
"l2": 0,
38+
"l3": 0
39+
},
40+
"voltage": {
41+
"l1": 225.4,
42+
"l2": 229.4,
43+
"l3": 225.9
44+
},
45+
"current": {
46+
"l1": 3.4,
47+
"l2": 3.9,
48+
"l3": 4.6
49+
}
50+
},
51+
"mBus": {},
52+
"crc": {
53+
"value": 15096,
54+
"valid": false
55+
}
56+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/KAM5
2+
3+
0-0:1.0.0(250000000000W)
4+
1-0:1.8.0(00000123.321*kWh)
5+
1-0:2.8.0(00000456.654*kWh)
6+
1-0:3.8.0(00001234.432*kVArh)
7+
1-0:4.8.0(00005678.765*kVArh)
8+
1-0:1.7.0(0002.424*kW)
9+
1-0:2.7.0(0000.000*kW)
10+
1-0:3.7.0(0001.229*kVAr)
11+
1-0:4.7.0(0000.000*kVAr)
12+
1-0:21.7.0(0000.682*kW)
13+
1-0:41.7.0(0000.750*kW)
14+
1-0:61.7.0(0000.992*kW)
15+
1-0:22.7.0(0000.000*kW)
16+
1-0:42.7.0(0000.000*kW)
17+
1-0:62.7.0(0000.000*kW)
18+
1-0:23.7.0(0000.391*kVAr)
19+
1-0:43.7.0(0000.490*kVAr)
20+
1-0:63.7.0(0000.348*kVAr)
21+
1-0:24.7.0(0000.000*kVAr)
22+
1-0:44.7.0(0000.000*kVAr)
23+
1-0:64.7.0(0000.000*kVAr)
24+
1-0:32.7.0(225.4*V)
25+
1-0:52.7.0(229.4*V)
26+
1-0:72.7.0(225.9*V)
27+
1-0:31.7.0(003.4*A)
28+
1-0:51.7.0(003.9*A)
29+
1-0:71.7.0(004.6*A)
30+
!3AF8

tools/update-test-telegrams.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable no-console */
12
/**
23
* This scripts reads all .txt files in the tests/telegrams folder, parses them and writes the
34
* result to a .json file. Only run this script if you want to update the expected output of the
@@ -12,6 +13,7 @@ const testCases = [...new Set(files.map((file) => file.replace('.txt', '').repla
1213
for (const file of testCases) {
1314
let input = await fs.readFile(`./tests/telegrams/${file}.txt`, 'utf-8');
1415
input = input.replace(/\r?\n/g, '\r\n');
16+
console.log(`Parsing ${file}.txt`);
1517
const parsed = DSMR.parse({ telegram: input });
1618
const json = JSON.stringify(parsed, null, 2);
1719
await fs.writeFile(`./tests/telegrams/${file}.json`, json);

0 commit comments

Comments
 (0)