Truma LIN Protokoll (TIN)

Dieses Dokument beschreibt Trumas LIN-basiertes Protokoll zur Kommunikation zwischen Truma Heizgeräten und Bedienfeldern.

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

Verwandte Dokumentation

Protokollversionen

ProtokollSignal-IDsBeschreibung
Legacy0x03-0x07, 0x16Ältere Heizgeräte mit separaten Befehls-Frames
Modern (4.0)0x17, 0x20-0x22Moderne Heizgeräte (ab Mitte 2018) mit einheitlicher Befehlsstruktur
Diagnose0x3C, 0x3DStandard LIN Diagnose-Frames

Signal-Frame-Übersicht

Signal-IDPIDRichtungProtokollZweck
0x03-Master → SlaveLegacyLuftheizungsbefehl
0x04-Master → SlaveLegacyWasserheizungsbefehl
0x05-Master → SlaveLegacyBrennstoffbefehl
0x06-Master → SlaveLegacyElektrobefehl
0x07-Master → SlaveLegacyLüftungsbefehl
0x16-Slave → MasterLegacyInfo (Temperaturen, Status)
0x17-Master → SlaveModernKlimaanlagenbefehl
0x200x20Master → SlaveModernHeater Command
0x210x61Slave → MasterModernHeater Info 1
0x220xE2Slave → MasterModernHeater Info 2
0x3C0x3CMaster → SlaveDiagnoseMaster Request
0x3D0x7DSlave → MasterDiagnoseSlave Response

Unbekannte/Unbestätigte Signale

Signal-IDRichtungHinweise
0x09UnbekanntIn Logs gesehen, Zweck unbekannt
0x0ASlave → MasterNur iNetX, Zweck unbekannt
0x18UnbekanntGesehene Payload: FE FF FF FF FF FF FF FF, Zweck unbekannt
0x1FSlave → MasterNur 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).

ByteBitsFeld
0-7Unbekannt - 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

ByteBitsFeldWerte
07:0Zieltemperatur (Low-Byte)Kelvin × 10, Little-Endian
17:0Zieltemperatur (High-Byte)
2-7UnbekanntTypischerweise 0xFF Padding

Formel: temp_celsius = (u16_le(byte0, byte1) / 10) - 273

Spezialfall: 0x0AAA (2730 in Kelvin × 10) = Aus (0°C)

Wasserheizungsbefehl (0x04) - Master → Slave

ByteBitsFeldWerte
07:0Zieltemperatur (Low-Byte)Kelvin × 10, Little-Endian
17:0Zieltemperatur (High-Byte)
2-7UnbekanntTypischerweise 0xFF Padding
TempBytes (LE)
Aus0xAA 0x0A
Eco (40°C)0x3A 0x0C
Hot (60°C)0xD0 0x0C

Brennstoffbefehl (0x05) - Master → Slave

ByteBitsFeldWerte
00Brennstoff aktivieren0=Aus, 1=An
01Elektro aktivieren0=Aus, 1=An
02-7Unbekannt
1-7UnbekanntTypischerweise 0xFF Padding

Elektrobefehl (0x06) - Master → Slave

ByteBitsFeldWerte
07:0Elektromodus (Low-Byte)Siehe Tabelle unten
17:0Elektromodus (High-Byte)Siehe Tabelle unten
2-7UnbekanntTypischerweise 0xFF Padding
ModusByte 0Byte 1
Aus0x000x00
900W0x840x03
1800W0x080x07

Lüftungsbefehl (0x07) - Master → Slave

ByteBitsFeldWerte
07:0LüftungsmodusSiehe Tabelle unten
17:0UnbekanntTypischerweise 0xFE
2-7UnbekanntTypischerweise 0xFF Padding
WertModus
0xE0Aus
0xE1Comfort
0xE2Boost
0xF1 - 0xFAStufe 1-10

Info-Frame (0x16) - Slave → Master

ByteBitsFeldWerte
07:0UnbekanntGesehen: 0x00
17:0UnbekanntGesehen: 0x05, 0x0F, 0x17
27:0Raumtemperatur (Low-Byte)Kelvin × 10, Little-Endian
37:0Raumtemperatur (High-Byte)
47:0Wassertemperatur (Low-Byte)Kelvin × 10, Little-Endian
57:0Wassertemperatur (High-Byte)
67:0UnbekanntGesehen: 0xDB, 0x59, 0x77, 0xF5, 0xFF
77:0UnbekanntGesehen: 0x85, 0x7F

Diagnose-Frames

Standard LIN Diagnose-Frames mit klassischer Prüfsumme (keine PID in der Prüfsummenberechnung).

Master Request (0x3C)

ReadByIdentifier (SID 0xB2)

ByteFeldWerte
0NAD0x01=Einzeln, 0x7F=Broadcast
1PCI0x06 (Länge)
2SID0xB2 (ReadByIdentifier)
3IdentifierSiehe Tabelle unten
4Supplier ID (Low)0x17 (Truma)
5Supplier ID (High)0x46 (Truma)
6Function ID (Low)Produktspezifisch
7Function ID (High)Produktspezifisch
Identifier-Typen
WertIdentifier
0x00Produktidentifikation
0x01Seriennummer
0x20Firmware-Version
0x23Aktueller 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.

ByteFeldWerte
0NAD0x01 (immer einzeln)
1PCI0x06 (Länge)
2SID0xB8
3Function ID (Low)0x40 (CombiGas), 0x20 (CombiD)
4Function ID (High)0x03
5Heizung aktiv0x00=Aus, 0x01=An
6UnbekanntImmer 0x00
7PaddingImmer 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).

WertBedeutung
0x00Heizung aus (Leerlauf/Standby)
0x01Heizung 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-4Gerät
40 03Combi Gas (Function 0x0340)
20 03Combi D (Function 0x0320)
10 03Combi Gas Alt (Function 0x0310)
01 03Combi 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.

SIDRSIDZweck
0xB90xF9Lesen/Schreiben vorbereiten
0xBA0xFAUhrzeit lesen
0xBB0xFBUhrzeit 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)

ByteFeldWerte
0NADAntwortender Knoten
1PCILänge
2RSID0xF2 (= SID + 0x40)
3+PayloadAbhängig vom angeforderten Identifier

Siehe Geräteerkennung für Produktidentifikations-Antworten. Siehe Fehlerbehandlung für Fehler-Antwort-Dekodierung.

Herstellerspezifische Antwort (RSID 0xF8)

ByteFeldWerte
0NAD0x7D
1UnbekanntGesehen: 0x00, 0x01, 0x02
2UnbekanntGesehen: 0x01, 0x02, 0x04
3UnbekanntGesehen: 0x00, 0xFF
4UnbekanntGesehen: 0xFF
5UnbekanntGesehen: 0x05

Gesehene Antwort-Payloads:

  • 01 02 00 FF 05
  • 00 01 00 FF 05
  • 01 01 FF FF FF
  • 02 02 FF FF FF
  • 00 04 00 FF 05

Uhrzeit-Antworten (Herstellerspezifisch)

RSIDZweck
0xF9Lesen/Schreiben vorbereiten Antwort
0xFAUhrzeit lesen Antwort
0xFBUhrzeit schreiben Antwort

Siehe Abschnitt Uhrzeit-Befehle oben für Details.

Timing

ParameterWert
Startup Break1,3ms
Startup Pause1600ms
Zwischen Keepalive-Frames60ms
Frames pro Keepalive-Block~40
Keepalive-Block-Intervall~10s
Zwischen Steuerungs-Frames40ms

Typische Steuerungs-Frame-Sequenz

  1. 0x20 (Heater Command)
  2. 0x61 (Anfrage für 0x21) - kann ohne Antwort sein
  3. 0xE2 (Anfrage für 0x22) - kann ohne Antwort sein
  4. 0x3C (Diagnose-Anfrage)
  5. 0x7D (Anfrage für 0x3D) - kann ohne Antwort sein
  6. 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