Truma LIN Protokoll (TIN)
Dieses Dokument beschreibt Trumas LIN-basiertes Protokoll zur Kommunikation zwischen Truma Heizgeräten und Bedienfeldern.
Verwandte Dokumentation
- Heater Command (0x20) - Detaillierte Dokumentation des Heizungsbefehls-Frames
- Heater Info 1 (0x21) - Temperaturmesswerte vom Heizgerät
- Heater Info 2 (0x22) - Stromversorgung und Boilerstatus
- Geräteerkennung - Erkennungs- und NAD-Zuweisungsprozess
- Fehlerbehandlung - Fehlercodes und Statusabfragen
Protokollversionen
| Protokoll | Signal-IDs | Beschreibung |
|---|---|---|
| Legacy | 0x03-0x07, 0x16 | Ältere Heizgeräte mit separaten Befehls-Frames |
| Modern (4.0) | 0x17, 0x20-0x22 | Moderne Heizgeräte (ab Mitte 2018) mit einheitlicher Befehlsstruktur |
| Diagnose | 0x3C, 0x3D | Standard LIN Diagnose-Frames |
Signal-Frame-Übersicht
| Signal-ID | PID | Richtung | Protokoll | Zweck |
|---|---|---|---|---|
| 0x03 | - | Master → Slave | Legacy | Luftheizungsbefehl |
| 0x04 | - | Master → Slave | Legacy | Wasserheizungsbefehl |
| 0x05 | - | Master → Slave | Legacy | Brennstoffbefehl |
| 0x06 | - | Master → Slave | Legacy | Elektrobefehl |
| 0x07 | - | Master → Slave | Legacy | Lüftungsbefehl |
| 0x16 | - | Slave → Master | Legacy | Info (Temperaturen, Status) |
| 0x17 | - | Master → Slave | Modern | Klimaanlagenbefehl |
| 0x20 | 0x20 | Master → Slave | Modern | Heater Command |
| 0x21 | 0x61 | Slave → Master | Modern | Heater Info 1 |
| 0x22 | 0xE2 | Slave → Master | Modern | Heater Info 2 |
| 0x3C | 0x3C | Master → Slave | Diagnose | Master Request |
| 0x3D | 0x7D | Slave → Master | Diagnose | Slave Response |
Unbekannte/Unbestätigte Signale
| Signal-ID | Richtung | Hinweise |
|---|---|---|
| 0x09 | Unbekannt | In Logs gesehen, Zweck unbekannt |
| 0x0A | Slave → Master | Nur iNetX, Zweck unbekannt |
| 0x18 | Unbekannt | Gesehene Payload: FE FF FF FF FF FF FF FF, Zweck unbekannt |
| 0x1F | Slave → Master | Nur iNetX, Zweck unbekannt |
Modernes Protokoll (4.0)
Verwendet von modernen Truma Heizgeräten (ab Mitte 2018), InetX Bedienfeldern, iNet X Connect Fernsteuermodulen und modernen Aventa Klimaanlagen.
Heater Command (0x20)
Siehe heater-command für die vollständige Dokumentation.
Heater Info 1 (0x21)
Siehe heater-info-1 für die vollständige Dokumentation.
Heater Info 2 (0x22)
Siehe heater-info-2 für die vollständige Dokumentation.
Klimaanlagenbefehl (0x17) - Master → Slave
Steuert Klimaanlagen am Bus (Truma Aventa und Saphir Einheiten).
| Byte | Bits | Feld |
|---|---|---|
| 0-7 | Unbekannt - Klimaanlagen-Steuerdaten |
Die Frame-Struktur erfordert weitere Analyse.
Legacy-Protokoll
Verwendet von älteren Truma Heizgeräten mit separaten Befehls-Frames für jede Funktion.
Luftheizungsbefehl (0x03) - Master → Slave
| Byte | Bits | Feld | Werte |
|---|---|---|---|
| 0 | 7:0 | Zieltemperatur (Low-Byte) | Kelvin × 10, Little-Endian |
| 1 | 7:0 | Zieltemperatur (High-Byte) | |
| 2-7 | Unbekannt | Typischerweise 0xFF Padding |
Formel: temp_celsius = (u16_le(byte0, byte1) / 10) - 273
Spezialfall: 0x0AAA (2730 in Kelvin × 10) = Aus (0°C)
Wasserheizungsbefehl (0x04) - Master → Slave
| Byte | Bits | Feld | Werte |
|---|---|---|---|
| 0 | 7:0 | Zieltemperatur (Low-Byte) | Kelvin × 10, Little-Endian |
| 1 | 7:0 | Zieltemperatur (High-Byte) | |
| 2-7 | Unbekannt | Typischerweise 0xFF Padding |
| Temp | Bytes (LE) |
|---|---|
| Aus | 0xAA 0x0A |
| Eco (40°C) | 0x3A 0x0C |
| Hot (60°C) | 0xD0 0x0C |
Brennstoffbefehl (0x05) - Master → Slave
| Byte | Bits | Feld | Werte |
|---|---|---|---|
| 0 | 0 | Brennstoff aktivieren | 0=Aus, 1=An |
| 0 | 1 | Elektro aktivieren | 0=Aus, 1=An |
| 0 | 2-7 | Unbekannt | |
| 1-7 | Unbekannt | Typischerweise 0xFF Padding |
Elektrobefehl (0x06) - Master → Slave
| Byte | Bits | Feld | Werte |
|---|---|---|---|
| 0 | 7:0 | Elektromodus (Low-Byte) | Siehe Tabelle unten |
| 1 | 7:0 | Elektromodus (High-Byte) | Siehe Tabelle unten |
| 2-7 | Unbekannt | Typischerweise 0xFF Padding |
| Modus | Byte 0 | Byte 1 |
|---|---|---|
| Aus | 0x00 | 0x00 |
| 900W | 0x84 | 0x03 |
| 1800W | 0x08 | 0x07 |
Lüftungsbefehl (0x07) - Master → Slave
| Byte | Bits | Feld | Werte |
|---|---|---|---|
| 0 | 7:0 | Lüftungsmodus | Siehe Tabelle unten |
| 1 | 7:0 | Unbekannt | Typischerweise 0xFE |
| 2-7 | Unbekannt | Typischerweise 0xFF Padding |
| Wert | Modus |
|---|---|
0xE0 | Aus |
0xE1 | Comfort |
0xE2 | Boost |
0xF1 - 0xFA | Stufe 1-10 |
Info-Frame (0x16) - Slave → Master
| Byte | Bits | Feld | Werte |
|---|---|---|---|
| 0 | 7:0 | Unbekannt | Gesehen: 0x00 |
| 1 | 7:0 | Unbekannt | Gesehen: 0x05, 0x0F, 0x17 |
| 2 | 7:0 | Raumtemperatur (Low-Byte) | Kelvin × 10, Little-Endian |
| 3 | 7:0 | Raumtemperatur (High-Byte) | |
| 4 | 7:0 | Wassertemperatur (Low-Byte) | Kelvin × 10, Little-Endian |
| 5 | 7:0 | Wassertemperatur (High-Byte) | |
| 6 | 7:0 | Unbekannt | Gesehen: 0xDB, 0x59, 0x77, 0xF5, 0xFF |
| 7 | 7:0 | Unbekannt | Gesehen: 0x85, 0x7F |
Diagnose-Frames
Standard LIN Diagnose-Frames mit klassischer Prüfsumme (keine PID in der Prüfsummenberechnung).
Master Request (0x3C)
ReadByIdentifier (SID 0xB2)
| Byte | Feld | Werte |
|---|---|---|
| 0 | NAD | 0x01=Einzeln, 0x7F=Broadcast |
| 1 | PCI | 0x06 (Länge) |
| 2 | SID | 0xB2 (ReadByIdentifier) |
| 3 | Identifier | Siehe Tabelle unten |
| 4 | Supplier ID (Low) | 0x17 (Truma) |
| 5 | Supplier ID (High) | 0x46 (Truma) |
| 6 | Function ID (Low) | Produktspezifisch |
| 7 | Function ID (High) | Produktspezifisch |
Identifier-Typen
| Wert | Identifier |
|---|---|
0x00 | Produktidentifikation |
0x01 | Seriennummer |
0x20 | Firmware-Version |
0x23 | Aktueller Fehler (siehe Fehlerbehandlung) |
Siehe Geräteerkennung für den vollständigen Erkennungsprozess.
Herstellerspezifische Diagnose (SID 0xB8) - Heizungssteuerung
Steuert den allgemeinen Heizungsaktivstatus. Dieser Frame muss zusammen mit dem 0x20 Heater Command Frame gesendet werden, um die Heizung zu aktivieren.
| Byte | Feld | Werte |
|---|---|---|
| 0 | NAD | 0x01 (immer einzeln) |
| 1 | PCI | 0x06 (Länge) |
| 2 | SID | 0xB8 |
| 3 | Function ID (Low) | 0x40 (CombiGas), 0x20 (CombiD) |
| 4 | Function ID (High) | 0x03 |
| 5 | Heizung aktiv | 0x00=Aus, 0x01=An |
| 6 | Unbekannt | Immer 0x00 |
| 7 | Padding | Immer 0xFF |
Heizung-Aktiv-Bit (Byte 5)
Dieses Bit steuert, ob die Heizung aktiv heizt. Es muss auf 0x01 gesetzt werden, wenn irgendeine Heizung angefordert wird (Raumheizung, Wasserheizung oder beides).
| Wert | Bedeutung |
|---|---|
0x00 | Heizung aus (Leerlauf/Standby) |
0x01 | Heizung aktiv (Raum und/oder Wasser) |
Wichtig: Der 0x20 Heater Command Frame setzt die Ziel-Temperaturen und Modi, aber die Heizung startet nicht, bis dieser B8 Diagnose-Frame mit Byte 5 = 0x01 gesendet wird.
Beispiel-Frames
Leerlauf (Heizung aus):
01 06 B8 40 03 00 00 FF
Heizung aktiv (Raum und/oder Wasser):
01 06 B8 40 03 01 00 FF
Function ID Varianten
| Bytes 3-4 | Gerät |
|---|---|
40 03 | Combi Gas (Function 0x0340) |
20 03 | Combi D (Function 0x0320) |
10 03 | Combi Gas Alt (Function 0x0310) |
01 03 | Combi Gas Alt (Function 0x0301) |
Uhrzeit-Befehle (Herstellerspezifisch)
Truma verwendet diese herstellerspezifischen SIDs (im LIN-reservierten Bereich 0xB8-0xFF) für die Uhrzeit-/Zeitsynchronisation mit dem CP Plus Display.
| SID | RSID | Zweck |
|---|---|---|
0xB9 | 0xF9 | Lesen/Schreiben vorbereiten |
0xBA | 0xFA | Uhrzeit lesen |
0xBB | 0xFB | Uhrzeit schreiben |
Hinweis: Dies sind keine Standard-LIN-Services. Gemäß LIN 2.2A Spezifikation (Abschnitt 4.2.3.4) sind SIDs 0xB8-0xFF reserviert und verweisen auf ISO 15765-3. Truma verwendet diesen Bereich für proprietäre Erweiterungen.
Frame-Struktur und Payload-Format sind nicht vollständig dokumentiert.
Reset-Befehl
Alle Bytes auf 0xFF gesetzt löst Fehler-Reset aus:
[0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]
Slave Response (0x3D)
ReadByIdentifier Response (RSID 0xF2)
| Byte | Feld | Werte |
|---|---|---|
| 0 | NAD | Antwortender Knoten |
| 1 | PCI | Länge |
| 2 | RSID | 0xF2 (= SID + 0x40) |
| 3+ | Payload | Abhängig vom angeforderten Identifier |
Siehe Geräteerkennung für Produktidentifikations-Antworten. Siehe Fehlerbehandlung für Fehler-Antwort-Dekodierung.
Herstellerspezifische Antwort (RSID 0xF8)
| Byte | Feld | Werte |
|---|---|---|
| 0 | NAD | 0x7D |
| 1 | Unbekannt | Gesehen: 0x00, 0x01, 0x02 |
| 2 | Unbekannt | Gesehen: 0x01, 0x02, 0x04 |
| 3 | Unbekannt | Gesehen: 0x00, 0xFF |
| 4 | Unbekannt | Gesehen: 0xFF |
| 5 | Unbekannt | Gesehen: 0x05 |
Gesehene Antwort-Payloads:
01 02 00 FF 0500 01 00 FF 0501 01 FF FF FF02 02 FF FF FF00 04 00 FF 05
Uhrzeit-Antworten (Herstellerspezifisch)
| RSID | Zweck |
|---|---|
0xF9 | Lesen/Schreiben vorbereiten Antwort |
0xFA | Uhrzeit lesen Antwort |
0xFB | Uhrzeit schreiben Antwort |
Siehe Abschnitt Uhrzeit-Befehle oben für Details.
Timing
| Parameter | Wert |
|---|---|
| Startup Break | 1,3ms |
| Startup Pause | 1600ms |
| Zwischen Keepalive-Frames | 60ms |
| Frames pro Keepalive-Block | ~40 |
| Keepalive-Block-Intervall | ~10s |
| Zwischen Steuerungs-Frames | 40ms |
Typische Steuerungs-Frame-Sequenz
- 0x20 (Heater Command)
- 0x61 (Anfrage für 0x21) - kann ohne Antwort sein
- 0xE2 (Anfrage für 0x22) - kann ohne Antwort sein
- 0x3C (Diagnose-Anfrage)
- 0x7D (Anfrage für 0x3D) - kann ohne Antwort sein
- Wiederholen…
Nach mehreren Zyklen beginnen Antworten auf 0x21 und 0x22 zu erscheinen.
Prüfsumme
Erweiterte Prüfsumme (Signal-Frames 0x00-0x3B)
sum = PID + data[0] + data[1] + ... + data[7]
while (sum >> 8) sum = (sum & 0xFF) + (sum >> 8)
checksum = ~sum
Klassische Prüfsumme (Diagnose-Frames 0x3C+)
sum = data[0] + data[1] + ... + data[7] // Keine PID
while (sum >> 8) sum = (sum & 0xFF) + (sum >> 8)
checksum = ~sum
