Autoterm Heizgerät Protokoll

Diese Protokolldokumentation wurde durch Reverse Engineering erstellt und kann unvollständig oder fehlerhaft sein.

Erkenntnisse stammen aus folgenden Community-Projekten:

Autoterm-Heizgeräte stellen ein einfaches binäres Anfrage/Antwort-Protokoll über eine 5V-UART-Verbindung bereit. Das Bedienteil fragt das Heizgerät zyklisch mit einer Statusanfrage und einem Heartbeat mit Paneltemperatur ab und sendet bei Bedarf Steuerungs-Frames (Start, Stopp, Einstellungen, Lüftung).

Übertragungsschicht

ParameterWert
Signalpegel5V, 8N1, keine Flusskontrolle
Baudrate9600 oder 19200 (modell- bzw. firmwareabhängig)

Zur automatischen Erkennung der Baudrate kann eine Statusanfrage bei jeder Kandidatenrate gesendet werden; die Rate, bei der eine gültige Antwort zurückkommt, ist die konfigurierte.

Rahmenformat

Alle Frames verwenden dieselbe Hülle:

Beispiel: AA 03 06 00 01 01 ... 05 CC CC
          │  │  │  │  │  └───────┘ └───┘
          │  │  │  │  │      │       │
          │  │  │  │  │      │       └── CRC-16/Modbus (Big-Endian)
          │  │  │  │  │      └────────── Payload (Länge = Byte 2)
          │  │  │  │  └───────────────── Befehls-ID
          │  │  │  └──────────────────── Reserviert (immer 0x00)
          │  │  └─────────────────────── Payload-Länge
          │  └────────────────────────── Richtung
          └───────────────────────────── Präambel (immer 0xAA)
ByteFeldWerte
0Präambel0xAA
1Richtung0x03 = Bedienteil → Heizgerät, 0x04 = Heizgerät → Bedienteil
2Payload-Länge (N)Bytes der Payload (ohne Header und CRC)
3ReserviertImmer 0x00
4Befehls-IDSiehe Befehle
5 .. 4+NPayloadBefehlsspezifisch
5+N .. 6+NCRC-16/ModbusBerechnet über Bytes 0 .. 4+N, High-Byte zuerst

CRC-16/Modbus-Parameter: Polynom 0xA001, Initialwert 0xFFFF, keine Spiegelung des Ergebnisses. Die CRC wird Big-Endian übertragen — das High-Byte geht zuerst über die Leitung, entgegen der bei den meisten Modbus-Implementierungen üblichen Byte-Reihenfolge.

Antworten

Jeder Bedienteil → Heizgerät-Befehl erhält eine Antwort mit Richtung = 0x04 und derselben Befehls-ID in Byte 4. Die Payload der Antwort folgt einem von drei Mustern: strukturierte Daten (0x0F Status, 0x02 Lesen), ein Payload-Echo der Anfrage (0x01, 0x02 Schreiben, 0x11, teilweise 0x23), oder leer (0x03). Die genauen Bytes finden sich beim jeweiligen Befehl.

Antwort-Payload-Inhalte abseits von 0x0F Status und 0x02 Lesen stammen aus Community-Reverse-Engineering-Aufzeichnungen und sind nicht unabhängig verifiziert.

Befehle

IDNameRichtungAntwort-Payload
0x01StartB → H6-Byte-Echo der Einstellungen
0x02EinstellungenB → H6 Bytes Einstellungen (Schreiben: Echo, Lesen: aktuell)
0x03StoppB → Hleer
0x0FStatusbeide19-Byte-Status
0x11Paneltemperatur / Heartbeatbeide1-Byte-Echo
0x23LüftungB → H4-Byte-Teil-Echo

0x01 — Start

Startet einen neuen Heizzyklus aus dem Standby. Die 6-Byte-Payload entspricht der von Einstellungen (0x02); die Feldbelegung ist dort beschrieben.

TX  AA 03 06 00 01 01 00 04 00 00 05 <CRC>      ; Beispiel: Leistungsmodus, Stufe 5
RX  AA 04 06 00 01 01 00 04 00 00 05 <CRC>      ; Heizgerät echot die übernommenen Einstellungen

Der Zustand wechselt anschließend bei den folgenden Statusabfragen von Startphase zu Heizen.

0x02 — Einstellungen

Befehl 0x02 hat zwei Varianten:

  • Schreiben (6-Byte-Payload) — aktualisiert Parameter eines laufenden Heizgeräts, ohne es neu zu starten.
  • Lesen (leere Payload) — fragt die aktive Konfiguration des Heizgeräts ab. Das Heizgerät antwortet mit einer 6-Byte-Payload in derselben Feldbelegung.
AA 03 06 00 02 01 00 02 14 01 05 CC CC      ; Schreiben: useWT=1, Quelle=Panel, Soll=20°C, Wartemodus=an, Stufe=5
AA 03 00 00 02 9D BD                        ; Leseanfrage
AA 04 06 00 02 01 00 02 14 01 05 <CRC>      ; Leseantwort (gleiche Feldbelegung)
Payload-ByteFeldHinweise
0useWT0x01 deaktiviert die Laufzeitbegrenzung (Heizgerät läuft unbegrenzt)
1LaufzeitMinuten der programmierten Laufzeit; nur relevant, wenn useWT = 0x00
2TemperaturquelleBetriebsmodus — siehe Temperaturquelle
3SolltemperaturSollwert in °C (vorzeichenlos). Ignoriert, wenn Temperaturquelle = 0x04
4Wartemodus0x00 = Abschalten bei Erreichen des Sollwerts, 0x01 = Leerlauf-Lüftung bei Sollwert, Wiederzündung bei Unterschreitung
5Leistungsstufe0x010x09 (1 = niedrigste). Wird im Leistungsmodus direkt verwendet und in Thermostatmodi als Anfangsleistung

Die Leseform beim Start abzufragen, stellt nach einem Neustart des Controllers den aktiven Modus, Sollwert und die Leistungsstufe wieder her; zyklisches Abfragen erkennt Änderungen, die ein anderer Controller am Bus vorgenommen hat. OEM-Bedienteile fragen sie alle paar Sekunden ab.

0x03 — Stopp

Stoppt das Heizgerät. Der Zustand wechselt über die folgenden Abfragen von Abschalten zu Abkühlen zu Standby.

TX  AA 03 00 00 03 5D 7C
RX  AA 04 00 00 03 29 7D      ; Quittung mit leerer Payload

Keine Anfrage-Payload; die Antwort enthält ebenfalls keine Payload.

0x0F — Status

Fragt den aktuellen Zustand und die Sensorwerte des Heizgeräts ab.

Anfrage (keine Payload):

AA 03 00 00 0F 58 7C

Antwort (19-Byte-Payload):

AA 04 13 00 0F  03 00 00 0A 7F 00 84 01 B2 04 00 37 37 00 6D 00 6D 00 64  C3 0A
                │  │     │  │           └──┴── Wärmetauschertemperatur (K)
                │  │     │  └────────────────── externer Temperatursensor
                │  │     └───────────────────── interne Temperatur
                │  └─────────────────────────── Zustand Minor
                └────────────────────────────── Zustand Major
Payload-ByteFeldKodierung
0Zustand MajorSiehe Heizgerätestatus
1Zustand MinorSiehe Heizgerätestatus
2UnbekanntBeobachtet 0x00
3Interne TemperaturSigned 8-Bit, °C
4Externer TemperatursensorSigned 8-Bit, °C. 0x7F = Sensor nicht angeschlossen
5UnbekanntBeobachtet 0x00
6UnbekanntBeobachtet 0x84
7–8Wärmetauschertemperaturu16 Big-Endian, Kelvin (°C = Wert − 273)
9UnbekanntBeobachtet 0x04
10UnbekanntBeobachtet 0x00
11UnbekanntBeobachtet 0x37
12UnbekanntBeobachtet 0x37
13UnbekanntBeobachtet 0x00
14LüfterdrehzahlRPM ÷ 60 (Umdrehungen pro Sekunde)
15UnbekanntBeobachtet 0x00
16PumpenfrequenzHz × 100 (Wert 0x6D = 1,09 Hz)
17UnbekanntBeobachtet 0x00
18UnbekanntBeobachtet 0x64

Dekodierungsbeispiel

Für den obigen Antwort-Frame:

Zustand:       Major=0x03, Minor=0x00 → Heizen
Intern:        0x0A = 10 → 10°C
Extern:        0x7F → Sensor nicht angeschlossen
Wärmetauscher: 0x01B2 = 434 → 434 − 273 = 161°C
Lüfter:        0x6D = 109 → 109 × 60 = 6540 RPM
Pumpe:         0x6D = 109 → 109 × 0.01 = 1,09 Hz

0x11 — Paneltemperatur / Heartbeat

Überträgt die Paneltemperatur an das Heizgerät und dient zugleich als verpflichtender Heartbeat. Das Bedienteil muss diesen unabhängig von der konfigurierten Temperaturquelle einmal pro Sekunde senden; das Heizgerät meldet nach etwa drei Sekunden Stille einen „Kein Panel"-Fehler. Das Heizgerät schickt denselben Frame als Bestätigung zurück.

AA 03 01 00 11 1A 76 D0      ; Anfrage: Paneltemperatur = 26°C
AA 04 01 00 11 1A B6 65      ; Echo
ByteFeldKodierung
5PaneltemperaturSigned 8-Bit, °C. 0x7F signalisiert „kein Panelsensor"

Im Modus Temperaturquelle = 0x02 (Panel) ist das Byte der Wert, gegen den das Heizgerät regelt. In allen anderen Modi ist das Byte weiterhin erforderlich, aber rein informativ — 0x7F ist die übliche Wahl und das, was OEM-Bedienteile senden, wenn kein Panelsensor verbaut ist.

0x23 — Lüftung

Betreibt nur den Lüfter, ohne Zündung.

TX  AA 03 04 00 23 FF FF 08 FF E1 0B      ; Lüftungsstufe 8
RX  AA 04 04 00 23 FF FF 08 43 B6 4B      ; Bytes 0–2 spiegeln die Anfrage, Byte 3 weicht ab
Payload-ByteFeldWerte
0UnbekanntIn der Anfrage immer 0xFF
1UnbekanntIn der Anfrage immer 0xFF
2Lüftungsstufe0x000x09
3UnbekanntIn der Anfrage 0xFF; das Heizgerät antwortet mit einem abweichenden Wert (Zweck unbekannt)

Feld-Referenz

Temperaturquelle

WertModusVerhalten
0x01Interner Sensor (Thermostat)Regelt gegen den eigenen Ansaugluftsensor des Heizgeräts. Ungenau, da diese Sonde im Lufteinlass des Heizgeräts sitzt und nicht im Wohnraum
0x02Panelsensor (Thermostat)Regelt gegen die Temperatur, die das Bedienteil über 0x11 sendet
0x03Externer Sensor (Thermostat)Regelt gegen eine separate, direkt am Heizgerätekabelbaum angeschlossene Sonde
0x04LeistungsmodusKein Thermostat — Heizgerät läuft mit fester Leistungsstufe (1 – 9). Bytes 3 und 4 der Einstellungen-Payload werden ignoriert

Heizgerätestatus

Wird als (Major, Minor)-Paar in der Statusantwort kodiert. Das Major-Byte beschreibt die übergeordnete Phase; das Minor-Byte einen Unterschritt.

MajorMinorZustandBeschreibung
0x000x01StandbyBereit, wartet auf Befehle
0x010x00AbkühlenNachlauf nach dem Abschalten (Lüfter läuft, keine Flamme)
0x010x01LüftungNur-Lüfter-Modus (nach Lüftungsbefehl)
0x02beliebigStartphaseZündvorgang läuft
0x03beliebigHeizenStabiler Heizbetrieb
0x040x00AbschaltenAbschaltvorgang läuft

Timing

ParameterWert
Abfrageintervall (Status + Heartbeat)1 s
Tolerierte Stille vor „Kein Panel"-Fehler~3 s
Antwort-Timeout600 ms
Tolerierte aufeinanderfolgende ausgebliebene Antworten, bevor die Verbindung als unterbrochen gilt2

Betriebsabläufe

Initialisierung — Heizgerätestatus ermitteln

Nachdem der Controller (neu) verbunden hat, weiß er nicht, ob das Heizgerät im Standby, mitten im Heizbetrieb oder im Abschaltvorgang ist. Zur Synchronisation:

  1. 0x11 senden — stellt die Verbindung her und bestätigt die Baudrate.
  2. 0x0F senden — liefert den aktuellen Betriebszustand.
  3. 0x02 Lesen senden — liefert den aktiven Modus, Sollwert und die Leistungsstufe.

Ab hier wechselt der Controller in den unten beschriebenen zyklischen Abfragetakt.

Zyklische Abfrage

Im Sekundentakt:

  1. Bedienteil → Heizgerät: 0x11 mit aktueller Paneltemperatur (oder 0x7F, falls kein Panelsensor)
  2. Heizgerät → Bedienteil: Heartbeat-Echo
  3. Bedienteil → Heizgerät: 0x0F
  4. Heizgerät → Bedienteil: Statusantwort

0x02 Lesen kann alle paar Sekunden zusätzlich gesendet werden, um Einstellungsänderungen anderer Controller am Bus zu erkennen.

Heizen mit Leistungsstufe 5 starten

  1. Bedienteil → Heizgerät: 0x01 mit Payload 01 00 04 00 00 05
  2. Heizgerät → Bedienteil: 0x01-Antwort, die die 6-Byte-Einstellungs-Payload echot
  3. Folgende Abfragen zeigen den Zustandswechsel von Startphase zu Heizen.

Leistungsstufe im laufenden Betrieb ändern

  1. Bedienteil → Heizgerät: 0x02 Schreiben mit neuer Leistungsstufe in Payload-Byte 5
  2. Heizgerät → Bedienteil: 0x02-Antwort, die die 6-Byte-Einstellungs-Payload echot

Stopp

  1. Bedienteil → Heizgerät: 0x03
  2. Heizgerät → Bedienteil: 0x03-Antwort mit leerer Payload
  3. Der Zustand wechselt über die folgenden Abfragen von Abschalten zu Abkühlen zu Standby.