iobroker.miele-local 0.2.1 → 0.3.5
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/CHANGELOG_OLD.md +7 -0
- package/README.md +109 -31
- package/README_de.md +179 -0
- package/admin/i18n/de/translations.json +22 -2
- package/admin/i18n/en/translations.json +23 -3
- package/admin/i18n/es/translations.json +22 -2
- package/admin/i18n/fr/translations.json +22 -2
- package/admin/i18n/it/translations.json +22 -2
- package/admin/i18n/nl/translations.json +22 -2
- package/admin/i18n/pl/translations.json +22 -2
- package/admin/i18n/pt/translations.json +22 -2
- package/admin/i18n/ru/translations.json +22 -2
- package/admin/i18n/uk/translations.json +22 -2
- package/admin/i18n/zh-cn/translations.json +22 -2
- package/admin/jsonConfig.json +592 -507
- package/io-package.json +73 -5
- package/lib/api.js +21 -0
- package/lib/discovery.js +2 -2
- package/lib/dop2.js +18 -1
- package/lib/eco.js +55 -0
- package/lib/names.js +193 -0
- package/lib/objects.js +98 -58
- package/lib/push.js +4 -4
- package/lib/stats.js +237 -0
- package/main.js +929 -98
- package/package.json +10 -5
package/CHANGELOG_OLD.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Older changes
|
|
2
|
+
|
|
3
|
+
## 0.1.1 (2026-08-17)
|
|
4
|
+
* (Immanuel) Released via GitHub Actions with npm provenance (trusted publishing). Published under former package name `iobroker.miele-lokal`.
|
|
5
|
+
|
|
6
|
+
## 0.1.0 (2026-08-17)
|
|
7
|
+
* (Immanuel) Initial release: login/GroupKey retrieval, mDNS discovery, state polling with enum decoding, optional SuperVision push, optional control. Published under former package name `iobroker.miele-lokal`.
|
package/README.md
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
[](https://www.npmjs.com/package/iobroker.miele-local)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
|
|
8
|
+
*Read this in another language: [Deutsche Dokumentation](README_de.md).*
|
|
9
|
+
|
|
8
10
|
This adapter connects modern **Miele@Home** appliances **locally, without the internet**.
|
|
9
11
|
It speaks the local Miele protocol (`MieleH256` / DOP2) directly over the LAN — no cloud
|
|
10
12
|
account during operation, no detour through the Miele 3rd-party API.
|
|
@@ -29,29 +31,28 @@ account during operation, no detour through the Miele 3rd-party API.
|
|
|
29
31
|
## Installation
|
|
30
32
|
|
|
31
33
|
1. Install the adapter and create an instance.
|
|
32
|
-
2. On the **Login** tab, choose your country and
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
the
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
- **
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
Both yield the same text with `code=` and `state=`; the adapter accepts both forms.
|
|
34
|
+
2. On the **Login** tab, choose your country and follow the 3-step login guide below.
|
|
35
|
+
3. Paste the captured `miele://…` redirect address and click **Fetch GroupKey**. GroupID and
|
|
36
|
+
GroupKey are stored securely (GroupKey encrypted).
|
|
37
|
+
4. Save. The adapter discovers your devices and creates the states.
|
|
38
|
+
|
|
39
|
+
### Step-by-step: Capturing the redirect URL
|
|
40
|
+
|
|
41
|
+
Because the final `miele://` address is a custom mobile-app scheme, desktop browsers cannot open
|
|
42
|
+
it automatically and will hang on a spinning wheel. Capture the URL using browser DevTools:
|
|
43
|
+
|
|
44
|
+
1. **Prepare DevTools:** Click **Open login page** to open the Miele login in a new tab. In that
|
|
45
|
+
new tab, press **F12** to open Developer Tools and switch to the **Network** tab. Enable
|
|
46
|
+
persistent logging:
|
|
47
|
+
- **Chrome / Edge / Brave:** Check **Preserve log**.
|
|
48
|
+
- **Firefox:** Click the gear icon ⚙️ and check **Persist Logs**.
|
|
49
|
+
2. **Sign In:** Enter the email and password of your Miele app account and submit the login.
|
|
50
|
+
*Note:* The page will remain on a spinning wheel (or report a failed load) — this is completely
|
|
51
|
+
expected and indicates success.
|
|
52
|
+
3. **Copy & Submit:** In the Network tab (F12), scroll to the very last (usually red) request. It
|
|
53
|
+
starts with `redirect?redirect_uri=miele...` or `miele://oauth2-code/...`. Right-click this
|
|
54
|
+
entry → **Copy URL** (or **Copy link address**). Paste it into the **miele:// redirect URL**
|
|
55
|
+
field in ioBroker and click **Fetch GroupKey**.
|
|
55
56
|
|
|
56
57
|
## Required ports / firewall
|
|
57
58
|
|
|
@@ -95,17 +96,20 @@ transmitted to third parties; in normal operation there is no cloud connection.
|
|
|
95
96
|
|
|
96
97
|
## States (excerpt)
|
|
97
98
|
|
|
98
|
-
Per device under `<serial>.info` (static)
|
|
99
|
+
Per device under `<serial>.info` (static/connectivity), `<serial>.state` (live) and `<serial>.eco`:
|
|
99
100
|
|
|
101
|
+
- `info.connected` — connectivity status (true when appliance responds)
|
|
100
102
|
- `state.statusText` / `state.status` — operating state (plain text + raw value)
|
|
101
103
|
- `state.programText` / `state.programId` — running program
|
|
102
104
|
- `state.programPhaseText` / `state.programPhase` — program phase
|
|
103
105
|
- `state.remainingMinutes`, `state.elapsedMinutes`, `state.startInMinutes`
|
|
106
|
+
- `state.remainingSeconds`, `state.elapsedSeconds` (optional second-precise DOP2 values)
|
|
104
107
|
- `state.estimatedEndTime` / `state.estimatedEndTimeText` — projected finish time
|
|
105
108
|
- `state.temperature[Zone2/3]`, `state.targetTemperature[Zone2/3]`
|
|
106
109
|
- `state.signalDoor`, `state.signalInfo`, `state.signalFailure`
|
|
107
110
|
- `state.mobileStart` — whether remote control is enabled on the device
|
|
108
111
|
- `state.light`, `state.spinningSpeed` (washing machine), `state.dryingStepText` (dryer)
|
|
112
|
+
- `eco.energy` (kWh), `eco.energyWh` (Wh), `eco.water` (l) (where supported)
|
|
109
113
|
- `info.techType`, `info.fabNumber`, `info.xkmType`, `info.xkmVersion`, `info.deviceType`
|
|
110
114
|
|
|
111
115
|
With control enabled, additionally `<serial>.control.*` (start, stop, pause, powerOn,
|
|
@@ -136,12 +140,92 @@ consequences of use.
|
|
|
136
140
|
|
|
137
141
|
## Acknowledgements
|
|
138
142
|
|
|
143
|
+
Special thanks to **[meistermopper](https://github.com/meistermopper)**, an experienced
|
|
144
|
+
ioBroker adapter developer, who reviewed this adapter unprompted and contributed substantial
|
|
145
|
+
improvements: periodic background discovery for appliances waking from standby, a per-device
|
|
146
|
+
connectivity state, corrected state roles and units, explicit defaults for all states, and
|
|
147
|
+
German documentation. His work went into release 0.3.0.
|
|
148
|
+
|
|
139
149
|
The local protocol (`MieleH256`, DOP2, provisioning) is based on the public reverse
|
|
140
150
|
engineering work of the projects `MieleRESTServer` (akappner),
|
|
141
151
|
`home-assistant-miele-mobile` and `ha-miele-at-lan`.
|
|
142
152
|
|
|
143
153
|
## Changelog
|
|
144
154
|
|
|
155
|
+
### 0.3.5
|
|
156
|
+
- **Fix: appliance status no longer flips to "off" during a running program.** A failed status
|
|
157
|
+
request was reported as a state change instead of being retried; every twenty-fifth poll
|
|
158
|
+
produced a spurious "off". Requests now get a second attempt, and an implausible jump from
|
|
159
|
+
"running" to "off" is discarded when the remaining time says the program is still going.
|
|
160
|
+
The retry count is exposed as `info.pollRetries`.
|
|
161
|
+
- **Fix: remaining time was read from the wrong field.** `remainingSeconds` carries only the
|
|
162
|
+
seconds component - at "2:01" it reads 0. The plausibility check now uses
|
|
163
|
+
`remainingMinutes`.
|
|
164
|
+
- **Fix: frozen EcoFeedback values are no longer booked as consumption.** When an appliance
|
|
165
|
+
keeps reporting the previous cycle's figures, the unchanged value is skipped instead of
|
|
166
|
+
being added to the new cycle.
|
|
167
|
+
- Requests are serialised per appliance, and a cycle now survives an adapter restart.
|
|
168
|
+
- **EcoFeedback is only requested while an appliance is actually running.** The DOP2 leaf
|
|
169
|
+
only answers while the appliance is awake - a switched-off machine returns HTTP 500. The
|
|
170
|
+
washing machine's last reading came in mid-programme; afterwards every poll ran into the
|
|
171
|
+
void, one per minute for days, each one occupying the XKM module that answers only one
|
|
172
|
+
request at a time. Polling now happens while a programme runs, during a ten-minute
|
|
173
|
+
follow-up afterwards (the final reading is not settled the moment the status flips), and
|
|
174
|
+
once at startup so that appliances without the leaf can still be identified. The follow-up
|
|
175
|
+
ends early once two consecutive readings are identical.
|
|
176
|
+
- **All object names are complete in eleven languages.** The repository check reported 147
|
|
177
|
+
W1001 warnings for `common.name`; channels, EcoFeedback data points, appliance names and the
|
|
178
|
+
instance objects were still English- or German-only. Appliance categories are translated
|
|
179
|
+
while model and serial number stay untouched - they are proper names.
|
|
180
|
+
|
|
181
|
+
### 0.3.4
|
|
182
|
+
- **New: cycle history.** Every completed program is recorded with duration, program name,
|
|
183
|
+
energy and water. The appliances do not keep finished cycles themselves, so the history
|
|
184
|
+
starts when the feature is enabled - it cannot be filled retroactively. Recent cycles are
|
|
185
|
+
kept as JSON in `<serial>.history.cyclesJson`, alongside running totals for cycle count,
|
|
186
|
+
runtime, energy and water. Optionally each cycle is also written to the history adapter,
|
|
187
|
+
timestamped at the end of the cycle, so charts can cover any period.
|
|
188
|
+
Configurable on the new **History** tab: ring buffer size (default 50), retention in days
|
|
189
|
+
(default 730) and the history instance.
|
|
190
|
+
- The step-by-step login instructions were stored in English in nine of the eleven language
|
|
191
|
+
files. All eight texts are now translated into es, fr, it, nl, pl, pt, ru, uk and zh-cn.
|
|
192
|
+
- `common.news` no longer lists versions that were never published to npm.
|
|
193
|
+
- Dependabot: raised the PR limit, spread the schedule over a cron slot, added automerge.
|
|
194
|
+
|
|
195
|
+
### 0.3.3
|
|
196
|
+
- Fix E3005: states declared as `number` no longer receive `null` when the appliance does not
|
|
197
|
+
report a value - the datapoint keeps its default instead. `estimatedEndTime` is cleared with
|
|
198
|
+
0 rather than null.
|
|
199
|
+
- Fix E1011: `state.light` is read-only and now carries role `sensor.light`; switching happens
|
|
200
|
+
through `control.lightOn`/`lightOff`.
|
|
201
|
+
|
|
202
|
+
### 0.3.2
|
|
203
|
+
- EcoFeedback conversion moved into `dop2.ecoValues()` and covered by unit tests against the
|
|
204
|
+
cloud-verified reference values (1991 Wh = 1.991 kWh, 953 = 95.3 l).
|
|
205
|
+
|
|
206
|
+
### 0.3.1
|
|
207
|
+
- Fix: `applyIdent` threw on the new `connected` field, which has no ident path. Because that
|
|
208
|
+
entry comes first, **all** device data stayed empty - model, serial number, firmware.
|
|
209
|
+
- Eco polling now logs why it skips a device instead of failing silently.
|
|
210
|
+
|
|
211
|
+
### 0.3.0
|
|
212
|
+
- Adopt ioBroker development guidelines and conformity rules.
|
|
213
|
+
- Translate internal log messages to pure English.
|
|
214
|
+
- Add explicit default metadata values (`def`) to all state definitions.
|
|
215
|
+
- Sanitize dynamic object IDs against forbidden characters.
|
|
216
|
+
- Add local verification test script (`npm run test:local`).
|
|
217
|
+
- Add German documentation (`README_de.md`).
|
|
218
|
+
- Fix dev-server packaging issue by removing redundant prepare script.
|
|
219
|
+
- Clarify step-by-step login instructions and i18n translations.
|
|
220
|
+
- Add CHANGELOG_OLD.md for historical pre-rename versions.
|
|
221
|
+
- Add per-device connectivity state (`info.connected`).
|
|
222
|
+
- Add periodic background discovery for waking/standby appliances.
|
|
223
|
+
- Add admin UI configuration for second-precise remaining time polling.
|
|
224
|
+
- Refine EcoFeedback state roles and measurement units.
|
|
225
|
+
- mDNS auto-discovery is no longer marked experimental - confirmed working.
|
|
226
|
+
|
|
227
|
+
Most of the above was contributed by [meistermopper](https://github.com/meistermopper).
|
|
228
|
+
|
|
145
229
|
### 0.2.1
|
|
146
230
|
- Released via GitHub Actions with npm provenance (trusted publishing). No functional
|
|
147
231
|
changes.
|
|
@@ -150,13 +234,7 @@ engineering work of the projects `MieleRESTServer` (akappner),
|
|
|
150
234
|
- Renamed from `miele-lokal` to `miele-local`: English adapter name and title.
|
|
151
235
|
First release under the new package name.
|
|
152
236
|
|
|
153
|
-
|
|
154
|
-
- Released via GitHub Actions with npm provenance (trusted publishing). No functional
|
|
155
|
-
changes. Published under the former name `iobroker.miele-lokal`.
|
|
156
|
-
|
|
157
|
-
### 0.1.0
|
|
158
|
-
- Initial release: login/GroupKey retrieval, mDNS discovery, state polling with enum
|
|
159
|
-
decoding, optional SuperVision push, optional control.
|
|
237
|
+
[Older changelog entries can be found here](CHANGELOG_OLD.md)
|
|
160
238
|
|
|
161
239
|
## License
|
|
162
240
|
|
package/README_de.md
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
# ioBroker.miele-local
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/iobroker.miele-local)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
*Diese Dokumentation in einer anderen Sprache lesen: [English documentation](README.md).*
|
|
9
|
+
|
|
10
|
+
Dieser Adapter verbindet moderne **Miele@Home**-Geräte **lokal ohne Internet**.
|
|
11
|
+
Er spricht das lokale Miele-Protokoll (`MieleH256` / DOP2) direkt über das LAN – kein
|
|
12
|
+
Cloud-Konto im laufenden Betrieb, kein Umweg über die Miele 3rd-Party-Cloud-API.
|
|
13
|
+
|
|
14
|
+
> Der einmalige **Login** mit dem Miele-Konto dient nur dazu, den haushaltsweiten
|
|
15
|
+
> lokalen Schlüssel (GroupID/GroupKey) abzurufen. Danach läuft der Adapter komplett
|
|
16
|
+
> offline, und die Miele-App funktioniert unverändert weiter.
|
|
17
|
+
|
|
18
|
+
## Funktionen
|
|
19
|
+
|
|
20
|
+
- **Automatischer Abruf der Zugangsdaten** über einen geführten Login (Cloud-OAuth), ohne
|
|
21
|
+
die Geräte neu anlernen zu müssen.
|
|
22
|
+
- **Automatische Geräteerkennung** über mDNS (`_mieleathome._tcp`).
|
|
23
|
+
- **Live-Zustände** aller unterstützten Geräteklassen (Waschmaschine, Trockner,
|
|
24
|
+
Spülmaschine, Backofen, Dampfgarer, Kochfeld, Kaffeevollautomat u. v. m.) mit Klartext-Dekodierung
|
|
25
|
+
von Status, Programm und Phase.
|
|
26
|
+
- **Echtzeit-Aktualisierungen** über den SuperVision-Push-Kanal (optional), mit Polling als
|
|
27
|
+
zuverlässigem Fallback.
|
|
28
|
+
- **Steuerung** (optional): Start/Stop/Pause, Licht, Ein/Aus über beschreibbare Datenpunkte –
|
|
29
|
+
sofern „MobileStart / Fernsteuerung" am Gerät aktiviert ist.
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
|
|
33
|
+
1. Adapter installieren und Instanz anlegen.
|
|
34
|
+
2. Im Tab **Login** das Land wählen und der folgenden 3-Schritte-Anleitung folgen.
|
|
35
|
+
3. Die abgefangene `miele://…`-Weiterleitungsadresse einfügen und auf **GroupKey abrufen** klicken.
|
|
36
|
+
GroupID und GroupKey werden sicher gespeichert (GroupKey verschlüsselt).
|
|
37
|
+
4. Speichern. Der Adapter findet die Geräte per mDNS und legt die Datenpunkte an.
|
|
38
|
+
|
|
39
|
+
### Schritt-für-Schritt: Weiterleitungs-URL abfangen
|
|
40
|
+
|
|
41
|
+
Da die finale `miele://`-Adresse ein mobiles App-Protokoll ist, können Desktop-Browser sie nicht
|
|
42
|
+
automatisch öffnen und bleiben bei einem sich drehenden Laderad stehen. Fange die URL mit den
|
|
43
|
+
Entwicklertools (DevTools) deines Browsers ab:
|
|
44
|
+
|
|
45
|
+
1. **Entwicklertools vorbereiten:** Klicke auf **Login-Seite öffnen**, um den Login in einem neuen Tab
|
|
46
|
+
zu öffnen. Drücke in dem neuen Tab **F12** (Entwicklertools) und wechsle auf den Reiter **Netzwerk**
|
|
47
|
+
(Network). Aktiviere die dauerhafte Protokollierung:
|
|
48
|
+
- **Chrome / Edge / Brave:** Haken bei **Log beibehalten** (*Preserve log*) setzen.
|
|
49
|
+
- **Firefox:** Auf das Zahnrad-Symbol ⚙️ klicken und **Protokolle dauerhaft anzeigen** (*Persist Logs*) aktivieren.
|
|
50
|
+
2. **Anmelden:** E-Mail und Passwort deines Miele-App-Kontos eingeben und die Anmeldung abschicken.
|
|
51
|
+
*Hinweis:* Die Seite bleibt bei einem Laderad stehen (oder meldet einen Ladefehler) – das ist völlig
|
|
52
|
+
normal und signalisiert Erfolg.
|
|
53
|
+
3. **Kopieren & Einbinden:** Im Netzwerk-Tab (F12) ganz nach unten zur letzten (meist rot markierten)
|
|
54
|
+
Zeile scrollen. Sie beginnt mit `redirect?redirect_uri=miele...` oder `miele://oauth2-code/...`.
|
|
55
|
+
Mache einen Rechtsklick auf diese Zeile → **URL kopieren** (bzw. **Link-Adresse kopieren**). Füge sie
|
|
56
|
+
in das Feld **miele://-Redirect-URL** im ioBroker ein und klicke auf **GroupKey abrufen**.
|
|
57
|
+
|
|
58
|
+
## Benötigte Ports / Firewall
|
|
59
|
+
|
|
60
|
+
| Richtung | Port | Zweck | Erforderlich |
|
|
61
|
+
|---|---|---|---|
|
|
62
|
+
| Eingehend | TCP *Push-Port* (Standard 18082) | Geräte senden Echtzeit-Updates an ioBroker | nur bei aktivem Push |
|
|
63
|
+
| Ein/Aus | UDP 5353 (mDNS) | Geräteerkennung und Push-Registrierung | ja |
|
|
64
|
+
| Ausgehend | TCP 80 → Geräte | Zustände lesen / Steuerbefehle senden | ja |
|
|
65
|
+
| Ausgehend | TCP 443 → miele-iot.com | nur beim Login (GroupKey abrufen) | nur beim Login |
|
|
66
|
+
|
|
67
|
+
Ohne Push ist **kein eingehender Port** erforderlich. ioBroker und die Geräte müssen sich im
|
|
68
|
+
selben Broadcast-Segment befinden (keine VLAN-/Docker-Bridge-Trennung), damit mDNS funktioniert.
|
|
69
|
+
|
|
70
|
+
### Betrieb in Docker (wichtig)
|
|
71
|
+
|
|
72
|
+
Wenn ioBroker in einem **Docker-Container mit Bridge-Netzwerk** läuft (Standard, z. B. buanet-Image),
|
|
73
|
+
kann die automatische **mDNS-Erkennung die Geräte nicht erreichen** – Multicast wird nicht
|
|
74
|
+
gebrückt. Die direkte Kommunikation (TCP 80) funktioniert, da sie geroutet wird. In diesem Fall:
|
|
75
|
+
|
|
76
|
+
- **Geräte-IPs manuell im Tab „Geräte & Polling" eintragen.** Das Polling funktioniert dann normal.
|
|
77
|
+
- **Push** funktioniert im Bridge-Netzwerk nicht (die Geräte können den Container nicht erreichen). Für
|
|
78
|
+
Push den Container im **Host-Netzwerk** betreiben (`network_mode: host`) – der Push-Port ist
|
|
79
|
+
dann automatisch erreichbar.
|
|
80
|
+
|
|
81
|
+
### Wie Push technisch funktioniert
|
|
82
|
+
|
|
83
|
+
Bei aktiviertem Push führt der Adapter ein **Enrollment** je Gerät durch: `PUT
|
|
84
|
+
/Devices/<series>/SuperVision/<own-fab>` (registriert den Adapter als Haushalts-Peer) sowie mehrere
|
|
85
|
+
`POST /Subscriptions` mit einer **Callback-URL** `http://<ioBroker-LAN-IP>:<push-port>/…`. Das
|
|
86
|
+
Gerät sendet Zustandsänderungen dann unaufgefordert (sub-sekündlich) an diese URL. Die Subscriptions
|
|
87
|
+
werden periodisch erneuert. Erreicht das Gerät die Callback-URL nicht, greift der Adapter automatisch
|
|
88
|
+
auf Polling zurück.
|
|
89
|
+
|
|
90
|
+
## Datenschutz
|
|
91
|
+
|
|
92
|
+
Es werden **keine personenbezogenen Daten** im Adapter gespeichert. GroupID, GroupKey und
|
|
93
|
+
Refresh-Token verbleiben ausschließlich in der (verschlüsselten) Instanzkonfiguration bzw. in
|
|
94
|
+
ioBroker-Objekten. Es erfolgt keine Datenübertragung an Dritte; im laufenden Betrieb besteht
|
|
95
|
+
keine Cloud-Verbindung.
|
|
96
|
+
|
|
97
|
+
## Datenpunkte (Auszug)
|
|
98
|
+
|
|
99
|
+
Je Gerät unter `<serial>.info` (statisch/Verbindung), `<serial>.state` (live) und `<serial>.eco`:
|
|
100
|
+
|
|
101
|
+
- `info.connected` – Erreichbarkeitsstatus (true, wenn Gerät antwortet)
|
|
102
|
+
- `state.statusText` / `state.status` – Betriebszustand (Klartext + Rohwert)
|
|
103
|
+
- `state.programText` / `state.programId` – Laufendes Programm
|
|
104
|
+
- `state.programPhaseText` / `state.programPhase` – Programmphase
|
|
105
|
+
- `state.remainingMinutes`, `state.elapsedMinutes`, `state.startInMinutes`
|
|
106
|
+
- `state.remainingSeconds`, `state.elapsedSeconds` (sekundengenau via DOP2)
|
|
107
|
+
- `state.estimatedEndTime` / `state.estimatedEndTimeText` – Voraussichtliches Programmende
|
|
108
|
+
- `state.temperature[Zone2/3]`, `state.targetTemperature[Zone2/3]`
|
|
109
|
+
- `state.signalDoor`, `state.signalInfo`, `state.signalFailure`
|
|
110
|
+
- `state.mobileStart` – Gibt an, ob MobileStart/Fernsteuerung am Gerät aktiv ist
|
|
111
|
+
- `state.light`, `state.spinningSpeed` (Waschmaschine), `state.dryingStepText` (Trockner)
|
|
112
|
+
- `eco.energy` (kWh), `eco.energyWh` (Wh), `eco.water` (l) (wo unterstützt)
|
|
113
|
+
- `info.techType`, `info.fabNumber`, `info.xkmType`, `info.xkmVersion`, `info.deviceType`
|
|
114
|
+
|
|
115
|
+
Bei aktivierter Steuerung zusätzlich `<serial>.control.*` (start, stop, pause, powerOn,
|
|
116
|
+
powerOff, lightOn, lightOff).
|
|
117
|
+
|
|
118
|
+
## Kompatibilität / Grenzen
|
|
119
|
+
|
|
120
|
+
- Getestet an Waschmaschine (WCR860/EK037), Spülmaschine (G5840/EK037) und Backofen (H2469BP/EK057).
|
|
121
|
+
- Kühl- und Gefriergeräte sind lokal meist **nur lesbar** (die Firmware lehnt Schreibbefehle ab).
|
|
122
|
+
- Steuerbefehle setzen „MobileStart / Fernsteuerung" am Gerät voraus; manche Firmware-Versionen
|
|
123
|
+
beantworten DOP2-Schreibbefehle mit HTTP 404/500.
|
|
124
|
+
- Der SuperVision-Push ist eine Best-Effort-Ergänzung; Polling ist der zuverlässige Standardpfad.
|
|
125
|
+
|
|
126
|
+
## Rechtliche Hinweise / Haftungsausschluss
|
|
127
|
+
|
|
128
|
+
Dies ist ein **inoffizielles, privat entwickeltes** Projekt und steht in **keiner Verbindung zu
|
|
129
|
+
Miele & Cie. KG**. „Miele", „Miele@home" und zugehörige Bezeichnungen sind eingetragene
|
|
130
|
+
Marken der Miele & Cie. KG und werden hier nur beschreibend zur Kompatibilitätsangabe verwendet.
|
|
131
|
+
|
|
132
|
+
Der Adapter nutzt ein lokales Protokoll, das durch **Reverse Engineering** dokumentiert wurde.
|
|
133
|
+
Die Nutzung erfolgt **auf eigene Verantwortung**. Die Software wird unter MIT-Lizenz
|
|
134
|
+
**ohne Mängelgewähr** bereitgestellt (siehe LICENSE).
|
|
135
|
+
|
|
136
|
+
## Danksagung
|
|
137
|
+
|
|
138
|
+
Besonderer Dank gilt **[meistermopper](https://github.com/meistermopper)**, einem erfahrenen
|
|
139
|
+
Entwickler von ioBroker-Adaptern, der diesen Adapter unaufgefordert durchgesehen und
|
|
140
|
+
erhebliche Verbesserungen beigesteuert hat: die periodische Gerätesuche im Hintergrund für
|
|
141
|
+
Geräte, die aus dem Standby aufwachen, einen Erreichbarkeits-Datenpunkt je Gerät, korrigierte
|
|
142
|
+
Rollen und Einheiten, explizite Vorgabewerte für alle Datenpunkte sowie die deutsche
|
|
143
|
+
Dokumentation. Seine Arbeit ist in Version 0.3.0 eingeflossen.
|
|
144
|
+
|
|
145
|
+
Das lokale Protokoll (`MieleH256`, DOP2, Provisioning) basiert auf der Vorarbeit der
|
|
146
|
+
Open-Source-Projekte `MieleRESTServer` (akappner), `home-assistant-miele-mobile` und
|
|
147
|
+
`ha-miele-at-lan`.
|
|
148
|
+
|
|
149
|
+
## Changelog
|
|
150
|
+
|
|
151
|
+
### **WORK IN PROGRESS**
|
|
152
|
+
|
|
153
|
+
### 0.2.1 (2026-08-18)
|
|
154
|
+
- Adopt ioBroker development guidelines and conformity rules.
|
|
155
|
+
- Translate internal log messages to pure English.
|
|
156
|
+
- Add explicit default metadata values (`def`) to all state definitions.
|
|
157
|
+
- Sanitize dynamic object IDs against forbidden characters.
|
|
158
|
+
- Add local verification test script (`npm run test:local`).
|
|
159
|
+
- Add German documentation (`README_de.md`).
|
|
160
|
+
- Fix dev-server packaging issue by removing redundant prepare script.
|
|
161
|
+
- Clarify step-by-step login instructions and i18n translations.
|
|
162
|
+
- Add CHANGELOG_OLD.md for historical pre-rename versions.
|
|
163
|
+
- Add per-device connectivity state (`info.connected`).
|
|
164
|
+
- Add periodic background discovery for waking/standby appliances.
|
|
165
|
+
- Add admin UI configuration for second-precise remaining time polling.
|
|
166
|
+
- Refine EcoFeedback state roles and measurement units.
|
|
167
|
+
|
|
168
|
+
### 0.2.1
|
|
169
|
+
- Veröffentlichung über GitHub Actions mit npm-Provenance (Trusted Publishing). Keine funktionalen Änderungen.
|
|
170
|
+
|
|
171
|
+
### 0.2.0
|
|
172
|
+
- Umbenennung von `miele-lokal` in `miele-local`: englischer Adaptername und Titel.
|
|
173
|
+
Erste Version unter dem neuen Paketnamen.
|
|
174
|
+
|
|
175
|
+
[Ältere Einträge sind hier zu finden](CHANGELOG_OLD.md)
|
|
176
|
+
|
|
177
|
+
## Lizenz
|
|
178
|
+
|
|
179
|
+
MIT License - Copyright (c) 2026 Immanuel
|
|
@@ -39,6 +39,26 @@
|
|
|
39
39
|
"Datenpunkt-Namen auf Deutsch": "Datenpunkt-Namen auf Deutsch",
|
|
40
40
|
"EcoFeedback (Energie/Wasser) abrufen": "EcoFeedback (Energie/Wasser) abrufen",
|
|
41
41
|
"EcoFeedback-Intervall in Sekunden": "EcoFeedback-Intervall in Sekunden",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
42
|
+
"SuperVision-Push aktivieren (experimentell, Echtzeit)": "SuperVision-Push aktivieren (experimentell, Echtzeit)",
|
|
43
|
+
"Schritt 1: Entwicklertools im Browser vorbereiten": "Schritt 1: Entwicklertools im Browser vorbereiten",
|
|
44
|
+
"1. Oben auf „Login-Seite öffnen“ klicken (ein neuer Browser-Tab öffnet sich).\n2. Im neuen Tab F12 drücken und auf den Reiter „Netzwerk“ (Network) wechseln.\n3. Protokollierung dauerhaft aktivieren:\n • Chrome / Edge / Brave: Haken bei „Log beibehalten“ (Preserve log) setzen.\n • Firefox: Zahnrad ⚙️ ➔ „Protokolle dauerhaft anzeigen“ (Persist Logs) aktivieren.": "1. Oben auf „Login-Seite öffnen“ klicken (ein neuer Browser-Tab öffnet sich).\n2. Im neuen Tab F12 drücken und auf den Reiter „Netzwerk“ (Network) wechseln.\n3. Protokollierung dauerhaft aktivieren:\n • Chrome / Edge / Brave: Haken bei „Log beibehalten“ (Preserve log) setzen.\n • Firefox: Zahnrad ⚙️ ➔ „Protokolle dauerhaft anzeigen“ (Persist Logs) aktivieren.",
|
|
45
|
+
"Schritt 2: Bei Miele anmelden": "Schritt 2: Bei Miele anmelden",
|
|
46
|
+
"1. E-Mail und Passwort deines Miele-App-Kontos eingeben und auf „Anmeldung“ klicken.\n2. Wichtig: Nach dem Login bleibt die Seite bei einem sich drehenden Laderad stehen (oder meldet einen Fehler). Das ist völlig normal und bedeutet, dass die Anmeldung erfolgreich war!": "1. E-Mail und Passwort deines Miele-App-Kontos eingeben und auf „Anmeldung“ klicken.\n2. Wichtig: Nach dem Login bleibt die Seite bei einem sich drehenden Laderad stehen (oder meldet einen Fehler). Das ist völlig normal und bedeutet, dass die Anmeldung erfolgreich war!",
|
|
47
|
+
"Schritt 3: Adresse kopieren & GroupKey ermitteln": "Schritt 3: Adresse kopieren & GroupKey ermitteln",
|
|
48
|
+
"1. Im Netzwerk-Tab (F12) ganz nach unten zur letzten (meist rot markierten) Zeile scrollen. Sie beginnt mit „redirect?redirect_uri=miele...“ oder „miele://oauth2-code/...“.\n2. Rechtsklick auf diese Zeile ➔ „URL kopieren“ (bzw. „Adresse des Links kopieren“).\n3. Die kopierte Adresse unten in das Feld einfügen und auf „GroupKey ermitteln“ klicken.": "1. Im Netzwerk-Tab (F12) ganz nach unten zur letzten (meist rot markierten) Zeile scrollen. Sie beginnt mit „redirect?redirect_uri=miele...“ oder „miele://oauth2-code/...“.\n2. Rechtsklick auf diese Zeile ➔ „URL kopieren“ (bzw. „Adresse des Links kopieren“).\n3. Die kopierte Adresse unten in das Feld einfügen und auf „GroupKey ermitteln“ klicken.",
|
|
49
|
+
"Der Adapter ermittelt die lokalen Zugangsdaten (GroupID/GroupKey) einmalig über eine Anmeldung mit Ihrem Miele-Konto. Die Miele-App funktioniert danach unverändert weiter. Es werden keine Zugangsdaten an Dritte übertragen.": "Der Adapter ermittelt die lokalen Zugangsdaten (GroupID/GroupKey) einmalig über eine Anmeldung mit Ihrem Miele-Konto. Die Miele-App funktioniert danach unverändert weiter. Es werden keine Zugangsdaten an Dritte übertragen.",
|
|
50
|
+
"Nach erfolgreicher Ermittlung stehen GroupID und (verschlüsselt gespeicherter) GroupKey unten im Tab „Erweitert\". Speichern nicht vergessen.": "Nach erfolgreicher Ermittlung stehen GroupID und (verschlüsselt gespeicherter) GroupKey unten im Tab „Erweitert\". Speichern nicht vergessen.",
|
|
51
|
+
"Hintergrund-Suche Intervall in Minuten": "Hintergrund-Suche Intervall in Minuten",
|
|
52
|
+
"Sekundengenaue Rest-/Laufzeit abrufen (DOP2)": "Sekundengenaue Rest-/Laufzeit abrufen (DOP2)",
|
|
53
|
+
"Sekunden-Abfrageintervall in Sekunden": "Sekunden-Abfrageintervall in Sekunden",
|
|
54
|
+
"Verlauf": "Verlauf",
|
|
55
|
+
"Programme mitschreiben": "Programme mitschreiben",
|
|
56
|
+
"Einträge im Ringpuffer": "Einträge im Ringpuffer",
|
|
57
|
+
"Wie viele der letzten Programme in cyclesJson stehen. Für die Schnellanzeige gedacht; Langzeitdaten kommen aus dem History-Adapter.": "Wie viele der letzten Programme in cyclesJson stehen. Für die Schnellanzeige gedacht; Langzeitdaten kommen aus dem History-Adapter.",
|
|
58
|
+
"Aufbewahrung in Tagen": "Aufbewahrung in Tagen",
|
|
59
|
+
"Ältere Einträge fallen aus dem Ringpuffer. 730 Tage sind zwei Jahre.": "Ältere Einträge fallen aus dem Ringpuffer. 730 Tage sind zwei Jahre.",
|
|
60
|
+
"Zusätzlich in den History-Adapter schreiben": "Zusätzlich in den History-Adapter schreiben",
|
|
61
|
+
"Energie, Wasser und Dauer je Programm mit dem Zeitpunkt des Programmendes – damit lassen sich Diagramme über beliebige Zeiträume bauen.": "Energie, Wasser und Dauer je Programm mit dem Zeitpunkt des Programmendes – damit lassen sich Diagramme über beliebige Zeiträume bauen.",
|
|
62
|
+
"History-Instanz": "History-Instanz",
|
|
63
|
+
"Der Adapter schreibt jedes abgeschlossene Programm mit: Dauer, Programm, Energie und Wasser. Die Geräte selbst heben abgeschlossene Programme nicht auf, der Verlauf beginnt also mit dem Einschalten dieser Funktion – rückwirkend lässt er sich nicht füllen. Die letzten Programme stehen als JSON unter <Seriennummer>.history.cyclesJson, die Summen daneben.": "Der Adapter schreibt jedes abgeschlossene Programm mit: Dauer, Programm, Energie und Wasser. Die Geräte selbst heben abgeschlossene Programme nicht auf, der Verlauf beginnt also mit dem Einschalten dieser Funktion – rückwirkend lässt er sich nicht füllen. Die letzten Programme stehen als JSON unter <Seriennummer>.history.cyclesJson, die Summen daneben."
|
|
44
64
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"Login-Seite öffnen": "Open login page",
|
|
10
10
|
"miele://-Redirect-URL": "miele:// redirect URL",
|
|
11
11
|
"GroupKey ermitteln": "Fetch GroupKey",
|
|
12
|
-
"Geräte automatisch per mDNS finden": "
|
|
12
|
+
"Geräte automatisch per mDNS finden": "Find devices automatically via mDNS",
|
|
13
13
|
"Jetzt suchen": "Search now",
|
|
14
14
|
"Manuelle Geräte-IPs (optional, zusätzlich)": "Manual device IPs (optional, additional)",
|
|
15
15
|
"IP-Adresse": "IP address",
|
|
@@ -39,6 +39,26 @@
|
|
|
39
39
|
"Datenpunkt-Namen auf Deutsch": "State names in German",
|
|
40
40
|
"EcoFeedback (Energie/Wasser) abrufen": "Fetch EcoFeedback (energy/water)",
|
|
41
41
|
"EcoFeedback-Intervall in Sekunden": "EcoFeedback interval in seconds",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
42
|
+
"SuperVision-Push aktivieren (experimentell, Echtzeit)": "Enable SuperVision push (experimental, real-time)",
|
|
43
|
+
"Schritt 1: Entwicklertools im Browser vorbereiten": "Step 1: Prepare browser developer tools",
|
|
44
|
+
"1. Oben auf „Login-Seite öffnen“ klicken (ein neuer Browser-Tab öffnet sich).\n2. Im neuen Tab F12 drücken und auf den Reiter „Netzwerk“ (Network) wechseln.\n3. Protokollierung dauerhaft aktivieren:\n • Chrome / Edge / Brave: Haken bei „Log beibehalten“ (Preserve log) setzen.\n • Firefox: Zahnrad ⚙️ ➔ „Protokolle dauerhaft anzeigen“ (Persist Logs) aktivieren.": "1. Click 'Open login page' above (a new browser tab opens).\n2. In the new tab, press F12 and switch to the 'Network' tab.\n3. Enable persistent logging:\n • Chrome / Edge / Brave: Check 'Preserve log'.\n • Firefox: Click gear ⚙️ ➔ check 'Persist Logs'.",
|
|
45
|
+
"Schritt 2: Bei Miele anmelden": "Step 2: Sign in with Miele",
|
|
46
|
+
"1. E-Mail und Passwort deines Miele-App-Kontos eingeben und auf „Anmeldung“ klicken.\n2. Wichtig: Nach dem Login bleibt die Seite bei einem sich drehenden Laderad stehen (oder meldet einen Fehler). Das ist völlig normal und bedeutet, dass die Anmeldung erfolgreich war!": "1. Enter your Miele app account email and password and click 'Sign in'.\n2. Note: After login, the page will hang on a spinning loading wheel (or show an error). This is completely normal and indicates success!",
|
|
47
|
+
"Schritt 3: Adresse kopieren & GroupKey ermitteln": "Step 3: Copy redirect address & fetch GroupKey",
|
|
48
|
+
"1. Im Netzwerk-Tab (F12) ganz nach unten zur letzten (meist rot markierten) Zeile scrollen. Sie beginnt mit „redirect?redirect_uri=miele...“ oder „miele://oauth2-code/...“.\n2. Rechtsklick auf diese Zeile ➔ „URL kopieren“ (bzw. „Adresse des Links kopieren“).\n3. Die kopierte Adresse unten in das Feld einfügen und auf „GroupKey ermitteln“ klicken.": "1. In the Network tab (F12), scroll to the very last (often red) request starting with 'redirect?redirect_uri=miele...' or 'miele://oauth2-code/...'.\n2. Right-click that entry ➔ 'Copy URL' / 'Copy link address'.\n3. Paste the URL into the field below and click 'Fetch GroupKey'.",
|
|
49
|
+
"Der Adapter ermittelt die lokalen Zugangsdaten (GroupID/GroupKey) einmalig über eine Anmeldung mit Ihrem Miele-Konto. Die Miele-App funktioniert danach unverändert weiter. Es werden keine Zugangsdaten an Dritte übertragen.": "The adapter retrieves local credentials (GroupID/GroupKey) once by signing in with your Miele account. The Miele app continues to work as before. No credentials are transmitted to third parties.",
|
|
50
|
+
"Nach erfolgreicher Ermittlung stehen GroupID und (verschlüsselt gespeicherter) GroupKey unten im Tab „Erweitert\". Speichern nicht vergessen.": "Once retrieved, GroupID and encrypted GroupKey appear on the 'Advanced' tab. Don't forget to save.",
|
|
51
|
+
"Hintergrund-Suche Intervall in Minuten": "Background discovery interval in minutes",
|
|
52
|
+
"Sekundengenaue Rest-/Laufzeit abrufen (DOP2)": "Fetch second-precise remaining/elapsed time (DOP2)",
|
|
53
|
+
"Sekunden-Abfrageintervall in Sekunden": "Second polling interval in seconds",
|
|
54
|
+
"Verlauf": "History",
|
|
55
|
+
"Programme mitschreiben": "Record cycles",
|
|
56
|
+
"Einträge im Ringpuffer": "Entries in the ring buffer",
|
|
57
|
+
"Wie viele der letzten Programme in cyclesJson stehen. Für die Schnellanzeige gedacht; Langzeitdaten kommen aus dem History-Adapter.": "How many recent cycles are kept in cyclesJson. Meant for quick display; long-term data comes from the history adapter.",
|
|
58
|
+
"Aufbewahrung in Tagen": "Retention in days",
|
|
59
|
+
"Ältere Einträge fallen aus dem Ringpuffer. 730 Tage sind zwei Jahre.": "Older entries drop out of the ring buffer. 730 days is two years.",
|
|
60
|
+
"Zusätzlich in den History-Adapter schreiben": "Also write to the history adapter",
|
|
61
|
+
"Energie, Wasser und Dauer je Programm mit dem Zeitpunkt des Programmendes – damit lassen sich Diagramme über beliebige Zeiträume bauen.": "Energy, water and duration per cycle, timestamped at the end of the cycle – so charts can cover any period.",
|
|
62
|
+
"History-Instanz": "History instance",
|
|
63
|
+
"Der Adapter schreibt jedes abgeschlossene Programm mit: Dauer, Programm, Energie und Wasser. Die Geräte selbst heben abgeschlossene Programme nicht auf, der Verlauf beginnt also mit dem Einschalten dieser Funktion – rückwirkend lässt er sich nicht füllen. Die letzten Programme stehen als JSON unter <Seriennummer>.history.cyclesJson, die Summen daneben.": "The adapter records every completed cycle: duration, program, energy and water. The appliances do not keep finished cycles themselves, so the history starts when you enable this – it cannot be filled retroactively. Recent cycles are available as JSON under <serial>.history.cyclesJson, the totals next to it."
|
|
44
64
|
}
|
|
@@ -39,6 +39,26 @@
|
|
|
39
39
|
"Datenpunkt-Namen auf Deutsch": "Nombres de estados en alemán",
|
|
40
40
|
"EcoFeedback (Energie/Wasser) abrufen": "Obtener EcoFeedback (energía/agua)",
|
|
41
41
|
"EcoFeedback-Intervall in Sekunden": "Intervalo de EcoFeedback en segundos",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
42
|
+
"SuperVision-Push aktivieren (experimentell, Echtzeit)": "Activar push SuperVision (experimental, tiempo real)",
|
|
43
|
+
"Schritt 1: Entwicklertools im Browser vorbereiten": "Paso 1: preparar las herramientas de desarrollo del navegador",
|
|
44
|
+
"1. Oben auf „Login-Seite öffnen“ klicken (ein neuer Browser-Tab öffnet sich).\n2. Im neuen Tab F12 drücken und auf den Reiter „Netzwerk“ (Network) wechseln.\n3. Protokollierung dauerhaft aktivieren:\n • Chrome / Edge / Brave: Haken bei „Log beibehalten“ (Preserve log) setzen.\n • Firefox: Zahnrad ⚙️ ➔ „Protokolle dauerhaft anzeigen“ (Persist Logs) aktivieren.": "1. Haga clic arriba en «Abrir página de inicio de sesión» (se abre una pestaña nueva).\n2. En la pestaña nueva pulse F12 y cambie a la pestaña «Red» (Network).\n3. Active el registro persistente:\n • Chrome / Edge / Brave: marque «Conservar registro» (Preserve log).\n • Firefox: engranaje ⚙️ ➔ active «Conservar registros» (Persist Logs).",
|
|
45
|
+
"Schritt 2: Bei Miele anmelden": "Paso 2: iniciar sesión en Miele",
|
|
46
|
+
"1. E-Mail und Passwort deines Miele-App-Kontos eingeben und auf „Anmeldung“ klicken.\n2. Wichtig: Nach dem Login bleibt die Seite bei einem sich drehenden Laderad stehen (oder meldet einen Fehler). Das ist völlig normal und bedeutet, dass die Anmeldung erfolgreich war!": "1. Introduzca el correo y la contraseña de su cuenta de la app Miele y haga clic en «Iniciar sesión».\n2. Importante: después del inicio de sesión la página se queda con una rueda girando (o muestra un error). Es completamente normal y significa que el acceso ha funcionado.",
|
|
47
|
+
"Schritt 3: Adresse kopieren & GroupKey ermitteln": "Paso 3: copiar la dirección y obtener la GroupKey",
|
|
48
|
+
"1. Im Netzwerk-Tab (F12) ganz nach unten zur letzten (meist rot markierten) Zeile scrollen. Sie beginnt mit „redirect?redirect_uri=miele...“ oder „miele://oauth2-code/...“.\n2. Rechtsklick auf diese Zeile ➔ „URL kopieren“ (bzw. „Adresse des Links kopieren“).\n3. Die kopierte Adresse unten in das Feld einfügen und auf „GroupKey ermitteln“ klicken.": "1. En la pestaña Red (F12) desplácese hasta la última petición (suele estar en rojo) que empieza por «redirect?redirect_uri=miele...» o «miele://oauth2-code/...».\n2. Haga clic derecho en esa línea ➔ «Copiar URL» (o «Copiar dirección del enlace»).\n3. Pegue la dirección copiada en el campo de abajo y haga clic en «Obtener GroupKey».",
|
|
49
|
+
"Der Adapter ermittelt die lokalen Zugangsdaten (GroupID/GroupKey) einmalig über eine Anmeldung mit Ihrem Miele-Konto. Die Miele-App funktioniert danach unverändert weiter. Es werden keine Zugangsdaten an Dritte übertragen.": "El adaptador obtiene una sola vez las credenciales locales (GroupID/GroupKey) mediante un inicio de sesión con su cuenta Miele. La app de Miele sigue funcionando igual. No se transmiten credenciales a terceros.",
|
|
50
|
+
"Nach erfolgreicher Ermittlung stehen GroupID und (verschlüsselt gespeicherter) GroupKey unten im Tab „Erweitert\". Speichern nicht vergessen.": "Tras obtenerlos, la GroupID y la GroupKey (guardada cifrada) aparecen en la pestaña «Avanzado». No olvide guardar.",
|
|
51
|
+
"Hintergrund-Suche Intervall in Minuten": "Intervalo de descubrimiento en segundo plano en minutos",
|
|
52
|
+
"Sekundengenaue Rest-/Laufzeit abrufen (DOP2)": "Obtener tiempo restante/transcurrido exacto en segundos (DOP2)",
|
|
53
|
+
"Sekunden-Abfrageintervall in Sekunden": "Intervalo de consulta en segundos",
|
|
54
|
+
"Verlauf": "Historial",
|
|
55
|
+
"Programme mitschreiben": "Registrar los programas",
|
|
56
|
+
"Einträge im Ringpuffer": "Entradas en el búfer circular",
|
|
57
|
+
"Wie viele der letzten Programme in cyclesJson stehen. Für die Schnellanzeige gedacht; Langzeitdaten kommen aus dem History-Adapter.": "Cuántos programas recientes se guardan en cyclesJson. Pensado para la vista rápida; los datos a largo plazo vienen del adaptador history.",
|
|
58
|
+
"Aufbewahrung in Tagen": "Conservación en días",
|
|
59
|
+
"Ältere Einträge fallen aus dem Ringpuffer. 730 Tage sind zwei Jahre.": "Las entradas más antiguas salen del búfer circular. 730 días son dos años.",
|
|
60
|
+
"Zusätzlich in den History-Adapter schreiben": "Escribir también en el adaptador history",
|
|
61
|
+
"Energie, Wasser und Dauer je Programm mit dem Zeitpunkt des Programmendes – damit lassen sich Diagramme über beliebige Zeiträume bauen.": "Energía, agua y duración por programa, con la marca de tiempo del final del programa, para poder crear gráficos de cualquier periodo.",
|
|
62
|
+
"History-Instanz": "Instancia de history",
|
|
63
|
+
"Der Adapter schreibt jedes abgeschlossene Programm mit: Dauer, Programm, Energie und Wasser. Die Geräte selbst heben abgeschlossene Programme nicht auf, der Verlauf beginnt also mit dem Einschalten dieser Funktion – rückwirkend lässt er sich nicht füllen. Die letzten Programme stehen als JSON unter <Seriennummer>.history.cyclesJson, die Summen daneben.": "El adaptador registra cada programa terminado: duración, programa, energía y agua. Los aparatos no conservan los programas finalizados, así que el historial empieza al activar esta opción; no puede rellenarse con datos pasados. Los últimos programas están como JSON en <número de serie>.history.cyclesJson, junto a los totales."
|
|
44
64
|
}
|
|
@@ -39,6 +39,26 @@
|
|
|
39
39
|
"Datenpunkt-Namen auf Deutsch": "Noms des états en allemand",
|
|
40
40
|
"EcoFeedback (Energie/Wasser) abrufen": "Récupérer EcoFeedback (énergie/eau)",
|
|
41
41
|
"EcoFeedback-Intervall in Sekunden": "Intervalle EcoFeedback en secondes",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
42
|
+
"SuperVision-Push aktivieren (experimentell, Echtzeit)": "Activer le push SuperVision (expérimental, temps réel)",
|
|
43
|
+
"Schritt 1: Entwicklertools im Browser vorbereiten": "Étape 1 : préparer les outils de développement du navigateur",
|
|
44
|
+
"1. Oben auf „Login-Seite öffnen“ klicken (ein neuer Browser-Tab öffnet sich).\n2. Im neuen Tab F12 drücken und auf den Reiter „Netzwerk“ (Network) wechseln.\n3. Protokollierung dauerhaft aktivieren:\n • Chrome / Edge / Brave: Haken bei „Log beibehalten“ (Preserve log) setzen.\n • Firefox: Zahnrad ⚙️ ➔ „Protokolle dauerhaft anzeigen“ (Persist Logs) aktivieren.": "1. Cliquez ci-dessus sur « Ouvrir la page de connexion » (un nouvel onglet s'ouvre).\n2. Dans le nouvel onglet, appuyez sur F12 et passez à l'onglet « Réseau » (Network).\n3. Activez la journalisation persistante :\n • Chrome / Edge / Brave : cochez « Conserver le journal » (Preserve log).\n • Firefox : roue dentée ⚙️ ➔ activez « Conserver les journaux » (Persist Logs).",
|
|
45
|
+
"Schritt 2: Bei Miele anmelden": "Étape 2 : se connecter à Miele",
|
|
46
|
+
"1. E-Mail und Passwort deines Miele-App-Kontos eingeben und auf „Anmeldung“ klicken.\n2. Wichtig: Nach dem Login bleibt die Seite bei einem sich drehenden Laderad stehen (oder meldet einen Fehler). Das ist völlig normal und bedeutet, dass die Anmeldung erfolgreich war!": "1. Saisissez l'adresse e-mail et le mot de passe de votre compte de l'application Miele, puis cliquez sur « Connexion ».\n2. Important : après la connexion, la page reste bloquée sur une roue qui tourne (ou affiche une erreur). C'est tout à fait normal et signifie que la connexion a réussi.",
|
|
47
|
+
"Schritt 3: Adresse kopieren & GroupKey ermitteln": "Étape 3 : copier l'adresse de redirection et récupérer la GroupKey",
|
|
48
|
+
"1. Im Netzwerk-Tab (F12) ganz nach unten zur letzten (meist rot markierten) Zeile scrollen. Sie beginnt mit „redirect?redirect_uri=miele...“ oder „miele://oauth2-code/...“.\n2. Rechtsklick auf diese Zeile ➔ „URL kopieren“ (bzw. „Adresse des Links kopieren“).\n3. Die kopierte Adresse unten in das Feld einfügen und auf „GroupKey ermitteln“ klicken.": "1. Dans l'onglet Réseau (F12), faites défiler jusqu'à la dernière requête (souvent en rouge) commençant par « redirect?redirect_uri=miele... » ou « miele://oauth2-code/... ».\n2. Clic droit sur cette ligne ➔ « Copier l'URL » (ou « Copier l'adresse du lien »).\n3. Collez l'adresse copiée dans le champ ci-dessous et cliquez sur « Récupérer la GroupKey ».",
|
|
49
|
+
"Der Adapter ermittelt die lokalen Zugangsdaten (GroupID/GroupKey) einmalig über eine Anmeldung mit Ihrem Miele-Konto. Die Miele-App funktioniert danach unverändert weiter. Es werden keine Zugangsdaten an Dritte übertragen.": "L'adaptateur récupère une seule fois les identifiants locaux (GroupID/GroupKey) via une connexion à votre compte Miele. L'application Miele continue de fonctionner comme avant. Aucun identifiant n'est transmis à des tiers.",
|
|
50
|
+
"Nach erfolgreicher Ermittlung stehen GroupID und (verschlüsselt gespeicherter) GroupKey unten im Tab „Erweitert\". Speichern nicht vergessen.": "Une fois récupérées, la GroupID et la GroupKey (stockée chiffrée) apparaissent dans l'onglet « Avancé ». N'oubliez pas d'enregistrer.",
|
|
51
|
+
"Hintergrund-Suche Intervall in Minuten": "Intervalle de découverte en arrière-plan en minutes",
|
|
52
|
+
"Sekundengenaue Rest-/Laufzeit abrufen (DOP2)": "Récupérer le temps restant/écoulé précis à la seconde (DOP2)",
|
|
53
|
+
"Sekunden-Abfrageintervall in Sekunden": "Intervalle d'interrogation en secondes",
|
|
54
|
+
"Verlauf": "Historique",
|
|
55
|
+
"Programme mitschreiben": "Enregistrer les cycles",
|
|
56
|
+
"Einträge im Ringpuffer": "Entrées dans le tampon circulaire",
|
|
57
|
+
"Wie viele der letzten Programme in cyclesJson stehen. Für die Schnellanzeige gedacht; Langzeitdaten kommen aus dem History-Adapter.": "Nombre de cycles récents conservés dans cyclesJson. Prévu pour l’affichage rapide ; les données à long terme proviennent de l’adaptateur history.",
|
|
58
|
+
"Aufbewahrung in Tagen": "Conservation en jours",
|
|
59
|
+
"Ältere Einträge fallen aus dem Ringpuffer. 730 Tage sind zwei Jahre.": "Les entrées plus anciennes sortent du tampon circulaire. 730 jours correspondent à deux ans.",
|
|
60
|
+
"Zusätzlich in den History-Adapter schreiben": "Écrire aussi dans l’adaptateur history",
|
|
61
|
+
"Energie, Wasser und Dauer je Programm mit dem Zeitpunkt des Programmendes – damit lassen sich Diagramme über beliebige Zeiträume bauen.": "Énergie, eau et durée par cycle, horodatés à la fin du cycle – pour des graphiques sur n’importe quelle période.",
|
|
62
|
+
"History-Instanz": "Instance history",
|
|
63
|
+
"Der Adapter schreibt jedes abgeschlossene Programm mit: Dauer, Programm, Energie und Wasser. Die Geräte selbst heben abgeschlossene Programme nicht auf, der Verlauf beginnt also mit dem Einschalten dieser Funktion – rückwirkend lässt er sich nicht füllen. Die letzten Programme stehen als JSON unter <Seriennummer>.history.cyclesJson, die Summen daneben.": "L’adaptateur enregistre chaque cycle terminé : durée, programme, énergie et eau. Les appareils ne conservent pas les cycles achevés, l’historique commence donc à l’activation – il ne peut pas être rempli rétroactivement. Les derniers cycles sont disponibles en JSON sous <numéro de série>.history.cyclesJson, avec les totaux."
|
|
44
64
|
}
|
|
@@ -39,6 +39,26 @@
|
|
|
39
39
|
"Datenpunkt-Namen auf Deutsch": "Nomi degli stati in tedesco",
|
|
40
40
|
"EcoFeedback (Energie/Wasser) abrufen": "Recupera EcoFeedback (energia/acqua)",
|
|
41
41
|
"EcoFeedback-Intervall in Sekunden": "Intervallo EcoFeedback in secondi",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
42
|
+
"SuperVision-Push aktivieren (experimentell, Echtzeit)": "Abilita push SuperVision (sperimentale, tempo reale)",
|
|
43
|
+
"Schritt 1: Entwicklertools im Browser vorbereiten": "Passo 1: preparare gli strumenti di sviluppo del browser",
|
|
44
|
+
"1. Oben auf „Login-Seite öffnen“ klicken (ein neuer Browser-Tab öffnet sich).\n2. Im neuen Tab F12 drücken und auf den Reiter „Netzwerk“ (Network) wechseln.\n3. Protokollierung dauerhaft aktivieren:\n • Chrome / Edge / Brave: Haken bei „Log beibehalten“ (Preserve log) setzen.\n • Firefox: Zahnrad ⚙️ ➔ „Protokolle dauerhaft anzeigen“ (Persist Logs) aktivieren.": "1. Fare clic sopra su «Apri pagina di accesso» (si apre una nuova scheda).\n2. Nella nuova scheda premere F12 e passare alla scheda «Rete» (Network).\n3. Attivare la registrazione persistente:\n • Chrome / Edge / Brave: spuntare «Conserva registro» (Preserve log).\n • Firefox: ingranaggio ⚙️ ➔ attivare «Mantieni i log» (Persist Logs).",
|
|
45
|
+
"Schritt 2: Bei Miele anmelden": "Passo 2: accedere con Miele",
|
|
46
|
+
"1. E-Mail und Passwort deines Miele-App-Kontos eingeben und auf „Anmeldung“ klicken.\n2. Wichtig: Nach dem Login bleibt die Seite bei einem sich drehenden Laderad stehen (oder meldet einen Fehler). Das ist völlig normal und bedeutet, dass die Anmeldung erfolgreich war!": "1. Inserire e-mail e password dell'account dell'app Miele e fare clic su «Accedi».\n2. Importante: dopo l'accesso la pagina resta ferma su una rotellina che gira (o mostra un errore). È del tutto normale e significa che l'accesso è riuscito.",
|
|
47
|
+
"Schritt 3: Adresse kopieren & GroupKey ermitteln": "Passo 3: copiare l'indirizzo e ottenere la GroupKey",
|
|
48
|
+
"1. Im Netzwerk-Tab (F12) ganz nach unten zur letzten (meist rot markierten) Zeile scrollen. Sie beginnt mit „redirect?redirect_uri=miele...“ oder „miele://oauth2-code/...“.\n2. Rechtsklick auf diese Zeile ➔ „URL kopieren“ (bzw. „Adresse des Links kopieren“).\n3. Die kopierte Adresse unten in das Feld einfügen und auf „GroupKey ermitteln“ klicken.": "1. Nella scheda Rete (F12) scorrere fino all'ultima richiesta (spesso in rosso) che inizia con «redirect?redirect_uri=miele...» o «miele://oauth2-code/...».\n2. Fare clic con il tasto destro su quella riga ➔ «Copia URL» (o «Copia indirizzo del link»).\n3. Incollare l'indirizzo copiato nel campo sottostante e fare clic su «Ottieni GroupKey».",
|
|
49
|
+
"Der Adapter ermittelt die lokalen Zugangsdaten (GroupID/GroupKey) einmalig über eine Anmeldung mit Ihrem Miele-Konto. Die Miele-App funktioniert danach unverändert weiter. Es werden keine Zugangsdaten an Dritte übertragen.": "L'adapter ottiene una sola volta le credenziali locali (GroupID/GroupKey) tramite un accesso al proprio account Miele. L'app Miele continua a funzionare come prima. Nessuna credenziale viene trasmessa a terzi.",
|
|
50
|
+
"Nach erfolgreicher Ermittlung stehen GroupID und (verschlüsselt gespeicherter) GroupKey unten im Tab „Erweitert\". Speichern nicht vergessen.": "Una volta ottenute, GroupID e GroupKey (memorizzata cifrata) compaiono nella scheda «Avanzate». Non dimenticare di salvare.",
|
|
51
|
+
"Hintergrund-Suche Intervall in Minuten": "Intervallo di rilevamento in background in minuti",
|
|
52
|
+
"Sekundengenaue Rest-/Laufzeit abrufen (DOP2)": "Recupera tempo rimanente/trascorso preciso al secondo (DOP2)",
|
|
53
|
+
"Sekunden-Abfrageintervall in Sekunden": "Intervallo di polling in secondi",
|
|
54
|
+
"Verlauf": "Cronologia",
|
|
55
|
+
"Programme mitschreiben": "Registrare i programmi",
|
|
56
|
+
"Einträge im Ringpuffer": "Voci nel buffer circolare",
|
|
57
|
+
"Wie viele der letzten Programme in cyclesJson stehen. Für die Schnellanzeige gedacht; Langzeitdaten kommen aus dem History-Adapter.": "Quanti programmi recenti restano in cyclesJson. Pensato per la visualizzazione rapida; i dati a lungo termine arrivano dall’adapter history.",
|
|
58
|
+
"Aufbewahrung in Tagen": "Conservazione in giorni",
|
|
59
|
+
"Ältere Einträge fallen aus dem Ringpuffer. 730 Tage sind zwei Jahre.": "Le voci più vecchie escono dal buffer circolare. 730 giorni corrispondono a due anni.",
|
|
60
|
+
"Zusätzlich in den History-Adapter schreiben": "Scrivere anche nell’adapter history",
|
|
61
|
+
"Energie, Wasser und Dauer je Programm mit dem Zeitpunkt des Programmendes – damit lassen sich Diagramme über beliebige Zeiträume bauen.": "Energia, acqua e durata per programma, con l’orario di fine – così i grafici possono coprire qualsiasi periodo.",
|
|
62
|
+
"History-Instanz": "Istanza history",
|
|
63
|
+
"Der Adapter schreibt jedes abgeschlossene Programm mit: Dauer, Programm, Energie und Wasser. Die Geräte selbst heben abgeschlossene Programme nicht auf, der Verlauf beginnt also mit dem Einschalten dieser Funktion – rückwirkend lässt er sich nicht füllen. Die letzten Programme stehen als JSON unter <Seriennummer>.history.cyclesJson, die Summen daneben.": "L’adapter registra ogni programma concluso: durata, programma, energia e acqua. Gli apparecchi non conservano i programmi terminati, quindi la cronologia inizia con l’attivazione e non può essere riempita a posteriori. Gli ultimi programmi sono in JSON sotto <numero di serie>.history.cyclesJson, accanto ai totali."
|
|
44
64
|
}
|
|
@@ -39,6 +39,26 @@
|
|
|
39
39
|
"Datenpunkt-Namen auf Deutsch": "Statusnamen in het Duits",
|
|
40
40
|
"EcoFeedback (Energie/Wasser) abrufen": "EcoFeedback (energie/water) ophalen",
|
|
41
41
|
"EcoFeedback-Intervall in Sekunden": "EcoFeedback-interval in seconden",
|
|
42
|
-
"
|
|
43
|
-
"
|
|
42
|
+
"SuperVision-Push aktivieren (experimentell, Echtzeit)": "SuperVision-push inschakelen (experimenteel, realtime)",
|
|
43
|
+
"Schritt 1: Entwicklertools im Browser vorbereiten": "Stap 1: ontwikkelaarstools van de browser voorbereiden",
|
|
44
|
+
"1. Oben auf „Login-Seite öffnen“ klicken (ein neuer Browser-Tab öffnet sich).\n2. Im neuen Tab F12 drücken und auf den Reiter „Netzwerk“ (Network) wechseln.\n3. Protokollierung dauerhaft aktivieren:\n • Chrome / Edge / Brave: Haken bei „Log beibehalten“ (Preserve log) setzen.\n • Firefox: Zahnrad ⚙️ ➔ „Protokolle dauerhaft anzeigen“ (Persist Logs) aktivieren.": "1. Klik hierboven op 'Inlogpagina openen' (er opent een nieuw tabblad).\n2. Druk in het nieuwe tabblad op F12 en ga naar het tabblad 'Netwerk' (Network).\n3. Zet blijvende logging aan:\n • Chrome / Edge / Brave: vink 'Log behouden' (Preserve log) aan.\n • Firefox: tandwiel ⚙️ ➔ zet 'Logs behouden' (Persist Logs) aan.",
|
|
45
|
+
"Schritt 2: Bei Miele anmelden": "Stap 2: aanmelden bij Miele",
|
|
46
|
+
"1. E-Mail und Passwort deines Miele-App-Kontos eingeben und auf „Anmeldung“ klicken.\n2. Wichtig: Nach dem Login bleibt die Seite bei einem sich drehenden Laderad stehen (oder meldet einen Fehler). Das ist völlig normal und bedeutet, dass die Anmeldung erfolgreich war!": "1. Voer het e-mailadres en wachtwoord van uw Miele-app-account in en klik op 'Aanmelden'.\n2. Belangrijk: na het aanmelden blijft de pagina hangen op een draaiend laadwiel (of toont een fout). Dat is volkomen normaal en betekent dat het aanmelden is gelukt.",
|
|
47
|
+
"Schritt 3: Adresse kopieren & GroupKey ermitteln": "Stap 3: adres kopiëren en GroupKey ophalen",
|
|
48
|
+
"1. Im Netzwerk-Tab (F12) ganz nach unten zur letzten (meist rot markierten) Zeile scrollen. Sie beginnt mit „redirect?redirect_uri=miele...“ oder „miele://oauth2-code/...“.\n2. Rechtsklick auf diese Zeile ➔ „URL kopieren“ (bzw. „Adresse des Links kopieren“).\n3. Die kopierte Adresse unten in das Feld einfügen und auf „GroupKey ermitteln“ klicken.": "1. Scroll in het tabblad Netwerk (F12) naar de allerlaatste (vaak rode) aanvraag die begint met 'redirect?redirect_uri=miele...' of 'miele://oauth2-code/...'.\n2. Klik met rechts op die regel ➔ 'URL kopiëren' (of 'Linkadres kopiëren').\n3. Plak het gekopieerde adres in het veld hieronder en klik op 'GroupKey ophalen'.",
|
|
49
|
+
"Der Adapter ermittelt die lokalen Zugangsdaten (GroupID/GroupKey) einmalig über eine Anmeldung mit Ihrem Miele-Konto. Die Miele-App funktioniert danach unverändert weiter. Es werden keine Zugangsdaten an Dritte übertragen.": "De adapter haalt de lokale inloggegevens (GroupID/GroupKey) eenmalig op via een aanmelding met uw Miele-account. De Miele-app blijft ongewijzigd werken. Er worden geen gegevens aan derden doorgegeven.",
|
|
50
|
+
"Nach erfolgreicher Ermittlung stehen GroupID und (verschlüsselt gespeicherter) GroupKey unten im Tab „Erweitert\". Speichern nicht vergessen.": "Na het ophalen staan GroupID en de (versleuteld opgeslagen) GroupKey op het tabblad 'Geavanceerd'. Vergeet niet op te slaan.",
|
|
51
|
+
"Hintergrund-Suche Intervall in Minuten": "Achtergrond detectie interval in minuten",
|
|
52
|
+
"Sekundengenaue Rest-/Laufzeit abrufen (DOP2)": "Exacte resterende/verstreken tijd in seconden ophalen (DOP2)",
|
|
53
|
+
"Sekunden-Abfrageintervall in Sekunden": "Seconden poll-interval in seconden",
|
|
54
|
+
"Verlauf": "Historie",
|
|
55
|
+
"Programme mitschreiben": "Programma’s vastleggen",
|
|
56
|
+
"Einträge im Ringpuffer": "Items in de ringbuffer",
|
|
57
|
+
"Wie viele der letzten Programme in cyclesJson stehen. Für die Schnellanzeige gedacht; Langzeitdaten kommen aus dem History-Adapter.": "Hoeveel recente programma’s in cyclesJson blijven staan. Bedoeld voor snelle weergave; langetermijndata komt uit de history-adapter.",
|
|
58
|
+
"Aufbewahrung in Tagen": "Bewaartermijn in dagen",
|
|
59
|
+
"Ältere Einträge fallen aus dem Ringpuffer. 730 Tage sind zwei Jahre.": "Oudere items vallen uit de ringbuffer. 730 dagen is twee jaar.",
|
|
60
|
+
"Zusätzlich in den History-Adapter schreiben": "Ook naar de history-adapter schrijven",
|
|
61
|
+
"Energie, Wasser und Dauer je Programm mit dem Zeitpunkt des Programmendes – damit lassen sich Diagramme über beliebige Zeiträume bauen.": "Energie, water en duur per programma, met het tijdstip van het programma-einde – zo kunnen grafieken elke periode beslaan.",
|
|
62
|
+
"History-Instanz": "History-instantie",
|
|
63
|
+
"Der Adapter schreibt jedes abgeschlossene Programm mit: Dauer, Programm, Energie und Wasser. Die Geräte selbst heben abgeschlossene Programme nicht auf, der Verlauf beginnt also mit dem Einschalten dieser Funktion – rückwirkend lässt er sich nicht füllen. Die letzten Programme stehen als JSON unter <Seriennummer>.history.cyclesJson, die Summen daneben.": "De adapter legt elk afgerond programma vast: duur, programma, energie en water. De apparaten bewaren afgeronde programma’s niet zelf, de historie begint dus bij het inschakelen – met terugwerkende kracht vullen kan niet. De laatste programma’s staan als JSON onder <serienummer>.history.cyclesJson, met de totalen ernaast."
|
|
44
64
|
}
|