In diesem Beitrag möchte ich euch eine DIY-Lösung vorstellen, mit der ich die Steuerung meiner Gastherme auf ein völlig neues Niveau gehoben habe. Ursprünglich war meine Gastherme über den Raumregler Junkers TRQ21 gesteuert. Dieser Regler hatte jedoch eine entscheidende Schwäche: Er konnte nur die Temperatur im Wohnzimmer messen. Das führte oft dazu, dass andere Räume wie das Schlafzimmer entweder überheizt oder unterheizt waren – ein unbefriedigender Zustand, der mich zur Eigeninitiative bewegt hat.

Problem: Der limitierte Junkers TRQ21 Controller

Der Junkers TRQ21 erfüllte zwar seine Aufgabe, doch seine Funktionalität war sehr eingeschränkt. Da die Steuerung allein auf der Temperatur im Wohnzimmer basierte, wurden die individuellen Bedürfnisse anderer Räume völlig ignoriert. Das Schlafzimmer blieb oft kalt, während das Wohnzimmer bereits warm genug war. Eine Lösung musste her – und zwar eine, die flexibler, smarter und anpassbarer ist.

Meine DIY-Lösung: Eine eigene Platine mit ESP32

Ich entschied mich, den Raumregler durch eine eigene DIY-Steuerung zu ersetzen. Der Kern meiner Lösung ist eine selbst entworfene Platine, die mit einem Mikrocontroller vom Typ ESP32 ausgestattet ist. Dieser leistungsstarke Mikrocontroller dient als zentrale Steuereinheit und bietet die Möglichkeit über WLAN von meinem HomeAssistant aus gesteuert zu werden.

Der Schaltplan

Die Platine verbindet mehrere Komponenten und ermöglicht es, die Heizung anzusteuern. Die Heizung wird über drei Leitungen angeschlossen: 24V, Steuerleitung und GND.

Auf meiner Platine befindet sich ein 3,3V DC-DC Wandler, der aus den 24V von der Heizung den ESP32 mit der benötigten Spannung versorgt. Der ESP32 übernimmt die Steuerung der Heizleistung über einen Digital-to-Analog-Ausgang (DAC), der ein Signal an einen LM324 Operationsverstärker weiterleitet. Der Operationsverstärker erzeugt ein Steuersignal zwischen 0V und 24V, das an die Steuerleitung der Heizung ausgegeben wird.

Zusätzlich habe ich einen Backup-Temperatursensor auf der Platine integriert, der in Zukunft für einen Frostschutz genutzt werden soll (diese Funktion ist aktuell noch nicht im Programm implementiert). Zur Statusanzeige befinden sich zwei LEDs auf der Platine:

  • Gelbe Led: Zeigt an, ob die Heizung gerade aktiv ist (Heizen ein/aus).
  • Rote Led: Signalisiert, ob eine Störung vorliegt.

ESPHome als Firmware

Auf dem ESP32 läuft die beliebte Open-Source-Firmware ESPHome, die speziell für smarte Heimautomationen entwickelt wurde. ESPHome ermöglicht eine nahtlose Integration in HomeAssistant, was in meinem Fall der Schlüssel zur Lösung war.

Details
esphome:
  name: heizung-esp
  friendly_name: Heizung-ESP

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  level: DEBUG

# Enable Home Assistant API
api:
  encryption:
    key: "<removed>"

ota:
  - platform: esphome
    password: "<removed>"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Heizung-Esp Fallback Hotspot"
    password: "<removed>"

captive_portal:

web_server:
  port: 80

output:
  - platform: esp32_dac
    pin: GPIO25
    id: dac_output
    min_power: 0.17

binary_sensor:
  - platform: status
    name: "Heizung Status"

number:
  - platform: template
    name: Heizleistung
    id: heizleistung
    icon: mdi:heat-wave
    optimistic: True
    min_value: 0
    max_value: 100
    step: 1
    mode: slider
    on_value:
      then:
        - output.set_level:
            id: dac_output
            level: !lambda "return x/100;"
        - if:
            condition:
              and:
                - number.in_range: 
                    id: heizleistung
                    above: 1
                - switch.is_off: disable_led
            then:
              - switch.turn_on: yellow_led
            else:
              - switch.turn_off: yellow_led
switch:
  - platform: gpio
    id: yellow_led
    pin: GPIO13
    name: Gelbe LED
    internal: True
  - platform: template
    name: "LED unterdrücken"
    icon: mdi:alarm-light-off
    id: disable_led
    optimistic: True
    on_turn_on: 
      then:
        - switch.turn_off: yellow_led
    on_turn_off: 
      then:
        - if: 
            condition: 
              - number.in_range: 
                  id: heizleistung
                  above: 1
            then:
              - switch.turn_on: yellow_led

sensor:
  - platform: dht
    pin: GPIO4
    temperature:
      name: "Backup Temperature"
    humidity:
      name: "Backup Humidity"
    update_interval: 60s

status_led:
  pin: GPIO12

HomeAssistant als zentrale Steuerung

Home Assistant agiert als übergeordnete Zentrale. Meine Heizkörperthermostate sind ebenfalls in Home Assistant integriert und teilen der Platine (bzw. dem ESP32) kontinuierlich mit, wie viel Heizleistung in den jeweiligen Räumen benötigt wird. Die Steuerung basiert somit auf den tatsächlichen Bedürfnissen aller Räume und nicht mehr nur auf einer einzigen Messstelle.

Was fehlt?

Auch wenn die DIY-Steuerung bereits funktionsfähig ist, gibt es noch ein wichtiges Detail, das aktuell fehlt: Ein passendes Gehäuse, um die Platine zu schützen und ordentlich an der Wand zu montieren. Hier plane ich, ein 3D-gedrucktes Gehäuse zu entwerfen, das sowohl die Elektronik vor Staub und äußeren Einflüssen schützt als auch eine ansprechende Optik bietet. Das Gehäuse wird Löcher für die Anschlüsse, Lüftungsöffnungen sowie Halterungen für die Wandmontage beinhalten. Sobald das Gehäuse fertig ist, wird die Installation nicht nur technisch, sondern auch optisch komplett sein.

Fazit

Die Umstellung von einem simplen Raumregler wie dem Junkers TRQ21 auf eine selbstgebaute Lösung mit ESP32 und ESPHome war definitiv die richtige Entscheidung. Meine Gastherme arbeitet jetzt effizienter, und ich kann sicherstellen, dass alle Räume in meinem Zuhause genau so beheizt werden, wie ich es möchte. Der Aufbau der Platine hat mir zudem erlaubt, die Steuerung individuell an meine Bedürfnisse anzupassen und Platz für zukünftige Erweiterungen zu lassen.