Gerät: Miele WPS 820 Waschmaschine
Modul: XKM 3000 Z (Zigbee, Firmware 00.51)
Zigbee NWK: 0x53xx | IEEE: 0x001dxxxxxxxxxxxx
Profile: 0xC51E | Device: 0x0052
Koordinator: SLZB-06U via TCP 192.168.xxx.xxx:xxxx
Das XKM 3000 Z verwendet proprietäre Miele-Cluster auf Basis eines Zigbee-ähnlichen Profils (0xC51E).
Wichtige Erkenntnisse:
- Viele Daten sind nicht direkt lesbar.
- Das Gerät arbeitet stark event- und reportbasiert.
- Standard-Reads erfolgen über Alias-Cluster (
0x001B). - Einige Cluster dienen nur als Capability-Descriptor oder Event-Bus.
- Das Gerät besitzt intern ein deutlich umfangreicheres Diagnose- und Servicemodell als über Zigbee exportiert wird.
- Produktiv nutzbar sind vor allem Status, Programm, Phase, Restzeit, Startzeitvorwahl, Parameterblock, Tür offen/geschlossen und generische Fehlerzustände.
Produktiv nutzbare Daten kommen primär aus:
| Endpoint | Cluster | Funktion |
|---|---|---|
| EP210 | 0x001B |
Appliance Control Alias – Hauptdaten |
| EP210 | 0x7D00 |
Laufzeit-Reports unsolicited |
| EP210 | 0xFD02 |
Programm- und Parameterdaten |
| EP213 | 0xFD01 |
Gerätemetadaten |
| EP214 | 0xFD00 |
Capability-Descriptor |
| Endpoint | Hex | Cluster | Funktion |
|---|---|---|---|
| 210 | 0xD2 |
0x001B |
Hauptdaten, READ möglich |
| 210 | 0xD2 |
0x7D00 |
Laufzeit-Reports unsolicited |
| 210 | 0xD2 |
0x7DFD |
Programm-Reports unsolicited |
| 210 | 0xD2 |
0x0B02 |
Tür-/Event-Bus |
| 210 | 0xD2 |
0xFD02 |
Programm-/Parameterblock |
| 212 | 0xD4 |
0x000A |
Zigbee Time Cluster |
| 213 | 0xD5 |
0xFD01 |
Gerätemetadaten |
| 214 | 0xD6 |
0xFD00 |
Capability-Descriptor |
Frühere Parser interpretierten den Event-Bus fälschlich als 0x7D0B.
Der korrekte Event-Cluster ist:
0x0B02
0x7D0B bleibt bei direkten Reads unsupported und ist nicht der bestätigte Tür-/Event-Bus.
Reads an EP210/0x001B antworten intern als Cluster 0x7D00.
Das ist korrektes Geräteverhalten.
Direkte Reads auf 0x7D00 liefern:
0x86 UNSUPPORTED_ATTRIBUTE
Lesen funktioniert produktiv über den Alias 0x001B.
0x7DFD liefert vor allem unsolicited Reports für Programm- und Parameterinformationen.
Direkte Reads sind nicht stabil produktiv nutzbar.
Reiner Event-Bus für:
- Türstatus
- Zustandswechsel
- Power-/Session-Events
Keine lesbaren Attribute.
Antworten kommen intern als 0x7D00.
| Attribut | Typ | Inhalt |
|---|---|---|
0x0000 |
enum8 | status_code |
0x0001 |
uint8 | operation_flags |
0x0002 |
uint24 | prog_phase_raw |
0x0100 |
uint16 | Startzeitvorwahl / Maschinenzeitwert |
0x0102 |
uint16 | Restlaufzeit / Programmdauer |
0x0101, 0x0103 |
– | unsupported |
| Attribut | Typ | Inhalt |
|---|---|---|
0x0000 |
CharStr | leer bei Gerät aus |
0x0001 |
uint16 | Gerätetyp |
0x0010 |
uint24 LE | program_id |
0x0020 |
OctetStr[8] | parameter_block |
| Attribut | Typ | Inhalt |
|---|---|---|
0x0000 |
uint32 | UTCTime |
Das XKM3000Z kommuniziert aktiv mit dem Zigbee Time Cluster.
TimeSync ist produktiv sinnvoll, weil er vermutlich folgende Bereiche stabilisiert:
- Startzeitvorwahl
- interne Zeitlogik
- konsistente Delay-Berechnung
- Vermeidung veralteter interner Zeitbasis
Empfehlung für die Bridge:
ENABLE_TIME_SYNC = True
aber optional schaltbar lassen, damit Tests mit und ohne TimeSync möglich bleiben.
| Attribut | Typ | Inhalt |
|---|---|---|
0x0001 |
OctetStr[38] | Geräte-String |
0x0002 |
OctetStr[27] | Reporting-/Capability-Blob |
0x0010 |
uint24 | Treiber-Version |
0x0011 |
uint8 | Gerätetyp-Klasse |
0x0012 |
uint64 | Reporting-Konfiguration |
0x0030 |
uint8 | Temperaturstufen = 7 |
0x0031 |
uint8 | Schleuderstufen = 10 |
0x0020 |
– | dauerhaft 0x8F |
Das Attribut existiert, liefert jedoch dauerhaft:
0x8F
Beobachtet unter:
- off
- ready
- running
- finished
- error
- Service-Modus
Keine bestätigten Nutzdaten gefunden.
Wahrscheinlich:
- gesperrter Diagnosecontainer
- EEPROM-/Servicebereich
- interne Diagnoseebene
Nicht bestätigt:
- Live-Temperatur
- Heizstatus
- Verriegelungsstatus
- Fehlerhistorie per Zigbee
Capability-Descriptor.
Enthält:
- Action-IDs
- Capability-Listen
- Descriptor-Informationen
Keine direkt lesbaren Action-Attribute.
| Wert | Bedeutung |
|---|---|
1 |
off |
3 |
ready |
4 |
delay_start_active |
5 |
running |
7 |
finished |
8 |
error / alarm |
9 |
cancelled |
12 |
service_test_mode |
| Wert | Bedeutung |
|---|---|
0 |
Gerät komplett aus |
23 |
Normalbetrieb |
31 |
Schleudern oder Fehlerzustand |
Bit 0x08 bedeutet:
Motor-/Trommeldrehzahl über Schwellenwert
Nicht korrekt wäre:
- running
- heater active
- wash active
Running wird über status_code == 5 bestimmt.
Kodierung:
uint24 LE = B[0], B[1], B[2]
| Byte | Bedeutung |
|---|---|
| B[0] | Gerätezustand |
| B[1] | Programmphase |
| B[2] | konstant = 1 |
| B[0] | Bedeutung |
|---|---|
1 |
aus |
2 |
init / aufwachen |
3 |
normal-an |
4 |
ausschalten-Übergang |
7 |
Sonderzustand / Service (status=12) |
10 (0x0A) |
Fehler / Alarm |
| B[1] | Phase |
|---|---|
0 |
standby / aus |
4 |
waschen |
5 |
spülen |
9 |
pumpen |
10 |
schleudern |
11 |
fertig / knitterschutz |
12 |
programm_beendet |
Fehler werden nicht nur indirekt erkannt.
Korrekte Logik:
status_code = 8
UND
B[0] = 10 (0x0A)
→ Fehler / Alarm bestätigt.
Beispiel:
66570
Dekodierung:
B[0] = 10 → Fehler
B[1] = 4 → Fehler während Waschen
B[2] = 1
Damit ist Wasserzulauffehler korrekt ableitbar über:
- status_code
- Fehlerzustand
- Programmphase
Nicht korrekt wäre die alte Formulierung „nur indirekt über Phase B[1]=4“.
Richtig ist: Wasserzulauf-Fehlerbild wird über status=8, B[0]=0x0A und Kontext B[1]=4 erkannt.
Kontextabhängig:
| Status | Bedeutung |
|---|---|
status=4 |
Startzeitvorwahl |
status=5 |
teils Restzeit / Maschinenzeitwert |
status=3 |
meist 0 |
Kodierung:
raw = (HH << 8) + MM
minutes = HH * 60 + MM
Beispiele:
| Raw | Bedeutung |
|---|---|
0x000F |
15 Minuten |
0x010F |
1 h 15 min |
0x0400 |
4 h |
0x003B |
59 min |
Restlaufzeit / Programmdauer.
Gleiche Kodierung:
raw = (HH << 8) + MM
| ID | Programm |
|---|---|
0x7A00 |
Express 20 |
0x9200 |
Quick Power Wash |
0x0300 |
Pflegeleicht |
0x0400 |
Feinwäsche |
0x0100 |
Baumwolle |
0x0800 |
Wolle |
0x0900 |
Seide |
0x7B00 |
Dunkles/Jeans |
0x2500 |
Outdoor |
0x1B00 |
Imprägnieren |
0x1500 |
Pumpen/Schleudern |
0x1D00 |
Sportwäsche |
0x8100 |
Daunen |
0x5B03 |
Maschine reinigen |
0x3400 |
nur Spülen/Stärken |
0x1F00 |
Automatic Plus |
Wichtig: Werte wie 0x1E0501 sind keine Programm-ID, sondern Gerätemetadaten / Treiber-Version.
Bridge sollte unbekannte Programmwerte nicht als unknown_... publizieren, sondern ignorieren oder als program_id_candidate_ignored ablegen.
8-Byte Parameterblock.
| Byte | Bedeutung |
|---|---|
| B[0] | konstant |
| B[1] | konstant |
| B[2] | konstant |
| B[3] | Gewebe-/Programmart |
| B[4] | Options-/Capability-Information |
| B[5] | aktuelle Schleuderstufe |
| B[6+7] | maximale Schleuderdrehzahl |
Formel:
rpm = B[5] * 10
| Wert | RPM |
|---|---|
0x00 |
0 |
0x50 |
800 |
0x78 |
1200 |
0x8C |
1400 |
0xA0 |
1600 |
Big Endian.
| Hex | RPM |
|---|---|
0x0000 |
0 |
0x0320 |
800 |
0x0384 |
900 |
0x03E8 |
1000 |
0x044C |
1100 |
0x04B0 |
1200 |
0x0578 |
1400 |
0x05DC |
1500 |
0x0640 |
1600 |
Die Bit-Information bedeutet sehr wahrscheinlich:
Wasser Plus für aktuelles Programm verfügbar
Nicht:
Wasser Plus derzeit aktiv
Empfohlene Bridge-Bezeichnung:
water_plus_available
Für „Kurz“ konnte bisher keine belastbare Statusänderung beobachtet werden.
Bleibt daher:
short_option_candidate
Nicht umbenennen zu short_option_available, solange keine reproduzierbare Statusänderung vorliegt.
Cluster-Specific Event-Frames.
Beobachtete Werte:
| Wert | Bedeutung |
|---|---|
0x0001 |
Tür geschlossen |
0x0011 |
Tür geöffnet |
Zusätzlicher Kontext:
| Feld | Bedeutung |
|---|---|
0x00 |
Gerät aus |
0x02 |
Gerät an |
Ein separater Verriegelungsstatus wurde bisher nicht gefunden.
S24 entspricht intern Türkontakt / Türverriegelung.
Über Zigbee sichtbar ist bisher:
- Tür offen
- Tür geschlossen
Nicht sichtbar:
- separat verriegelt
- Verriegelungsmotor
- Verriegelungs-Endlage
| Kürzel | Bedeutung |
|---|---|
| B8 | NTC-Temperatursensor, misst Wassertemperatur im Laugenbehälter |
| S24 | Türverriegelungsschalter / Türkontakt |
| S78 | Schwimmerschalter Bodenwanne / Aquastop |
S78 meldet Wasser in der Bodenwanne und löst Aquastop aus.
Wichtig:
S78 ≠ Flusensieb offen
Ein geöffnetes Flusensieb wird nicht automatisch als Sensorzustand erkannt, solange die Bodenwanne / der Schwimmer nicht anspricht.
Ein echter S78-Alarm wäre wahrscheinlich mit einem Aquastop-/Leckagefehler verbunden, z. B. F0220.
Beobachtete Verbraucher-/Aktortests:
H24P1 + Y40/14
H24P2 + Y40/14 + 40R
H24P3 + Y40/14 + 60
H24P4 + Y40/14 + 80
H24P5 + Y40/14 + 100
Y12/2Y40 + 160
M6
M5W1
M8
M5 + M8
H3-6
Bedeutungslogik:
| Kürzel | Bedeutung |
|---|---|
| Yxx | Magnetventile / Wasserwege |
| Mx | Motoren / Pumpen / Antrieb |
| Hx | Heizung |
| R | Relais / Leistungsstufe |
| Bx | Fühler |
| Sx | Schalter / Sensor |
Intern existieren Sensoren und Verbraucher eindeutig.
Über Zigbee wurden bisher nicht direkt gefunden:
- Temperatur-Istwert B8
- Heizstatus
- Ventilstatus
- Verriegelungsstatus S24 locked
- Aquastop-Status S78
- einzelne Verbraucherzustände
- einzelne Aktortest-Rückmeldungen
Das Gerät exportiert nur reduzierte Runtime-Informationen.
Aktivierung:
Tür zu
→ Gerät aus
→ Start-Taste drücken und gedrückt halten
→ Gerät einschalten
→ Start-Taste loslassen
→ 3× drücken
→ beim dritten Mal gedrückt halten
→ warten bis das Gerät piept
→ loslassen
Im Service-Modus sichtbar:
- Fehlerspeicher
- Softwarestände
- Sensorlisten
- Verbrauchertests
- Diagnoseprogramme
Im Kundendienstmenü wurde Programmplatz 10 beobachtet.
Zigbee-Muster:
status_code = 12
B[0] = 7
B[1] = 0
Bedeutung:
service_test_mode / Sonderzustand
Im Servicemenü beobachtete Fehlercodes:
F0010
F0011
F0015
F0047
F0016
F0020
F0092
F4100
Die Fehlerhistorie existiert intern sicher.
Über Zigbee wurde bisher jedoch nur exportiert:
status_code = 8
B[0] = 0x0A
Keine vollständigen F-Codes.
Zigbee-seitig beobachtbares Muster:
status_code = 8
B[0] = 0x0A
B[1] = 4
0x0102 = 0
Bedeutung:
Fehler / Alarm während Waschen
Der konkrete Miele-F-Code wird nicht über die bisher lesbaren Zigbee-Attribute übertragen.
Der Fehlerspeicher sitzt sehr wahrscheinlich intern in der Maschine, nicht im XKM3000Z als offen lesbarer Zigbee-Speicher.
Mögliche Speicherorte:
- EEPROM / NVM der Maschinensteuerung
- Service-Menü-Diagnosebereich
- gesperrter Diagnosecontainer
FD01/0x0020 = 0x8F bleibt der stärkste Kandidat für einen gesperrten Diagnosecontainer, liefert aber bisher keine Nutzdaten.
| Modul | Version |
|---|---|
| ELP270 | 3299 |
| EW | 3368 |
| LNG | 5598 |
| EZL270 | 2993 |
| ELP270U | 2926 |
Interpretation:
| Modul | Vermutete Funktion |
|---|---|
| ELP | Haupt-/Leistungssteuerung |
| EW | Waschlogik |
| LNG | Sprache / Lokalisierung |
| EZL | Zusatzlogik / Kommunikation |
| ELP270U | Variante / Update-/Untermodul |
Das XKM3000Z liefert:
- keine echte Waschtemperatur
- keinen Temperatur-Istwert
- keinen Heizstatus
Die Temperatur wird sehr wahrscheinlich in der originalen Qivicon-App nur geschätzt über:
- Programmlogik
- Capability-Tabelle
- Defaultwerte
Empfehlung:
temperature_target_estimated
explizit als geschätzter Wert kennzeichnen.
FD01/0x0030 liefert:
7
Das ist ein statischer Capability-Wert, kein Sensorwert.
Wahrscheinliche Stufen:
20 / 30 / 40 / 50 / 60 / 75 / 90 °C
Cluster:
0x001B / attr 0x0100
Sofortstart aus aktiver Startzeitvorwahl:
0x0000
Die alte Qivicon-App nutzte sehr wahrscheinlich diese Methode.
| Funktion | Ergebnis |
|---|---|
| Programmwahl | springt zurück |
| Pause | keine Wirkung |
| Cancel | keine Wirkung |
| Spin-Write | ignoriert |
| parameter_block write | ACK ohne Effekt |
| Kurz | nicht entschlüsselt |
| Wasser Plus setzen | nicht bestätigt, nur Verfügbarkeit erkannt |
Sehr wahrscheinlich limitiert durch:
- Maschinenfirmware
- physikalischen Drehwahlschalter
- fehlende Remote-Freigabe
- alte XKM3000Z-/WPS820-Architektur
| Feature | Status |
|---|---|
| Echte Waschtemperatur | nicht gefunden |
| Heizungsstatus | nicht gefunden |
| Wasserzulaufstatus | nicht direkt, aber Fehlerzustand ableitbar |
| Ventilstatus | nicht gefunden |
| Tür verriegelt separat | nicht gefunden |
| Aquastop S78 direkt | nicht gefunden |
| Verbraucherzustände | nicht gefunden |
| F-Codes | nicht über Zigbee sichtbar |
| Fehlerhistorie | nur im Servicemenü sichtbar |
| Remote-Programmwahl | nicht funktionsfähig |
| Echte Pause/Resume | nicht funktionsfähig |
| FD01/0x0020 | dauerhaft 0x8F |
sensor.status
sensor.status_code
binary_sensor.running
sensor.program
sensor.program_id
sensor.remaining_time_min
sensor.start_delay_min
sensor.program_phase_raw
sensor.program_phase_a
sensor.program_phase_b
sensor.program_phase_text
binary_sensor.door_open
sensor.current_spin_rpm
sensor.max_spin_rpm
binary_sensor.motor_speed_above_threshold
sensor.water_plus_available
sensor.fd01_0020_status
sensor.operation_flags
sensor.parameter_block_hex
sensor.event_raw_hex
sensor.program_id_candidate_ignored
sensor.short_option_candidate
sensor.temperature_target_estimated
binary_sensor.fault
sensor.fault_text
sensor.fault_context
Empfohlene Ableitung:
fault_active = status_code == 8 and phase_a == 10Wasserzulauf-Kontext:
if status_code == 8 and phase_a == 10 and phase_b == 4:
fault_text = "Fehler/Alarm während Waschen – möglicher Wasserzulauf"0x0001 Geräte-String: E0001xxxxxxxx WMF820 095xxxxxx
└─ Serien-Nr. ──┘ └─ Typ ─┘ └─ Art.Nr ─┘
Firmware-String: 00.51 E0001xxxxxxxx 00 XKM3000Z 09731580
└─ FW ─┘ └─ XKM-Seriennummer ────┘ └─ Art.Nr ─┘
0x0012 Reporting-Konfiguration:
Enthält:
> min reporting interval
> max reporting interval
0x0010 Treiber-Version: 0x1E0501 (1.5.30 oder 30.5.1)
0x0011 Gerätetyp: 3 (Waschmaschine)
0x0030 Temperaturstufen: 7 → 20/30/40/50/60/75/90°C (statischer Capability-Wert, KEIN Livetwert)
0x0031 Schleuderstufen: 10 → 0/400/600/800/900/1000/1100/1200/1400/1500/1600 rpm (Statischer Capability-Wert)
0x0020 Antwortet dauerhaft:
> 0x8F
> Bedeutung wahrscheinlich:
- Attribut existiert, aber nicht lesbar/freigegeben Keine nutzbaren Live-Daten gefunden.
Die WMF 820 WPS implementiert intern ein deutlich umfangreicheres Diagnose- und Servicemodell als über Zigbee - des XKM 3000 Z - offen exportiert wird.
Die Zigbee-Schnittstelle liefert:
- Runtime-Status
- Programmstatus
- Phasenmodell
- Restzeiten
- Startzeitvorwahl
- Parameterblock
- Tür offen/geschlossen
- generische Fehlerzustände
- Service-Test-Modus-Erkennung
Nicht exportiert werden:
- echte Temperaturwerte
- Heizstatus
- detaillierte Fehlercodes
- Verbraucherzustände
- interne Sensorwerte
- EEPROM-Diagnosedaten
- vollständiger Fehlerspeicher
Die Architektur ist technisch leistungsfähig sowie deutlich leistungsfähiger als viele moderne Cloud-APIs., aber bewusst auf reduzierte Remote-Diagnose und begrenzte Steuerbarkeit limitiert.
Die eigentliche Einschränkung liegt nicht im Zigbee-Transport des XKM 3000 Z, sondern:
- in der Maschinenfirmware
- den freigegebenen Schreibfunktionen
- den von Miele bewusst nicht exportierten Parametern