iobroker.utility-monitor 1.4.4 → 1.4.6
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 +95 -63
- package/admin/jsonConfig.json +130 -39
- package/io-package.json +25 -51
- package/lib/billingManager.js +53 -53
- package/lib/consumptionManager.js +63 -103
- package/lib/messagingHandler.js +108 -109
- package/lib/multiMeterManager.js +48 -68
- package/lib/stateManager.js +6 -5
- package/main.js +31 -45
- package/package.json +13 -13
- package/admin/tab_m.html +0 -305
- package/lib/importManager.js +0 -344
package/README.md
CHANGED
|
@@ -61,10 +61,55 @@ Gefällt dir dieser Adapter? Du kannst mich gerne mit einem Kaffee unterstützen
|
|
|
61
61
|
|
|
62
62
|
---
|
|
63
63
|
|
|
64
|
+
## ⚠️ Breaking Changes in Version 1.4.6
|
|
65
|
+
|
|
66
|
+
**WICHTIG:** Version 1.4.6 ändert die State-Struktur grundlegend!
|
|
67
|
+
|
|
68
|
+
### Was hat sich geändert?
|
|
69
|
+
|
|
70
|
+
**Vorher (bis 1.4.5):**
|
|
71
|
+
```
|
|
72
|
+
gas.consumption.daily
|
|
73
|
+
gas.costs.monthly
|
|
74
|
+
wasser.consumption.daily
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Jetzt (ab 1.4.6):**
|
|
78
|
+
```
|
|
79
|
+
gas.main.consumption.daily ← Hauptzähler mit Namen "main"
|
|
80
|
+
gas.main.costs.monthly
|
|
81
|
+
wasser.main.consumption.daily
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 🔧 Migration erforderlich
|
|
85
|
+
|
|
86
|
+
1. **Config öffnen**: Neue Felder "Name des Hauptzählers" für Gas/Wasser/Strom/PV
|
|
87
|
+
2. **Namen eingeben**: Standard ist "main" (empfohlen), oder eigener Name wie "wohnung", "haus"
|
|
88
|
+
3. **Skripte anpassen**: Alle Verweise auf States müssen angepasst werden
|
|
89
|
+
```javascript
|
|
90
|
+
// Alt:
|
|
91
|
+
getState('utility-monitor.0.gas.consumption.daily')
|
|
92
|
+
|
|
93
|
+
// Neu:
|
|
94
|
+
getState('utility-monitor.0.gas.main.consumption.daily')
|
|
95
|
+
```
|
|
96
|
+
4. **Visualisierungen updaten**: VIS, Grafana, etc. auf neue Pfade anpassen
|
|
97
|
+
|
|
98
|
+
### 💡 Warum diese Änderung?
|
|
99
|
+
|
|
100
|
+
- **Konsistenz**: Alle Zähler (Haupt + Zusätzlich) verwenden jetzt die gleiche Struktur
|
|
101
|
+
- **Flexibilität**: Hauptzähler kann jetzt frei benannt werden (z.B. "erdgeschoss", "gesamt")
|
|
102
|
+
- **Klarheit**: Keine Special-Case Logik mehr im Code
|
|
103
|
+
- **Multi-Meter**: Bessere Unterstützung für mehrere Zähler pro Typ
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
64
107
|
## 📊 Datenpunkte erklärt
|
|
65
108
|
|
|
66
109
|
Für jede aktivierte Verbrauchsart (Gas/Wasser/Strom/PV) werden folgende Ordner angelegt:
|
|
67
110
|
|
|
111
|
+
**Wichtig:** Seit Version 1.4.6 beinhalten alle Pfade den Zähler-Namen (z.B. `gas.main.*` statt `gas.*`)
|
|
112
|
+
|
|
68
113
|
### 🗂️ **consumption** (Verbrauch)
|
|
69
114
|
|
|
70
115
|
| Datenpunkt | Beschreibung | Beispiel |
|
|
@@ -96,11 +141,11 @@ Für jede aktivierte Verbrauchsart (Gas/Wasser/Strom/PV) werden folgende Ordner
|
|
|
96
141
|
| `daily` | Kosten **heute** | daily × Arbeitspreis | 2,27 € |
|
|
97
142
|
| `monthly` | Kosten **diesen Monat** | monthly × Arbeitspreis | 21,61 € |
|
|
98
143
|
| `yearly` | **Verbrauchskosten** seit Vertragsbeginn | yearly × Arbeitspreis | 137,61 € |
|
|
99
|
-
| `totalYearly` | **Gesamtkosten Jahr** (Verbrauch + alle Fixkosten) | yearly-cost + basicCharge + annualFee |
|
|
100
|
-
| `basicCharge` | **Grundgebühr akkumuliert**
|
|
101
|
-
| `annualFee` | **Jahresgebühr
|
|
144
|
+
| `totalYearly` | **Gesamtkosten Jahr** (Verbrauch + alle Fixkosten) | yearly-cost + basicCharge + annualFee | 212,64 € |
|
|
145
|
+
| `basicCharge` | **Grundgebühr akkumuliert** | Grundgebühr × Monate | 15,03 € |
|
|
146
|
+
| `annualFee` | **Jahresgebühr** (fester Wert pro Jahr) | Jahresgebühr (aus Config) | 60,00 € |
|
|
102
147
|
| `paidTotal` | **Bezahlt** via Abschlag | Abschlag × Monate | 150,00 € |
|
|
103
|
-
| `balance` | **🎯 WICHTIGSTER Wert!**<br>Nachzahlung (+) oder Guthaben (-) | totalYearly - paidTotal | **+
|
|
148
|
+
| `balance` | **🎯 WICHTIGSTER Wert!**<br>Nachzahlung (+) oder Guthaben (-) | totalYearly - paidTotal | **+62,64 €**<br>→ Nachzahlung! |
|
|
104
149
|
|
|
105
150
|
#### 🔍 **balance** genauer erklärt:
|
|
106
151
|
|
|
@@ -112,13 +157,14 @@ Für jede aktivierte Verbrauchsart (Gas/Wasser/Strom/PV) werden folgende Ordner
|
|
|
112
157
|
|
|
113
158
|
```
|
|
114
159
|
Verbrauchskosten: 137,61 € (yearly)
|
|
115
|
-
Grundgebühr: + 15,03 € (basicCharge)
|
|
160
|
+
Grundgebühr: + 15,03 € (basicCharge - 1 Monat × 15,03€)
|
|
161
|
+
Jahresgebühr: + 60,00 € (annualFee - fester Wert)
|
|
116
162
|
────────────────────────────
|
|
117
|
-
Gesamtkosten:
|
|
163
|
+
Gesamtkosten: 212,64 € (totalYearly)
|
|
118
164
|
|
|
119
|
-
Bezahlt (Abschlag): 150,00 € (paidTotal)
|
|
165
|
+
Bezahlt (Abschlag): 150,00 € (paidTotal - 1 Monat × 150€)
|
|
120
166
|
────────────────────────────
|
|
121
|
-
Balance: +
|
|
167
|
+
Balance: +62,64 € → Nachzahlung
|
|
122
168
|
```
|
|
123
169
|
|
|
124
170
|
---
|
|
@@ -228,23 +274,47 @@ Der Adapter setzt Zähler automatisch zurück:
|
|
|
228
274
|
|
|
229
275
|
## Changelog
|
|
230
276
|
|
|
231
|
-
###
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
- **
|
|
236
|
-
-
|
|
237
|
-
-
|
|
238
|
-
-
|
|
239
|
-
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
-
|
|
246
|
-
|
|
247
|
-
-
|
|
277
|
+
### 1.4.6 (2026-01-20)
|
|
278
|
+
|
|
279
|
+
- **⚠️ BREAKING CHANGE:** 🔄 **Main Meter Naming** - Hauptzähler benötigt jetzt einen Namen:
|
|
280
|
+
- **State-Pfade geändert**: `gas.*` → `gas.METER_NAME.*` (z.B. `gas.main.*`)
|
|
281
|
+
- **Neue Config-Felder**: "Name des Hauptzählers" für Gas/Wasser/Strom/PV
|
|
282
|
+
- **Default-Name**: "main" (wird automatisch verwendet wenn leer gelassen)
|
|
283
|
+
- **Konsistente Struktur**: Alle Zähler (Haupt + Zusätzlich) verwenden jetzt `type.meterName.*`
|
|
284
|
+
- **Flexibilität**: Hauptzähler kann jetzt frei benannt werden (z.B. "wohnung", "erdgeschoss", "gesamt")
|
|
285
|
+
- **Keine Special-Cases**: Vereinfachter Code ohne `meterName === 'main'` Bedingungen
|
|
286
|
+
- **NEW:** 🔔 **Smart Notifications** - Zählerauswahl für Benachrichtigungen:
|
|
287
|
+
- Wähle pro Utility-Typ aus, welche Zähler benachrichtigt werden sollen
|
|
288
|
+
- Multi-Select Dropdown zeigt alle konfigurierten Zähler
|
|
289
|
+
- Wenn leer: Alle Zähler werden benachrichtigt (Standard)
|
|
290
|
+
- Wenn ausgewählt: Nur gewählte Zähler erhalten Benachrichtigungen
|
|
291
|
+
- Gilt für Abrechnungsende, Vertragswechsel und monatliche Berichte
|
|
292
|
+
- **IMPROVED:** 🏗️ **Code-Architektur** - Entfernung von 19 Special-Case Checks in 7 Dateien:
|
|
293
|
+
- Vereinfachte basePath-Berechnungen in multiMeterManager, billingManager, stateManager
|
|
294
|
+
- Vereinheitlichter Config-Zugriff (alle Meter nutzen `meter.config.contractStart`)
|
|
295
|
+
- HT/NT-Logik basiert jetzt auf `config.htNtEnabled` statt Meter-Name
|
|
296
|
+
- Button-Trigger erkennt nur noch einheitliche Pfadstruktur
|
|
297
|
+
- Legacy-Code entfernt: updateBillingCountdown, updateCurrentPrice jetzt per-meter
|
|
298
|
+
- **MIGRATION:** 📋 **Upgrade-Hinweise**:
|
|
299
|
+
- Bei Neuinstallation: Namen für Hauptzähler eingeben (oder "main" akzeptieren)
|
|
300
|
+
- Bei Upgrade: Adapter neu konfigurieren + Skripte/Visualisierungen anpassen
|
|
301
|
+
- History: Alte States bleiben erhalten, neue States werden parallel erstellt
|
|
302
|
+
- Empfehlung: "main" als Namen verwenden für einfachere Migration
|
|
303
|
+
|
|
304
|
+
### 1.4.5 (2026-01-20)
|
|
305
|
+
|
|
306
|
+
- **FIX:** 🐛 **Critical Multi-Meter Cost Calculation Bugs** - Comprehensive fixes for multi-meter functionality:
|
|
307
|
+
- **Main Meter Sync Issue**: Removed duplicate initialization that prevented `lastSync` updates on main meter
|
|
308
|
+
- **basicCharge Accumulation**: Now correctly calculates `basicCharge = grundgebuehr × months` (was showing only 1 month)
|
|
309
|
+
- **paidTotal Accumulation**: Now correctly calculates `paidTotal = abschlag × months` (was showing only 1 month)
|
|
310
|
+
- **annualFee as Fixed Value**: Jahresgebühr is now used as fixed yearly value (e.g., 60€ stays 60€)
|
|
311
|
+
- Previously incorrectly treated as monthly fee and multiplied by months
|
|
312
|
+
- User-entered value in config (e.g., 60€) is now used directly as intended
|
|
313
|
+
- **Balance Formula Corrected**: Fixed reversed formula `balance = totalYearly - paidTotal`
|
|
314
|
+
- Positive balance = Nachzahlung (you owe money)
|
|
315
|
+
- Negative balance = Guthaben (you get money back)
|
|
316
|
+
- **IMPROVED:** 📦 **Dev-Dependencies**: Updated from tilde (~) to caret (^) versioning for better security updates
|
|
317
|
+
- **CLEANUP:** 🧹 **Repository Compliance**: Removed unpublished versions from changelog (resolves ioBroker Bot Issue #1)
|
|
248
318
|
|
|
249
319
|
### 1.4.2 (2026-01-18)
|
|
250
320
|
|
|
@@ -268,44 +338,6 @@ Der Adapter setzt Zähler automatisch zurück:
|
|
|
268
338
|
- Prevents silent failures in StateManager
|
|
269
339
|
- **IMPROVED:** 🧪 **Code Quality** - All tests passing (31 unit + 57 package tests)
|
|
270
340
|
|
|
271
|
-
### 1.4.1 (2026-01-18)
|
|
272
|
-
|
|
273
|
-
- **FIX:** 🐛 **Multi-Meter Critical Bugs** - Comprehensive fixes for multi-meter functionality:
|
|
274
|
-
- Fixed `updateCosts()` to correctly delegate to multiMeterManager for all meters
|
|
275
|
-
- Fixed `closeBillingPeriod()` to archive totals instead of only main meter values
|
|
276
|
-
- Fixed `checkMonthlyReport()` to display totals in reports for multi-meter setups
|
|
277
|
-
- Fixed state type mismatch: `lastDayStart`, `lastMonthStart`, `lastYearStart` now use number (timestamp) instead of string
|
|
278
|
-
- **NEW:** 🎯 **Per-Meter Billing Closure** - Each meter can now be closed individually with its own `billing.closePeriod` button
|
|
279
|
-
- Main meter: `gas.billing.closePeriod`
|
|
280
|
-
- Additional meters: `gas.erdgeschoss.billing.closePeriod`, `gas.keller.billing.closePeriod`, etc.
|
|
281
|
-
- Each meter uses its own contract date for yearly resets
|
|
282
|
-
- **NEW:** 📅 **Individual Contract Anniversary Resets** - Each meter resets on its own contract date
|
|
283
|
-
- Primary: Manual `closePeriod` triggers yearly reset immediately
|
|
284
|
-
- Fallback: Automatic reset on contract anniversary if user forgets to close period
|
|
285
|
-
- Contract date is preserved when closing period early (no drift)
|
|
286
|
-
- **IMPROVED:** 💰 **Billing Period Closure** - No longer resets `basicCharge` and `annualFee` to zero
|
|
287
|
-
- These values now persist from config (user must update config if tariff changes)
|
|
288
|
-
- Helpful reminder message added after closing period
|
|
289
|
-
- **FIX:** 🤖 **ioBroker Bot Compliance** - All bot checker issues resolved:
|
|
290
|
-
- Removed non-existent version 1.3.4 from news
|
|
291
|
-
- Added complete translations for all news entries (9 languages)
|
|
292
|
-
- Removed `.npmignore` file (using `files` field in package.json)
|
|
293
|
-
- DevDependencies already use `~` syntax (compliant)
|
|
294
|
-
|
|
295
|
-
### 1.4.0 (2026-01-17)
|
|
296
|
-
|
|
297
|
-
- **NEW:** 🎉 **Multi-Meter Support** - Verwende mehrere Zähler pro Typ (z.B. Gas Hauptzähler + Werkstatt-Zähler)
|
|
298
|
-
- Beliebig viele zusätzliche Zähler mit eigenen Namen konfigurierbar
|
|
299
|
-
- Separate Kostenberechnung und Statistiken pro Zähler
|
|
300
|
-
- Automatische Totals-Berechnung über alle Zähler
|
|
301
|
-
- **NEW:** ✨ **Komma-Dezimaltrenner Support** - Admin UI akzeptiert jetzt sowohl Komma als auch Punkt (z.B. `12,50` oder `12.50`)
|
|
302
|
-
- **NEW:** 📊 **Pro-Meter Billing** - Jeder Zähler hat eigene `billing.daysRemaining` und `billing.periodEnd` Werte
|
|
303
|
-
- **NEW:** 🔧 **Config-Parser** - Automatische Konvertierung von String→Number mit Komma-Support
|
|
304
|
-
- **FIX:** 💰 **Balance-Berechnung korrigiert** - Nutzt jetzt begonnene Monate statt volle Monate (17 Tage = 1 Monat gezahlt)
|
|
305
|
-
- **FIX:** 🐛 **String-Type Fehler** behoben - Config-Werte werden korrekt als Numbers verarbeitet
|
|
306
|
-
- **IMPROVED:** 🔍 **Debug-Logging** - Hilfreiche Debug-Logs für Troubleshooting (nur in Debug-Modus sichtbar)
|
|
307
|
-
- **CLEANUP:** 🧹 Repository aufgeräumt - Alte Backup-Dateien und temporäre Scripts entfernt
|
|
308
|
-
|
|
309
341
|
---
|
|
310
342
|
|
|
311
343
|
## License
|
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",
|
|
@@ -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",
|
|
@@ -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",
|
|
@@ -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",
|
|
@@ -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,40 +1546,20 @@
|
|
|
1452
1546
|
"xs": 12,
|
|
1453
1547
|
"lg": 4,
|
|
1454
1548
|
"xl": 4
|
|
1455
|
-
}
|
|
1456
|
-
}
|
|
1457
|
-
},
|
|
1458
|
-
"tabImport": {
|
|
1459
|
-
"type": "panel",
|
|
1460
|
-
"label": "📥 Import",
|
|
1461
|
-
"items": {
|
|
1462
|
-
"_importInfo": {
|
|
1463
|
-
"type": "header",
|
|
1464
|
-
"text": "CSV-Daten importieren",
|
|
1465
|
-
"size": 3
|
|
1466
1549
|
},
|
|
1467
|
-
"
|
|
1468
|
-
"type": "
|
|
1469
|
-
"label": "
|
|
1470
|
-
"
|
|
1471
|
-
"
|
|
1472
|
-
"
|
|
1473
|
-
"
|
|
1474
|
-
"
|
|
1475
|
-
"sm": 12,
|
|
1476
|
-
"md": 6,
|
|
1477
|
-
"lg": 4
|
|
1478
|
-
},
|
|
1479
|
-
"_importDescription": {
|
|
1480
|
-
"type": "staticText",
|
|
1481
|
-
"text": "Klicke auf den Button oben, um die Import-Seite in einem neuen Tab zu öffnen. Dort kannst du CSV-Dateien mit historischen Zählerständen hochladen.",
|
|
1482
|
-
"newLine": true,
|
|
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",
|
|
1483
1558
|
"sm": 12,
|
|
1484
|
-
"
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
}
|
|
1559
|
+
"md": 8,
|
|
1560
|
+
"xs": 12,
|
|
1561
|
+
"lg": 8,
|
|
1562
|
+
"xl": 8
|
|
1489
1563
|
}
|
|
1490
1564
|
}
|
|
1491
1565
|
},
|
|
@@ -1495,12 +1569,12 @@
|
|
|
1495
1569
|
"items": {
|
|
1496
1570
|
"_infoHeader": {
|
|
1497
1571
|
"type": "header",
|
|
1498
|
-
"text": "
|
|
1572
|
+
"text": "Nebenkosten-Monitor",
|
|
1499
1573
|
"size": 3
|
|
1500
1574
|
},
|
|
1501
1575
|
"_infoVersion": {
|
|
1502
1576
|
"type": "staticText",
|
|
1503
|
-
"text": "**Version:** 1.4.
|
|
1577
|
+
"text": "**Version:** 1.4.6\n\n**Autor:** fischi87\n\n⚠️ **Breaking Change in v1.4.6:** State-Pfade haben sich geändert! Siehe unten.",
|
|
1504
1578
|
"sm": 12,
|
|
1505
1579
|
"xs": 12,
|
|
1506
1580
|
"md": 12,
|
|
@@ -1509,7 +1583,7 @@
|
|
|
1509
1583
|
},
|
|
1510
1584
|
"donation": {
|
|
1511
1585
|
"type": "staticText",
|
|
1512
|
-
"text": "☕ [PayPal Spenden](https://paypal.me/bigplay87) | 📁 [GitHub Repository](https://github.com/fischi87/ioBroker.
|
|
1586
|
+
"text": "☕ [PayPal Spenden](https://paypal.me/bigplay87) | 📁 [GitHub Repository](https://github.com/fischi87/ioBroker.nebenkosten-monitor)",
|
|
1513
1587
|
"xs": 12,
|
|
1514
1588
|
"sm": 12,
|
|
1515
1589
|
"md": 12,
|
|
@@ -1526,7 +1600,7 @@
|
|
|
1526
1600
|
},
|
|
1527
1601
|
"_features": {
|
|
1528
1602
|
"type": "staticText",
|
|
1529
|
-
"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",
|
|
1603
|
+
"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",
|
|
1530
1604
|
"sm": 12,
|
|
1531
1605
|
"xs": 12,
|
|
1532
1606
|
"md": 12,
|
|
@@ -1536,14 +1610,31 @@
|
|
|
1536
1610
|
"_divider2": {
|
|
1537
1611
|
"type": "divider"
|
|
1538
1612
|
},
|
|
1613
|
+
"_breakingHeader": {
|
|
1614
|
+
"type": "header",
|
|
1615
|
+
"text": "⚠️ Breaking Changes v1.4.6",
|
|
1616
|
+
"size": 4
|
|
1617
|
+
},
|
|
1618
|
+
"_breakingChanges": {
|
|
1619
|
+
"type": "staticText",
|
|
1620
|
+
"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.",
|
|
1621
|
+
"sm": 12,
|
|
1622
|
+
"xs": 12,
|
|
1623
|
+
"md": 12,
|
|
1624
|
+
"lg": 12,
|
|
1625
|
+
"xl": 12
|
|
1626
|
+
},
|
|
1627
|
+
"_divider2a": {
|
|
1628
|
+
"type": "divider"
|
|
1629
|
+
},
|
|
1539
1630
|
"_usageHeader": {
|
|
1540
1631
|
"type": "header",
|
|
1541
|
-
"text": "Benachrichtigungen
|
|
1632
|
+
"text": "📬 Benachrichtigungen",
|
|
1542
1633
|
"size": 4
|
|
1543
1634
|
},
|
|
1544
1635
|
"_usage": {
|
|
1545
1636
|
"type": "staticText",
|
|
1546
|
-
"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!",
|
|
1637
|
+
"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!",
|
|
1547
1638
|
"sm": 12,
|
|
1548
1639
|
"xs": 12,
|
|
1549
1640
|
"md": 12,
|
|
@@ -1560,7 +1651,7 @@
|
|
|
1560
1651
|
},
|
|
1561
1652
|
"_statesInfo": {
|
|
1562
1653
|
"type": "staticText",
|
|
1563
|
-
"text": "**📅 billing/** (Abrechnung)\n• **daysRemaining** - Tage bis zum
|
|
1654
|
+
"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",
|
|
1564
1655
|
"sm": 12,
|
|
1565
1656
|
"xs": 12,
|
|
1566
1657
|
"md": 12,
|
package/io-package.json
CHANGED
|
@@ -1,33 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "utility-monitor",
|
|
4
|
-
"version": "1.4.
|
|
4
|
+
"version": "1.4.6",
|
|
5
5
|
"news": {
|
|
6
|
-
"1.4.
|
|
7
|
-
"en": "
|
|
8
|
-
"de": "
|
|
9
|
-
"ru": "Исправление: lastYearStart теперь всегда пересчитывается из даты договора при запуске - исправляет неправильный подсчет месяцев в paidTotal",
|
|
10
|
-
"pt": "Correção: lastYearStart agora sempre recalculado da data do contrato na inicialização - corrige contagem incorreta de meses em paidTotal",
|
|
11
|
-
"nl": "Fix: lastYearStart nu altijd herberekend vanaf contractdatum bij start - lost onjuiste maandtelling in paidTotal op",
|
|
12
|
-
"fr": "Correction: lastYearStart maintenant toujours recalculé à partir de la date du contrat au démarrage - corrige le comptage incorrect des mois dans paidTotal",
|
|
13
|
-
"it": "Correzione: lastYearStart ora sempre ricalcolato dalla data contratto all'avvio - corregge conteggio errato mesi in paidTotal",
|
|
14
|
-
"es": "Corrección: lastYearStart ahora siempre recalculado desde fecha contrato al iniciar - corrige recuento incorrecto meses en paidTotal",
|
|
15
|
-
"pl": "Naprawa: lastYearStart teraz zawsze przeliczany z daty umowy przy starcie - naprawia błędne liczenie miesięcy w paidTotal",
|
|
16
|
-
"uk": "Виправлення: lastYearStart тепер завжди перераховується з дати договору при запуску - виправляє неправильний підрахунок місяців у paidTotal",
|
|
17
|
-
"zh-cn": "修复:lastYearStart现在在启动时始终从合同日期重新计算 - 修复paidTotal中的错误月数计数"
|
|
6
|
+
"1.4.6": {
|
|
7
|
+
"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.",
|
|
8
|
+
"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."
|
|
18
9
|
},
|
|
19
|
-
"1.4.
|
|
20
|
-
"en": "Fix: Critical
|
|
21
|
-
"de": "Fix:
|
|
22
|
-
"ru": "Исправление:
|
|
23
|
-
"pt": "Correção:
|
|
24
|
-
"nl": "Fix: Kritieke
|
|
25
|
-
"fr": "Correction:
|
|
26
|
-
"it": "Correzione: Bug
|
|
27
|
-
"es": "Corrección:
|
|
28
|
-
"pl": "Naprawa:
|
|
29
|
-
"uk": "Виправлення:
|
|
30
|
-
"zh-cn": "
|
|
10
|
+
"1.4.5": {
|
|
11
|
+
"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.",
|
|
12
|
+
"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.",
|
|
13
|
+
"ru": "Исправление: Критические ошибки расчета затрат multi-meter (синхронизация главного счетчика, накопление basicCharge/paidTotal, annualFee как фиксированное годовое значение). Исправление: Формула баланса исправлена. Исправление: Удалена дублирующая инициализация.",
|
|
14
|
+
"pt": "Correção: Bugs críticos de cálculo de custos multi-medidor (sincronização medidor principal, acumulação basicCharge/paidTotal, annualFee como valor anual fixo). Correção: Fórmula de saldo corrigida. Correção: Inicialização duplicada removida.",
|
|
15
|
+
"nl": "Fix: Kritieke multi-meter kostenberekeningsfouten (hoofdmeter sync, basicCharge/paidTotal accumulatie, annualFee als vaste jaarwaarde). Fix: Balans formule gecorrigeerd. Fix: Dubbele initialisatie verwijderd.",
|
|
16
|
+
"fr": "Correction: Bugs critiques calcul coûts multi-compteurs (sync compteur principal, accumulation basicCharge/paidTotal, annualFee comme valeur annuelle fixe). Correction: Formule de solde corrigée. Correction: Initialisation en double supprimée.",
|
|
17
|
+
"it": "Correzione: Bug critici calcolo costi multi-contatore (sync contatore principale, accumulazione basicCharge/paidTotal, annualFee come valore annuale fisso). Correzione: Formula bilancio corretta. Correzione: Inizializzazione duplicata rimossa.",
|
|
18
|
+
"es": "Corrección: Bugs críticos cálculo costos multi-medidor (sincronización medidor principal, acumulación basicCharge/paidTotal, annualFee como valor anual fijo). Corrección: Fórmula balance corregida. Corrección: Inicialización duplicada eliminada.",
|
|
19
|
+
"pl": "Naprawa: Krytyczne błędy obliczania kosztów multi-meter (synchronizacja głównego licznika, akumulacja basicCharge/paidTotal, annualFee jako stała wartość roczna). Naprawa: Formuła salda poprawiona. Naprawa: Usunięto podwójną inicjalizację.",
|
|
20
|
+
"uk": "Виправлення: Критичні помилки розрахунку витрат multi-meter (синхронізація головного лічильника, накопичення basicCharge/paidTotal, annualFee як фіксоване річне значення). Виправлення: Формула балансу виправлена. Виправлення: Видалено подвійну ініціалізацію.",
|
|
21
|
+
"zh-cn": "修复:关键多表成本计算错误(主表同步、basicCharge/paidTotal累积、annualFee作为固定年值)。修复:余额公式已更正。修复:删除重复初始化。"
|
|
31
22
|
},
|
|
32
23
|
"1.4.2": {
|
|
33
24
|
"en": "Fix: Critical multi-meter balance bug (hardcoded 12 months). Fix: TypeScript errors resolved. New: Enhanced input validation. New: Extended constants. New: Error handling wrapper.",
|
|
@@ -41,32 +32,6 @@
|
|
|
41
32
|
"pl": "Naprawa: Krytyczny błąd salda multi-meter (zakodowane 12 miesięcy). Naprawa: Naprawione błędy TypeScript. Nowe: Ulepszona walidacja danych. Nowe: Rozszerzone stałe. Nowe: Wrapper obsługi błędów.",
|
|
42
33
|
"uk": "Виправлення: Критична помилка балансу multi-meter (жорстко задані 12 місяців). Виправлення: Усунено помилки TypeScript. Нове: Покращена перевірка даних. Нове: Розширені константи. Нове: Обробник помилок.",
|
|
43
34
|
"zh-cn": "修复:关键多表余额错误(硬编码12个月)。修复:解决TypeScript错误。新增:增强输入验证。新增:扩展常量。新增:错误处理包装器。"
|
|
44
|
-
},
|
|
45
|
-
"1.4.1": {
|
|
46
|
-
"en": "Fix: Multi-meter bugs (cost calculation, billing period closure, monthly reports, yearly resets). Fix: Per-meter billing closure support. Fix: State type corrections (lastDayStart). Fix: ioBroker Bot compliance.",
|
|
47
|
-
"de": "Fix: Multi-Meter-Fehler (Kostenberechnung, Periodenabschluss, Monatsberichte, Jahres-Resets). Fix: Zähler-individuelle Periodenabschlüsse. Fix: State-Typ-Korrekturen (lastDayStart). Fix: ioBroker Bot-Compliance.",
|
|
48
|
-
"ru": "Исправление: Ошибки нескольких счетчиков (расчет затрат, закрытие периода, ежемесячные отчеты, годовые сбросы). Исправление: Поддержка закрытия периода для каждого счетчика. Исправление: Исправления типов состояний. Исправление: Соответствие ioBroker Bot.",
|
|
49
|
-
"pt": "Correção: Bugs multi-medidor (cálculo custos, fechamento período, relatórios mensais, resets anuais). Correção: Suporte fechamento período por medidor. Correção: Correções tipo estado. Correção: Conformidade Bot ioBroker.",
|
|
50
|
-
"nl": "Fix: Multi-meter bugs (kostenberekening, periode afsluiting, maandraporten, jaarlijkse resets). Fix: Per-meter periode afsluiting. Fix: State type correcties. Fix: ioBroker Bot compliance.",
|
|
51
|
-
"fr": "Correction: Bugs multi-compteurs (calcul coûts, clôture période, rapports mensuels, réinitialisations annuelles). Correction: Support clôture période par compteur. Correction: Corrections type d'état. Correction: Conformité Bot ioBroker.",
|
|
52
|
-
"it": "Correzione: Bug multi-contatore (calcolo costi, chiusura periodo, report mensili, reset annuali). Correzione: Supporto chiusura periodo per contatore. Correzione: Correzioni tipo stato. Correzione: Conformità Bot ioBroker.",
|
|
53
|
-
"es": "Corrección: Bugs multi-medidor (cálculo costos, cierre período, informes mensuales, reinicios anuales). Corrección: Soporte cierre período por medidor. Corrección: Correcciones tipo estado. Corrección: Cumplimiento Bot ioBroker.",
|
|
54
|
-
"pl": "Naprawa: Błędy wielu liczników (obliczanie kosztów, zamknięcie okresu, raporty miesięczne, resety roczne). Naprawa: Wsparcie zamknięcia okresu dla licznika. Naprawa: Poprawki typu stanu. Naprawa: Zgodność z Bot ioBroker.",
|
|
55
|
-
"uk": "Виправлення: Помилки кількох лічильників (розрахунок витрат, закриття періоду, місячні звіти, річні скидання). Виправлення: Підтримка закриття періоду для лічильника. Виправлення: Виправлення типу стану. Виправлення: Відповідність ioBroker Bot.",
|
|
56
|
-
"zh-cn": "修复:多表错误(成本计算、期间关闭、月度报告、年度重置)。修复:每表期间关闭支持。修复:状态类型更正。修复:ioBroker Bot合规性。"
|
|
57
|
-
},
|
|
58
|
-
"1.4.0": {
|
|
59
|
-
"en": "New: Multi-Meter Support! Add unlimited custom-named meters per utility type (gas, water, electricity). Automatic totals calculation. Fully backward compatible.",
|
|
60
|
-
"de": "Neu: Multi-Meter-Unterstützung! Unbegrenzt viele Zähler pro Medium (Gas, Wasser, Strom) mit benutzerdefinierten Namen. Automatische Gesamt-Summen. Vollständig rückwärtskompatibel.",
|
|
61
|
-
"ru": "Новое: Поддержка нескольких счетчиков! Добавьте неограниченное количество пользовательских счетчиков для каждого типа коммунальных услуг (газ, вода, электричество). Автоматический расчет итогов. Полная обратная совместимость.",
|
|
62
|
-
"pt": "Novo: Suporte Multi-Medidor! Adicione medidores personalizados ilimitados por tipo de utilidade (gás, água, eletricidade). Cálculo automático de totais. Totalmente compatível com versões anteriores.",
|
|
63
|
-
"nl": "Nieuw: Multi-Meter Ondersteuning! Voeg onbeperkt aangepaste meters toe per type (gas, water, elektriciteit). Automatische totaalberekening. Volledig achterwaarts compatibel.",
|
|
64
|
-
"fr": "Nouveau: Support Multi-Compteur! Ajoutez des compteurs personnalisés illimités par type de service (gaz, eau, électricité). Calcul automatique des totaux. Entièrement rétrocompatible.",
|
|
65
|
-
"it": "Nuovo: Supporto Multi-Contatore! Aggiungi contatori personalizzati illimitati per tipo di servizio (gas, acqua, elettricità). Calcolo automatico dei totali. Completamente retrocompatibile.",
|
|
66
|
-
"es": "Nuevo: Soporte Multi-Medidor! Agregue medidores personalizados ilimitados por tipo de servicio (gas, agua, electricidad). Cálculo automático de totales. Totalmente compatible con versiones anteriores.",
|
|
67
|
-
"pl": "Nowe: Obsługa Wielu Liczników! Dodaj nieograniczoną liczbę niestandardowych liczników dla każdego typu mediów (gaz, woda, prąd). Automatyczne obliczanie sum. Pełna kompatybilność wsteczna.",
|
|
68
|
-
"uk": "Нове: Підтримка кількох лічильників! Додайте необмежену кількість власних лічильників для кожного типу комунальних послуг (газ, вода, електрика). Автоматичний розрахунок підсумків. Повна зворотна сумісність.",
|
|
69
|
-
"zh-cn": "新增:多表支持!为每种公用事业类型(燃气、水、电)添加无限的自定义计量表。自动总计计算。完全向后兼容。"
|
|
70
35
|
}
|
|
71
36
|
},
|
|
72
37
|
"titleLang": {
|
|
@@ -130,6 +95,7 @@
|
|
|
130
95
|
},
|
|
131
96
|
"native": {
|
|
132
97
|
"gasAktiv": false,
|
|
98
|
+
"gasMainMeterName": "main",
|
|
133
99
|
"gasSensorDP": "",
|
|
134
100
|
"gasOffset": 0,
|
|
135
101
|
"gasInitialReading": 0,
|
|
@@ -139,6 +105,7 @@
|
|
|
139
105
|
"gasGrundgebuehr": 0,
|
|
140
106
|
"gasAbschlag": 0,
|
|
141
107
|
"wasserAktiv": false,
|
|
108
|
+
"wasserMainMeterName": "main",
|
|
142
109
|
"wasserSensorDP": "",
|
|
143
110
|
"wasserOffset": 0,
|
|
144
111
|
"wasserInitialReading": 0,
|
|
@@ -146,6 +113,7 @@
|
|
|
146
113
|
"wasserGrundgebuehr": 0,
|
|
147
114
|
"wasserAbschlag": 0,
|
|
148
115
|
"stromAktiv": false,
|
|
116
|
+
"stromMainMeterName": "main",
|
|
149
117
|
"stromSensorDP": "",
|
|
150
118
|
"stromOffset": 0,
|
|
151
119
|
"stromInitialReading": 0,
|
|
@@ -153,6 +121,7 @@
|
|
|
153
121
|
"stromGrundgebuehr": 0,
|
|
154
122
|
"stromAbschlag": 0,
|
|
155
123
|
"pvAktiv": false,
|
|
124
|
+
"pvMainMeterName": "main",
|
|
156
125
|
"pvSensorDP": "",
|
|
157
126
|
"pvOffset": 0,
|
|
158
127
|
"pvInitialReading": 0,
|
|
@@ -164,8 +133,13 @@
|
|
|
164
133
|
"notificationInstance": "",
|
|
165
134
|
"notificationDaysBefore": 30,
|
|
166
135
|
"notificationGasEnabled": false,
|
|
136
|
+
"notificationGasMeters": [],
|
|
167
137
|
"notificationWasserEnabled": false,
|
|
138
|
+
"notificationWasserMeters": [],
|
|
168
139
|
"notificationStromEnabled": false,
|
|
140
|
+
"notificationStromMeters": [],
|
|
141
|
+
"notificationPVEnabled": false,
|
|
142
|
+
"notificationPVMeters": [],
|
|
169
143
|
"notificationBillingEnabled": true,
|
|
170
144
|
"notificationBillingDays": 7,
|
|
171
145
|
"notificationChangeDays": 60
|