iobroker.miele-local 0.3.44 → 0.3.45

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 CHANGED
@@ -88,7 +88,7 @@ carries the plain-text list, so in most places the text state is no longer neede
88
88
  ### `eco` — energy and water
89
89
 
90
90
  `eco.energy` (kWh), `eco.energyWh` (Wh), `eco.water` (l) where the appliance provides them, plus
91
- `eco.quelle` naming which source a value came from. Read over DOP2; so far washing machines
91
+ `eco.source` naming which source a value came from. Read over DOP2; so far washing machines
92
92
  deliver it. **The value the appliance reports is its own expectation, not a measurement.** For a
93
93
  real figure, enter a metering plug's counter state on the **Polling & values** tab — the adapter
94
94
  then records what each programme actually drew.
@@ -171,7 +171,7 @@ Everything in this section is **off by default** and is not needed for day-to-da
171
171
  exists for one question: which raw field of *your* appliance holds energy and water. The field
172
172
  numbers differ per series, and the defaults in the adapter come from a WCR860.
173
173
 
174
- **Raw fields.** Writes all fields of the eco leaf to `eco.felderJson` instead of only the two
174
+ **Raw fields.** Writes all fields of the eco leaf to `eco.fieldsJson` instead of only the two
175
175
  evaluated ones.
176
176
 
177
177
  **Data collection.** Records one dataset per completed programme — model, programme, all raw
@@ -190,10 +190,10 @@ one you are looking for.
190
190
  **CSV export.** The button on the Diagnostics tab writes two tables into the instance's file area
191
191
  and opens the first:
192
192
 
193
- - `sammlung-<date>.csv` — one row per programme: times, programme, the reference values, every raw
193
+ - `collection-<date>.csv` — one row per programme: times, programme, the reference values, every raw
194
194
  field in its own column, and for each leaf field the reading at start, at end and the difference
195
195
  between them. For lifetime counters only that difference means anything.
196
- - `befund-<date>.csv` — one row per field: how well it matches the reference, the best divisor,
196
+ - `finding-<date>.csv` — one row per field: how well it matches the reference, the best divisor,
197
197
  the average and the largest deviation. This is the answer the collection exists for.
198
198
 
199
199
  Semicolon separated, decimal comma, BOM — a double click opens them in a spreadsheet.
@@ -237,6 +237,15 @@ engineering work of the projects `MieleRESTServer` (akappner),
237
237
  ### **WORK IN PROGRESS**
238
238
  -->
239
239
 
240
+ ### 0.3.45
241
+ - (SmarthomeElektroniker) The last German state ID is gone: `eco.quelle` is now `eco.source`, its value is always English. Existing installations are migrated on start
242
+ - (SmarthomeElektroniker) `statusText`, `programText`, `programPhaseText`, `programTypeText` and `dryingStepText` follow the "German names" option - with the option off they are English (until now they were always German)
243
+ - (SmarthomeElektroniker) Remaining German log and error messages translated; CSV export files are named `collection-<date>.csv` and `finding-<date>.csv`
244
+ - (SmarthomeElektroniker) All JSDoc comments complete (no lint warnings left); `@iobroker/testing` 6.3.0
245
+ - (SmarthomeElektroniker) `eco.felderJson` is now `eco.fieldsJson` (migrated on start)
246
+ - (SmarthomeElektroniker) Settings use English keys: `sammlerAktiv`/`sammlerCloud`/`sammlerCloudInstanz` became `collectorActive`/`collectorCloud`/`collectorCloudInstance`, `leafDatenpunkte` became `leafStates`, the energy meter table `zaehler` became `energyMeters`. Existing settings are carried over once on start (review 2026-10-03)
247
+ - (SmarthomeElektroniker) Background loops (eco, operating hours, seconds, discovery, push renewal, leaf trend) schedule their next run only after the previous one finished - no overlapping runs when an appliance answers slowly
248
+
240
249
  ### 0.3.44
241
250
  - (SmarthomeElektroniker) History objects are only rewritten when they actually changed - this prevents an empty (null) point in the history adapter after every adapter restart
242
251
 
@@ -337,7 +346,7 @@ engineering work of the projects `MieleRESTServer` (akappner),
337
346
  - **Water: the appliance's own EcoFeedback comes first.** Where DOP2 2/1585 exists, its value for
338
347
  the last programme is used; only where it does not does the adapter fall back to counting flow
339
348
  meter impulses (field 21 / 200, verified against the house water meter over 24 programmes). The
340
- new datapoint `eco.quelle` says which of the two a value came from.
349
+ new datapoint `eco.source` (called `eco.quelle` before 0.3.45) says which of the two a value came from.
341
350
  - **The collector records every leaf.** At the end of a programme the adapter reads each answering
342
351
  leaf once, gently (five seconds between requests, in the background), and appends the final state
343
352
  to the record. This is what makes the collection useful for appliances that do not answer 2/6195
package/README_de.md CHANGED
@@ -91,7 +91,7 @@ wird damit an den meisten Stellen entbehrlich.
91
91
  ### `eco` – Energie und Wasser
92
92
 
93
93
  `eco.energy` (kWh), `eco.energyWh` (Wh), `eco.water` (l), soweit das Gerät sie liefert, dazu
94
- `eco.quelle` mit der Herkunft des Werts. Gelesen wird über DOP2; bislang liefern das
94
+ `eco.source` mit der Herkunft des Werts. Gelesen wird über DOP2; bislang liefern das
95
95
  Waschmaschinen. **Der vom Gerät gemeldete Wert ist seine eigene Erwartung, keine Messung.** Wer
96
96
  eine echte Zahl will, trägt im Reiter **Abfrage & Werte** den Zähler-Datenpunkt einer
97
97
  Messsteckdose ein – dann schreibt der Adapter mit, was ein Programm wirklich gezogen hat.
@@ -176,7 +176,7 @@ Alles in diesem Abschnitt ist **ab Werk aus** und wird im täglichen Betrieb nic
176
176
  dient einer einzigen Frage: Welches Rohfeld *dieses* Geräts trägt Energie und Wasser? Die
177
177
  Feldnummern sind je Baureihe verschieden, und die Vorgaben im Adapter stammen von einer WCR860.
178
178
 
179
- **Rohfelder.** Schreibt alle Felder des Eco-Leaf nach `eco.felderJson` statt nur der zwei
179
+ **Rohfelder.** Schreibt alle Felder des Eco-Leaf nach `eco.fieldsJson` statt nur der zwei
180
180
  ausgewerteten.
181
181
 
182
182
  **Datensammlung.** Legt je abgeschlossenem Programm einen Datensatz an – Modell, Programm, alle
@@ -195,10 +195,10 @@ engmaschig mitschreiben – das Feld, dessen Wert mit dem Verbrauch mitwächst,
195
195
  **CSV-Ausdruck.** Der Knopf im Diagnose-Reiter legt zwei Tabellen im Dateibereich der Instanz ab
196
196
  und öffnet die erste:
197
197
 
198
- - `sammlung-<Datum>.csv` – eine Zeile je Programm: Zeiten, Programm, die Vergleichswerte, jedes
198
+ - `collection-<Datum>.csv` – eine Zeile je Programm: Zeiten, Programm, die Vergleichswerte, jedes
199
199
  Rohfeld in einer eigenen Spalte, und je Leaf-Feld der Stand bei Beginn, bei Ende und die
200
200
  Differenz dazwischen. Bei Lebenszählern sagt allein die Differenz etwas aus.
201
- - `befund-<Datum>.csv` – eine Zeile je Feld: Übereinstimmung mit dem Vergleichswert, bester
201
+ - `finding-<Datum>.csv` – eine Zeile je Feld: Übereinstimmung mit dem Vergleichswert, bester
202
202
  Teiler, mittlere und größte Abweichung. Das ist die Antwort, wegen der die Sammlung läuft.
203
203
 
204
204
  Semikolon als Trennzeichen, Komma als Dezimalzeichen, BOM – ein Doppelklick öffnet sie in der
@@ -245,6 +245,15 @@ Reverse-Engineering-Arbeit der Projekte `MieleRESTServer` (akappner),
245
245
  ### **WORK IN PROGRESS**
246
246
  -->
247
247
 
248
+ ### 0.3.45
249
+ - Die letzte deutsche Datenpunkt-ID ist weg: `eco.quelle` heißt jetzt `eco.source`, der Wert ist immer englisch. Vorhandene Installationen ziehen beim Start um.
250
+ - `statusText`, `programText`, `programPhaseText`, `programTypeText` und `dryingStepText` folgen der Option „Deutsche Namen“ - ist sie aus, sind die Texte englisch (bisher immer deutsch).
251
+ - Restliche deutsche Log- und Fehlermeldungen übersetzt; die CSV-Dateien heißen `collection-<Datum>.csv` und `finding-<Datum>.csv`.
252
+ - Alle JSDoc-Kommentare vollständig (keine Lint-Warnungen mehr); `@iobroker/testing` 6.3.0.
253
+ - `eco.felderJson` heißt jetzt `eco.fieldsJson` (Umzug beim Start).
254
+ - Einstellungen tragen englische Namen: aus `sammlerAktiv`/`sammlerCloud`/`sammlerCloudInstanz` wurden `collectorActive`/`collectorCloud`/`collectorCloudInstance`, aus `leafDatenpunkte` wurde `leafStates`, aus der Zählertabelle `zaehler` wurde `energyMeters`. Vorhandene Einstellungen werden beim Start einmalig übernommen (Review 03.10.2026).
255
+ - Hintergrundschleifen (Eco, Betriebsstunden, Sekunden, Suche, Push-Erneuerung, Leaf-Verlauf) planen den nächsten Lauf erst nach dem Ende des vorigen – keine überlappenden Läufe mehr, wenn ein Gerät langsam antwortet.
256
+
248
257
  ### 0.3.38
249
258
  - **Die Objekt-IDs sind jetzt durchgängig englisch.** Der Diagnosekanal hieß `sammlung` und
250
259
  trug ausschließlich deutsche Datenpunktnamen (`befund`, `fortschritt`, `datenJson`,
@@ -321,7 +330,7 @@ Reverse-Engineering-Arbeit der Projekte `MieleRESTServer` (akappner),
321
330
  - **Wasser: das EcoFeedback des Geräts hat Vorrang.** Wo es DOP2 2/1585 gibt, gilt dessen Wert für
322
331
  das letzte Programm; nur wo es ihn nicht gibt, zählt der Adapter weiter die Impulse des
323
332
  Durchflusszählers (Feld 21 / 200, über 24 Programme gegen den Hauswasserzähler belegt). Der neue
324
- Datenpunkt `eco.quelle` sagt, aus welcher der beiden Quellen ein Wert stammt.
333
+ Datenpunkt `eco.source` (bis 0.3.44 `eco.quelle`) sagt, aus welcher der beiden Quellen ein Wert stammt.
325
334
  - **Der Datensammler schreibt alle Leafs mit.** Am Programmende liest der Adapter jedes
326
335
  antwortende Leaf einmal, schonend (fünf Sekunden zwischen zwei Anfragen, im Hintergrund) und
327
336
  hängt den Schlussstand an den Datensatz. Erst das macht die Sammlung für Geräte brauchbar, die
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "Teilungsfaktor Wasserfeld",
103
103
  "Water field index": "Feldindex Wasser",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "Ohne Cloud: Nach jedem Programm Energie und Wasser aus der Miele-App in die Punkte \"collection.inputEnergy\" und \"collection.inputWater\" eintragen - sie gehören dann zum zuletzt gesammelten Datensatz. Wie viele noch fehlen, steht in \"collection.progress\".",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Schreibt alle Felder des Eco-Leaf nach eco.felderJson statt nur der zwei ausgewerteten. Hilft, wenn Energie oder Wasser bei Ihrem Modell falsch ankommen.",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Schreibt alle Felder des Eco-Leaf nach eco.fieldsJson statt nur der zwei ausgewerteten. Hilft, wenn Energie oder Wasser bei Ihrem Modell falsch ankommen.",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "Legt zwei Tabellen ab und öffnet die erste: eine Zeile je Programm mit allen Rohfeldern, dazu eine Auswertung mit einer Zeile je Feld. Achtung beim Weitergeben – die Tabelle enthält die Zeitpunkte der Programme.",
107
107
  "miele:// redirect URL": "miele://-Redirect-URL"
108
108
  }
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "Water field divisor",
103
103
  "Water field index": "Water field index",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.",
107
107
  "miele:// redirect URL": "miele:// redirect URL"
108
108
  }
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "Divisor del campo de agua",
103
103
  "Water field index": "Índice del campo de agua",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "Sin nube: después de cada programa, introduce la energía y el agua de la app de Miele en \"collection.inputEnergy\" y \"collection.inputWater\"; se asignan al último registro. \"collection.progress\" muestra lo que aún falta.",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Escribe todos los campos del leaf Eco en eco.felderJson en vez de solo los dos evaluados. Ayuda si la energía o el agua llegan mal en su modelo.",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Escribe todos los campos del leaf Eco en eco.fieldsJson en vez de solo los dos evaluados. Ayuda si la energía o el agua llegan mal en su modelo.",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "Genera dos tablas y abre la primera: una fila por programa con todos los campos en bruto, más un análisis con una fila por campo. Cuidado al compartir: la tabla contiene las horas de los programas.",
107
107
  "miele:// redirect URL": "URL de redirección miele://"
108
108
  }
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "Diviseur du champ d'eau",
103
103
  "Water field index": "Index du champ eau",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "Sans cloud : après chaque programme, saisissez l'énergie et l'eau de l'application Miele dans « collection.inputEnergy » et « collection.inputWater » ; elles sont rattachées au dernier jeu de données. « collection.progress » indique ce qui manque encore.",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Écrit tous les champs du leaf Eco dans eco.felderJson au lieu des deux seuls évalués. Utile si l'énergie ou l'eau arrivent fausses sur votre modèle.",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Écrit tous les champs du leaf Eco dans eco.fieldsJson au lieu des deux seuls évalués. Utile si l'énergie ou l'eau arrivent fausses sur votre modèle.",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "Dépose deux tableaux et ouvre le premier : une ligne par programme avec tous les champs bruts, plus une analyse avec une ligne par champ. Attention en cas de partage – le tableau contient les horodatages des programmes.",
107
107
  "miele:// redirect URL": "URL de redirection miele://"
108
108
  }
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "Divisore del campo acqua",
103
103
  "Water field index": "Indice del campo acqua",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "Senza cloud: dopo ogni programma inserire energia e acqua dall'app Miele in \"collection.inputEnergy\" e \"collection.inputWater\"; vengono associate all'ultimo set di dati. \"collection.progress\" mostra cosa manca ancora.",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Scrive tutti i campi del leaf Eco in eco.felderJson invece dei soli due valutati. Aiuta se energia o acqua arrivano errate sul suo modello.",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Scrive tutti i campi del leaf Eco in eco.fieldsJson invece dei soli due valutati. Aiuta se energia o acqua arrivano errate sul suo modello.",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "Crea due tabelle e apre la prima: una riga per programma con tutti i campi grezzi, più un'analisi con una riga per campo. Attenzione nel condividere: la tabella contiene gli orari dei programmi.",
107
107
  "miele:// redirect URL": "URL di reindirizzamento miele://"
108
108
  }
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "Deelfactor waterveld",
103
103
  "Water field index": "Veldindex water",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "Zonder cloud: voer na elk programma energie en water uit de Miele-app in bij \"collection.inputEnergy\" en \"collection.inputWater\" - ze horen dan bij de laatst verzamelde dataset. \"collection.progress\" toont wat nog ontbreekt.",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Schrijft alle velden van het Eco-leaf naar eco.felderJson in plaats van alleen de twee geëvalueerde. Helpt als energie of water bij uw model verkeerd binnenkomen.",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Schrijft alle velden van het Eco-leaf naar eco.fieldsJson in plaats van alleen de twee geëvalueerde. Helpt als energie of water bij uw model verkeerd binnenkomen.",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "Legt twee tabellen aan en opent de eerste: één regel per programma met alle ruwe velden, plus een analyse met één regel per veld. Let op bij delen – de tabel bevat de tijdstippen van de programma's.",
107
107
  "miele:// redirect URL": "miele://-omleidings-URL"
108
108
  }
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "Dzielnik pola wody",
103
103
  "Water field index": "Indeks pola wody",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "Bez chmury: po każdym programie wpisz energię i wodę z aplikacji Miele do \"collection.inputEnergy\" i \"collection.inputWater\" - zostaną przypisane do ostatniego zestawu danych. \"collection.progress\" pokazuje, czego jeszcze brakuje.",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Zapisuje wszystkie pola leafa Eco do eco.felderJson zamiast tylko dwóch ocenianych. Pomaga, gdy energia lub woda docierają błędnie w Twoim modelu.",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Zapisuje wszystkie pola leafa Eco do eco.fieldsJson zamiast tylko dwóch ocenianych. Pomaga, gdy energia lub woda docierają błędnie w Twoim modelu.",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "Tworzy dwie tabele i otwiera pierwszą: jeden wiersz na program ze wszystkimi surowymi polami oraz analizę z jednym wierszem na pole. Uwaga przy udostępnianiu – tabela zawiera godziny programów.",
107
107
  "miele:// redirect URL": "URL przekierowania miele://"
108
108
  }
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "Divisor do campo de água",
103
103
  "Water field index": "Índice do campo de água",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "Sem nuvem: após cada programa, introduza a energia e a água da app Miele em \"collection.inputEnergy\" e \"collection.inputWater\"; ficam associadas ao último registo. \"collection.progress\" mostra o que ainda falta.",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Escreve todos os campos do leaf Eco em eco.felderJson em vez de apenas os dois avaliados. Ajuda se a energia ou a água chegarem erradas no seu modelo.",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Escreve todos os campos do leaf Eco em eco.fieldsJson em vez de apenas os dois avaliados. Ajuda se a energia ou a água chegarem erradas no seu modelo.",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "Cria duas tabelas e abre a primeira: uma linha por programa com todos os campos brutos, mais uma análise com uma linha por campo. Cuidado ao partilhar – a tabela contém as horas dos programas.",
107
107
  "miele:// redirect URL": "URL de redirecionamento miele://"
108
108
  }
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "Делитель поля воды",
103
103
  "Water field index": "Индекс поля воды",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "Без облака: после каждой программы вводите энергию и воду из приложения Miele в «collection.inputEnergy» и «collection.inputWater» — они относятся к последнему набору данных. «collection.progress» показывает, чего ещё не хватает.",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Записывает все поля Eco-leaf в eco.felderJson, а не только два обрабатываемых. Помогает, если энергия или вода на вашей модели приходят неверными.",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Записывает все поля Eco-leaf в eco.fieldsJson, а не только два обрабатываемых. Помогает, если энергия или вода на вашей модели приходят неверными.",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "Создаёт две таблицы и открывает первую: по строке на программу со всеми сырыми полями, плюс разбор по строке на поле. Осторожно при передаче — таблица содержит время выполнения программ.",
107
107
  "miele:// redirect URL": "URL перенаправления miele://"
108
108
  }
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "Дільник поля води",
103
103
  "Water field index": "Індекс поля води",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "Без хмари: після кожної програми вводьте енергію та воду з застосунку Miele у «collection.inputEnergy» і «collection.inputWater» — вони належать до останнього набору даних. «collection.progress» показує, чого ще бракує.",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Записує всі поля Eco-leaf у eco.felderJson, а не лише два оброблювані. Допомагає, якщо енергія чи вода на вашій моделі надходять хибними.",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "Записує всі поля Eco-leaf у eco.fieldsJson, а не лише два оброблювані. Допомагає, якщо енергія чи вода на вашій моделі надходять хибними.",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "Створює дві таблиці й відкриває першу: по рядку на програму з усіма сирими полями, а також розбір по рядку на поле. Обережно з передаванням — таблиця містить час виконання програм.",
107
107
  "miele:// redirect URL": "URL перенаправлення miele://"
108
108
  }
@@ -102,7 +102,7 @@
102
102
  "Water field divisor": "水量字段除数",
103
103
  "Water field index": "用水字段索引",
104
104
  "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing.": "不使用云端时:每次程序结束后,将 Miele 应用中的能耗和用水量填入 \"collection.inputEnergy\" 和 \"collection.inputWater\",它们会归入最近一次收集的数据集。\"collection.progress\" 显示还缺少什么。",
105
- "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "将 Eco leaf 的全部字段写入 eco.felderJson,而不仅是已解析的两个。当您的机型能耗或水量数值有误时有帮助。",
105
+ "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model.": "将 Eco leaf 的全部字段写入 eco.fieldsJson,而不仅是已解析的两个。当您的机型能耗或水量数值有误时有帮助。",
106
106
  "Writes two tables and opens the first: one row per programme with all raw fields, plus an analysis with one row per field. Take care when sharing – the table contains the programme timestamps.": "生成两张表并打开第一张:每个程序一行、含全部原始字段,另有一张每个字段一行的分析表。分享时请注意——表中含程序的时间点。",
107
107
  "miele:// redirect URL": "miele:// 重定向 URL"
108
108
  }
@@ -385,7 +385,7 @@
385
385
  "lg": 4,
386
386
  "xl": 4
387
387
  },
388
- "zaehler": {
388
+ "energyMeters": {
389
389
  "type": "table",
390
390
  "label": "Energy meter per appliance (optional)",
391
391
  "newLine": true,
@@ -398,7 +398,7 @@
398
398
  },
399
399
  {
400
400
  "type": "objectId",
401
- "attr": "datenpunkt",
401
+ "attr": "stateId",
402
402
  "title": "Meter datapoint (Wh, monotonically increasing)",
403
403
  "width": "60%"
404
404
  }
@@ -410,7 +410,7 @@
410
410
  "xl": 12,
411
411
  "help": "The consumption reported by the appliance is an estimate, not a measurement. If you have a metering plug in front of it, enter its meter state here."
412
412
  },
413
- "leafDatenpunkte": {
413
+ "leafStates": {
414
414
  "type": "checkbox",
415
415
  "newLine": true,
416
416
  "label": "Create what the device delivers",
@@ -540,11 +540,11 @@
540
540
  }
541
541
  }
542
542
  },
543
- "tabDiagnose": {
543
+ "tabDiagnostics": {
544
544
  "type": "panel",
545
545
  "label": "Diagnostics",
546
546
  "items": {
547
- "_diagIntro": {
547
+ "_diagnosticsIntro": {
548
548
  "type": "staticText",
549
549
  "newLine": true,
550
550
  "text": "These settings serve troubleshooting and field mapping. They are not needed for daily operation and are off by default. Collected data stays in this instance.",
@@ -564,9 +564,9 @@
564
564
  "md": 4,
565
565
  "lg": 4,
566
566
  "xl": 4,
567
- "help": "Writes all fields of the eco leaf to eco.felderJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model."
567
+ "help": "Writes all fields of the eco leaf to eco.fieldsJson instead of only the two evaluated ones. Helps when energy or water arrive wrong on your model."
568
568
  },
569
- "_sammlerKopf": {
569
+ "_collectorHeader": {
570
570
  "xs": 12,
571
571
  "sm": 12,
572
572
  "md": 12,
@@ -577,7 +577,7 @@
577
577
  "newLine": true,
578
578
  "text": "Data collection for other models"
579
579
  },
580
- "sammlerAktiv": {
580
+ "collectorActive": {
581
581
  "xs": 12,
582
582
  "sm": 6,
583
583
  "md": 4,
@@ -599,7 +599,7 @@
599
599
  "label": "Start the leaf search when a device is switched on",
600
600
  "help": "Only for devices whose search has never run. A device that is off most of the time would otherwise never be searched. The search only reads, and stops as soon as the device is off again."
601
601
  },
602
- "sammlerCloud": {
602
+ "collectorCloud": {
603
603
  "xs": 12,
604
604
  "sm": 6,
605
605
  "md": 4,
@@ -607,11 +607,11 @@
607
607
  "xl": 4,
608
608
  "type": "checkbox",
609
609
  "newLine": true,
610
- "hidden": "!data.sammlerAktiv",
610
+ "hidden": "!data.collectorActive",
611
611
  "label": "Include cloud values for comparison",
612
612
  "help": "Requires a running instance of the mielecloudservice adapter."
613
613
  },
614
- "sammlerCloudInstanz": {
614
+ "collectorCloudInstance": {
615
615
  "xs": 12,
616
616
  "sm": 12,
617
617
  "md": 6,
@@ -619,12 +619,12 @@
619
619
  "xl": 6,
620
620
  "type": "text",
621
621
  "newLine": true,
622
- "hidden": "!data.sammlerCloud",
622
+ "hidden": "!data.collectorCloud",
623
623
  "label": "Cloud adapter instance",
624
624
  "default": "mielecloudservice.0",
625
625
  "help": "Instance of the cloud adapter the reference values come from, for example mielecloudservice.0."
626
626
  },
627
- "_sammlerHand": {
627
+ "_collectorManual": {
628
628
  "xs": 12,
629
629
  "sm": 12,
630
630
  "md": 12,
@@ -632,10 +632,10 @@
632
632
  "xl": 12,
633
633
  "type": "staticText",
634
634
  "newLine": true,
635
- "hidden": "!data.sammlerAktiv",
635
+ "hidden": "!data.collectorActive",
636
636
  "text": "Without cloud: after each programme, enter energy and water from the Miele app into \"collection.inputEnergy\" and \"collection.inputWater\" - they are attached to the most recent dataset. \"collection.progress\" shows what is still missing."
637
637
  },
638
- "_csvKopf": {
638
+ "_csvHeader": {
639
639
  "type": "header",
640
640
  "size": 4,
641
641
  "newLine": true,
package/io-package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "miele-local",
4
- "version": "0.3.44",
4
+ "version": "0.3.45",
5
5
  "titleLang": {
6
6
  "en": "Miele@local",
7
7
  "de": "Miele@local",
@@ -52,6 +52,19 @@
52
52
  "readme": "https://github.com/SmarthomeElektroniker/ioBroker.miele-local/blob/main/README.md",
53
53
  "loglevel": "info",
54
54
  "news": {
55
+ "0.3.45": {
56
+ "en": "Only English IDs left: eco.quelle -> eco.source, eco.felderJson -> eco.fieldsJson; settings use English keys (collectorActive, leafStates, energyMeters ...), migrated once on start; text states follow the German names option; background loops never overlap",
57
+ "de": "Nur noch englische IDs: eco.quelle -> eco.source, eco.felderJson -> eco.fieldsJson; Einstellungen mit englischen Namen (collectorActive, leafStates, energyMeters ...), beim Start einmalig übernommen; Textdatenpunkte folgen der Option „Deutsche Namen“; Hintergrundschleifen überlappen nicht mehr",
58
+ "ru": "Остались только английские ID: eco.quelle -> eco.source, eco.felderJson -> eco.fieldsJson; настройки с английскими ключами (collectorActive, leafStates, energyMeters ...), переносятся один раз при запуске; текстовые состояния следуют опции немецких имён; фоновые циклы больше не перекрываются",
59
+ "pt": "Apenas IDs em inglês: eco.quelle -> eco.source, eco.felderJson -> eco.fieldsJson; configurações com chaves em inglês (collectorActive, leafStates, energyMeters ...), migradas uma vez ao iniciar; estados de texto seguem a opção de nomes em alemão; ciclos em segundo plano não se sobrepõem mais",
60
+ "nl": "Alleen nog Engelse ID's: eco.quelle -> eco.source, eco.felderJson -> eco.fieldsJson; instellingen met Engelse sleutels (collectorActive, leafStates, energyMeters ...), eenmalig bij het starten overgenomen; tekststatussen volgen de optie voor Duitse namen; achtergrondlussen overlappen niet meer",
61
+ "fr": "Uniquement des ID en anglais : eco.quelle -> eco.source, eco.felderJson -> eco.fieldsJson ; paramètres avec des clés anglaises (collectorActive, leafStates, energyMeters ...), migrés une fois au démarrage ; les états texte suivent l'option des noms allemands ; les boucles d'arrière-plan ne se chevauchent plus",
62
+ "it": "Solo ID in inglese: eco.quelle -> eco.source, eco.felderJson -> eco.fieldsJson; impostazioni con chiavi inglesi (collectorActive, leafStates, energyMeters ...), migrate una volta all'avvio; gli stati di testo seguono l'opzione dei nomi tedeschi; i cicli in background non si sovrappongono più",
63
+ "es": "Solo ID en inglés: eco.quelle -> eco.source, eco.felderJson -> eco.fieldsJson; ajustes con claves en inglés (collectorActive, leafStates, energyMeters ...), migrados una vez al iniciar; los estados de texto siguen la opción de nombres en alemán; los bucles en segundo plano ya no se solapan",
64
+ "pl": "Tylko angielskie identyfikatory: eco.quelle -> eco.source, eco.felderJson -> eco.fieldsJson; ustawienia z angielskimi kluczami (collectorActive, leafStates, energyMeters ...), przenoszone jednorazowo przy starcie; stany tekstowe zależą od opcji niemieckich nazw; pętle w tle już się nie nakładają",
65
+ "uk": "Лише англійські ID: eco.quelle -> eco.source, eco.felderJson -> eco.fieldsJson; налаштування з англійськими ключами (collectorActive, leafStates, energyMeters ...), переносяться один раз під час запуску; текстові стани залежать від опції німецьких назв; фонові цикли більше не перекриваються",
66
+ "zh-cn": "仅保留英文 ID:eco.quelle -> eco.source,eco.felderJson -> eco.fieldsJson;设置使用英文键(collectorActive、leafStates、energyMeters ...),启动时一次性迁移;文本状态遵循德语名称选项;后台循环不再重叠"
67
+ },
55
68
  "0.3.44": {
56
69
  "en": "History objects are only rewritten when they actually changed - no more empty (null) points in the history adapter after every restart",
57
70
  "de": "History-Objekte werden nur noch geschrieben, wenn sie sich wirklich geändert haben - keine leeren (null) Punkte mehr im History-Adapter nach jedem Neustart",
@@ -129,19 +142,6 @@
129
142
  "pl": "Nieznane numery programów lub faz są wyświetlane jako „Programm 201” zamiast pozostawiać tekst poprzedniego programu. Dodano numery programów zmywarki G7771 (#13).",
130
143
  "uk": "Невідомі номери програм або фаз відображаються як «Programm 201», а не зберігають текст попередньої програми. Додано номери програм посудомийної машини G7771 (#13).",
131
144
  "zh-cn": "未知的程序或阶段编号显示为“Programm 201”,不再保留上一个程序的文本。新增 G7771 洗碗机的程序编号 (#13)。"
132
- },
133
- "0.3.38": {
134
- "en": "Object IDs are now consistently English: \"sammlung\" became \"collection\", \"befund\" became \"finding\", \"laufendSeit\" became \"runningSince\". On first start the adapter moves existing values to the new IDs; own scripts must follow suit, while recorded history stays under the old ID in the history adapter. Also since 0.3.5: water is read from the verified DOP2 field and taken from the appliance's own EcoFeedback first, device internals can be created as datapoints, a separate diagnostics tab with CSV export collects the raw fields, and the configurable intervals are capped at runtime.",
135
- "de": "Objekt-IDs jetzt durchgängig englisch: Aus \"sammlung\" wurde \"collection\", aus \"befund\" wurde \"finding\", aus \"laufendSeit\" wurde \"runningSince\". Beim ersten Start zieht der Adapter vorhandene Werte an die neuen IDs um; eigene Skripte müssen nachgezogen werden, aufgezeichnete Verläufe bleiben unter der alten ID im History-Adapter. Außerdem seit 0.3.5: Wasser kommt aus dem geprüften DOP2-Feld und vorrangig aus dem EcoFeedback des Geräts, geräteinterne Messwerte lassen sich als Datenpunkte anlegen, ein eigener Diagnose-Reiter mit CSV-Ausdruck sammelt die Rohfelder, und die einstellbaren Intervalle sind zur Laufzeit begrenzt.",
136
- "ru": "Идентификаторы объектов теперь полностью на английском: \"sammlung\" стало \"collection\", \"befund\" — \"finding\", \"laufendSeit\" — \"runningSince\". При первом запуске адаптер переносит имеющиеся значения на новые идентификаторы; собственные скрипты нужно поправить, а записанная история остаётся под старым идентификатором в адаптере history. Кроме того, начиная с 0.3.5: расход воды считывается из проверенного поля DOP2 и в первую очередь из EcoFeedback самого прибора, внутренние величины прибора можно создавать как состояния, отдельная вкладка диагностики с выгрузкой в CSV собирает сырые поля, а настраиваемые интервалы ограничиваются во время работы.",
137
- "pt": "Os IDs de objeto passam a ser totalmente em inglês: \"sammlung\" tornou-se \"collection\", \"befund\" tornou-se \"finding\" e \"laufendSeit\" tornou-se \"runningSince\". No primeiro arranque o adaptador move os valores existentes para os novos IDs; os scripts próprios têm de ser adaptados, enquanto o histórico gravado permanece com o ID antigo no adaptador history. Além disso, desde a 0.3.5: a água é lida do campo DOP2 verificado e obtida primeiro do EcoFeedback do aparelho, os valores internos do aparelho podem ser criados como estados, um separador de diagnóstico próprio com exportação CSV reúne os campos brutos e os intervalos configuráveis são limitados em tempo de execução.",
138
- "nl": "Object-ID's zijn nu volledig Engels: \"sammlung\" werd \"collection\", \"befund\" werd \"finding\" en \"laufendSeit\" werd \"runningSince\". Bij de eerste start verplaatst de adapter bestaande waarden naar de nieuwe ID's; eigen scripts moeten worden aangepast, opgenomen historie blijft onder de oude ID in de history-adapter staan. Verder sinds 0.3.5: water wordt uit het geverifieerde DOP2-veld gelezen en bij voorkeur uit de EcoFeedback van het apparaat gehaald, interne meetwaarden van het apparaat kunnen als datapunten worden aangemaakt, een eigen diagnosetabblad met CSV-export verzamelt de ruwe velden en de instelbare intervallen worden tijdens het draaien begrensd.",
139
- "fr": "Les identifiants d'objets sont désormais entièrement en anglais : \"sammlung\" est devenu \"collection\", \"befund\" est devenu \"finding\" et \"laufendSeit\" est devenu \"runningSince\". Au premier démarrage, l'adaptateur déplace les valeurs existantes vers les nouveaux identifiants ; les scripts personnels doivent être adaptés, tandis que l'historique enregistré reste sous l'ancien identifiant dans l'adaptateur history. Depuis la 0.3.5 également : l'eau est lue dans le champ DOP2 vérifié et provient en priorité de l'EcoFeedback de l'appareil, les valeurs internes de l'appareil peuvent être créées comme états, un onglet de diagnostic dédié avec export CSV rassemble les champs bruts, et les intervalles configurables sont bornés à l'exécution.",
140
- "it": "Gli ID degli oggetti sono ora interamente in inglese: \"sammlung\" è diventato \"collection\", \"befund\" è diventato \"finding\" e \"laufendSeit\" è diventato \"runningSince\". Al primo avvio l'adapter sposta i valori esistenti sui nuovi ID; gli script personali vanno adeguati, mentre lo storico registrato resta con il vecchio ID nell'adapter history. Inoltre dalla 0.3.5: l'acqua viene letta dal campo DOP2 verificato e presa in via prioritaria dall'EcoFeedback dell'apparecchio, i valori interni dell'apparecchio possono essere creati come stati, una scheda di diagnostica dedicata con esportazione CSV raccoglie i campi grezzi e gli intervalli configurabili sono limitati a runtime.",
141
- "es": "Los ID de objeto son ahora íntegramente en inglés: \"sammlung\" pasó a \"collection\", \"befund\" a \"finding\" y \"laufendSeit\" a \"runningSince\". En el primer arranque el adaptador traslada los valores existentes a los nuevos ID; los scripts propios deben adaptarse, mientras que el histórico registrado permanece con el ID antiguo en el adaptador history. Además, desde la 0.3.5: el agua se lee del campo DOP2 verificado y se toma primero del EcoFeedback del propio aparato, los valores internos del aparato pueden crearse como estados, una pestaña de diagnóstico propia con exportación CSV reúne los campos en bruto y los intervalos configurables se limitan en tiempo de ejecución.",
142
- "pl": "Identyfikatory obiektów są teraz w całości angielskie: \"sammlung\" zmieniono na \"collection\", \"befund\" na \"finding\", a \"laufendSeit\" na \"runningSince\". Przy pierwszym uruchomieniu adapter przenosi istniejące wartości na nowe identyfikatory; własne skrypty trzeba dostosować, a zapisana historia pozostaje pod starym identyfikatorem w adapterze history. Ponadto od wersji 0.3.5: woda jest odczytywana ze sprawdzonego pola DOP2 i pobierana w pierwszej kolejności z EcoFeedback urządzenia, wewnętrzne wartości urządzenia można tworzyć jako stany, osobna zakładka diagnostyczna z eksportem CSV zbiera pola surowe, a konfigurowalne interwały są ograniczane w czasie działania.",
143
- "uk": "Ідентифікатори об'єктів тепер повністю англійські: \"sammlung\" стало \"collection\", \"befund\" — \"finding\", \"laufendSeit\" — \"runningSince\". Під час першого запуску адаптер переносить наявні значення на нові ідентифікатори; власні скрипти потрібно оновити, а записана історія залишається зі старим ідентифікатором в адаптері history. Крім того, починаючи з 0.3.5: вода зчитується з перевіреного поля DOP2 і насамперед береться з EcoFeedback самого приладу, внутрішні величини приладу можна створювати як стани, окрема вкладка діагностики з експортом у CSV збирає сирі поля, а налаштовувані інтервали обмежуються під час роботи.",
144
- "zh-cn": "对象 ID 现已全部使用英文:\"sammlung\" 改为 \"collection\",\"befund\" 改为 \"finding\",\"laufendSeit\" 改为 \"runningSince\"。首次启动时,适配器会把已有数值迁移到新的 ID;自建脚本需要相应调整,已记录的历史数据仍以旧 ID 保留在 history 适配器中。此外自 0.3.5 起:用水量取自经过验证的 DOP2 字段,并优先来自设备自身的 EcoFeedback;设备内部数值可创建为数据点;独立的诊断选项卡支持导出 CSV 以收集原始字段;可配置的轮询间隔在运行时会被限制。"
145
145
  }
146
146
  },
147
147
  "mode": "daemon",
@@ -191,7 +191,11 @@
191
191
  "germanNames": true,
192
192
  "ecoFeedback": true,
193
193
  "ecoRawFields": false,
194
- "leafDatenpunkte": true,
194
+ "leafStates": true,
195
+ "collectorActive": false,
196
+ "collectorCloud": false,
197
+ "collectorCloudInstance": "mielecloudservice.0",
198
+ "energyMeters": [],
195
199
  "ecoEnergyIdx": 25,
196
200
  "ecoWaterIdx": 21,
197
201
  "ecoWaterDiv": 200,
package/lib/api.js CHANGED
@@ -31,10 +31,10 @@ class MieleDeviceApi {
31
31
  * das Modul ohnehin mehr zu tun hat - ueber 50. Das Geraet war dabei per Ping durchgehend
32
32
  * erreichbar, es kam schlicht nicht hinterher.
33
33
  *
34
- * @param method
35
- * @param resource
36
- * @param bodyPlain
37
- * @param timeoutMs
34
+ * @param method HTTP-Methode (GET, PUT oder POST)
35
+ * @param resource Pfad der Ressource auf dem Geraet, etwa "Devices/<route>/State"
36
+ * @param bodyPlain Klartext-Body, wird gepaddet und verschluesselt; null ohne Body
37
+ * @param timeoutMs Zeitlimit dieser Anfrage in Millisekunden
38
38
  */
39
39
  _request(method, resource, bodyPlain, timeoutMs) {
40
40
  const starten = () => this._sendeAnfrage(method, resource, bodyPlain, timeoutMs);
@@ -107,7 +107,7 @@ class MieleDeviceApi {
107
107
  /**
108
108
  * Signierter GET, entschlüsselt & als JSON geparst.
109
109
  *
110
- * @param resource
110
+ * @param resource Pfad der Ressource auf dem Geraet
111
111
  */
112
112
  async get(resource) {
113
113
  const res = await this._request('GET', resource);
@@ -137,8 +137,8 @@ class MieleDeviceApi {
137
137
  /**
138
138
  * Signierter PUT mit verschlüsseltem Body. Gibt Statuscode zurück.
139
139
  *
140
- * @param resource
141
- * @param bodyPlain
140
+ * @param resource Pfad der Ressource auf dem Geraet
141
+ * @param bodyPlain Klartext-Body (meist JSON)
142
142
  */
143
143
  async put(resource, bodyPlain) {
144
144
  const res = await this._request('PUT', resource, bodyPlain);
@@ -148,8 +148,8 @@ class MieleDeviceApi {
148
148
  /**
149
149
  * Signierter POST mit verschlüsseltem Body. Gibt {status, location} zurück.
150
150
  *
151
- * @param resource
152
- * @param bodyPlain
151
+ * @param resource Pfad der Ressource auf dem Geraet
152
+ * @param bodyPlain Klartext-Body (meist JSON)
153
153
  */
154
154
  async post(resource, bodyPlain) {
155
155
  const res = await this._request('POST', resource, bodyPlain);
@@ -178,11 +178,11 @@ class MieleDeviceApi {
178
178
  /**
179
179
  * Ein DOP2-Leaf lesen.
180
180
  *
181
- * @param route
182
- * @param unit
183
- * @param attr
184
- * @param idx1
185
- * @param idx2
181
+ * @param route Route des Geraets (Seriennummer)
182
+ * @param unit DOP2-Unit, etwa 2
183
+ * @param attr DOP2-Attribut, etwa 6195
184
+ * @param idx1 erster Index, 0 fuer die meisten Leafs
185
+ * @param idx2 zweiter Index, 0 fuer die meisten Leafs
186
186
  * @param {number} [timeoutMs] eigenes Zeitlimit fuer DIESE Anfrage.
187
187
  *
188
188
  * WOZU DAS EIGENE LIMIT: Der Regelbetrieb fragt bekannte Adressen ab, die antworten -
package/lib/cloud.js CHANGED
@@ -78,7 +78,7 @@ function httpsRequest(method, urlStr, { headers = {}, body = null } = {}) {
78
78
  /**
79
79
  * Autorisierungs-URL + PKCE-Challenge erzeugen.
80
80
  *
81
- * @param cc
81
+ * @param cc Laendercode des Miele-Kontos, etwa "de"
82
82
  */
83
83
  function buildAuthorizeUrl(cc) {
84
84
  cc = String(cc).toLowerCase();
@@ -109,8 +109,8 @@ function buildAuthorizeUrl(cc) {
109
109
  /**
110
110
  * `code` aus miele://oauth2-code/?code=...&state=... extrahieren (mit state-Prüfung).
111
111
  *
112
- * @param redirectUrl
113
- * @param expectedState
112
+ * @param redirectUrl vollstaendige Weiterleitungs-URL aus dem Browser
113
+ * @param expectedState state-Wert, der beim Erzeugen der Autorisierungs-URL vergeben wurde
114
114
  */
115
115
  function parseRedirectUrl(redirectUrl, expectedState) {
116
116
  // miele:// ist kein von URL() parsebares Schema in allen Node-Versionen → manuell.
@@ -133,8 +133,8 @@ function parseRedirectUrl(redirectUrl, expectedState) {
133
133
  /**
134
134
  * code → Token.
135
135
  *
136
- * @param challenge
137
- * @param code
136
+ * @param challenge PKCE-Daten aus buildAuthorizeUrl (clientId, verifier, cc)
137
+ * @param code Autorisierungscode aus der Weiterleitung
138
138
  */
139
139
  async function exchangeCode(challenge, code) {
140
140
  const body = new URLSearchParams({
@@ -163,8 +163,8 @@ async function exchangeCode(challenge, code) {
163
163
  /**
164
164
  * Access-Token erneuern (refresh_token kann rotieren).
165
165
  *
166
- * @param cc
167
- * @param refreshToken
166
+ * @param cc Laendercode des Miele-Kontos, etwa "de"
167
+ * @param refreshToken bisheriger Refresh-Token
168
168
  */
169
169
  async function refreshAccessToken(cc, refreshToken) {
170
170
  cc = String(cc).toLowerCase();
@@ -187,8 +187,8 @@ async function refreshAccessToken(cc, refreshToken) {
187
187
  /**
188
188
  * GET /V2/GroupKeyId/ → { groupId, groupKey, devices }.
189
189
  *
190
- * @param accessToken
191
- * @param region
190
+ * @param accessToken gueltiger Access-Token
191
+ * @param region Cloud-Region: "EU", "EU2" oder "AS"
192
192
  */
193
193
  async function fetchGroupKey(accessToken, region = 'EU') {
194
194
  const host = REST_HOST_BY_REGION[String(region).toUpperCase()];