iobroker.utility-monitor 1.4.5 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +159 -44
- package/admin/custom/.vite/manifest.json +90 -0
- package/admin/custom/@mf-types/Components.d.ts +2 -0
- package/admin/custom/@mf-types/compiled-types/Components/CSVImporter.d.ts +11 -0
- package/admin/custom/@mf-types/compiled-types/Components.d.ts +2 -0
- package/admin/custom/@mf-types.d.ts +3 -0
- package/admin/custom/@mf-types.zip +0 -0
- package/admin/custom/CSVImporter_v15_11.js +4415 -0
- package/admin/custom/assets/Components-i0AZ59nl.js +18887 -0
- package/admin/custom/assets/UtilityMonitor__loadShare__react__loadShare__-Da99Mak4.js +42 -0
- package/admin/custom/assets/UtilityMonitor__mf_v__runtimeInit__mf_v__-BmC4OGk6.js +16 -0
- package/admin/custom/assets/_commonjsHelpers-Dj2_voLF.js +30 -0
- package/admin/custom/assets/hostInit-DEXfeB0W.js +10 -0
- package/admin/custom/assets/index-B3WVNJTz.js +401 -0
- package/admin/custom/assets/index-VBwl8x_k.js +64 -0
- package/admin/custom/assets/preload-helper-BelkbqnE.js +61 -0
- package/admin/custom/assets/virtualExposes-CqCLUNLT.js +19 -0
- package/admin/custom/index.html +12 -0
- package/admin/custom/mf-manifest.json +1 -0
- package/admin/jsonConfig.json +219 -35
- package/io-package.json +51 -2
- package/lib/billingManager.js +276 -170
- package/lib/calculator.js +19 -138
- package/lib/consumptionManager.js +48 -331
- package/lib/importManager.js +300 -0
- package/lib/messagingHandler.js +112 -49
- package/lib/meter/MeterRegistry.js +110 -0
- package/lib/multiMeterManager.js +410 -181
- package/lib/stateManager.js +508 -36
- package/lib/utils/billingHelper.js +69 -0
- package/lib/utils/consumptionHelper.js +47 -0
- package/lib/utils/helpers.js +178 -0
- package/lib/utils/typeMapper.js +19 -0
- package/main.js +99 -36
- package/package.json +10 -4
package/admin/jsonConfig.json
CHANGED
|
@@ -21,6 +21,19 @@
|
|
|
21
21
|
"lg": 6,
|
|
22
22
|
"xl": 6
|
|
23
23
|
},
|
|
24
|
+
"gasMainMeterName": {
|
|
25
|
+
"type": "text",
|
|
26
|
+
"label": "📝 Name des Hauptzählers",
|
|
27
|
+
"placeholder": "z.B. main, wohnung, haus, gesamt",
|
|
28
|
+
"help": "Technischer Name für den Hauptzähler. Wird Teil des State-Pfads (gas.DIESER_NAME.*). Nur Kleinbuchstaben und Zahlen, max 20 Zeichen.",
|
|
29
|
+
"default": "main",
|
|
30
|
+
"hidden": "!data.gasAktiv",
|
|
31
|
+
"sm": 12,
|
|
32
|
+
"md": 6,
|
|
33
|
+
"xs": 12,
|
|
34
|
+
"lg": 6,
|
|
35
|
+
"xl": 4
|
|
36
|
+
},
|
|
24
37
|
"_gasSensorHeader": {
|
|
25
38
|
"type": "header",
|
|
26
39
|
"text": "Sensor-Konfiguration",
|
|
@@ -167,7 +180,7 @@
|
|
|
167
180
|
"hidden": "!data.gasAktiv",
|
|
168
181
|
"label": "Grundgebühr (€/Monat)",
|
|
169
182
|
"placeholder": "z.B. 15.30",
|
|
170
|
-
"default": 0,
|
|
183
|
+
"default": "0",
|
|
171
184
|
"xs": 12,
|
|
172
185
|
"sm": 12,
|
|
173
186
|
"md": 6,
|
|
@@ -179,7 +192,7 @@
|
|
|
179
192
|
"hidden": "!data.gasAktiv",
|
|
180
193
|
"label": "Jahresgebühr (z.B. Zählermiete) (€/Jahr)",
|
|
181
194
|
"placeholder": "z.B. 20.00",
|
|
182
|
-
"default": 0,
|
|
195
|
+
"default": "0",
|
|
183
196
|
"xs": 12,
|
|
184
197
|
"sm": 12,
|
|
185
198
|
"md": 6,
|
|
@@ -310,7 +323,7 @@
|
|
|
310
323
|
"label": "Monatlicher Abschlag (€)",
|
|
311
324
|
"placeholder": "z.B. 85.00",
|
|
312
325
|
"hidden": "!data.gasAktiv",
|
|
313
|
-
"default": 0,
|
|
326
|
+
"default": "0",
|
|
314
327
|
"sm": 12,
|
|
315
328
|
"md": 6,
|
|
316
329
|
"xs": 12,
|
|
@@ -372,7 +385,7 @@
|
|
|
372
385
|
"filter": false,
|
|
373
386
|
"sort": false,
|
|
374
387
|
"width": "10%",
|
|
375
|
-
"default": 0
|
|
388
|
+
"default": "0"
|
|
376
389
|
},
|
|
377
390
|
{
|
|
378
391
|
"type": "text",
|
|
@@ -381,7 +394,7 @@
|
|
|
381
394
|
"filter": false,
|
|
382
395
|
"sort": false,
|
|
383
396
|
"width": "8%",
|
|
384
|
-
"default": 0
|
|
397
|
+
"default": "0"
|
|
385
398
|
},
|
|
386
399
|
{
|
|
387
400
|
"type": "text",
|
|
@@ -390,7 +403,7 @@
|
|
|
390
403
|
"filter": false,
|
|
391
404
|
"sort": false,
|
|
392
405
|
"width": "12%",
|
|
393
|
-
"default": 0
|
|
406
|
+
"default": "0"
|
|
394
407
|
},
|
|
395
408
|
{
|
|
396
409
|
"type": "text",
|
|
@@ -408,7 +421,7 @@
|
|
|
408
421
|
"filter": false,
|
|
409
422
|
"sort": false,
|
|
410
423
|
"width": "10%",
|
|
411
|
-
"default": 0
|
|
424
|
+
"default": "0"
|
|
412
425
|
},
|
|
413
426
|
{
|
|
414
427
|
"type": "text",
|
|
@@ -417,7 +430,7 @@
|
|
|
417
430
|
"filter": false,
|
|
418
431
|
"sort": false,
|
|
419
432
|
"width": "10%",
|
|
420
|
-
"default": 0
|
|
433
|
+
"default": "0"
|
|
421
434
|
},
|
|
422
435
|
{
|
|
423
436
|
"type": "text",
|
|
@@ -426,7 +439,7 @@
|
|
|
426
439
|
"filter": false,
|
|
427
440
|
"sort": false,
|
|
428
441
|
"width": "10%",
|
|
429
|
-
"default": 0
|
|
442
|
+
"default": "0"
|
|
430
443
|
}
|
|
431
444
|
]
|
|
432
445
|
}
|
|
@@ -451,6 +464,19 @@
|
|
|
451
464
|
"lg": 6,
|
|
452
465
|
"xl": 6
|
|
453
466
|
},
|
|
467
|
+
"wasserMainMeterName": {
|
|
468
|
+
"type": "text",
|
|
469
|
+
"label": "📝 Name des Hauptzählers",
|
|
470
|
+
"placeholder": "z.B. main, wohnung, haus, gesamt",
|
|
471
|
+
"help": "Technischer Name für den Hauptzähler. Wird Teil des State-Pfads (wasser.DIESER_NAME.*). Nur Kleinbuchstaben und Zahlen, max 20 Zeichen.",
|
|
472
|
+
"default": "main",
|
|
473
|
+
"hidden": "!data.wasserAktiv",
|
|
474
|
+
"sm": 12,
|
|
475
|
+
"md": 6,
|
|
476
|
+
"xs": 12,
|
|
477
|
+
"lg": 6,
|
|
478
|
+
"xl": 4
|
|
479
|
+
},
|
|
454
480
|
"_wasserSensorHeader": {
|
|
455
481
|
"type": "header",
|
|
456
482
|
"text": "Sensor-Konfiguration",
|
|
@@ -559,7 +585,7 @@
|
|
|
559
585
|
"hidden": "!data.wasserAktiv",
|
|
560
586
|
"label": "Grundgebühr (€/Monat)",
|
|
561
587
|
"placeholder": "z.B. 5.00",
|
|
562
|
-
"default": 0,
|
|
588
|
+
"default": "0",
|
|
563
589
|
"xs": 12,
|
|
564
590
|
"sm": 12,
|
|
565
591
|
"md": 6,
|
|
@@ -571,7 +597,7 @@
|
|
|
571
597
|
"hidden": "!data.wasserAktiv",
|
|
572
598
|
"label": "Jahresgebühr (z.B. Zählermiete) (€/Jahr)",
|
|
573
599
|
"placeholder": "z.B. 20.00",
|
|
574
|
-
"default": 0,
|
|
600
|
+
"default": "0",
|
|
575
601
|
"xs": 12,
|
|
576
602
|
"sm": 12,
|
|
577
603
|
"md": 6,
|
|
@@ -604,7 +630,7 @@
|
|
|
604
630
|
"label": "Monatlicher Abschlag (€)",
|
|
605
631
|
"placeholder": "z.B. 25.00",
|
|
606
632
|
"hidden": "!data.wasserAktiv",
|
|
607
|
-
"default": 0,
|
|
633
|
+
"default": "0",
|
|
608
634
|
"sm": 12,
|
|
609
635
|
"md": 6,
|
|
610
636
|
"xs": 12,
|
|
@@ -666,7 +692,7 @@
|
|
|
666
692
|
"filter": false,
|
|
667
693
|
"sort": false,
|
|
668
694
|
"width": "10%",
|
|
669
|
-
"default": 0
|
|
695
|
+
"default": "0"
|
|
670
696
|
},
|
|
671
697
|
{
|
|
672
698
|
"type": "text",
|
|
@@ -675,7 +701,7 @@
|
|
|
675
701
|
"filter": false,
|
|
676
702
|
"sort": false,
|
|
677
703
|
"width": "8%",
|
|
678
|
-
"default": 0
|
|
704
|
+
"default": "0"
|
|
679
705
|
},
|
|
680
706
|
{
|
|
681
707
|
"type": "text",
|
|
@@ -684,7 +710,7 @@
|
|
|
684
710
|
"filter": false,
|
|
685
711
|
"sort": false,
|
|
686
712
|
"width": "12%",
|
|
687
|
-
"default": 0
|
|
713
|
+
"default": "0"
|
|
688
714
|
},
|
|
689
715
|
{
|
|
690
716
|
"type": "text",
|
|
@@ -702,7 +728,7 @@
|
|
|
702
728
|
"filter": false,
|
|
703
729
|
"sort": false,
|
|
704
730
|
"width": "10%",
|
|
705
|
-
"default": 0
|
|
731
|
+
"default": "0"
|
|
706
732
|
},
|
|
707
733
|
{
|
|
708
734
|
"type": "text",
|
|
@@ -711,7 +737,7 @@
|
|
|
711
737
|
"filter": false,
|
|
712
738
|
"sort": false,
|
|
713
739
|
"width": "10%",
|
|
714
|
-
"default": 0
|
|
740
|
+
"default": "0"
|
|
715
741
|
},
|
|
716
742
|
{
|
|
717
743
|
"type": "text",
|
|
@@ -720,7 +746,7 @@
|
|
|
720
746
|
"filter": false,
|
|
721
747
|
"sort": false,
|
|
722
748
|
"width": "10%",
|
|
723
|
-
"default": 0
|
|
749
|
+
"default": "0"
|
|
724
750
|
}
|
|
725
751
|
]
|
|
726
752
|
}
|
|
@@ -745,6 +771,19 @@
|
|
|
745
771
|
"lg": 6,
|
|
746
772
|
"xl": 6
|
|
747
773
|
},
|
|
774
|
+
"stromMainMeterName": {
|
|
775
|
+
"type": "text",
|
|
776
|
+
"label": "📝 Name des Hauptzählers",
|
|
777
|
+
"placeholder": "z.B. main, wohnung, haus, gesamt",
|
|
778
|
+
"help": "Technischer Name für den Hauptzähler. Wird Teil des State-Pfads (strom.DIESER_NAME.*). Nur Kleinbuchstaben und Zahlen, max 20 Zeichen.",
|
|
779
|
+
"default": "main",
|
|
780
|
+
"hidden": "!data.stromAktiv",
|
|
781
|
+
"sm": 12,
|
|
782
|
+
"md": 6,
|
|
783
|
+
"xs": 12,
|
|
784
|
+
"lg": 6,
|
|
785
|
+
"xl": 4
|
|
786
|
+
},
|
|
748
787
|
"_stromSensorHeader": {
|
|
749
788
|
"type": "header",
|
|
750
789
|
"text": "Sensor-Konfiguration",
|
|
@@ -851,7 +890,7 @@
|
|
|
851
890
|
"type": "text",
|
|
852
891
|
"hidden": "!data.stromAktiv",
|
|
853
892
|
"label": "Grundgebühr (€/Monat)",
|
|
854
|
-
"default": 0,
|
|
893
|
+
"default": "0",
|
|
855
894
|
"xs": 12,
|
|
856
895
|
"sm": 12,
|
|
857
896
|
"md": 6,
|
|
@@ -862,7 +901,7 @@
|
|
|
862
901
|
"type": "text",
|
|
863
902
|
"hidden": "!data.stromAktiv",
|
|
864
903
|
"label": "Jahresgebühr (z.B. Zählermiete) (€/Jahr)",
|
|
865
|
-
"default": 0,
|
|
904
|
+
"default": "0",
|
|
866
905
|
"xs": 12,
|
|
867
906
|
"sm": 12,
|
|
868
907
|
"md": 6,
|
|
@@ -993,7 +1032,7 @@
|
|
|
993
1032
|
"hidden": "!data.stromAktiv",
|
|
994
1033
|
"sm": 12,
|
|
995
1034
|
"md": 6,
|
|
996
|
-
"default": 0,
|
|
1035
|
+
"default": "0",
|
|
997
1036
|
"xs": 12,
|
|
998
1037
|
"lg": 4,
|
|
999
1038
|
"xl": 3
|
|
@@ -1053,7 +1092,7 @@
|
|
|
1053
1092
|
"filter": false,
|
|
1054
1093
|
"sort": false,
|
|
1055
1094
|
"width": "10%",
|
|
1056
|
-
"default": 0
|
|
1095
|
+
"default": "0"
|
|
1057
1096
|
},
|
|
1058
1097
|
{
|
|
1059
1098
|
"type": "text",
|
|
@@ -1062,7 +1101,7 @@
|
|
|
1062
1101
|
"filter": false,
|
|
1063
1102
|
"sort": false,
|
|
1064
1103
|
"width": "8%",
|
|
1065
|
-
"default": 0
|
|
1104
|
+
"default": "0"
|
|
1066
1105
|
},
|
|
1067
1106
|
{
|
|
1068
1107
|
"type": "text",
|
|
@@ -1071,7 +1110,7 @@
|
|
|
1071
1110
|
"filter": false,
|
|
1072
1111
|
"sort": false,
|
|
1073
1112
|
"width": "12%",
|
|
1074
|
-
"default": 0
|
|
1113
|
+
"default": "0"
|
|
1075
1114
|
},
|
|
1076
1115
|
{
|
|
1077
1116
|
"type": "text",
|
|
@@ -1089,7 +1128,7 @@
|
|
|
1089
1128
|
"filter": false,
|
|
1090
1129
|
"sort": false,
|
|
1091
1130
|
"width": "10%",
|
|
1092
|
-
"default": 0
|
|
1131
|
+
"default": "0"
|
|
1093
1132
|
},
|
|
1094
1133
|
{
|
|
1095
1134
|
"type": "text",
|
|
@@ -1098,7 +1137,7 @@
|
|
|
1098
1137
|
"filter": false,
|
|
1099
1138
|
"sort": false,
|
|
1100
1139
|
"width": "10%",
|
|
1101
|
-
"default": 0
|
|
1140
|
+
"default": "0"
|
|
1102
1141
|
},
|
|
1103
1142
|
{
|
|
1104
1143
|
"type": "text",
|
|
@@ -1107,7 +1146,7 @@
|
|
|
1107
1146
|
"filter": false,
|
|
1108
1147
|
"sort": false,
|
|
1109
1148
|
"width": "10%",
|
|
1110
|
-
"default": 0
|
|
1149
|
+
"default": "0"
|
|
1111
1150
|
}
|
|
1112
1151
|
]
|
|
1113
1152
|
}
|
|
@@ -1132,6 +1171,19 @@
|
|
|
1132
1171
|
"lg": 6,
|
|
1133
1172
|
"xl": 6
|
|
1134
1173
|
},
|
|
1174
|
+
"pvMainMeterName": {
|
|
1175
|
+
"type": "text",
|
|
1176
|
+
"label": "📝 Name des Hauptzählers",
|
|
1177
|
+
"placeholder": "z.B. main, einspeisung, pv",
|
|
1178
|
+
"help": "Technischer Name für den Hauptzähler. Wird Teil des State-Pfads (pv.DIESER_NAME.*). Nur Kleinbuchstaben und Zahlen, max 20 Zeichen.",
|
|
1179
|
+
"default": "main",
|
|
1180
|
+
"hidden": "!data.pvAktiv",
|
|
1181
|
+
"sm": 12,
|
|
1182
|
+
"md": 6,
|
|
1183
|
+
"xs": 12,
|
|
1184
|
+
"lg": 6,
|
|
1185
|
+
"xl": 4
|
|
1186
|
+
},
|
|
1135
1187
|
"_pvSensorHeader": {
|
|
1136
1188
|
"type": "header",
|
|
1137
1189
|
"text": "Sensor-Konfiguration",
|
|
@@ -1238,7 +1290,7 @@
|
|
|
1238
1290
|
"type": "text",
|
|
1239
1291
|
"hidden": "!data.pvAktiv",
|
|
1240
1292
|
"label": "Grundgebühr (Messstellenbetrieb) (€/Monat)",
|
|
1241
|
-
"default": 0,
|
|
1293
|
+
"default": "0",
|
|
1242
1294
|
"xs": 12,
|
|
1243
1295
|
"sm": 12,
|
|
1244
1296
|
"md": 6,
|
|
@@ -1249,7 +1301,7 @@
|
|
|
1249
1301
|
"type": "text",
|
|
1250
1302
|
"hidden": "!data.pvAktiv",
|
|
1251
1303
|
"label": "Jahresgebühr (€/Jahr)",
|
|
1252
|
-
"default": 0,
|
|
1304
|
+
"default": "0",
|
|
1253
1305
|
"xs": 12,
|
|
1254
1306
|
"sm": 12,
|
|
1255
1307
|
"md": 6,
|
|
@@ -1385,7 +1437,7 @@
|
|
|
1385
1437
|
"type": "text",
|
|
1386
1438
|
"label": "Tag des Monats (1-28)",
|
|
1387
1439
|
"hidden": "!data.notificationEnabled || !data.notificationMonthlyEnabled",
|
|
1388
|
-
"default": 1,
|
|
1440
|
+
"default": "1",
|
|
1389
1441
|
"sm": 12,
|
|
1390
1442
|
"xs": 12,
|
|
1391
1443
|
"md": 4,
|
|
@@ -1423,6 +1475,20 @@
|
|
|
1423
1475
|
"lg": 4,
|
|
1424
1476
|
"xl": 4
|
|
1425
1477
|
},
|
|
1478
|
+
"notificationGasMeters": {
|
|
1479
|
+
"type": "selectSendTo",
|
|
1480
|
+
"label": "Welche Gas-Zähler benachrichtigen?",
|
|
1481
|
+
"command": "getMeters",
|
|
1482
|
+
"jsonData": "{\"type\": \"gas\"}",
|
|
1483
|
+
"multiple": true,
|
|
1484
|
+
"help": "Wähle die Zähler aus, für die du Benachrichtigungen erhalten möchtest. Wenn leer, werden ALLE Zähler benachrichtigt.",
|
|
1485
|
+
"hidden": "!data.notificationEnabled || !data.notificationGasEnabled || !data.gasAktiv",
|
|
1486
|
+
"sm": 12,
|
|
1487
|
+
"md": 8,
|
|
1488
|
+
"xs": 12,
|
|
1489
|
+
"lg": 8,
|
|
1490
|
+
"xl": 8
|
|
1491
|
+
},
|
|
1426
1492
|
"notificationWasserEnabled": {
|
|
1427
1493
|
"type": "checkbox",
|
|
1428
1494
|
"label": "Wasser-Erinnerung",
|
|
@@ -1433,6 +1499,20 @@
|
|
|
1433
1499
|
"lg": 4,
|
|
1434
1500
|
"xl": 4
|
|
1435
1501
|
},
|
|
1502
|
+
"notificationWasserMeters": {
|
|
1503
|
+
"type": "selectSendTo",
|
|
1504
|
+
"label": "Welche Wasser-Zähler benachrichtigen?",
|
|
1505
|
+
"command": "getMeters",
|
|
1506
|
+
"jsonData": "{\"type\": \"water\"}",
|
|
1507
|
+
"multiple": true,
|
|
1508
|
+
"help": "Wähle die Zähler aus, für die du Benachrichtigungen erhalten möchtest. Wenn leer, werden ALLE Zähler benachrichtigt.",
|
|
1509
|
+
"hidden": "!data.notificationEnabled || !data.notificationWasserEnabled || !data.wasserAktiv",
|
|
1510
|
+
"sm": 12,
|
|
1511
|
+
"md": 8,
|
|
1512
|
+
"xs": 12,
|
|
1513
|
+
"lg": 8,
|
|
1514
|
+
"xl": 8
|
|
1515
|
+
},
|
|
1436
1516
|
"notificationStromEnabled": {
|
|
1437
1517
|
"type": "checkbox",
|
|
1438
1518
|
"label": "Strom-Erinnerung",
|
|
@@ -1443,6 +1523,20 @@
|
|
|
1443
1523
|
"lg": 4,
|
|
1444
1524
|
"xl": 4
|
|
1445
1525
|
},
|
|
1526
|
+
"notificationStromMeters": {
|
|
1527
|
+
"type": "selectSendTo",
|
|
1528
|
+
"label": "Welche Strom-Zähler benachrichtigen?",
|
|
1529
|
+
"command": "getMeters",
|
|
1530
|
+
"jsonData": "{\"type\": \"electricity\"}",
|
|
1531
|
+
"multiple": true,
|
|
1532
|
+
"help": "Wähle die Zähler aus, für die du Benachrichtigungen erhalten möchtest. Wenn leer, werden ALLE Zähler benachrichtigt.",
|
|
1533
|
+
"hidden": "!data.notificationEnabled || !data.notificationStromEnabled || !data.stromAktiv",
|
|
1534
|
+
"sm": 12,
|
|
1535
|
+
"md": 8,
|
|
1536
|
+
"xs": 12,
|
|
1537
|
+
"lg": 8,
|
|
1538
|
+
"xl": 8
|
|
1539
|
+
},
|
|
1446
1540
|
"notificationPVEnabled": {
|
|
1447
1541
|
"type": "checkbox",
|
|
1448
1542
|
"label": "PV-Erinnerung",
|
|
@@ -1452,6 +1546,52 @@
|
|
|
1452
1546
|
"xs": 12,
|
|
1453
1547
|
"lg": 4,
|
|
1454
1548
|
"xl": 4
|
|
1549
|
+
},
|
|
1550
|
+
"notificationPVMeters": {
|
|
1551
|
+
"type": "selectSendTo",
|
|
1552
|
+
"label": "Welche PV-Zähler benachrichtigen?",
|
|
1553
|
+
"command": "getMeters",
|
|
1554
|
+
"jsonData": "{\"type\": \"pv\"}",
|
|
1555
|
+
"multiple": true,
|
|
1556
|
+
"help": "Wähle die Zähler aus, für die du Benachrichtigungen erhalten möchtest. Wenn leer, werden ALLE Zähler benachrichtigt.",
|
|
1557
|
+
"hidden": "!data.notificationEnabled || !data.notificationPVEnabled || !data.pvAktiv",
|
|
1558
|
+
"sm": 12,
|
|
1559
|
+
"md": 8,
|
|
1560
|
+
"xs": 12,
|
|
1561
|
+
"lg": 8,
|
|
1562
|
+
"xl": 8
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1565
|
+
},
|
|
1566
|
+
"tabImport": {
|
|
1567
|
+
"type": "panel",
|
|
1568
|
+
"label": "📥 Import",
|
|
1569
|
+
"items": {
|
|
1570
|
+
"_importHeader": {
|
|
1571
|
+
"type": "header",
|
|
1572
|
+
"text": "CSV Daten-Import",
|
|
1573
|
+
"size": 3
|
|
1574
|
+
},
|
|
1575
|
+
"_importInfo": {
|
|
1576
|
+
"type": "staticText",
|
|
1577
|
+
"text": "Hier kannst du historische Zählerstände importieren. Diese Funktion hilft dir, den Adapter schnell mit alten Daten zu füttern.\n\n⚠️ **Wichtig:** Wähle zuerst den Typ und den Zähler aus, für den die Daten bestimmt sind.",
|
|
1578
|
+
"xs": 12,
|
|
1579
|
+
"sm": 12,
|
|
1580
|
+
"md": 12,
|
|
1581
|
+
"lg": 12,
|
|
1582
|
+
"xl": 12
|
|
1583
|
+
},
|
|
1584
|
+
"importCustom": {
|
|
1585
|
+
"type": "custom",
|
|
1586
|
+
"name": "UtilityMonitor/Components/CSVImporter",
|
|
1587
|
+
"url": "custom/CSVImporter_v15_11.js",
|
|
1588
|
+
"bundlerType": "module",
|
|
1589
|
+
"newLine": true,
|
|
1590
|
+
"xs": 12,
|
|
1591
|
+
"sm": 12,
|
|
1592
|
+
"md": 12,
|
|
1593
|
+
"lg": 12,
|
|
1594
|
+
"xl": 12
|
|
1455
1595
|
}
|
|
1456
1596
|
}
|
|
1457
1597
|
},
|
|
@@ -1466,7 +1606,7 @@
|
|
|
1466
1606
|
},
|
|
1467
1607
|
"_infoVersion": {
|
|
1468
1608
|
"type": "staticText",
|
|
1469
|
-
"text": "**Version:** 1.
|
|
1609
|
+
"text": "**Version:** 1.5.0\n\n**Autor:** fischi87",
|
|
1470
1610
|
"sm": 12,
|
|
1471
1611
|
"xs": 12,
|
|
1472
1612
|
"md": 12,
|
|
@@ -1492,7 +1632,7 @@
|
|
|
1492
1632
|
},
|
|
1493
1633
|
"_features": {
|
|
1494
1634
|
"type": "staticText",
|
|
1495
|
-
"text": "📊 **Verbrauchsüberwachung** - Gas, Wasser, Strom & PV/Einspeisung\n\n💰 **Automatische Kostenberechnung** - Mit Arbeitspreis & Grundgebühren\n\n☀️ **PV-Integration** - Überwachung von Einspeisung & Vergütung\n\n💳 **Abschlagsüberwachung** - Direkter Vergleich: Bezahlt vs. Verbraucht\n\n🔄 **Gas-Spezial** - Automatische m³ zu kWh Umrechnung\n\n⚡ **HT/NT-Unterstützung** - Volle Unterstützung für Doppeltarife\n\n📅 **Jahres-Historie** - Automatische Archivierung zum Vertragsbeginn",
|
|
1635
|
+
"text": "📊 **Verbrauchsüberwachung** - Gas, Wasser, Strom & PV/Einspeisung\n\n🔢 **Multi-Meter Support** *(NEU in 1.4.6)* - Mehrere Zähler pro Typ (z.B. Haus + Werkstatt)\n\n📛 **Konfigurierbare Namen** *(NEU in 1.4.6)* - Gib jedem Zähler einen individuellen Namen\n\n💰 **Automatische Kostenberechnung** - Mit Arbeitspreis & Grundgebühren\n\n☀️ **PV-Integration** - Überwachung von Einspeisung & Vergütung\n\n💳 **Abschlagsüberwachung** - Direkter Vergleich: Bezahlt vs. Verbraucht\n\n🔄 **Gas-Spezial** - Automatische m³ zu kWh Umrechnung\n\n⚡ **HT/NT-Unterstützung** - Volle Unterstützung für Doppeltarife\n\n📅 **Jahres-Historie** - Automatische Archivierung zum Vertragsbeginn\n\n🔔 **Smart Notifications** - Wähle für welche Zähler du benachrichtigt werden möchtest",
|
|
1496
1636
|
"sm": 12,
|
|
1497
1637
|
"xs": 12,
|
|
1498
1638
|
"md": 12,
|
|
@@ -1502,14 +1642,31 @@
|
|
|
1502
1642
|
"_divider2": {
|
|
1503
1643
|
"type": "divider"
|
|
1504
1644
|
},
|
|
1645
|
+
"_breakingHeader": {
|
|
1646
|
+
"type": "header",
|
|
1647
|
+
"text": "⚠️ Breaking Changes v1.4.6",
|
|
1648
|
+
"size": 4
|
|
1649
|
+
},
|
|
1650
|
+
"_breakingChanges": {
|
|
1651
|
+
"type": "staticText",
|
|
1652
|
+
"text": "**State-Pfade haben sich geändert:**\n\n**Vorher:** `gas.consumption.daily`, `gas.costs.yearly`\n\n**Neu:** `gas.METER_NAME.consumption.daily`, `gas.METER_NAME.costs.yearly`\n\n**Standardname:** Wenn du keinen Namen vergibst, wird automatisch \"main\" verwendet.\n\n**Was du tun musst:**\n• Skripte anpassen die States verwenden\n• Visualisierungen (VIS, Grafana) aktualisieren\n• History-Adapter neu konfigurieren\n\n**Mehrere Zähler:** Bei mehreren Zählern wird automatisch eine `totals/` Struktur mit Summen erstellt.",
|
|
1653
|
+
"sm": 12,
|
|
1654
|
+
"xs": 12,
|
|
1655
|
+
"md": 12,
|
|
1656
|
+
"lg": 12,
|
|
1657
|
+
"xl": 12
|
|
1658
|
+
},
|
|
1659
|
+
"_divider2a": {
|
|
1660
|
+
"type": "divider"
|
|
1661
|
+
},
|
|
1505
1662
|
"_usageHeader": {
|
|
1506
1663
|
"type": "header",
|
|
1507
|
-
"text": "Benachrichtigungen
|
|
1664
|
+
"text": "📬 Benachrichtigungen",
|
|
1508
1665
|
"size": 4
|
|
1509
1666
|
},
|
|
1510
1667
|
"_usage": {
|
|
1511
1668
|
"type": "staticText",
|
|
1512
|
-
"text": "**1. Abrechnungsende** 📅\n• Erinnert dich (z.B. 7 Tage vorher) daran, den Zählerstand abzulesen und den Zeitraum abzuschließen.\n\n**2. Vertragswechsel** 📋\n• Erinnert dich frühzeitig (z.B. 60 Tage vorher) daran, Tarife zu vergleichen oder die Kündigungsfrist zu prüfen.\n\n**3. Monatlicher Bericht** 📈\n• Optionaler Status-Bericht am 1. jedes Monats via Benachrichtigung.\n\n**💡 Tipp:** Nutze den **Test-Button** zum Prüfen deiner Einstellungen. Du bekommst sofort ein Popup mit dem Ergebnis!",
|
|
1669
|
+
"text": "**1. Abrechnungsende** 📅\n• Erinnert dich (z.B. 7 Tage vorher) daran, den Zählerstand abzulesen und den Zeitraum abzuschließen.\n\n**2. Vertragswechsel** 📋\n• Erinnert dich frühzeitig (z.B. 60 Tage vorher) daran, Tarife zu vergleichen oder die Kündigungsfrist zu prüfen.\n\n**3. Monatlicher Bericht** 📈\n• Optionaler Status-Bericht am 1. jedes Monats via Benachrichtigung.\n\n**4. Zählerauswahl** 🎯 *(NEU in 1.4.6)*\n• Wähle aus, für welche Zähler du Benachrichtigungen erhalten möchtest\n• Wenn leer: Alle Zähler werden benachrichtigt\n\n**💡 Tipp:** Nutze den **Test-Button** zum Prüfen deiner Einstellungen. Du bekommst sofort ein Popup mit dem Ergebnis!",
|
|
1513
1670
|
"sm": 12,
|
|
1514
1671
|
"xs": 12,
|
|
1515
1672
|
"md": 12,
|
|
@@ -1526,7 +1683,7 @@
|
|
|
1526
1683
|
},
|
|
1527
1684
|
"_statesInfo": {
|
|
1528
1685
|
"type": "staticText",
|
|
1529
|
-
"text": "**📅 billing/** (Abrechnung)\n• **daysRemaining** - Tage bis zum
|
|
1686
|
+
"text": "**⚠️ Neue Struktur ab v1.4.6:**\n\nAlle Datenpunkte sind jetzt unter `TYPE.METER_NAME.*` zu finden!\n\n**Beispiel Single-Meter:**\n• `gas.main.consumption.daily`\n• `gas.main.costs.totalYearly`\n• `gas.main.billing.closePeriod`\n\n**Beispiel Multi-Meter:**\n• `gas.haus.consumption.yearly` ← Zähler 1\n• `gas.werkstatt.consumption.yearly` ← Zähler 2\n• `gas.totals.consumption.yearly` ← Summe\n\n**📅 billing/** (Abrechnung)\n• **daysRemaining** - Tage bis zum Vertragsende\n• **closePeriod** - Button zum Zeitraum-Abschluss\n• **endReading** - Hier Endzählerstand eintragen\n\n**💰 costs/** (Kosten)\n• **balance** - Aktuelle Bilanz (Nachzahlung/Guthaben)\n• **totalYearly** - Gesamtkosten inkl. Gebühren\n• **yearly** - Nur Verbrauchskosten\n\n**📈 statistics/** (Statistiken)\n• **lastDay** - Gestern-Verbrauch\n• **averageDaily** - Durchschnitt pro Tag\n• **averageMonthly** - Durchschnitt pro Monat",
|
|
1530
1687
|
"sm": 12,
|
|
1531
1688
|
"xs": 12,
|
|
1532
1689
|
"md": 12,
|
|
@@ -1535,6 +1692,33 @@
|
|
|
1535
1692
|
},
|
|
1536
1693
|
"_divider4": {
|
|
1537
1694
|
"type": "divider"
|
|
1695
|
+
},
|
|
1696
|
+
"_advancedHeader": {
|
|
1697
|
+
"type": "header",
|
|
1698
|
+
"text": "⚙️ Erweiterte Einstellungen",
|
|
1699
|
+
"size": 4
|
|
1700
|
+
},
|
|
1701
|
+
"_advancedInfo": {
|
|
1702
|
+
"type": "staticText",
|
|
1703
|
+
"text": "Technische Einstellungen für fortgeschrittene Benutzer.",
|
|
1704
|
+
"sm": 12,
|
|
1705
|
+
"xs": 12,
|
|
1706
|
+
"md": 12,
|
|
1707
|
+
"lg": 12,
|
|
1708
|
+
"xl": 12
|
|
1709
|
+
},
|
|
1710
|
+
"sensorSpikeThreshold": {
|
|
1711
|
+
"type": "number",
|
|
1712
|
+
"label": "Sensor-Spike-Schwellwert (kWh/m³)",
|
|
1713
|
+
"help": "Delta-Werte über diesem Schwellwert werden als Spikes ignoriert und nicht zum Verbrauch addiert. Standard: 500",
|
|
1714
|
+
"default": 500,
|
|
1715
|
+
"min": 10,
|
|
1716
|
+
"max": 10000,
|
|
1717
|
+
"sm": 12,
|
|
1718
|
+
"md": 6,
|
|
1719
|
+
"xs": 12,
|
|
1720
|
+
"lg": 4,
|
|
1721
|
+
"xl": 3
|
|
1538
1722
|
}
|
|
1539
1723
|
}
|
|
1540
1724
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "utility-monitor",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.5.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.5.0": {
|
|
7
|
+
"en": "New: CSV Import feature with drag and drop support. New: Weekly tracking points. Fix: Resets now performed at 23:59. Refactoring: Modular backend architecture.",
|
|
8
|
+
"de": "Neu: CSV-Import mit Drag-and-Drop. Neu: Wöchentliche Datenpunkte. Fix: Resets werden jetzt um 23:59 Uhr ausgeführt. Refactoring: Modulare Backend-Architektur.",
|
|
9
|
+
"ru": "Новое: функция импорта CSV с поддержкой перетаскивания. Новое: точки еженедельного отслеживания. Исправление: сброс теперь выполняется в 23:59. Рефакторинг: модульная архитектура бэкенда.",
|
|
10
|
+
"pt": "Novo: recurso de importação de CSV com suporte para arrastar e soltar. Novo: pontos de rastreamento semanais. Correção: as reinicializações agora são realizadas às 23:59. Refatoração: arquitetura de back-end modular.",
|
|
11
|
+
"nl": "Nieuw: CSV-importfunctie met drag-and-drop-ondersteuning. Nieuw: Wekelijkse trackingpunten. Fix: Resets worden nu uitgevoerd om 23:59 uur. Refactoring: Modulaire backend-architectuur.",
|
|
12
|
+
"fr": "Nouveau : fonctionnalité d'importation CSV avec prise en charge du glisser-déposer. Nouveau : points de suivi hebdomadaires. Correction : les réinitialisations sont désormais effectuées à 23:59. Refactorisation : architecture backend modulaire.",
|
|
13
|
+
"it": "Nuovo: funzione di importazione CSV con supporto drag-and-drop. Nuovo: punti di tracciamento settimanali. Correzione: i ripristini vengono ora eseguiti alle 23:59. Refactoring: architettura backend modulare.",
|
|
14
|
+
"es": "Nuevo: función de importación de CSV con soporte para arrastrar y soltar. Nuevo: puntos de seguimiento semanali. Corrección: los reinicios ahora se realizan a las 23:59. Re-factorización: arquitectura de backend modular.",
|
|
15
|
+
"pl": "Nowość: funkcja importu CSV z obsługą przeciągnij i upuść. Nowość: tygodniowe punkty śledzenia. Naprawa: resety wykonywane teraz o 23:59. Refaktoryzacja: modułowa architektura backendu.",
|
|
16
|
+
"uk": "Нове: функція імпорту CSV з підтримкою перетягування. Нове: щотижневі точки відстеження. Виправлення: скидання тепер виконується о 23:59. Рефакторинг: модульна архітектура бекенда.",
|
|
17
|
+
"zh-cn": "新增:支持拖放的 CSV 导入功能。新增:每周跟踪点。修复:现在在 23:59 执行重置。重构:模块化后端架构。"
|
|
18
|
+
},
|
|
19
|
+
"1.4.7": {
|
|
20
|
+
"en": "Fix: Removed redundant initialization code causing state object warnings. Fix: Race conditions in multi-meter initialization. New: Support for German umlauts (ä,ö,ü,ß) in meter names.",
|
|
21
|
+
"de": "Fix: Redundanten Initialisierungscode entfernt, der State-Object-Warnungen verursachte. Fix: Race Conditions bei Multi-Meter-Initialisierung. Neu: Unterstützung für deutsche Umlaute (ä,ö,ü,ß) in Zählernamen.",
|
|
22
|
+
"ru": "Исправление: удален избыточный код инициализации, вызывавший предупреждения об объектах состояния. Исправление: состояния гонки при инициализации нескольких счетчиков. Новое: поддержка немецких умляутов (ä, ö, ü, ß) в названиях счетчиков.",
|
|
23
|
+
"pt": "Correção: código de inicialização redundante removido que causava avisos de objetos de estado. Correção: Condições de corrida na inicialização do multi-medidor. Novo: Suporte para tremas alemães (ä, ö, ü, ß) em nomes de medidores.",
|
|
24
|
+
"nl": "Fix: Overbodige initialisatiecode verwijderd die waarschuwingen voor staatsobjecten veroorzaakte. Fix: Race-omstandigheden bij initialisatie van meerdere meters. Nieuw: Ondersteuning voor Duitse umlauten (ä, ö, ü, ß) in meternamen.",
|
|
25
|
+
"fr": "Correction : suppression du code d'initialisation redondant provoquant des avertissements d'objet d'état. Correction : conditions de concurrence lors de l'initialisation de plusieurs compteurs. Nouveau : prise en charge des trémas allemands (ä, ö, ü, ß) dans les noms des compteurs.",
|
|
26
|
+
"it": "Correzione: rimosso il codice di inizializzazione ridondante che causava avvisi sugli oggetti di stato. Correzione: race condition nell'inizializzazione di più contatori. Nuovo: supporto per le dieresi tedesche (ä, ö, ü, ß) nei nomi dei contatori.",
|
|
27
|
+
"es": "Solución: se eliminó el código de inicialización redundante que causaba advertencias de objetos de estado. Solución: condiciones de carrera en la inicialización de múltiples medidores. Nuevo: soporte para diéresis alemanas (ä, ö, ü, ß) en nombres de medidores.",
|
|
28
|
+
"pl": "Naprawa: usunięto nadmiarowy kod inicjalizacji powodujący ostrzeżenia o obiektach stanu. Naprawa: wyścigi podczas inicjalizacji wielu liczników. Nowość: obsługa niemieckich umlautów (ä, ö, ü, ß) w nazwach liczników.",
|
|
29
|
+
"uk": "Виправлення: видалено надлишковий код ініціалізації, що викликав попередження про об'єкти стану. Виправлення: стан гонки при ініціалізації декількох лічильників. Нове: підтримка німецьких умляутів (ä, ö, ü, ß) у назвах лічильників.",
|
|
30
|
+
"zh-cn": "修复:删除了导致状态对象警告的冗余初始化代码。修复:多表初始化中的竞态条件。新增:支持仪表名称中的德语变音符号 (ä, ö, ü, ß)。"
|
|
31
|
+
},
|
|
32
|
+
"1.4.6": {
|
|
33
|
+
"en": "Breaking Change: Main meter now requires a name (default: 'main'). State paths changed from 'gas.*' to 'gas.METER_NAME.*'. All meters now use consistent naming structure.",
|
|
34
|
+
"de": "Breaking Change: Hauptzähler benötigt jetzt einen Namen (Standard: 'main'). State-Pfade geändert von 'gas.*' zu 'gas.METER_NAME.*'. Alle Zähler nutzen jetzt konsistente Namensstruktur.",
|
|
35
|
+
"ru": "Критическое изменение: для главного счетчика теперь требуется имя (по умолчанию — «main»). Пути состояний изменены с 'gas.*' на 'gas.METER_NAME.*'. Все счетчики теперь используют согласованную структуру именования.",
|
|
36
|
+
"pt": "Mudança estrutural: o medidor principal agora requer um nome (padrão: 'main'). Os caminhos de estado mudaram de 'gas.*' para 'gas.METER_NAME.*'. Todos os medidores agora usam uma estrutura de nomenclatura consistente.",
|
|
37
|
+
"nl": "Breaking Change: Hoofdmeter vereist nu een naam (standaard: 'main'). Staatspaden gewijzigd van 'gas.*' naar 'gas.METER_NAME.*'. Alle meters gebruiken nu een consistente naamstructuur.",
|
|
38
|
+
"fr": "Changement radical : le compteur principal nécessite désormais un nom (par défaut : 'main'). Les chemins d'état sont passés de 'gas.*' à 'gas.METER_NAME.*'. Tous los compteurs utilisent désormais une structure de dénomination cohérente.",
|
|
39
|
+
"it": "Cambiamento radicale: il contatore principale ora richiede un nome (predefinito: 'main'). I percorsi di stato sono cambiati da 'gas.*' a 'gas.METER_NAME.*'. Tutti i contatori ora utilizzano una struttura di denominazione coerente.",
|
|
40
|
+
"es": "Cambio importante: el medidor principal ahora requiere un nombre (predeterminado: 'main'). Las rutas de estado cambiaron de 'gas.*' na 'gas.METER_NAME.*'. Todos los medidores ahora utilizan una estructura de nombres consistente.",
|
|
41
|
+
"pl": "Przełomowa zmiana: licznik główny wymaga teraz nazwy (domyślnie „main”). Ścieżki stanów zmieniły się z „gas.*” na „gas.METER_NAME.*”. Wszystkie liczniki używają teraz spójnej struktury nazewnictwa.",
|
|
42
|
+
"uk": "Критична зміна: для головного лічильника тепер потрібна назва (за замовчуванням — «main»). Шляхи статусів змінено з 'gas.*' на 'gas.METER_NAME.*'. Тепер усі лічильники використовують єдину структуру назв.",
|
|
43
|
+
"zh-cn": "重大更改:主表现在需要一个名称(默认值:'main')。状态路径从 'gas.*' 更改为 'gas.METER_NAME.*'。所有计量表现在都使用一致的命名结构。"
|
|
44
|
+
},
|
|
6
45
|
"1.4.5": {
|
|
7
46
|
"en": "Fix: Critical multi-meter cost calculation bugs (main meter sync, basicCharge/paidTotal accumulation, annualFee as fixed yearly value). Fix: Balance formula corrected. Fix: Removed duplicate initialization causing sync issues.",
|
|
8
47
|
"de": "Fix: Kritische Multi-Meter Kostenberechnungsfehler (Hauptzähler-Sync, basicCharge/paidTotal Akkumulation, Jahresgebühr als fester Jahreswert). Fix: Balance-Formel korrigiert. Fix: Doppelte Initialisierung entfernt.",
|
|
@@ -91,6 +130,7 @@
|
|
|
91
130
|
},
|
|
92
131
|
"native": {
|
|
93
132
|
"gasAktiv": false,
|
|
133
|
+
"gasMainMeterName": "main",
|
|
94
134
|
"gasSensorDP": "",
|
|
95
135
|
"gasOffset": 0,
|
|
96
136
|
"gasInitialReading": 0,
|
|
@@ -100,6 +140,7 @@
|
|
|
100
140
|
"gasGrundgebuehr": 0,
|
|
101
141
|
"gasAbschlag": 0,
|
|
102
142
|
"wasserAktiv": false,
|
|
143
|
+
"wasserMainMeterName": "main",
|
|
103
144
|
"wasserSensorDP": "",
|
|
104
145
|
"wasserOffset": 0,
|
|
105
146
|
"wasserInitialReading": 0,
|
|
@@ -107,6 +148,7 @@
|
|
|
107
148
|
"wasserGrundgebuehr": 0,
|
|
108
149
|
"wasserAbschlag": 0,
|
|
109
150
|
"stromAktiv": false,
|
|
151
|
+
"stromMainMeterName": "main",
|
|
110
152
|
"stromSensorDP": "",
|
|
111
153
|
"stromOffset": 0,
|
|
112
154
|
"stromInitialReading": 0,
|
|
@@ -114,6 +156,7 @@
|
|
|
114
156
|
"stromGrundgebuehr": 0,
|
|
115
157
|
"stromAbschlag": 0,
|
|
116
158
|
"pvAktiv": false,
|
|
159
|
+
"pvMainMeterName": "main",
|
|
117
160
|
"pvSensorDP": "",
|
|
118
161
|
"pvOffset": 0,
|
|
119
162
|
"pvInitialReading": 0,
|
|
@@ -125,11 +168,17 @@
|
|
|
125
168
|
"notificationInstance": "",
|
|
126
169
|
"notificationDaysBefore": 30,
|
|
127
170
|
"notificationGasEnabled": false,
|
|
171
|
+
"notificationGasMeters": [],
|
|
128
172
|
"notificationWasserEnabled": false,
|
|
173
|
+
"notificationWasserMeters": [],
|
|
129
174
|
"notificationStromEnabled": false,
|
|
175
|
+
"notificationStromMeters": [],
|
|
176
|
+
"notificationPVEnabled": false,
|
|
177
|
+
"notificationPVMeters": [],
|
|
130
178
|
"notificationBillingEnabled": true,
|
|
131
179
|
"notificationBillingDays": 7,
|
|
132
|
-
"notificationChangeDays": 60
|
|
180
|
+
"notificationChangeDays": 60,
|
|
181
|
+
"sensorSpikeThreshold": 500
|
|
133
182
|
},
|
|
134
183
|
"objects": [],
|
|
135
184
|
"instanceObjects": []
|