@@ -33,36 +33,53 @@ export const COSEM_PARSERS: COSEMDecoder[] = [
33
33
} ,
34
34
} ,
35
35
{
36
- regex : / ^ 1 - ( \d ) : 1 \. 8 \. ( \d + ) \( ( \d + ( \. \d + ) ? ) \* k W h \) / ,
36
+ regex : / ^ 1 - ( \d ) : 1 \. 8 \. ( \d + ) \( ( \d + ( \. \d + ) ? ) \* ( \w + ) \) / ,
37
37
parser : ( { regexResult, result } ) => {
38
38
const tariff = parseInt ( regexResult [ 2 ] , 10 ) ;
39
+ let value = parseFloat ( regexResult [ 3 ] ) ;
40
+
41
+ const unit = regexResult [ 5 ] ;
42
+
43
+ if ( unit === 'Wh' ) {
44
+ // Convert to kWh
45
+ value = value / 1000 ;
46
+ }
39
47
40
48
if ( tariff === 0 ) {
41
49
// This is the total received electricity
42
50
result . electricity . total = result . electricity . total ?? { } ;
43
- result . electricity . total . received = parseFloat ( regexResult [ 3 ] ) ;
51
+ result . electricity . total . received = value ;
44
52
} else {
45
53
// This is a specific tariff
46
54
result . electricity . tariffs = result . electricity . tariffs ?? { } ;
47
55
result . electricity . tariffs [ tariff ] = result . electricity . tariffs [ tariff ] ?? { } ;
48
- result . electricity . tariffs [ tariff ] . received = parseFloat ( regexResult [ 3 ] ) ;
56
+ result . electricity . tariffs [ tariff ] . received = value ;
49
57
}
50
58
} ,
51
59
} ,
52
60
{
53
- regex : / ^ 1 - ( \d ) : 2 \. 8 \. ( \d + ) \( ( \d + ( \. \d + ) ? ) \* k W h \) / ,
61
+ regex : / ^ 1 - ( \d ) : 2 \. 8 \. ( \d + ) \( ( \d + ( \. \d + ) ? ) \* ( \w + ) \) / ,
54
62
parser : ( { regexResult, result } ) => {
55
63
const tariff = parseInt ( regexResult [ 2 ] , 10 ) ;
56
64
65
+ let value = parseFloat ( regexResult [ 3 ] ) ;
66
+
67
+ const unit = regexResult [ 5 ] ;
68
+
69
+ if ( unit === 'Wh' ) {
70
+ // Convert to kWh
71
+ value = value / 1000 ;
72
+ }
73
+
57
74
if ( tariff === 0 ) {
58
75
// This is the total received electricity
59
76
result . electricity . total = result . electricity . total ?? { } ;
60
- result . electricity . total . returned = parseFloat ( regexResult [ 3 ] ) ;
77
+ result . electricity . total . returned = value ;
61
78
} else {
62
79
// This is a specific tariff
63
80
result . electricity . tariffs = result . electricity . tariffs ?? { } ;
64
81
result . electricity . tariffs [ tariff ] = result . electricity . tariffs [ tariff ] ?? { } ;
65
- result . electricity . tariffs [ tariff ] . returned = parseFloat ( regexResult [ 3 ] ) ;
82
+ result . electricity . tariffs [ tariff ] . returned = value ;
66
83
}
67
84
} ,
68
85
} ,
@@ -73,15 +90,31 @@ export const COSEM_PARSERS: COSEMDecoder[] = [
73
90
} ,
74
91
} ,
75
92
{
76
- regex : / ^ 1 - ( \d ) : 1 \. 7 \. 0 \( ( \d + ( \. \d + ) ? ) \* k W \) / ,
93
+ regex : / ^ 1 - ( \d ) : 1 \. 7 \. 0 \( ( \d + ( \. \d + ) ? ) \* ( \w + ) \) / ,
77
94
parser : ( { regexResult, result } ) => {
78
- result . electricity . powerReceivedTotal = parseFloat ( regexResult [ 2 ] ) ;
95
+ let value = parseFloat ( regexResult [ 2 ] ) ;
96
+ const unit = regexResult [ 4 ] ;
97
+
98
+ if ( unit === 'W' ) {
99
+ // Convert to kW
100
+ value = value / 1000 ;
101
+ }
102
+
103
+ result . electricity . powerReceivedTotal = value ;
79
104
} ,
80
105
} ,
81
106
{
82
- regex : / ^ 1 - ( \d ) : 2 \. 7 \. 0 \( ( \d + ( \. \d + ) ? ) \* k W \) / ,
107
+ regex : / ^ 1 - ( \d ) : 2 \. 7 \. 0 \( ( \d + ( \. \d + ) ? ) \* ( \w + ) \) / ,
83
108
parser : ( { regexResult, result } ) => {
84
- result . electricity . powerReturnedTotal = parseFloat ( regexResult [ 2 ] ) ;
109
+ let value = parseFloat ( regexResult [ 2 ] ) ;
110
+ const unit = regexResult [ 4 ] ;
111
+
112
+ if ( unit === 'W' ) {
113
+ // Convert to kW
114
+ value = value / 1000 ;
115
+ }
116
+
117
+ result . electricity . powerReturnedTotal = value ;
85
118
} ,
86
119
} ,
87
120
{
@@ -203,24 +236,48 @@ export const COSEM_PARSERS: COSEMDecoder[] = [
203
236
} ,
204
237
} ,
205
238
{
206
- regex : / ^ 1 - 0 : 2 1 \. 7 \. 0 \( ( \d + ( \. \d + ) ? ) \* k W \) / ,
239
+ regex : / ^ 1 - 0 : 2 1 \. 7 \. 0 \( ( \d + ( \. \d + ) ? ) \* ( \w + ) \) / ,
207
240
parser : ( { regexResult, result } ) => {
241
+ let value = parseFloat ( regexResult [ 1 ] ) ;
242
+ const unit = regexResult [ 3 ] ;
243
+
244
+ if ( unit === 'W' ) {
245
+ // Convert to kW
246
+ value = value / 1000 ;
247
+ }
248
+
208
249
result . electricity . powerReceived = result . electricity . powerReceived ?? { } ;
209
- result . electricity . powerReceived . l1 = parseFloat ( regexResult [ 1 ] ) ;
250
+ result . electricity . powerReceived . l1 = value ;
210
251
} ,
211
252
} ,
212
253
{
213
- regex : / ^ 1 - 0 : 4 1 \. 7 \. 0 \( ( \d + ( \. \d + ) ? ) \* k W \) / ,
254
+ regex : / ^ 1 - 0 : 4 1 \. 7 \. 0 \( ( \d + ( \. \d + ) ? ) \* ( \w + ) \) / ,
214
255
parser : ( { regexResult, result } ) => {
256
+ let value = parseFloat ( regexResult [ 1 ] ) ;
257
+ const unit = regexResult [ 3 ] ;
258
+
259
+ if ( unit === 'W' ) {
260
+ // Convert to kW
261
+ value = value / 1000 ;
262
+ }
263
+
215
264
result . electricity . powerReceived = result . electricity . powerReceived ?? { } ;
216
- result . electricity . powerReceived . l2 = parseFloat ( regexResult [ 1 ] ) ;
265
+ result . electricity . powerReceived . l2 = value ;
217
266
} ,
218
267
} ,
219
268
{
220
- regex : / ^ 1 - 0 : 6 1 \. 7 \. 0 \( ( \d + ( \. \d + ) ? ) \* k W \) / ,
269
+ regex : / ^ 1 - 0 : 6 1 \. 7 \. 0 \( ( \d + ( \. \d + ) ? ) \* ( \w + ) \) / ,
221
270
parser : ( { regexResult, result } ) => {
271
+ let value = parseFloat ( regexResult [ 1 ] ) ;
272
+ const unit = regexResult [ 3 ] ;
273
+
274
+ if ( unit === 'W' ) {
275
+ // Convert to kW
276
+ value = value / 1000 ;
277
+ }
278
+
222
279
result . electricity . powerReceived = result . electricity . powerReceived ?? { } ;
223
- result . electricity . powerReceived . l3 = parseFloat ( regexResult [ 1 ] ) ;
280
+ result . electricity . powerReceived . l3 = value ;
224
281
} ,
225
282
} ,
226
283
{
0 commit comments