Heater Command (0x20)
Signal-ID: 0x20 | PID: 0x20 | Richtung: Master → Slave
Einheitlicher Befehls-Frame zur Steuerung aller Heizungsfunktionen: Raumheizung, Wasserheizung, Lüftung und Energiequellenwahl.
Frame-Layout
Frame: C2 2B D0 FA 09 B3 E0 0F
│ │ │ │ │ │ │ └─ Byte 7: Normalerweise 0x0F (?)
│ │ │ │ │ │ └──── Byte 6: Immer 0xE0 (?)
│ │ │ │ │ └─────── Byte 5: Lüftungsstufe + Energie-Bitmap (✓)
│ │ │ │ └────────── Byte 4: Elektro-Leistungsstufe (✓)
│ │ │ └───────────── Byte 3: Brennstoffsteuerung (✓)
│ │ └──────────────── Byte 2: Wassertemperaturstufe (✓)
│ └─────────────────── Byte 1: Wasser-Hot-Flag + Raumheizung (✓)
└────────────────────── Byte 0: Raumtemperaturcode (✓)
✓ = Bestätigt ? = Unbekannt/Teilweise bekannt
Byte 0: Raumtemperaturcode
Ziel-Raumtemperatur als einzelnes Byte kodiert.
Spezial: 0xAA = Aus (keine Raumheizung)
Formel: code = (170 + (temp_celsius - 5) * 10) & 0xFF
| Temp (°C) | Code | Temp (°C) | Code |
|---|---|---|---|
| Aus | 0xAA | 18 | 0x5E |
| 5 | 0xDC | 19 | 0x68 |
| 6 | 0xE6 | 20 | 0x72 |
| 7 | 0xF0 | 21 | 0x7C |
| 8 | 0xFA | 22 | 0x86 |
| 9 | 0x04 | 23 | 0x90 |
| 10 | 0x0E | 24 | 0x9A |
| 11 | 0x18 | 25 | 0xA4 |
| 12 | 0x22 | 26 | 0xAE |
| 13 | 0x2C | 27 | 0xB8 |
| 14 | 0x36 | 28 | 0xC2 |
| 15 | 0x40 | 29 | 0xCC |
| 16 | 0x4A | 30 | 0xD6 |
| 17 | 0x54 |
Dekodierungsbeispiel
Code 0x86 = 134 dezimal
temp = ((134 - 170) & 0xFF) / 10 + 5
= (220) / 10 + 5
= 22 + 5 - 5 = 22°C
Byte 1: Steuerungs-Flags
Byte 1 verwendet einen Basiswert von 0xAA, wobei nur Bit 0 und Bit 7 modifiziert werden. Bits 1-6 sind immer fest.
Bit-Level-Aufschlüsselung
Byte 1: 0x2B = 0b00101011
│││││││└─ Bit 0: Raumheizung aktivieren (✓)
││││││└── Bit 1: Fest (1)
│││││└─── Bit 2: Fest (0)
││││└──── Bit 3: Fest (1)
│││└───── Bit 4: Fest (0)
││└────── Bit 5: Fest (1)
│└─────── Bit 6: Fest (0)
└──────── Bit 7: Wasser-Hot-Flag (INVERTIERT!) (✓)
Bit 0: Heizung aktivieren
heating_enabled = (byte1 & 0x01) != 0
| Wert | Bedeutung |
|---|---|
0 | Raumheizung AUS |
1 | Raumheizung AN |
Bit 7: Wassertemperaturstufen-Flag
Hinweis: Dieses Bit zeigt die Wassertemperaturstufe an, nicht ein einfaches Boiler-An/Aus. Es ist invertiert - 0 bedeutet Hot (60°C), 1 bedeutet Aus oder Eco (40°C).
water_hot = (byte1 & 0x80) == 0
| Wert | Bedeutung |
|---|---|
0 | Wasser Hot (60°C) |
1 | Wasser Aus oder Eco (40°C) |
Beobachtetes Verhalten:
- Wasser Aus: Bit 7 = 1
- Wasser Eco (40°C): Bit 7 = 1
- Wasser Hot (60°C): Bit 7 = 0
Bits 1-6: Festes Muster
Bits 1-6 sind immer 0b010101 (vom Basiswert 0xAA geerbt). Sie werden nie modifiziert.
Häufige Byte 1 Werte
| Wert | Binär | Wassertemp | Raumheizung |
|---|---|---|---|
0xAA | 1010 1010 | Aus/Eco | AUS |
0xAB | 1010 1011 | Aus/Eco | AN |
0x2A | 0010 1010 | Hot | AUS |
0x2B | 0010 1011 | Hot | AN |
Byte 2: Wassertemperaturstufe
Ziel-Wassertemperatureinstellung.
| Wert | Stufe | Temperatur |
|---|---|---|
0xAA | Aus | Wasserheizung deaktiviert |
0xC3 | Eco | ~40°C |
0xD0 | Hot | ~60°C |
Hinweis: Bytes 1 und 2 arbeiten für die Wassertemperatur zusammen:
- Aus: Byte 2 =
0xAA, Byte 1 Bit 7 = 1 (0xAAoder0xAB) - Eco (40°C): Byte 2 =
0xC3, Byte 1 Bit 7 = 1 (0xAAoder0xAB) - Hot (60°C): Byte 2 =
0xD0, Byte 1 Bit 7 = 0 (0x2Aoder0x2B)
Byte 3: Brennstoffsteuerung
Aktiviert oder deaktiviert die brennstoffbasierte Heizung (Gas oder Diesel).
| Wert | Bedeutung |
|---|---|
0x00 | Brennstoff deaktiviert |
0xFA | Brennstoff aktiviert |
Byte 4: Elektro-Leistungsstufe
Setzt das Leistungslimit des elektrischen Heizelements.
| Wert | Leistung | Watt |
|---|---|---|
0x00 | Aus | 0W |
0x09 | Stufe 1 | 900W |
0x12 | Stufe 2 | 1800W |
Hinweis: Der Wert scheint die Leistung in 100W-Einheiten zu sein (0x09 = 9 = 900W, 0x12 = 18 = 1800W).
Byte 5: Lüftungsstufe + Energie-Bitmap
Byte 5: 0xB3 = 0b10110011
││││││││
││││││└┴─ Bits 0-1: Energiequellen-Bitmap (✓)
││││└┴─── Bits 2-3: Reserviert (immer 0) (✓)
└┴┴┴───── Bits 4-7: Lüftungsstufe (✓)
Bits 0-1: Energiequellen-Bitmap
Spiegelt die Brennstoff- und Elektroeinstellungen aus Bytes 3 und 4 wider.
| Bits | Binär | Energiequelle |
|---|---|---|
0x0 | 00 | Keine (aus) |
0x1 | 01 | Nur Brennstoff |
0x2 | 10 | Nur Elektro |
0x3 | 11 | Mix (Brennstoff + Elektro) |
Bits 2-3: Reserviert
Immer 0 in allen beobachteten Frames und Implementierungen. Zweck unbekannt, wahrscheinlich für zukünftige Verwendung reserviert.
Bits 4-7: Lüftungsstufe (Oberes Nibble)
| Nibble | Stufe | Beschreibung |
|---|---|---|
0x0 | Aus | Keine Lüftung |
0x1 | Stufe 1 | Niedrigste manuelle |
0x2 | Stufe 2 | |
0x3 | Stufe 3 | |
0x4 | Stufe 4 | |
0x5 | Stufe 5 | |
0x6 | Stufe 6 | |
0x7 | Stufe 7 | |
0x8 | Stufe 8 | |
0x9 | Stufe 9 | |
0xA | Stufe 10 | Höchste manuelle |
0xB | Eco | Automatik/Comfort-Modus |
0xC | ? | Nicht dokumentiert, möglicherweise undefiniert |
0xD | High | Hochgeschwindigkeit/Boost-Modus |
Hinweis: Manuelle Lüftungsstufen (1-10) können verwendet werden, wenn die Heizung aus ist. Eco und High werden typischerweise bei aktiver Heizung verwendet. Wert 0xC wurde in keiner Implementierung beobachtet.
Bytes 6-7: Konstant/Unbekannt (Teilweise bestätigt)
| Byte | Wert | Status |
|---|---|---|
| 6 | 0xE0 | Immer konstant (✓) |
| 7 | 0x0F | Normalerweise konstant, aber 0x00 in einigen Frames beobachtet (?) |
Beobachtungen
- Byte 6 (
0xE0): Bestätigt konstant über alle Implementierungen und beobachteten Frames. - Byte 7 (
0x0F): Normalerweise0x0F, aber ein Testfall imtruma-driverzeigt0x00. Dies könnte anzeigen:- Gerätespezifische Variation
- Protokollversions-Indikator
- Reserviertes/ungenutztes Feld
Beispiel-Frames
Alles aus
AA AA AA 00 00 00 E0 0F
│ │ │ │ │ │
│ │ │ │ │ └─ Lüftung: Aus, Energie: Keine
│ │ │ │ └──── Elektro: Aus
│ │ │ └─────── Brennstoff: Deaktiviert
│ │ └────────── Wasser: Aus
│ └───────────── Flags: Boiler AUS, Heizung AUS
└──────────────── Raum: Aus
Nur Brennstoff, Lüftungsstufe 2
AA AA AA FA 00 21 E0 0F
│ │ │ │ │ │
│ │ │ │ │ └─ Lüftung: Stufe 2 (0x2), Energie: Brennstoff (0x1)
│ │ │ │ └──── Elektro: Aus
│ │ │ └─────── Brennstoff: Aktiviert
│ │ └────────── Wasser: Aus
│ └───────────── Flags: Boiler AUS, Heizung AUS
└──────────────── Raum: Aus
Raumheizung 28°C, nur Brennstoff, Comfort-Lüfter
C2 AB AA FA 00 B1 E0 0F
│ │ │ │ │ │
│ │ │ │ │ └─ Lüftung: Comfort (0xB), Energie: Brennstoff (0x1)
│ │ │ │ └──── Elektro: Aus
│ │ │ └─────── Brennstoff: Aktiviert
│ │ └────────── Wasser: Aus
│ └───────────── Flags: Boiler AUS, Heizung AN
└──────────────── Raum: 28°C
Raumheizung 28°C, Wasser Hot, nur Brennstoff, Comfort-Lüfter
C2 2B D0 FA 00 B1 E0 0F
│ │ │ │ │ │
│ │ │ │ │ └─ Lüftung: Comfort (0xB), Energie: Brennstoff (0x1)
│ │ │ │ └──── Elektro: Aus
│ │ │ └─────── Brennstoff: Aktiviert
│ │ └────────── Wasser: Hot (60°C)
│ └───────────── Flags: Boiler AN, Heizung AN
└──────────────── Raum: 28°C
Raumheizung 28°C, Wasser Hot, Mix-Modus (900W), Comfort-Lüfter
C2 2B D0 FA 09 B3 E0 0F
│ │ │ │ │ │
│ │ │ │ │ └─ Lüftung: Comfort (0xB), Energie: Mix (0x3)
│ │ │ │ └──── Elektro: 900W
│ │ │ └─────── Brennstoff: Aktiviert
│ │ └────────── Wasser: Hot (60°C)
│ └───────────── Flags: Boiler AN, Heizung AN
└──────────────── Raum: 28°C
Nur Wasser-Boost (keine Raumheizung)
Wasser-Boost ist Wasserheizung ohne Raumlüftung. Der Lüfter bleibt aus, da keine warme Luft verteilt werden muss.
AA 2A D0 FA 00 01 E0 0F
│ │ │ │ │ │
│ │ │ │ │ └─ Lüftung: Aus (0x0), Energie: Brennstoff (0x1)
│ │ │ │ └──── Elektro: Aus
│ │ │ └─────── Brennstoff: Aktiviert
│ │ └────────── Wasser: Hot (60°C)
│ └───────────── Flags: Wasser Hot, Heizung AUS
└──────────────── Raum: Aus
Hinweis: Wasser-Boost ist identisch mit Wasser Hot - der Unterschied ist, dass die Raumheizung deaktiviert ist, sodass der Lüfter nicht läuft. Dies ermöglicht, dass alle Heizenergie in den Wassertank geht.
Erstbefüllung (Raum 30°C, Brennstoff, Comfort)
D6 AB AA FA 00 B1 E0 0F
│ │ │ │ │ │
│ │ │ │ │ └─ Lüftung: Comfort (0xB), Energie: Brennstoff (0x1)
│ │ │ │ └──── Elektro: Aus
│ │ │ └─────── Brennstoff: Aktiviert
│ │ └────────── Wasser: Aus
│ └───────────── Flags: Boiler AUS, Heizung AN
└──────────────── Raum: 30°C
Zustandsabhängigkeiten
Wasser-Boost-Modus
Wasser-Boost ist ein Display-seitiges Konzept, kein separates Protokoll-Flag. Es wird aus der Kombination der Einstellungen abgeleitet:
water_boost = water_temp == Hot AND NOT room_heating_enabled
Wenn Wasser-Boost aktiv ist:
- Wasser wird auf 60°C (Hot) erhitzt
- Raumheizung ist deaktiviert (Byte 0 =
0xAA, Byte 1 Bit 0 = 0) - Lüfter bleibt aus (Byte 5 oberes Nibble =
0x0) - Alle Heizenergie geht in den Wassertank
Die Heizung sieht den gleichen Befehl wie “Wasser Hot” - der Verhaltensunterschied ist, dass ohne Raumheizung der Lüfter nicht läuft.
Energiequellen-Bitmap-Berechnung
Das Energie-Bitmap in Byte 5 (Bits 0-1) sollte Bytes 3 und 4 spiegeln:
bitmap = 0
if fuel_enabled:
bitmap |= 0x01
if electric_power > 0:
bitmap |= 0x02
Lüftungsmodi
- Aus (0x0): Keine Lüftung - wird für nur-Wasser-Heizung verwendet
- Manuelle Stufen (1-10): Können unabhängig von der Heizung verwendet werden
- Eco/Comfort (0xB): Automatikmodus, typischerweise bei aktiver Raumheizung verwendet
- High (0xD): Hochgeschwindigkeits-Lüftung
