iobroker.utility-monitor 1.4.6 → 1.5.1
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 +110 -62
- 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 +90 -31
- package/io-package.json +15 -31
- package/lib/billingManager.js +382 -137
- package/lib/calculator.js +41 -146
- package/lib/consumptionManager.js +9 -252
- package/lib/importManager.js +300 -0
- package/lib/messagingHandler.js +4 -2
- package/lib/meter/MeterRegistry.js +110 -0
- package/lib/multiMeterManager.js +580 -173
- package/lib/stateManager.js +502 -31
- package/lib/utils/billingHelper.js +69 -0
- package/lib/utils/consumptionHelper.js +47 -0
- package/lib/utils/helpers.js +234 -0
- package/lib/utils/stateCache.js +147 -0
- package/lib/utils/typeMapper.js +19 -0
- package/main.js +67 -8
- package/package.json +10 -4
package/README.md
CHANGED
|
@@ -21,8 +21,10 @@ Monitor gas, water, and electricity consumption with automatic cost calculation,
|
|
|
21
21
|
- 🔄 **Flexible Sensoren** - Nutzt vorhandene Sensoren (Shelly, Tasmota, Homematic, etc.)
|
|
22
22
|
- ⚡ **HT/NT-Tarife** - Volle Unterstützung für Hoch- und Nebentarife (Tag/Nacht)
|
|
23
23
|
- 🔄 **Gas-Spezial** - Automatische Umrechnung von m³ in kWh
|
|
24
|
-
- 🕛 **Automatische Resets** - Täglich, monatlich und jährlich (Vertragsjubiläum)
|
|
24
|
+
- 🕛 **Automatische Resets** - Täglich, wöchentlich, monatlich und jährlich (Vertragsjubiläum)
|
|
25
25
|
- 🔔 **Intelligente Benachrichtigungen** - Getrennte Erinnerungen für Abrechnungsende (Zählerstand) und Vertragswechsel (Tarif-Check) mit einstellbaren Vorlaufzeiten
|
|
26
|
+
- � **Wöchentliche Auswertung** _(NEU in 1.5.0)_ - Verfolge deinen Verbrauch auch auf Wochenbasis
|
|
27
|
+
- �📥 **CSV Import** _(NEU in 1.5.0)_ - Importiere historische Zählerstände einfach per Drag-and-Drop
|
|
26
28
|
- ⌨️ **Komma-Support** - Admin UI akzeptiert `12,50` oder `12.50` für Dezimalzahlen
|
|
27
29
|
|
|
28
30
|
---
|
|
@@ -68,6 +70,7 @@ Gefällt dir dieser Adapter? Du kannst mich gerne mit einem Kaffee unterstützen
|
|
|
68
70
|
### Was hat sich geändert?
|
|
69
71
|
|
|
70
72
|
**Vorher (bis 1.4.5):**
|
|
73
|
+
|
|
71
74
|
```
|
|
72
75
|
gas.consumption.daily
|
|
73
76
|
gas.costs.monthly
|
|
@@ -75,6 +78,7 @@ wasser.consumption.daily
|
|
|
75
78
|
```
|
|
76
79
|
|
|
77
80
|
**Jetzt (ab 1.4.6):**
|
|
81
|
+
|
|
78
82
|
```
|
|
79
83
|
gas.main.consumption.daily ← Hauptzähler mit Namen "main"
|
|
80
84
|
gas.main.costs.monthly
|
|
@@ -86,13 +90,15 @@ wasser.main.consumption.daily
|
|
|
86
90
|
1. **Config öffnen**: Neue Felder "Name des Hauptzählers" für Gas/Wasser/Strom/PV
|
|
87
91
|
2. **Namen eingeben**: Standard ist "main" (empfohlen), oder eigener Name wie "wohnung", "haus"
|
|
88
92
|
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
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
```javascript
|
|
95
|
+
// Alt:
|
|
96
|
+
getState('utility-monitor.0.gas.consumption.daily');
|
|
97
|
+
|
|
98
|
+
// Neu:
|
|
99
|
+
getState('utility-monitor.0.gas.main.consumption.daily');
|
|
100
|
+
```
|
|
101
|
+
|
|
96
102
|
4. **Visualisierungen updaten**: VIS, Grafana, etc. auf neue Pfade anpassen
|
|
97
103
|
|
|
98
104
|
### 💡 Warum diese Änderung?
|
|
@@ -101,6 +107,25 @@ wasser.main.consumption.daily
|
|
|
101
107
|
- **Flexibilität**: Hauptzähler kann jetzt frei benannt werden (z.B. "erdgeschoss", "gesamt")
|
|
102
108
|
- **Klarheit**: Keine Special-Case Logik mehr im Code
|
|
103
109
|
- **Multi-Meter**: Bessere Unterstützung für mehrere Zähler pro Typ
|
|
110
|
+
- **CSV Import**: Einfaches Nachpflegen von historischen Daten via Drag-and-Drop im Admin-Interface
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 📥 CSV Import (v1.5.0)
|
|
115
|
+
|
|
116
|
+
Der neue Import-Tab ermöglicht es dir, historische Zählerstände bequem hochzuladen.
|
|
117
|
+
|
|
118
|
+
### Unterstützte Formate
|
|
119
|
+
|
|
120
|
+
- **Generic CSV**: Datum (DD.MM.YYYY), Zählerstand
|
|
121
|
+
- **EhB+ App**: Direkter Import aus der EhB+ App möglich
|
|
122
|
+
|
|
123
|
+
### So funktioniert's
|
|
124
|
+
|
|
125
|
+
1. Gehe zum Tab **Import**
|
|
126
|
+
2. Wähle den **Zählertyp** (Gas/Wasser/Strom) und den **Zähler** aus
|
|
127
|
+
3. Ziehe deine CSV-Datei in das Upload-Feld
|
|
128
|
+
4. Klicke auf **Daten importieren**
|
|
104
129
|
|
|
105
130
|
---
|
|
106
131
|
|
|
@@ -116,12 +141,16 @@ Für jede aktivierte Verbrauchsart (Gas/Wasser/Strom/PV) werden folgende Ordner
|
|
|
116
141
|
| --------------- | ----------------------------------------------------- | ---------------- |
|
|
117
142
|
| `daily` | Verbrauch **heute** (seit 00:00 Uhr) | 12,02 kWh |
|
|
118
143
|
| `dailyVolume` | Verbrauch heute in m³ | 1,092 m³ |
|
|
144
|
+
| `weekly` | Verbrauch **diese Woche** (seit Montag) | 84,12 kWh |
|
|
145
|
+
| `weeklyVolume` | Wöchentlicher Verbrauch in m³ | 7,65 m³ |
|
|
119
146
|
| `monthly` | Verbrauch **diesen Monat** (seit 1. des Monats) | 117,77 kWh |
|
|
120
147
|
| `monthlyVolume` | Monatlicher Verbrauch in m³ | 10,69 m³ |
|
|
121
148
|
| `yearly` | Verbrauch **seit Vertragsbeginn** (this billing year) | 730,01 kWh |
|
|
122
149
|
| `yearlyVolume` | Jahresverbrauch in m³ | 66,82 m³ |
|
|
123
150
|
| `dailyHT` | Tagesverbrauch im **Haupttarif** (HT) | 8,40 kWh |
|
|
124
151
|
| `dailyNT` | Tagesverbrauch im **Nebentarif** (NT) | 3,62 kWh |
|
|
152
|
+
| `weeklyHT` | Wochenverbrauch im HT | 58,15 kWh |
|
|
153
|
+
| `weeklyNT` | Wochenverbrauch im NT | 25,62 kWh |
|
|
125
154
|
| `monthlyHT` | Monatsverbrauch im HT | 82,15 kWh |
|
|
126
155
|
| `monthlyNT` | Monatsverbrauch im NT | 35,62 kWh |
|
|
127
156
|
| `yearlyHT` | Jahresverbrauch im HT | 511,00 kWh |
|
|
@@ -136,16 +165,16 @@ Für jede aktivierte Verbrauchsart (Gas/Wasser/Strom/PV) werden folgende Ordner
|
|
|
136
165
|
|
|
137
166
|
### 💰 **costs** (Kosten)
|
|
138
167
|
|
|
139
|
-
| Datenpunkt | Was ist das? | Berechnung
|
|
140
|
-
| ------------- | ------------------------------------------------------------- |
|
|
141
|
-
| `daily` | Kosten **heute** | daily × Arbeitspreis
|
|
142
|
-
| `monthly` | Kosten **diesen Monat** | monthly × Arbeitspreis
|
|
143
|
-
| `yearly` | **Verbrauchskosten** seit Vertragsbeginn | yearly × Arbeitspreis
|
|
144
|
-
| `totalYearly` | **Gesamtkosten Jahr** (Verbrauch + alle Fixkosten) | yearly-cost + basicCharge + annualFee
|
|
145
|
-
| `basicCharge` | **Grundgebühr akkumuliert** | Grundgebühr × Monate
|
|
146
|
-
| `annualFee` | **Jahresgebühr** (fester Wert pro Jahr) | Jahresgebühr (aus Config)
|
|
147
|
-
| `paidTotal` | **Bezahlt** via Abschlag | Abschlag × Monate
|
|
148
|
-
| `balance` | **🎯 WICHTIGSTER Wert!**<br>Nachzahlung (+) oder Guthaben (-) | totalYearly - paidTotal
|
|
168
|
+
| Datenpunkt | Was ist das? | Berechnung | Beispiel |
|
|
169
|
+
| ------------- | ------------------------------------------------------------- | ------------------------------------- | ------------------------------ |
|
|
170
|
+
| `daily` | Kosten **heute** | daily × Arbeitspreis | 2,27 € |
|
|
171
|
+
| `monthly` | Kosten **diesen Monat** | monthly × Arbeitspreis | 21,61 € |
|
|
172
|
+
| `yearly` | **Verbrauchskosten** seit Vertragsbeginn | yearly × Arbeitspreis | 137,61 € |
|
|
173
|
+
| `totalYearly` | **Gesamtkosten Jahr** (Verbrauch + alle Fixkosten) | yearly-cost + basicCharge + annualFee | 212,64 € |
|
|
174
|
+
| `basicCharge` | **Grundgebühr akkumuliert** | Grundgebühr × Monate | 15,03 € |
|
|
175
|
+
| `annualFee` | **Jahresgebühr** (fester Wert pro Jahr) | Jahresgebühr (aus Config) | 60,00 € |
|
|
176
|
+
| `paidTotal` | **Bezahlt** via Abschlag | Abschlag × Monate | 150,00 € |
|
|
177
|
+
| `balance` | **🎯 WICHTIGSTER Wert!**<br>Nachzahlung (+) oder Guthaben (-) | totalYearly - paidTotal | **+62,64 €**<br>→ Nachzahlung! |
|
|
149
178
|
|
|
150
179
|
#### 🔍 **balance** genauer erklärt:
|
|
151
180
|
|
|
@@ -183,13 +212,17 @@ Balance: +62,64 € → Nachzahlung
|
|
|
183
212
|
|
|
184
213
|
### 📈 **statistics** (Statistiken)
|
|
185
214
|
|
|
186
|
-
| Datenpunkt | Beschreibung
|
|
187
|
-
| ---------------- |
|
|
188
|
-
| `averageDaily` | Durchschnittlicher Tagesverbrauch
|
|
189
|
-
| `averageMonthly` | Durchschnittlicher Monatsverbrauch
|
|
190
|
-
| `
|
|
191
|
-
| `
|
|
192
|
-
| `
|
|
215
|
+
| Datenpunkt | Beschreibung |
|
|
216
|
+
| ---------------- | ---------------------------------------- |
|
|
217
|
+
| `averageDaily` | Durchschnittlicher Tagesverbrauch |
|
|
218
|
+
| `averageMonthly` | Durchschnittlicher Monatsverbrauch |
|
|
219
|
+
| `lastDay` | Verbrauch **gestern** (Vortag) |
|
|
220
|
+
| `lastWeek` | Verbrauch **letzte Woche** |
|
|
221
|
+
| `lastMonth` | Verbrauch **letzter Monat** |
|
|
222
|
+
| `lastDayStart` | Letzter Tages-Reset (23:59 Uhr) |
|
|
223
|
+
| `lastWeekStart` | Letzter Wochen-Reset (Sonntag 23:59) |
|
|
224
|
+
| `lastMonthStart` | Letzter Monats-Reset (letzter Tag 23:59) |
|
|
225
|
+
| `lastYearStart` | Vertragsbeginn / Jahresstart |
|
|
193
226
|
|
|
194
227
|
---
|
|
195
228
|
|
|
@@ -266,35 +299,53 @@ Der Adapter setzt Zähler automatisch zurück:
|
|
|
266
299
|
|
|
267
300
|
| Zeitpunkt | Was passiert | Beispiel |
|
|
268
301
|
| --------------------- | ------------- | ------------------- |
|
|
269
|
-
| **
|
|
270
|
-
| **
|
|
302
|
+
| **23:59 Uhr** täglich | `daily` → 0 | Neuer Tag beginnt |
|
|
303
|
+
| **Sonntag 23:59** | `weekly` → 0 | Neue Woche beginnt |
|
|
304
|
+
| **Monatsende 23:59** | `monthly` → 0 | Neuer Monat beginnt |
|
|
271
305
|
| **Vertragsjubiläum** | `yearly` → 0 | Abrechnungsjahr neu |
|
|
272
306
|
|
|
273
307
|
---
|
|
274
308
|
|
|
275
309
|
## Changelog
|
|
276
310
|
|
|
311
|
+
### 1.5.1 (2026-01-26)
|
|
312
|
+
|
|
313
|
+
- **FIX:** 🕛 **Reset-Timing** - Automatische Resets werden nun um 23:59 Uhr ausgeführt (statt 00:00 Uhr)
|
|
314
|
+
- **FIX:** Utopische Werte in Monthly/MonthlyVolume (DP Monthly)
|
|
315
|
+
|
|
316
|
+
### 1.5.0 (2026-01-25)
|
|
317
|
+
|
|
318
|
+
- **NEU:** 📥 **CSV Import** - Importiere historische Zählerstände einfach per Drag-and-Drop:
|
|
319
|
+
- Neuer "Import"-Tab in der Konfiguration
|
|
320
|
+
- Modulare Backend-Struktur für CSV-Parsing
|
|
321
|
+
- Unterstützung für generische und EhB+-Formate
|
|
322
|
+
- Moderne React-basierte UI-Komponente für eine flüssige Bedienung
|
|
323
|
+
- **NEU:** 📊 **Wöchentliches Tracking** - Verbrauchsüberwachung nun auch auf Wochenbasis möglich
|
|
324
|
+
- **FIX:** 🕛 **Reset-Timing** - Automatische Resets werden nun um 23:59 Uhr ausgeführt (statt 00:00 Uhr), um Datenverluste am Ende des Zeitraums zu vermeiden
|
|
325
|
+
- **ARCHITEKTUR:** 🏗️ **Verbesserte Backend-Modularisierung**:
|
|
326
|
+
- `ImportManager` eingeführt, um die Logik von `main.js` zu trennen
|
|
327
|
+
|
|
277
328
|
### 1.4.6 (2026-01-20)
|
|
278
329
|
|
|
279
|
-
- **⚠️ BREAKING CHANGE:** 🔄 **
|
|
330
|
+
- **⚠️ BREAKING CHANGE:** 🔄 **Hauptzähler-Benennung** - Hauptzähler benötigt jetzt einen Namen:
|
|
280
331
|
- **State-Pfade geändert**: `gas.*` → `gas.METER_NAME.*` (z.B. `gas.main.*`)
|
|
281
332
|
- **Neue Config-Felder**: "Name des Hauptzählers" für Gas/Wasser/Strom/PV
|
|
282
333
|
- **Default-Name**: "main" (wird automatisch verwendet wenn leer gelassen)
|
|
283
334
|
- **Konsistente Struktur**: Alle Zähler (Haupt + Zusätzlich) verwenden jetzt `type.meterName.*`
|
|
284
335
|
- **Flexibilität**: Hauptzähler kann jetzt frei benannt werden (z.B. "wohnung", "erdgeschoss", "gesamt")
|
|
285
|
-
- **Keine Special-Cases**:
|
|
286
|
-
- **
|
|
336
|
+
- **Keine Special-Cases**: Vereinfachte Logik im Code
|
|
337
|
+
- **NEU:** 🔔 **Smart Notifications** - Zählerauswahl für Benachrichtigungen:
|
|
287
338
|
- Wähle pro Utility-Typ aus, welche Zähler benachrichtigt werden sollen
|
|
288
339
|
- Multi-Select Dropdown zeigt alle konfigurierten Zähler
|
|
289
340
|
- Wenn leer: Alle Zähler werden benachrichtigt (Standard)
|
|
290
341
|
- Wenn ausgewählt: Nur gewählte Zähler erhalten Benachrichtigungen
|
|
291
342
|
- Gilt für Abrechnungsende, Vertragswechsel und monatliche Berichte
|
|
292
|
-
- **
|
|
343
|
+
- **VERBESSERT:** 🏗️ **Code-Architektur** - Entfernung von 19 Special-Case Checks in 7 Dateien:
|
|
293
344
|
- Vereinfachte basePath-Berechnungen in multiMeterManager, billingManager, stateManager
|
|
294
345
|
- Vereinheitlichter Config-Zugriff (alle Meter nutzen `meter.config.contractStart`)
|
|
295
346
|
- HT/NT-Logik basiert jetzt auf `config.htNtEnabled` statt Meter-Name
|
|
296
347
|
- Button-Trigger erkennt nur noch einheitliche Pfadstruktur
|
|
297
|
-
- Legacy-Code entfernt: updateBillingCountdown, updateCurrentPrice jetzt
|
|
348
|
+
- Legacy-Code entfernt: updateBillingCountdown, updateCurrentPrice jetzt pro Zähler
|
|
298
349
|
- **MIGRATION:** 📋 **Upgrade-Hinweise**:
|
|
299
350
|
- Bei Neuinstallation: Namen für Hauptzähler eingeben (oder "main" akzeptieren)
|
|
300
351
|
- Bei Upgrade: Adapter neu konfigurieren + Skripte/Visualisierungen anpassen
|
|
@@ -303,40 +354,37 @@ Der Adapter setzt Zähler automatisch zurück:
|
|
|
303
354
|
|
|
304
355
|
### 1.4.5 (2026-01-20)
|
|
305
356
|
|
|
306
|
-
- **FIX:** 🐛 **
|
|
307
|
-
- **
|
|
308
|
-
- **basicCharge
|
|
309
|
-
- **paidTotal
|
|
310
|
-
- **
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
- **Balance
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
- **
|
|
317
|
-
- **CLEANUP:** 🧹 **Repository Compliance**:
|
|
357
|
+
- **FIX:** 🐛 **Kritische Multi-Meter Kostenberechnungsfehler** - Umfassende Korrekturen für Multi-Meter Funktionalität:
|
|
358
|
+
- **Hauptzähler Sync-Problem**: Doppelte Initialisierung entfernt, die `lastSync` Updates verhinderte
|
|
359
|
+
- **basicCharge Akkumulation**: Berechnet jetzt korrekt `basicCharge = Grundgebühr × Monate` (vorher nur 1 Monat)
|
|
360
|
+
- **paidTotal Akkumulation**: Berechnet jetzt korrekt `paidTotal = Abschlag × Monate` (vorher nur 1 Monat)
|
|
361
|
+
- **Jahresgebühr als fester Wert**: Jahresgebühr wird jetzt als fester jährlicher Wert genutzt (z.B. 60€ bleibt 60€)
|
|
362
|
+
- Vorher fälschlicherweise als monatlich behandelt
|
|
363
|
+
- Eingegebener Wert wird nun direkt wie vorgesehen genutzt
|
|
364
|
+
- **Balance-Formel korrigiert**: Formel `balance = totalYearly - paidTotal` korrigiert
|
|
365
|
+
- Positive Balance = Nachzahlung (Schuldner)
|
|
366
|
+
- Negative Balance = Guthaben (Rückerstattung)
|
|
367
|
+
- **VERBESSERT:** 📦 **Entwickler-Abhängigkeiten**: Umstellung von Tilde (~) auf Caret (^) Versionierung für bessere Sicherheitsupdates
|
|
368
|
+
- **CLEANUP:** 🧹 **Repository Compliance**: Unveröffentlichte Versionen aus dem Changelog entfernt (löst ioBroker Bot Issue #1)
|
|
318
369
|
|
|
319
370
|
### 1.4.2 (2026-01-18)
|
|
320
371
|
|
|
321
|
-
- **FIX:** 🔧 **TypeScript
|
|
322
|
-
-
|
|
323
|
-
-
|
|
324
|
-
-
|
|
325
|
-
- **FIX:** 🐛 **
|
|
326
|
-
- `totalYearly`
|
|
327
|
-
-
|
|
328
|
-
|
|
329
|
-
-
|
|
330
|
-
- `
|
|
331
|
-
- `
|
|
332
|
-
|
|
333
|
-
-
|
|
334
|
-
|
|
335
|
-
-
|
|
336
|
-
- **
|
|
337
|
-
- `safeSetObjectNotExists()` catches and logs state creation failures
|
|
338
|
-
- Prevents silent failures in StateManager
|
|
339
|
-
- **IMPROVED:** 🧪 **Code Quality** - All tests passing (31 unit + 57 package tests)
|
|
372
|
+
- **FIX:** 🔧 **TypeScript Fehler behoben** - Alle Kompilierungsfehler behoben:
|
|
373
|
+
- `formatDateString()` fehlendes Argument im multiMeterManager korrigiert
|
|
374
|
+
- Datums-Arithmetik Typfehler behoben
|
|
375
|
+
- `@ts-ignore` Kommentare für absichtliche Fehlertests hinzugefügt
|
|
376
|
+
- **FIX:** 🐛 **Kritischer Multi-Meter Balance-Bug** - Korrektur fehlerhafter Bilanzberechnung:
|
|
377
|
+
- `totalYearly` nutzte hartcodierte 12 Monate für die Grundgebühr statt der tatsächlichen Monate seit Vertragsstart
|
|
378
|
+
- Berechnet nun korrekt `basicChargeAccumulated = Grundgebühr × MonateSeitJahresstart`
|
|
379
|
+
- **NEU:** ✅ **Erweiterte Eingabevalidierung** - Robuste Validierung von Konfigurationswerten:
|
|
380
|
+
- `isValidSensorDP()` - Validiert Sensor-Datenpunkt-IDs
|
|
381
|
+
- `parseConfigDate()` - Validiert deutsche und ISO Datumsformate
|
|
382
|
+
- `parseConfigPrice()` - Stellt sicher, dass Preise nicht negativ sind
|
|
383
|
+
- **NEU:** 📋 **Zentrale Konstanten** - Zentralisierte Konstantendefinitionen:
|
|
384
|
+
- Rundungspräzision, Zeitkonstanten, Validierungsregeln
|
|
385
|
+
- **NEU:** 🛡️ **Fehlerbehandlung** - Sicherer Wrapper für State-Erstellung:
|
|
386
|
+
- `safeSetObjectNotExists()` fängt Fehler bei der State-Erstellung ab
|
|
387
|
+
- **VERBESSERT:** 🧪 **Code-Qualität** - Alle Tests erfolgreich (31 Unit + 57 Paket-Tests)
|
|
340
388
|
|
|
341
389
|
---
|
|
342
390
|
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_UtilityMonitor__loadShare__react__loadShare__-Da99Mak4.js": {
|
|
3
|
+
"file": "assets/UtilityMonitor__loadShare__react__loadShare__-Da99Mak4.js",
|
|
4
|
+
"name": "UtilityMonitor__loadShare__react__loadShare__",
|
|
5
|
+
"imports": [
|
|
6
|
+
"__commonjsHelpers-Dj2_voLF.js",
|
|
7
|
+
"_UtilityMonitor__mf_v__runtimeInit__mf_v__-BmC4OGk6.js"
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
"_UtilityMonitor__mf_v__runtimeInit__mf_v__-BmC4OGk6.js": {
|
|
11
|
+
"file": "assets/UtilityMonitor__mf_v__runtimeInit__mf_v__-BmC4OGk6.js",
|
|
12
|
+
"name": "UtilityMonitor__mf_v__runtimeInit__mf_v__"
|
|
13
|
+
},
|
|
14
|
+
"__commonjsHelpers-Dj2_voLF.js": {
|
|
15
|
+
"file": "assets/_commonjsHelpers-Dj2_voLF.js",
|
|
16
|
+
"name": "_commonjsHelpers"
|
|
17
|
+
},
|
|
18
|
+
"_index-B3WVNJTz.js": {
|
|
19
|
+
"file": "assets/index-B3WVNJTz.js",
|
|
20
|
+
"name": "index",
|
|
21
|
+
"isDynamicEntry": true,
|
|
22
|
+
"imports": [
|
|
23
|
+
"__commonjsHelpers-Dj2_voLF.js",
|
|
24
|
+
"_UtilityMonitor__loadShare__react__loadShare__-Da99Mak4.js"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"_index-VBwl8x_k.js": {
|
|
28
|
+
"file": "assets/index-VBwl8x_k.js",
|
|
29
|
+
"name": "index",
|
|
30
|
+
"isDynamicEntry": true,
|
|
31
|
+
"imports": [
|
|
32
|
+
"__commonjsHelpers-Dj2_voLF.js"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"_preload-helper-BelkbqnE.js": {
|
|
36
|
+
"file": "assets/preload-helper-BelkbqnE.js",
|
|
37
|
+
"name": "preload-helper"
|
|
38
|
+
},
|
|
39
|
+
"node_modules/__mf__virtual/UtilityMonitor__H_A_I__hostAutoInit__H_A_I__.js": {
|
|
40
|
+
"file": "assets/hostInit-DEXfeB0W.js",
|
|
41
|
+
"name": "hostInit",
|
|
42
|
+
"src": "node_modules/__mf__virtual/UtilityMonitor__H_A_I__hostAutoInit__H_A_I__.js",
|
|
43
|
+
"isEntry": true,
|
|
44
|
+
"imports": [
|
|
45
|
+
"_preload-helper-BelkbqnE.js"
|
|
46
|
+
],
|
|
47
|
+
"dynamicImports": [
|
|
48
|
+
"virtual:mf-REMOTE_ENTRY_ID"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"src/Components.tsx": {
|
|
52
|
+
"file": "assets/Components-i0AZ59nl.js",
|
|
53
|
+
"name": "Components",
|
|
54
|
+
"src": "src/Components.tsx",
|
|
55
|
+
"isDynamicEntry": true,
|
|
56
|
+
"imports": [
|
|
57
|
+
"_UtilityMonitor__loadShare__react__loadShare__-Da99Mak4.js",
|
|
58
|
+
"__commonjsHelpers-Dj2_voLF.js",
|
|
59
|
+
"_UtilityMonitor__mf_v__runtimeInit__mf_v__-BmC4OGk6.js"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
"virtual:mf-REMOTE_ENTRY_ID": {
|
|
63
|
+
"file": "CSVImporter_v15_11.js",
|
|
64
|
+
"name": "CSVImporter_v15_11",
|
|
65
|
+
"src": "virtual:mf-REMOTE_ENTRY_ID",
|
|
66
|
+
"isEntry": true,
|
|
67
|
+
"isDynamicEntry": true,
|
|
68
|
+
"imports": [
|
|
69
|
+
"virtual:mf-exposes",
|
|
70
|
+
"_preload-helper-BelkbqnE.js",
|
|
71
|
+
"_UtilityMonitor__mf_v__runtimeInit__mf_v__-BmC4OGk6.js"
|
|
72
|
+
],
|
|
73
|
+
"dynamicImports": [
|
|
74
|
+
"_index-VBwl8x_k.js",
|
|
75
|
+
"_index-B3WVNJTz.js"
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
"virtual:mf-exposes": {
|
|
79
|
+
"file": "assets/virtualExposes-CqCLUNLT.js",
|
|
80
|
+
"name": "virtualExposes",
|
|
81
|
+
"src": "virtual:mf-exposes",
|
|
82
|
+
"isEntry": true,
|
|
83
|
+
"imports": [
|
|
84
|
+
"_preload-helper-BelkbqnE.js"
|
|
85
|
+
],
|
|
86
|
+
"dynamicImports": [
|
|
87
|
+
"src/Components.tsx"
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
interface CSVImporterProps {
|
|
3
|
+
socket: any;
|
|
4
|
+
data?: any;
|
|
5
|
+
onError?: (error: string) => void;
|
|
6
|
+
onChange?: (data: any) => void;
|
|
7
|
+
instance: number;
|
|
8
|
+
adapterName: string;
|
|
9
|
+
}
|
|
10
|
+
declare const CSVImporter: React.FC<CSVImporterProps>;
|
|
11
|
+
export default CSVImporter;
|
|
Binary file
|