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-ID | Frame-Typ | Richtung | Zweck |
|---|---|---|---|
| 0x03 | Air Heater Command | Master → Slave | Raumtemperatur-Sollwert |
| 0x04 | Water Heater Command | Master → Slave | Wassertemperatur-Sollwert |
| 0x05 | Fuel Command | Master → Slave | Kraftstoff-/Elektro-Freigabesteuerung |
| 0x06 | Electro Command | Master → Slave | Elektroheizungs-Leistungsstufe |
| 0x07 | Vent Command | Master → Slave | Lüfter-/Lüftungssteuerung |
| 0x16 | Info | Slave → Master | Temperatur- und Status-Telemetrie |
Air Heater Command (0x03)
Steuert den Raumtemperatur-Sollwert.
Frame-Struktur
| Byte | 0-1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| Inhalt | Zieltemperatur | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF |
| Format | 16-Bit LE | Padding | Padding | Padding | Padding | Padding | Padding |
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
| Byte | 0-1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| Inhalt | Zieltemperatur | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF |
| Format | 16-Bit LE | Padding | Padding | Padding | Padding | Padding | Padding |
Temperatur-Codierung
Gleiche Codierung wie Air Heater Command (Kelvin × 10, Little-Endian).
Wassertemperaturstufen:
| Stufe | Temperatur | Hex-Wert | Dezimal | Beschreibung |
|---|---|---|---|---|
| Aus | - | 0x0000 | 0 | Wasserheizung deaktiviert |
| Eco | 40°C | 0x3A0C | 3130 | Energiesparmodus |
| Hot | 60°C | 0xD00C | 3280 | Maximales 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
| Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| Inhalt | Freigabe-Flags | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF |
| Format | Bitmap | Padding | Padding | Padding | Padding | Padding | Padding | Padding |
Freigabe-Flags (Byte 0)
| Bit | Funktion | Werte |
|---|---|---|
| 0 | Kraftstoff-Freigabe | 0 = Deaktiviert, 1 = Aktiviert |
| 1 | Elektro-Freigabe | 0 = Deaktiviert, 1 = Aktiviert |
| 2-7 | Reserviert | Muss 0 sein |
Gängige Werte
| Konfiguration | Hex-Wert | Binär | Beschreibung |
|---|---|---|---|
| Beide Aus | 0x00 | 0b00000000 | Keine Heizquelle |
| Nur Kraftstoff | 0x01 | 0b00000001 | Nur Gas-/Dieselheizung |
| Nur Elektro | 0x02 | 0b00000010 | Nur Elektroheizung |
| Beide An | 0x03 | 0b00000011 | Kraftstoff + 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
| Byte | 0-1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| Inhalt | Leistungsstufe | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF |
| Format | 16-Bit LE | Padding | Padding | Padding | Padding | Padding | Padding |
Leistungsstufen-Codierung
| Leistungsstufe | Hex-Wert | Dezimal | Beschreibung |
|---|---|---|---|
| Aus | 0x0000 | 0 | Keine Elektroheizung |
| 900W | 0x8403 | 900 | Niedrige Leistung (900W) |
| 1800W | 0x0807 | 1800 | Hohe 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
| Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| Inhalt | Lüfterstufe | 0xFE | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF | 0xFF |
| Format | Code | Fix | Padding | Padding | Padding | Padding | Padding | Padding |
Lüfterstufen-Codes
| Stufe | Hex-Wert | Beschreibung |
|---|---|---|
| Aus | 0xE0 | Lüftung deaktiviert |
| Comfort | 0xE1 | Automatischer Komfortmodus |
| Boost | 0xE2 | Maximale Lüftung |
| Stufe 1 | 0xF1 | Manuell Stufe 1 (minimal) |
| Stufe 2 | 0xF2 | Manuell Stufe 2 |
| Stufe 3 | 0xF3 | Manuell Stufe 3 |
| Stufe 4 | 0xF4 | Manuell Stufe 4 |
| Stufe 5 | 0xF5 | Manuell Stufe 5 |
| Stufe 6 | 0xF6 | Manuell Stufe 6 |
| Stufe 7 | 0xF7 | Manuell Stufe 7 |
| Stufe 8 | 0xF8 | Manuell Stufe 8 |
| Stufe 9 | 0xF9 | Manuell Stufe 9 |
| Stufe 10 | 0xFA | Manuell 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
| Byte | 0-1 | 2-3 | 4-5 | 6-7 |
|---|---|---|---|---|
| Inhalt | Status-Flags | Raumtemperatur | Wassertemperatur | Zusätzliche Flags |
| Format | 16-Bit LE | 16-Bit LE | 16-Bit LE | 16-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:
- Alle relevanten Befehls-Frames nacheinander senden
- Konsistenz zwischen Befehlen aufrechterhalten (z.B. Kraftstoff-Freigabe-Flag muss mit Kraftstoff-Befehl übereinstimmen)
- 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
- TIN-Protokollübersicht - Allgemeine TIN-Protokollinformationen
- Neues TIN-Protokoll - Modernes einheitliches Protokoll
- Implementierung:
womonet-drivers/src/tin/protocol/tinold/
