OTthing – Das universelle WiFi-OpenTherm Interface

Die OpenTherm Schnittstelle wurde entwickelt um herstellerübergreifend Geräte aus die Heizungs- und Klimabereich wie Gasthermen, Wärmepumpen, Hackschnitzelheizungen, Ölkessel, Lüftungsanlagen und Klimaanlagen zu steuern. Inspiriert durch die Projekte OTGW, DIYLESS Open Therm und Laxilef’s OTGateway entstand der Wunsch nach der Eigenentwicklung eines OpenTherm Interfaces inklusive Firmware mit folgenden Anforderungen:

  • Kompaktes günstiges Ein-Leiterplatten-Design in SMD Technik
  • Integriertes OpenTherm Master- sowie Slaveinterface
  • Einfache Stromversorgung über USB-C Buchse
  • Kompaktes Gehäuse
  • Anschlussmöglichkeit für 1wire Sensoren; etwa zusätzliche Temperaturfühler etc.
  • Anschlussmöglichkeit eines Impulsgebers oder einer Gabellichtschranke zur Erfassung der Kondensatbildung in Brennwertgeräten
  • Automatischer Bypass, so dass der herkömmliche Betrieb über das Raumthermostat einfach und ohne Änderung der Verkabelung wiederherstellbar ist
  • Auswählbare Betriebsarten zur kompletten Steuerung der Therme durch das OTthing, oder lediglich die Erfassung aller Betriebsdaten und Messwerte
  • Witterungsgeführte Vorlauftemperatur
  • Ausgabe von Messwerten über MQTT mit automatischer Integration in Home Assistant
  • Quelloffene Hardware sowie Firmware, um eigene Erweiterungen und Modifikationen zu ermöglichen

Das OTthing kann durch das integrierte Master- und Slaveinterface in folgenden Betriebsarten verwendet werden:

  • Master: Die Therme wird vom OTthing gesteuert. Über das Webinterface des OTthing oder über die MQTT Schnittstelle können zahlreiche Betriebsparameter eingestellt und die Messwerte ausgewertet werden.
  • Repeater: Die Kommandos des angeschlossenen Raumthermostats werden zur angeschlossene Therme weitergeleitet und umgekehrt, so dass alle Messwerte und Einstellungen im Netzwerk zur Verfügung stehen.
  • Bypass: Das integrierte Relais verbindet direkt das angeschlossene Raumthermostat mit der angeschlossenen Therme, ohne dass in die Kommunikation eingegriffen wird. Bei Wegfall der Stromversorgung des OTthing wird automatisch der Bypass-Modus aktiviert.

Anwendungen

  • Überwachung der Messwerte und Betriebsdaten
  • Überschreibung von ausgewählten Parametern des Raumthermostats
  • Außentemperaturgeführte Steuerung der Vorlauftemperatur
  • Autarke Steuerung als Master eines Heiz-/Klimagerätes auch ohne Raumgerät

Die Schaltung im Überblick

  • Mikrocontroller Espressiv ESP32-C3 mit WiFi und Bluetooth
  • USB-C Buchse zur Stromversorgung, Programmierung und Diagnose
  • OpenTherm Master- und Slaveinterface
  • 24 V Step-Up-Wandler zur Versorgung des Thermostats am OpenTherm-Slave-Anschluss
  • Bypassrelais; Therme und Raumthermostat werden bei Ausfall des OTthing direkt miteinander verbunden
  • 4 LEDs zur Statusanzeige
  • Reset- und Konfigurationsknopf
  • Anschluss für 1wire Sensoren
  • Anschluss für digitalen Schalteingang

Schaltplan

Anschlussbelegung CPU

OpenTherm Master TXGPIO 1
OpenTherm Master RXGPIO 3
OpenTherm Slave TXGPIO 7
OpenTherm Slave RXGPIO 6
Schaltregler +24 V für Slaveinterface enableGPIO 10
Bypass-Relais mit LEDGPIO 20
LEDGPIO 21
LEDGPIO 2
LEDGPIO 8
Digitaleingang SchraubklemmeGPIO 5
1wire dataGPIO 4

Firmware

Reset/Config Taster für ca. 2 s gedrückt halten. Damit wird das OTthing in den Konfigurationsmodus versetzt. Die Status-LED blinkt nun immer 2x. Mit einem WiFi-fähigen Gerät mit dem Access Point OTthing verbinden, das AP Passwort lautet 12345678. Mit einem Browser zur Adresse http://4.3.2.1 navigieren, um die Konfigurationsoberfläche des OTthing zu öffnen.

Setup

WiFi

Mit dem scan Button werden alle verfügbaren WiFi Accesspoints gesucht und angezeigt, um das OTthing mit dem eigenen Netzwerk zu verbinden.

OpenTherm

Mode
  • Bypass: Angeschlossene Therme und Thermostat werden elektrisch direkt miteinander verbunden, in die Kommunikation wird nicht eingegriffen.
  • Master: Das OTthing steuert eine am Anschluss „Boiler“ angeschlossene Therme. Das OT Slaveinterface (Anschluss „Room-unit“) kann über die Option „enable slave interface“ zusätzlich aktiviert werden um z. B. die Raumsolltemperatur weiterhin vom Thermostat einstellen zu können.
  • Repeater: OpenTherm Master- und Slaveinterface sind aktiv. Kommandos des Raumthermostats werden ausgewertet, angezeigt, per MQTT gesendet und an die Therme weitergeleitet (Monitoring). Die empfangenen Antworten der Therme werden umgekehrt ebenfalls ausgewertet und zurück zum Thermostat weitergeleitet. Je nach Einstellung können bestimmte Kommandos vom OTthing überschrieben werden.
  • Test: Master- und Slaveemulation. Einem angeschlossenen Raumthermostat und/oder einer angeschlossenen Therme werden Testdaten geschickt. Ebenso können der Master- und Slaveanschluss des OTthing direkt miteinander verbunden werden (Looptest), um die Open Therm Hardware des OTthing zu testen.
DHW set temperature

Solltemperatur (default) für Brauchwasser, kann über MQTT geändert werden.

Override values

Im Modus Master werden bei aktivierter override Option die jeweiligen vom angeschlossenen Raumthermostat gesendeten Werte verwendet.

Im Modus Repeater werden bei aktivierter override Option die jeweiligen Werte durch die errechneten oder vorgegebenen Werte vom OTthing verwendet.

Outside temperature

Hier wird ausgewählt, aus welcher Quelle das OTthing die Außentemperatur bezieht, um die Vorlauftemperatur mithilfe der Heizkurveneinstellungen zu setzen. Mögliche Quellen der Außentemperatur:

  • An die Therme angeschlossener Temperaturfühler
  • MQTT Topic (z. B. über Home Assistant Regel)
  • BTHome kompatibler Bluetoothsensor
  • 1wire Sensor
  • Open Weather API

Heating circuit 1 / 2

Einstellung und Visualisierung der Heizkurven. Die rote Heizkurve stellt den Zusammenhang zwischen Außentemperatur und Vorlauftemperatur aufgrund der eingestellten Parameter dar. Die grüne Heizkurve berücksichtigt ggf. zusätzlich die Raumkompensation. Kleine vereinfachte Einstellhilfe:

  • Auslegung anhand der vorhandenen Anlage einstellen
  • Die folgenden beiden Schritte jeweils bei möglichst konstanten Außentemperaturen von einmal unter 0 °C und einmal über 10 °C durchführen
  • Alle Heizkörperthermostate ganz (!) aufdrehen oder Thermostatköpfe entfernen
  • Über die beiden Betriebsparameter die Vorlauftemperatur so weit absenken, damit der schwierigste Raum noch die eingestellte Raumtemperatur erreicht, dann Marker speichern
  • Steilheit und Niveau so einstellen, dass die Kurve durch die Marker läuft

Der Zustand des Integrationsgliedes des (aktivierten) PI Reglers kann beim Einstellen der Heizkurve helfen. Bleibt der Wert nahe um 0 K liegt die Heizkurve bei der herrschenden Außentemperatur richtig.

Dimensioning

Auslegung der Heizanlage. Typische Werte:

HeizungsartMax. Vorlauf (°C)HeizkörperexponentBemerkung
Gasbrennwert/Radioator751,3Standard-Radiatoren, moderate Trägheit
Gasbrennwert / Flachheizkörper701,25Flache Heizkörper → etwas steilere Kurve nötig
Pelletkessel / Radiator651,3Typisch für mittelgroße Gebäude
Wärmepumpe / Radiator551,2Niedertemperatur-Heizsystem, langsame Reaktion
Wärmepumpe / Fußbodenheizung451,15Sehr träge, sehr niedrige Vorlauftemperatur

Setup

Flow set temperature (default)

Standard-Vorlauftemperatur wenn keine Werte zur Vorlauftemperaturberechnung oder Werte über MQTT vorhanden sind.

Min. flow temperature

Mindest-Vorlauftemperatur. Unterschreitet die über die Heizkurve errechnete Vorlauftemperatur diesen Wert wird

  • bei deaktivierter Option suspend below min. flow als Vorlauftemperatur die Mindest-Vorlauftemperatur verwendet
  • bei aktivierter Option suspend below min. flow der Heizkreis abgeschaltet
Room setpoint source
  • MQTT: Die Raumsolltemperatur wird über MQTT eingestellt
  • OT roomunit: Die Raumsolltemperatur wird über das angeschlossene Thermostat eingestellt
  • auto: Als Raumsolltemperatur wird der jeweils zuletzt veränderte Wert über MQTT oder das Raumthermostat verwendet
Room compensation (PI controller)

Die Differenz aus Raummsolltemperatur und Raumisttemperatur kann über einem parametrierbaren PI Regler auf die berechnete Vorlauftemperatur beaufschlagt werden. Als Quelle der Raumtemperatur kann ein MQTT Topic, ein 1wire Sensor, ein BTHome Bluetooth Sensor oder die OpenTherm Raumeinheit ausgewählt werden.

Enable

Aktiviert oder deaktiviert den PI Regler

P gain / I gain

Regelparameter des PI Reglers. P gain = Proportionalverstärkung, I gain = Integralverstärkung

Boost

Bei einer Regelabweichung von e > 1.0 wird die Vorlauftemperatur zusätzlich mit e * boost beaufschlagt.

Suspend on room setpoint

Der Heizkreis wird bei aktivierter Option deaktiviert sobald die Raumtemperatur (+ Hysterese) erreicht ist. Bei Unterschreiten der Raumtemperatur (- Hysterese) wird der Heizkreis wieder aktiviert.

Returnlimit Δt

Überschreitet die gemessene Rücklauftemperatur die Rücklaufheizkurve wird mittels eines PI Reglers die Vorlauftemperatur abgesenkt.

MQTT Topics

Auf folgende MQTT Topics reagiert das OTthing, um Betriebsparameter zu setzen. Die Steuerelemente der Homeassistantintegration werden automatisch auf diese Topics konfiguriert und verwenden diese beim Ändern von Einstellungen in Home Assistant.

Modus für die Vorlaufsolltemperatur

MQTT TopicWerteFunktion
<basetopic>/outsideTemp/set-30..30 °CAktuelle Außentemperatur zur Vorlauftemperaturberechnung anhand der Heizkurve
<basetopic>/dwhSetTemp/set10..70 °CBrauchwasser-Solltemperatur
<basetopic>/chSetTemp1/set
<basetopic>/chSetTemp2/set
0..90 °CVorlauftemperatur Heizkreis 1/2 bei manueller Steuerung
<basetopic>/chMinTemp1/set
<basetopic>/chMinTemp2/set
10..40 °Cminimale Vorlauftemperatur Heizkreis 1/2
<basetopic>/chMode1/set
<basetopic>/chMode2/set
„off“ | „heat“ | „auto“Modus Heizkreis 1/2
<basetopic>/dhwMode/set„off“ | „heat“Brauchwasserbereitung ein/aus
<basetopic>/roomSetpoint1/set
<basetopic>/roomSetpoint2/set
0..30 °CRaumsolltemperatur zur Vorlaufberechnung aus der Heizkurve
<basetopic>/roomTemp1/set
<basetopic>/roomTemp2/set
0..30 °CAktuelle Raumtemperatur zur Kompensation über PI Regler
<basetopic>/overrideChOn1/set
<basetopic>/overrideChOn2/set
„OFF“ | „ON“
<basetopic>/overrideChFlow1/set
<basetopic>/overrideChFlow2/set
„OFF“ | „ON“
<basetopic>/overrideDhw/set„OFF“ | „ON“
<basetopic>/ventSetpoint/set0..100 %Sollwert für Lüftungsanlage
<basetopic>/ventEnable/set„OFF“ | „ON“ein/aus für Lüftungsanlage
<basetopic>/openBypass/set„OFF“ | „ON“Bypass für Luftungsanlage
<basetopic>/autoBypass/set„OFF“ | „ON“Autobypass für Lüftungsanlage
<basetopic>/freeVentEnable/set„OFF“ | „ON“Freevent für Lüftungsanlage
<basetopic>/bypass/set„OFF“ | „ON“Schaltet das OT interface auf bypass
Modus Heizkreis 1/2
…/chModeX/setVorlaufsolltemperatur
autoBerechnung anhand Außentemperatur, Raumtemperatur und Heizkurve. Wenn Außentemperatur nicht zur Verfügung steht wie bei Mode heat
heatIm Webinterface eingestellter Wert flow set temperatur (default) oder über das MQTT Topic .../chSetTempX/set vorgegebener Wert
offHeizkreis deaktiviert
Override ChOn

Im Master-Modus des OTthing wird bei Aktivieren dieses Wertes („ON“) der Zustand (ein/aus) des angeschlossenen Raumthermostats verwendet.

Im Repeater-Modus wird bei Aktivieren dieses Wertes („ON“) der gesendete Wert der Raumeinheit mit dem berechneten Wert des OTthing überschrieben.

Override ChFlow

Im Master-Modus des OTthing wird bei Aktivieren dieses Wertes („ON“) die Vorlaufsolltemperatur des angeschlossenen Raumthermostats verwendet.

Im Repeater-Modus wird bei Aktivieren dieses Wertes („ON“) der gesendete Wert der Raumeinheit mit dem berechneten Wert des OTthing überschrieben.

Override DHW

Im Master-Modus des OTthing wird bei Aktivieren dieses Wertes („ON“) die Brauchwassersolltemperatur des angeschlossenen Raumthermostats verwendet.

Im Repeater-Modus wird bei Aktivieren dieses Wertes („ON“) der gesendete Wert der Raumeinheit mit dem Wert des OTthing überschrieben.

Ansteuerung über HTTP

Zusätzlich zur MQTT-Schnittstelle können die Betriebsparamter auch über den HTTP Endpunkt http://[IP]/set gesetzt werden. An die URL kann eine Liste von Key/Valuepaaren angehängt werden, wobei als Keys die gleichen Namen wie aus den obigen MQTT Topics verwendet werden können:
http://[IP]/set?roomSetpoint1=21.2
http://[IP]/set?chMode1=off

Berechnung der Vorlauftemperatur in OTthing

flowchart TD
    subgraph Control["Control Logic"]
        subgraph Inputs
            T_out["Outdoor<br/>Temperature"]
            ROOMSET["Room<br/>Setpoint"]
        end
        
        HC["Heating Curve<br/>(Base Flow Temp)"]

        subgraph PI_BLOCK["PI Controller (Offset)"]
            FILT["lowpass<br/>(Room Temp Filter)"]
            ERR["ΔT_room<br/>(Set − Actual)"]
            DB["deadband<br/>±0.2 K"]
            KP["× Kp"]
            KI["× Ki"]
            INT["∫"]
            AW["clip<br/>±5 K"]
            SUM_PI["Σ"]
            SAT["clip<br/>−5 … +15 K"]

            ERR --> DB
            DB --> KP --> SUM_PI
            DB --> KI --> INT --> AW --> SUM_PI --> SAT
        end

        SUM1["Σ"]
        LIMIT["clip<br/>Max Flow Temp"]
    end

    subgraph Plant["Heating System"]
        BOILER["Heat Generator<br/>(Gas / Pellet / Heat Pump)"]
    end

    %% Connections
    T_out --> HC
    ROOMSET --> HC
    HC --> SUM1

    BOILER --> T_room_raw["Room Temperature"]
    T_room_raw --> FILT
    FILT --> ERR
    ROOMSET --> ERR

    SAT --> SUM1
    SUM1 --> LIMIT
    LIMIT --> BOILER

Integration in Home Assistant

Sobald der MQTT Broker im OTthing konfiguriert ist und Nachrichten von Therme und/oder Thermostat empfangen werden, werden automatisch entsprechende Discoverynachrichten an Home Assistant gesendet, so dass alle Sensoren ohne weitere Einrichtung angezeigt werden:

Dashboard in Home Assistant

Außentemperatur von Home Assistant zum OTthing übertragen

Als Quelle für die Außentemperatur, die das OTthing zur Berechnung der Vorlaufsolltemperatur benötigt, kann die Weatherintegration von Home Assistant benutzt werden. Folgende Automation übermittelt zyklisch die Außentemperatur an das OTthing welches daraus die Vorlaufsolltemperatur errechnen kann:

alias: OTThing Außentemperatur
description: ""
trigger:
  - platform: time_pattern
    seconds: /30
condition: []
action:
  - service: mqtt.publish
    metadata: {}
    data:
      qos: "0"
      retain: false
      payload: "{{ state_attr(\"weather.home\", \"temperature\") }}"
      topic: otthing/31F374/outsideTemp/set
    enabled: true
mode: single

Funktion der LEDs

D10OT 1OpenTherm master receive. Zeigt den Pegelzustand des Empfangszweigs. Aus = niedrige Spannung, Ein = hohe Spannung
D13OT 2OpenTherm slave receive. Zeigt den Pegelzustand des Empfangszweis. Aus = niedriger Strom, Ein = hoher Strom
D11Status1x blinken: Normalbetrieb, 2x blinken: WiFi AP aktiviert
D12Ein = Relais aktiv, kein Bypass

Monitoring mit dem Opentherm Monitor

Das OTthing leitet alle auf der OpenTherm-Schnittstelle gesendeten und empfangenen Daten auf dem TCP Port 25238 weiter, so dass mit dem praktischen Tool Opentherm Monitor von Schelte Bron aus dem otgw Projekt die Daten visualisiert werden können.

Firmwareupdate

Die aktuelle Firmware findet sich hier, und kann über das Webinterface des OTthing mit einem Browser aktualisiert werden. Achtung: Ein Update von Version 1.x auf 2.x muss zwingend über den USB Anschluss durchgeführt werden. Dazu eignet sich der OT Thing Webflasher.

Zur Funktion einer Brennwerttherme

Warum moderne Heizungen nicht mehr an/aus schalten.

Eine Brennwerttherme ist kein Wasserkocher.

Alte Heizanlagen konnten im Betrieb in ihrer Leistung kaum variieren und lieferten so eine recht ungeregelte hohe Leistung zu den Wärmeübertragern. Ein Raum wird auf konstanter Temperatur gehalten wenn die abfließende Energie gleich der zugeführten Energie ist. Die zugeführte Energie hängt von der eingestellten Vorlauftemperatur ab:

Q˙in=c(ΘHeizkörperΘRaum)n\dot{Q}_{\text{in}} = c \cdot (\Theta_{\text{Heizkörper}} – \Theta_{\text{Raum}})^n

Moderne Brennwertgeräte können die abgegebene Leistung im Gegensatz zu alten Wärmeerzeugern in großen Bereichen regeln (modulieren) so dass:

  • weniger Verluste durch hohe Vorlauftemperatur entstehen
  • der Brennwerteffekt (Kondensationswärme des Abgases) bei niedrigen Systemtemperaturen genutzt werden kann
  • deutlich weniger Takten notwendig ist, weniger Verschleiß
  • Weniger Geräusche durch weit offene Heizkörperthermostate
altneu
an / ausmodulierend
2-Punkt ReglerWitterungsgeführt mit Heizkurve + Feinkorrektur
Viele StartsLange Laufzeiten
Hohe VorlauftemperaturSo niedrig wie möglich
einfacheffizient

Die abfließende Energie hängt im Wesentlichen von der herrschenden Außentemperatur ab:

Q˙out=c(ΘRaumΘaußen)\dot{Q}_{\text{out}} = c \cdot (\Theta_{\text{Raum}} – \Theta_{\text{außen}})

Daraus ergibt sich die Funktion der Heizkurve:

ΘVorlauf=ΘRaum+C1(ΘRaumΘaußen)n+C2\Theta_{\text{Vorlauf}} = \Theta_{\text{Raum}} + C_1 \cdot \sqrt[n]{\left(\Theta_{\text{Raum}} – \Theta_{\text{außen}}\right)} + C_2

Idealerweise liefert die Brennwerttherme dauerhaft die gerade benötigte Energiemenge und alle Heizkörperthermstate sind möglichst weit geöffnet.

Shop

OTthing Firmware und Hardware auf GitHub

Beitrag im Home Assistant Forum

Physikalische Hintergründe zur Heizkurve

Informationen zum thermischen Abgleich (und viel mehr)

Sonstiges & FAQ

Mich erreichen viele nette interessierte Mails zum Thema OpenTherm, (Heizkurven-)einstellungen, Gerätevarianten, etc. Aus Zeitgründen kann ich nicht alle Nachrichten beantworten, die Häufigsten seien hier in Kürze beantwortet:

Funktioniert das OTthing auch mit Therme X und Raumeinheit Y?

Wenn die Geräte explizit den OpenTherm Bus unterstützen (Doku und/oder Hersteller konsultieren!) stehen die Chancen gut dass es funktionieren wird. Eventuell hilft eine Anfrage im HA Forum ob schon jemand Erfahrungen mit dem Gerät gesammelt hat.

Wie funktioniert die Einstellung XYZ?

Alle Einstellungen sind kurz in diesem Blogbeitrag erwähnt. Die heizungsspezifischen Einstellungen (Heizkurve, PI Regler, Heizkörperexponent, …) sind üblich und verbreitet, tiefergehend Informationen dazu liefert das www im Überfluss. Generell gilt: Nur Einstellungen und Funktionen deren Wirkweise verstanden wurde sind hilfreich, und nicht jede Funktion ist jede spezifische Anlage brauchbar.

Fehlerberichte und Featurerequests am besten als issue bei Github eintragen: https://github.com/Phunkafizer/OT-Thing/issues

Haftungsausschluss

Es wird keinerlei Haftung für Schäden an Personen oder Gegenständen übernommen. Die Installation und der Betrieb des OTthing erfolgen auf eigene Gefahr und Verantwortung.