TapHome

Geminox THRi

Modbus RTU
Submitted by
Last updated: 03. 2026

Erfordert externes Gateway

Amit DM-OT2

Der Geminox THRi ist ein Gas-Brennwertkessel, der über das Amit DM-OT2 OpenTherm-zu-Modbus-RTU-Gateway mit TapHome verbunden wird. Das DM-OT2 übersetzt das OpenTherm-Protokoll des Kessels in Modbus-RTU-Holding-Register und ermöglicht TapHome den Zugriff auf Temperatursensoren, Heizungs- und Warmwasserthermostate, Brennerstatus und Wärmequellenleistungsüberwachung.

Die Vorlage verwendet Bitmask-Register für Status und Steuerung (H:100 und H:200), Float-Register für Temperaturen und Druck sowie einen zyklischen Mechanismus zum Lesen zusätzlicher OT-Register, um Min/Max-Werte aus OpenTherm-Data-IDs abzurufen, die nicht auf Standardregister gemappt sind.

Hardwareanschluss

Gateway-Übersicht

Das Amit DM-OT2 ist ein DIN-Schienen-montierter Konverter mit galvanisch isolierter RS-485-Schnittstelle und einer OpenTherm/+-Schnittstelle. Es fungiert als OpenTherm-Master, der mit dem Kessel kommuniziert, und als Modbus-RTU-Slave auf dem RS-485-Bus.

Technische Daten
  • Stromversorgung: 20–30 V DC, max 30 mA
  • Betriebstemperatur: -40 °C bis +70 °C
  • Protokoll: Modbus RTU Slave, RS-485
  • Baudrate: 9600, keine Parität, 2 Stoppbits
  • Max. Konverter: 63 in einem RS-485-Netzwerk
  • RS-485-Isolation: Galvanisch, 500 V AC
  • Montage: 35 mm DIN-Schiene
Klemmenanschlüsse
KlemmeSignalBeschreibung
1G485RS-485 Masse
2BRS-485 Signal B (-)
3ARS-485 Signal A (+)
4GNDMasse Stromversorgung
5+24VStromversorgung +24 V DC
6RC1OpenTherm/+-Schnittstelle
7RC2OpenTherm/+-Schnittstelle
RS-485-Verkabelung zu TapHome

Verbinden Sie mit einer 3-Draht-RS-485-Verbindung:

  • A (Klemme 3) → A+/D+ an TapHome RS-485
  • B (Klemme 2) → B-/D- an TapHome RS-485
  • G485 (Klemme 1) → GND an TapHome-Stromversorgung (zwingend erforderlich)

Wichtig — Erdung

Die G485-Masseleitung muss zwischen dem DM-OT2 und der TapHome-Stromversorgung angeschlossen werden. Ohne korrekte Erdung können Kommunikationsfehler auftreten.

Busabschluss

Das DM-OT2 hat Jumper für den RS-485-Abschluss:

  • Jumper gesteckt — Endstation (Idle-Zustände und Abschlüsse aktiv). Verwenden Sie dies am letzten Gerät am Bus.
  • Jumper nicht gesteckt — Zwischenstation. Verwenden Sie dies bei allen anderen Geräten.

Beide Jumper müssen immer gleichzeitig gesetzt werden.

Konfiguration

DIP-Schalter-Adressierung

DIP-Schalter ADR0–ADR5 (Schalter 1–6) legen die Modbus-Slave-Adresse fest (Bereich 1–63). Adresse 0 ist nicht zulässig.

Adressberechnung: Jeder Schalter repräsentiert einen Binärwert — ADR0=1, ADR1=2, ADR2=4, ADR3=8, ADR4=16, ADR5=32. Summieren Sie die Werte der Schalter in ON-Position.

Adressbeispiele:

AdresseSchalter ON
1ADR0
2ADR1
3ADR0 + ADR1
5ADR0 + ADR2
10ADR1 + ADR3

Empfohlen: Adresse 1 (ADR0=ON, alle anderen OFF).

Kommunikationsgeschwindigkeit

DIP-Schalter COMM0–COMM3 (Schalter 7–10) konfigurieren Baudrate und Parität. Für TapHome stellen Sie ein:

  • COMM0: OFF, COMM1: OFF, COMM2: ON — dies wählt 9600 Baud, keine Parität

Ohne Parität verwendet das DM-OT2 automatisch 2 Stoppbits. Änderungen werden sofort wirksam.

Protokollauswahl

DIP-Schalter MODE (Schalter 11) wählt das Protokoll:

  • Nicht gesteckt (OFF) — Modbus RTU (erforderlich für TapHome)
  • Gesteckt (ON) — ARION-Protokoll

Eine Änderung wird nach einem Neustart wirksam.

Gerätefunktionen

Statusüberwachung

Drei binäre Statussensoren lesen einzelne Bits aus dem Statusregister (H:100):

  • Brenner (Bit 4) — zeigt an, ob die Brennerflamme aktiv ist
  • Heizung (Bit 2) — zeigt an, ob die Zentralheizung aktiv ist
  • Warmwasserbereitung (Bit 3) — zeigt an, ob die Warmwasserbereitung aktiv ist

Diese Sensoren aktualisieren sich alle 2500 ms und bieten Echtzeit-Einblick in den Betriebszustand des Kessels.

Heizungs- und Warmwassersteuerung

Zwei Freigabeschalter steuern Heizung und Warmwasser über das Steuerregister (H:200):

  • Heizung Freigabe (Bit 5) — aktiviert oder deaktiviert die Zentralheizung
  • Warmwasser Freigabe (Bit 6) — aktiviert oder deaktiviert die Warmwasserbereitung

Beide Schalter verwenden ein Read-Modify-Write-Muster: Die Vorlage liest das gesamte H:200-Register, maskiert das Zielbit, setzt den neuen Wert und schreibt zurück. Ein zählerbasierter Debounce (cnt=5 Abfragezyklen) stellt sicher, dass der Schalter den geschriebenen Zustand sofort nach dem Umschalten anzeigt und verhindert ein Flackern, während der Kessel den Befehl verarbeitet.

Temperaturthermostate

Zwei Thermostatgeräte bieten sowohl aktuelle Temperaturmessung als auch Sollwertsteuerung:

  • Heizkreistemperatur — liest die aktuelle Vorlauftemperatur aus H:102 (Float) und liest/schreibt die Solltemperatur in H:201 (Float). Ein Serviceattribut zeigt den Min/Max-Sollwertbereich aus OpenTherm Data-ID 49.
  • Warmwasserthermostat — liest die aktuelle Warmwassertemperatur aus H:106 (Float) und liest/schreibt die Solltemperatur in H:205 (Float). Ein Serviceattribut zeigt den Min/Max-Sollwertbereich aus OpenTherm Data-ID 48.
Temperatursensoren

Drei schreibgeschützte Temperatursensoren bieten zusätzliche Überwachung:

  • Abgastemperatur (H:118) — Abgastemperatur des Kessels, nützlich zur Überwachung der Verbrennungseffizienz
  • Rücklauftemperatur (H:108) — Rücklauftemperatur aus dem Heizkreis
  • Außentemperatur (H:110) — Außentemperatur vom Kesselsensor, verwendet für witterungsgeführte Heizkurven

Alle Temperaturregister verwenden das 32-Bit-Float-Format (2 aufeinanderfolgende Holding-Register).

Drucküberwachung
  • Heizkreisdruck (H:114) — Wasserdruck im Heizkreis in bar. Niedriger Druck kann auf ein Leck oder die Notwendigkeit einer Nachfüllung hinweisen.
Wärmequellenleistung
  • Wärmequellenleistung — ein Dimmer-Modell, das die Modulationsstufe des Kessels darstellt. Zwei Serviceattribute aus OpenTherm Data-ID 15 zeigen den minimalen Modulationsprozentsatz und die maximale Kesselleistung in kW.

Lesen zusätzlicher OpenTherm-Register

Die Vorlage enthält einen zyklischen Mechanismus zum Lesen von OpenTherm-Data-IDs, die nicht direkt auf Standard-Modbus-Register gemappt sind. Dies dient zum Abrufen von Min/Max-Temperaturbereichen und Kesselkapazitätsdaten.

So funktioniert es:

  1. Das Modul ReadScript aktiviert das Lesen zusätzlicher OT-Register durch Setzen von Bit 10 in H:200
  2. Es schreibt die gewünschte OpenTherm-Data-ID in H:216 und löst ein Lesen über H:217 aus
  3. Die Antwort erscheint in H:120, der Status in H:121 (1=Erfolg, 3=Fehler)
  4. Das Skript durchläuft zyklisch drei Data-IDs: 48 (Warmwasser Min/Max), 49 (Heizung Min/Max) und 15 (Kesselkapazität)

Die abgerufenen Werte werden in internen Variablen (TUV_MM, Top_MM, Kotol_MM) gespeichert und als Serviceattribute an den entsprechenden Geräten bereitgestellt.

Servicediagnose

Das Modul stellt neun Serviceattribute zur Überwachung bereit:

  • Gateway ID (H:0) — bestätigt den Gateway-Typ (197 = DM-OT2)
  • Firmware-Version (H:1) — aktuelle Firmware-Version des Gateways
  • Zeit (H:2) — Betriebszeitzähler des Gateways
  • Guard Time (H:4) — Timeout zur Bewertung von Modbus-Kommunikationsfehlern in Millisekunden
  • Neustartzähler (H:8) — Anzahl der Gateway-Neustarts (über Serviceaktion rücksetzbar)
  • Modbus-Nachrichtenzähler (H:9) — Gesamtzahl verarbeiteter Modbus-Nachrichten (über Serviceaktion rücksetzbar)
  • Warmwasser vorhanden (H:100, Bit 6) — ob Warmwasserbereitung verfügbar ist
  • TV2 vorhanden (H:100, Bit 7) — ob ein sekundärer Heizkreis verfügbar ist
  • Wärmequellenleistung [%] (H:112) — aktuelle Kesselmodulation in Prozent

Zwei Serviceaktionen ermöglichen das Zurücksetzen der Gateway-Zähler:

  • Neustartzähler zurücksetzen — löscht den Neustartzähler des Gateways (H:8)
  • Modbus-Nachrichtenzähler zurücksetzen — löscht den Modbus-Nachrichtenzähler (H:9)

Das Modul ReadScript überwacht auch den OpenTherm-Kommunikationsstatus (H:100 Bit 0) und Gerätefehler (H:100 Bit 1, H:101) und meldet diese als Fehler und Warnungen in TapHome.

LED-Anzeigen

LEDFunktion
PWRKonverter ist mit Strom versorgt
RxDDatenempfang auf RS-485
TxDDatensendung auf RS-485
RxOTDatenempfang auf OpenTherm
TxOTDatensendung auf OpenTherm

Normalzustand: PWR leuchtet, RxD/TxD blinken während der Modbus-Kommunikation, RxOT/TxOT blinken während der OpenTherm-Kommunikation.

Fehlerbehebung

Keine Modbus-Kommunikation (RxD/TxD LEDs blinken nicht)
  1. RS-485-Kabel prüfen:
    • A (Klemme 3) korrekt an A+/D+ von TapHome angeschlossen
    • B (Klemme 2) korrekt an B-/D- von TapHome angeschlossen
    • G485 (Klemme 1) an Masse der TapHome-Stromversorgung angeschlossen — häufigster Fehler
  2. Modbus-Slave-Adresse an DIP-Schaltern ADR0–ADR5 überprüfen
  3. Bestätigen, dass DIP-Schalter MODE auf OFF steht (Modbus RTU ausgewählt)
  4. Kommunikationsgeschwindigkeit prüfen (COMM0=OFF, COMM1=OFF, COMM2=ON für 9600 Baud)
  5. Bestätigen, dass TapHome eingestellt ist auf: 9600 Baud, keine Parität, 2 Stoppbits
Keine OpenTherm-Kommunikation (RxOT/TxOT LEDs blinken nicht)
  1. Verkabelung zwischen RC1/RC2-Klemmen und dem OpenTherm-Anschluss des Kessels prüfen
  2. Überprüfen, ob der Kessel OpenTherm unterstützt (nicht alle Geminox-Modelle haben eine OT-Schnittstelle)
  3. Prüfen, ob das DM-OT2 korrekt mit Strom versorgt wird (20–30 V DC)
OT-Kommunikationsfehler in TapHome

Wenn TapHome „OT communication error" meldet (Status Bit 0 = 0):

  1. OpenTherm-Verkabelung zwischen DM-OT2 und Kessel prüfen
  2. DM-OT2 durch Aus- und Einschalten der Stromversorgung neu starten
  3. Serviceattribut Guard Time prüfen — wenn auf 0 gesetzt, ist die Verbindung dauerhaft als getrennt markiert
Gerätefehler in TapHome

Wenn TapHome „Device error" meldet (Status Bit 1 = 1):

  1. Den Wert des Last-Error-Registers aus den TapHome-Warnungen ablesen
  2. Im Servicehandbuch des Kessels den spezifischen Fehlercode nachschlagen
  3. Der Fehler stammt vom Kessel selbst, nicht vom Gateway
Zusätzliche Funktionen

Das DM-OT2-Gateway stellt auch Register für die Vorlauftemperatur des Kessels (H:116), die direkte Warmwassertemperatur (H:104) und zusätzliche Steuerbits auf H:200 für OT-Kommunikationsfreigabe und Fehlerbestätigung bereit. Diese können in einem zukünftigen Vorlagen-Update hinzugefügt werden.

Verfügbare Geräte

Geminox THRi (via Amit DM-OT2) Modul
Serviceattribute
Gateway-IDreads H:0 (UInt16); switch: 197=\'DM-OT2\', other=\'Unknown\'; identifies the Amit DM-OT2 gateway
Firmware-Versionreads H:1 (UInt16); gateway firmware version number
Zeitreads H:2 (UInt32); gateway uptime or system time counter
Schutzzeit [ms]reads H:4 (UInt16); Modbus guard time in milliseconds
Reset-Zählerreads H:8 (UInt16); number of gateway resets since last clear
Modbus-Nachrichtenzählerreads H:9 (UInt16); total Modbus messages processed since last clear
Warmwasser vorhandenreads bit 6 of Status (H:100); \'Yes\' if DHW heating is available, \'No\' otherwise
TV2 vorhandenreads bit 7 of Status (H:100); \'Yes\' if secondary heating circuit (TV2) is available, \'No\' otherwise
Wärmequellenleistung [%]reads H:112 (Float); current boiler modulation/power output as percentage
Serviceaktionen
Reset-Zähler zurücksetzenwrites H:8 (UInt16) = 0; clears the gateway reset counter
Modbus-Nachrichtenzähler zurücksetzenwrites H:9 (UInt16) = 0; clears the Modbus message counter

Geminox THRi (cez Amit DM-OT2)

Lesen (Modul)
Status := modbusr(H, 100, Uint16);
if(getbit(Status, 0) = 0, adderror("Chyba komunikacie OT"));
if(getbit(Status, 1) = 1, adderror("Chyba zariadenia OT"));

var lastError := modbusr(H, 101, Uint16);
if(lastError != 0, addwarning("Chyba zariadenia " + lastError));

# povol citanie extra OT registrov
var ret := modbusr(H, 200, Uint16);
if getbit(ret, 10) = 0
    modbusw(H, 200, Uint16, ret + (1 << 10));
end

# citanie extra OT registrov
var reg := modbusr(H,216,Uint16);
var stat := modbusr(H,121,Uint16);
var out := 0;
if reg = 48
    #TUV Min/Max
    if  stat = 1
        out := modbusr(H,120,Uint16);
        TUV_MM := out;
        modbusw(H, 216, Uint16, 49);
        modbusw(H, 217, Uint16, 1);
    end
elseif reg = 49
    #kurenie Min/Max
    if stat = 1
        out := modbusr(H,120,Uint16);
        Top_MM := out;
        modbusw(H, 216, Uint16, 15);
        modbusw(H, 217, Uint16, 0);
    end
elseif reg = 15
    #kotol Min/Max
    if stat = 1
        out := modbusr(H,120,Uint16);
        Kotol_MM := out;
        modbusw(H, 216, Uint16, 48);
        modbusw(H, 217, Uint16, 1);
    end 
else
    #zaciname s TUV Min/Max
    modbusw(H, 216, Uint16, 48);
    modbusw(H, 217, Uint16, 1);
end

if modbusr(H,121,Uint16) = 3
    #ak chyba zaciname odznova s TUV Min/Max
    modbusw(H, 216, Uint16, 48);
    modbusw(H, 217, Uint16, 1);
end
Serviceattribute
ID
switch(modbusr(H, 0, Uint16),
197, "DM-OT2",
"Unknown")
Verze firmware
modbusr(H, 1, Uint16)
Čas
modbusr(H, 2, Uint32)
GuardTime [ms]
modbusr(H, 4, Uint16)
Počítadlo resetů
modbusr(H, 8, Uint16)
Počítadlo MODBUS zpráv
modbusr(H, 9, Uint16)
Ohřev TUV přítomen
if(getbit(Status, 6), "Ano", "Ne")
TV2 přítomna
if(getbit(Status, 7), "Ano", "Ne")
Výkon topného zdroje [%]
modbusr(H, 112, Float)
Serviceaktionen
Nulovat Počítadlo resetů
modbusw(H, 8, Uint16, 0)
Nulovat Počítadlo MODBUS zpráv
modbusw(H, 9, Uint16, 0)
Brenner Reed-Kontakt Nur lesen

Brennerflammenstatus — aktiv, wenn der Kesselbrenner zündet

Register: H:100 UInt16 bitmask

Brenner

Lesen
getbit(Status, 4)
Heizung Reed-Kontakt Nur lesen

Zentralheizungsstatus — aktiv, wenn der Heizkreis läuft

Register: H:100 UInt16 bitmask

Heizung

Lesen
getbit(Status, 2)
Warmwasserbereitung Reed-Kontakt Nur lesen

Warmwasserbereitungsstatus — aktiv, wenn der Warmwasserkreis läuft

Register: H:100 UInt16 bitmask

Warmwasserbereitung

Lesen
getbit(Status, 3)
Heizung Freigabe Schalter

Aktiviert oder deaktiviert die Zentralheizung über Read-Modify-Write auf dem Steuerregister

Register: H:200 UInt16 bitmask

Heizung Freigabe

Schaltzustand lesen
if cnt = 0
    var ret := getbit(modbusr(H,200,Uint16), 5);
    return (ret);
else
    cnt := cnt -1;
    return (St);
end
Schaltzustand schreiben
var ret := modbusr(H,200,Uint16);
var x := (ret & 0xffdf) + (St << 5);
modbusw(H, 200, Uint16, x);
cnt := 5;
Warmwasser Freigabe Schalter

Aktiviert oder deaktiviert die Warmwasserbereitung über Read-Modify-Write auf dem Steuerregister

Register: H:200 UInt16 bitmask

Warmwasser Freigabe

Schaltzustand lesen
if cnt = 0
    var ret := getbit(modbusr(H,200,Uint16), 6);
    return (ret);
else
    cnt := cnt -1;
    return (St);
end
Schaltzustand schreiben
var ret := modbusr(H,200,Uint16);
var x := (ret & 0xffbf) + (St << 6);
modbusw(H, 200, Uint16, x);
cnt := 5;
Abgastemperatur Temperatursensor Nur lesen

Abgastemperatur aus der Brennkammer des Kessels

Register: H:118 Float Einheit: °C numeric

Abgastemperatur

Temperatur lesen
MODBUSR(H, 118, Float)
Rücklauftemperatur Temperatursensor Nur lesen

Rücklauftemperatur aus dem Heizkreis

Register: H:108 Float Einheit: °C numeric

Rücklauftemperatur

Temperatur lesen
MODBUSR(H, 108, Float)
Heizkreistemperatur Thermostat

Heizkreis-Vorlauftemperatur mit einstellbarem Sollwert und Min/Max-Bereich aus OpenTherm

Register: H:102H:201 Float Einheit: °C numeric
Serviceattribute
Heizkreistemperatur Min / Max

Heizkreistemperatur

Temperatur lesen
MODBUSR(H, 102, Float)
Solltemperatur lesen
MODBUSR(H, 201, Float)
Solltemperatur schreiben
MODBUSW(H, 201, Float, Se)
Serviceattribute
Min / Max Teplota Vykurovacieho okruhu
getbyte(Top_MM, 1) + "/" + getbyte(Top_MM, 0)
Heizkreisdruck Variable Nur lesen

Wasserdruck im Heizkreis

Register: H:114 Float Einheit: bar numeric

Heizkreisdruck

Lesen
MODBUSR(H, 114, Float)
Warmwasserthermostat Thermostat

Warmwassertemperatur mit einstellbarem Sollwert und Min/Max-Bereich aus OpenTherm

Register: H:106H:205 Float Einheit: °C numeric
Serviceattribute
Warmwassertemperatur Min / Max

Warmwasserthermostat

Temperatur lesen
MODBUSR(H, 106, Float)
Solltemperatur lesen
MODBUSR(H, 205, Float)
Solltemperatur schreiben
MODBUSW(H, 205, Float, Se)
Serviceattribute
Min / Max Teplota TUV
getbyte(TUV_MM, 1) + "/" + getbyte(TUV_MM, 0)
Außentemperatur Temperatursensor Nur lesen

Außentemperatur vom Kesselsensor

Register: H:110 Float Einheit: °C numeric

Außentemperatur

Temperatur lesen
MODBUSR(H, 110, Float)
Wärmequellenleistung Dimmer Nur lesen

Kesselmodulationsstufe mit Serviceattributen für minimale Modulation und maximale Leistung

Serviceattribute
Min Modulation [%]
Max Leistung [kW]

Wärmequellenleistung

Level lesen
MODBUSR(H, 112, Float) / 100
Serviceattribute
Minimalna modulacia [%]
getbyte(Kotol_MM, 1)
Max vykon [kW]
getbyte(Kotol_MM, 0)
Verbindung: Modbus RTU • 9600 baud• 8N2 • Slave ID: $[SlaveId]
Mögliche Verbesserungen (5)
  • H:104 DHW Temperature (direct) — H:104 Float — likely DHW flow temperature; not exposed as separate device (DHW Thermostat uses H:106 for current)
  • H:116 Boiler Water Temperature — H:116 Float — boiler flow/supply water temperature; could complement return water temp
  • H:200 bit 0 OT Communication Enable — Bit 0 of H:100 indicates OT comm status; corresponding control bit on H:200 could enable/disable OT communication
  • H:200 bit 1 Device Error Acknowledge — Bit 1 of H:100 indicates device error; potential error acknowledgment via H:200
  • H:203 Heating Circuit Desired Temperature (alternative) — Potential alternative setpoint register; template uses H:201 for heating circuit desired temp

Quellen