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)CodeTemp (°C)Code
Aus0xAA180x5E
50xDC190x68
60xE6200x72
70xF0210x7C
80xFA220x86
90x04230x90
100x0E240x9A
110x18250xA4
120x22260xAE
130x2C270xB8
140x36280xC2
150x40290xCC
160x4A300xD6
170x54

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
WertBedeutung
0Raumheizung AUS
1Raumheizung 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
WertBedeutung
0Wasser Hot (60°C)
1Wasser 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

WertBinärWassertempRaumheizung
0xAA1010 1010Aus/EcoAUS
0xAB1010 1011Aus/EcoAN
0x2A0010 1010HotAUS
0x2B0010 1011HotAN

Byte 2: Wassertemperaturstufe

Ziel-Wassertemperatureinstellung.

WertStufeTemperatur
0xAAAusWasserheizung deaktiviert
0xC3Eco~40°C
0xD0Hot~60°C

Hinweis: Bytes 1 und 2 arbeiten für die Wassertemperatur zusammen:

  • Aus: Byte 2 = 0xAA, Byte 1 Bit 7 = 1 (0xAA oder 0xAB)
  • Eco (40°C): Byte 2 = 0xC3, Byte 1 Bit 7 = 1 (0xAA oder 0xAB)
  • Hot (60°C): Byte 2 = 0xD0, Byte 1 Bit 7 = 0 (0x2A oder 0x2B)

Byte 3: Brennstoffsteuerung

Aktiviert oder deaktiviert die brennstoffbasierte Heizung (Gas oder Diesel).

WertBedeutung
0x00Brennstoff deaktiviert
0xFABrennstoff aktiviert

Byte 4: Elektro-Leistungsstufe

Setzt das Leistungslimit des elektrischen Heizelements.

WertLeistungWatt
0x00Aus0W
0x09Stufe 1900W
0x12Stufe 21800W

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.

BitsBinärEnergiequelle
0x000Keine (aus)
0x101Nur Brennstoff
0x210Nur Elektro
0x311Mix (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)

NibbleStufeBeschreibung
0x0AusKeine Lüftung
0x1Stufe 1Niedrigste manuelle
0x2Stufe 2
0x3Stufe 3
0x4Stufe 4
0x5Stufe 5
0x6Stufe 6
0x7Stufe 7
0x8Stufe 8
0x9Stufe 9
0xAStufe 10Höchste manuelle
0xBEcoAutomatik/Comfort-Modus
0xC?Nicht dokumentiert, möglicherweise undefiniert
0xDHighHochgeschwindigkeit/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)

ByteWertStatus
60xE0Immer konstant (✓)
70x0FNormalerweise konstant, aber 0x00 in einigen Frames beobachtet (?)

Beobachtungen

  • Byte 6 (0xE0): Bestätigt konstant über alle Implementierungen und beobachteten Frames.
  • Byte 7 (0x0F): Normalerweise 0x0F, aber ein Testfall im truma-driver zeigt 0x00. 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