Legacy TIN-Protokoll

Übersicht

Das Legacy TIN-Protokoll wird von Legacy Truma-Heizgeräten verwendet (TIN 1.0 und TIN 3.2). Es verfügt über separate Befehlskanäle für jede Heizungsfunktion, mit individuellen Signal-Frames für Luftheizung, Wasserheizung, Kraftstoffsteuerung, Elektroleistung und Lüftung.

Dieses Protokoll wurde durch Neues TIN (TIN 4.0) Mitte 2018 abgelöst, bleibt aber wichtig für die Unterstützung älterer Installationen.

Signal-Frame-Typen

Signal-IDFrame-TypRichtungZweck
0x03Air Heater CommandMaster → SlaveRaumtemperatur-Sollwert
0x04Water Heater CommandMaster → SlaveWassertemperatur-Sollwert
0x05Fuel CommandMaster → SlaveKraftstoff-/Elektro-Freigabesteuerung
0x06Electro CommandMaster → SlaveElektroheizungs-Leistungsstufe
0x07Vent CommandMaster → SlaveLüfter-/Lüftungssteuerung
0x16InfoSlave → MasterTemperatur- und Status-Telemetrie

Air Heater Command (0x03)

Steuert den Raumtemperatur-Sollwert.

Frame-Struktur

Byte0-1234567
InhaltZieltemperatur0xFF0xFF0xFF0xFF0xFF0xFF
Format16-Bit LEPaddingPaddingPaddingPaddingPaddingPadding

Temperatur-Codierung

Format: Kelvin × 10, gespeichert als 16-Bit Little-Endian

Formel:

codiert_wert = (temp_celsius + 273) × 10
temp_celsius = (codiert_wert / 10) - 273

Beispiel-Frames

Raumtemperatur auf 22°C einstellen:

[0x86] [0x0B] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]
 └─┬──┘ └─┬──┘
   │      └─ Hohes Byte (2950 / 256 = 11 = 0x0B)
   └─ Niedriges Byte (2950 % 256 = 134 = 0x86)

Raumheizung ausschalten:

[0x00] [0x00] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Water Heater Command (0x04)

Steuert den Wasserboiler-Temperatur-Sollwert.

Frame-Struktur

Byte0-1234567
InhaltZieltemperatur0xFF0xFF0xFF0xFF0xFF0xFF
Format16-Bit LEPaddingPaddingPaddingPaddingPaddingPadding

Temperatur-Codierung

Gleiche Codierung wie Air Heater Command (Kelvin × 10, Little-Endian).

Wassertemperaturstufen:

StufeTemperaturHex-WertDezimalBeschreibung
Aus-0x00000Wasserheizung deaktiviert
Eco40°C0x3A0C3130Energiesparmodus
Hot60°C0xD00C3280Maximales Warmwasser

Beispiel-Frames

Wasser auf Eco-Modus einstellen (40°C):

[0x3A] [0x0C] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]
 └─┬──┘ └─┬──┘
   │      └─ Hohes Byte (3130 / 256 = 12 = 0x0C)
   └─ Niedriges Byte (3130 % 256 = 58 = 0x3A)

Wasser auf Hot-Modus einstellen (60°C):

[0xD0] [0x0C] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Wasserheizung ausschalten:

[0x00] [0x00] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Fuel Command (0x05)

Steuert Kraftstoff- und Elektroheizungs-Freigabe-Flags.

Frame-Struktur

Byte01234567
InhaltFreigabe-Flags0xFF0xFF0xFF0xFF0xFF0xFF0xFF
FormatBitmapPaddingPaddingPaddingPaddingPaddingPaddingPadding

Freigabe-Flags (Byte 0)

BitFunktionWerte
0Kraftstoff-Freigabe0 = Deaktiviert, 1 = Aktiviert
1Elektro-Freigabe0 = Deaktiviert, 1 = Aktiviert
2-7ReserviertMuss 0 sein

Gängige Werte

KonfigurationHex-WertBinärBeschreibung
Beide Aus0x000b00000000Keine Heizquelle
Nur Kraftstoff0x010b00000001Nur Gas-/Dieselheizung
Nur Elektro0x020b00000010Nur Elektroheizung
Beide An0x030b00000011Kraftstoff + Elektro (Mix-Modus)

Beispiel-Frames

Nur Kraftstoff aktivieren:

[0x01] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Nur Elektro aktivieren:

[0x02] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Beide aktivieren (Mix-Modus):

[0x03] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Alle deaktivieren:

[0x00] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Electro Command (0x06)

Steuert die Elektroheizungs-Leistungsstufe.

Frame-Struktur

Byte0-1234567
InhaltLeistungsstufe0xFF0xFF0xFF0xFF0xFF0xFF
Format16-Bit LEPaddingPaddingPaddingPaddingPaddingPadding

Leistungsstufen-Codierung

LeistungsstufeHex-WertDezimalBeschreibung
Aus0x00000Keine Elektroheizung
900W0x8403900Niedrige Leistung (900W)
1800W0x08071800Hohe Leistung (1800W)

Hinweis: Die Codierung scheint Wattzahlen direkt darzustellen.

Beispiel-Frames

Auf 900W einstellen:

[0x84] [0x03] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Auf 1800W einstellen:

[0x08] [0x07] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Elektroheizung ausschalten:

[0x00] [0x00] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Vent Command (0x07)

Steuert die Lüfterstufe.

Frame-Struktur

Byte01234567
InhaltLüfterstufe0xFE0xFF0xFF0xFF0xFF0xFF0xFF
FormatCodeFixPaddingPaddingPaddingPaddingPaddingPadding

Lüfterstufen-Codes

StufeHex-WertBeschreibung
Aus0xE0Lüftung deaktiviert
Comfort0xE1Automatischer Komfortmodus
Boost0xE2Maximale Lüftung
Stufe 10xF1Manuell Stufe 1 (minimal)
Stufe 20xF2Manuell Stufe 2
Stufe 30xF3Manuell Stufe 3
Stufe 40xF4Manuell Stufe 4
Stufe 50xF5Manuell Stufe 5
Stufe 60xF6Manuell Stufe 6
Stufe 70xF7Manuell Stufe 7
Stufe 80xF8Manuell Stufe 8
Stufe 90xF9Manuell Stufe 9
Stufe 100xFAManuell Stufe 10 (maximal)

Beispiel-Frames

Auf Comfort-Modus einstellen:

[0xE1] [0xFE] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Auf Boost-Modus einstellen:

[0xE2] [0xFE] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Auf manuelle Stufe 5 einstellen:

[0xF5] [0xFE] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Lüftung ausschalten:

[0xE0] [0xFE] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

Info Signal (0x16)

Meldet aktuelle Temperaturen und Systemstatus vom Heizgerät.

Frame-Struktur

Byte0-12-34-56-7
InhaltStatus-FlagsRaumtemperaturWassertemperaturZusätzliche Flags
Format16-Bit LE16-Bit LE16-Bit LE16-Bit LE

Temperatur-Decodierung

Gleiche Codierung wie Befehls-Frames (Kelvin × 10, Little-Endian).

Decodierung:

temp_celsius = ((byte_high << 8) | byte_low) / 10.0 - 273.0

Status-Flags (Bytes 0-1)

Gängige Flag-Muster beobachtet:

  • 0x0042: Normalbetrieb
  • Zusätzliche Bitmuster zeigen verschiedene Betriebszustände an

(Vollständige Flag-Dokumentation erfordert weitere Protokollanalyse)

Beispiel-Frame

Raum bei 22°C, Wasser bei 45°C:

[0x42] [0x00] [0x86] [0x0B] [0x3A] [0x0C] [0xFF] [0xFF]
 └─┬──┘ └─┬──┘ └────┬────┘ └────┬────┘
   │      │         │            └─ Wasser: 3130 = 40°C (Eco)
   │      │         └─ Raum: 2950 = 22°C
   │      └─ Status-Flags (hoch)
   └─ Status-Flags (niedrig)

Vollständiges Steuersequenz-Beispiel

Um ein Heizgerät mit dem Legacy TIN-Protokoll vollständig zu steuern:

Szenario: Raum auf 22°C heizen, Wasser auf Eco, nur Kraftstoff verwenden, Comfort-Lüftung

1. Air Heater Command (0x03): Raum auf 22°C einstellen

[0x86] [0x0B] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

2. Water Heater Command (0x04): Wasser auf Eco einstellen (40°C)

[0x3A] [0x0C] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

3. Fuel Command (0x05): Nur Kraftstoff aktivieren

[0x01] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

4. Electro Command (0x06): Elektro deaktivieren

[0x00] [0x00] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

5. Vent Command (0x07): Auf Comfort-Modus einstellen

[0xE1] [0xFE] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF] [0xFF]

6. Info (0x16): Status empfangen (Slave-Antwort)

[0x42] [0x00] [0x86] [0x0B] [0x3A] [0x0C] [0xFF] [0xFF]

Implementierungshinweise

Befehls-Koordination

Da Legacy TIN separate Befehlskanäle verwendet, müssen Implementierungen:

  1. Alle relevanten Befehls-Frames nacheinander senden
  2. Konsistenz zwischen Befehlen aufrechterhalten (z.B. Kraftstoff-Freigabe-Flag muss mit Kraftstoff-Befehl übereinstimmen)
  3. Frame-Timing ordnungsgemäß handhaben (typischerweise 40-60ms zwischen Frames)

Temperatur-Konvertierungs-Hilfsfunktionen

Celsius zu Legacy TIN:

fn celsius_to_tin_old(temp_c: u8) -> u16 {
    ((temp_c as u16 + 273) * 10)
}

Legacy TIN zu Celsius:

fn tin_old_to_celsius(codiert: u16) -> f32 {
    (codiert as f32 / 10.0) - 273.0
}

Typisches Frame-Timing

Zeit     Frame
----     -----
0ms      0x03 (Air Heater Command)
40ms     0x04 (Water Heater Command)
80ms     0x05 (Fuel Command)
120ms    0x06 (Electro Command)
160ms    0x07 (Vent Command)
...
[periodisch]  0x16 (Info-Antwort vom Heizgerät)

Migration zu Neues TIN

Moderne Installationen verwenden das Neues TIN-Protokoll, das alle Befehle in einem einzigen Frame (0x20) kombiniert. Bei der Treiberimplementierung:

  • Legacy Geräte: Legacy TIN mit separaten Befehls-Frames verwenden
  • Moderne Geräte (ab 2018): Neues TIN mit einheitlichem Befehls-Frame verwenden
  • Erkennung: Produktidentifikation zur Bestimmung der Protokollversion verwenden

Siehe Neues TIN-Protokoll für Details zum modernen Protokoll.

Referenzen