Heizungssteuerung mit Homematic, Home Assistant, Node-RED und Nextcloud

In meinem letzten Artikel zum Thema Smarthome habe ich es schon angekündigt, dass ich die Heizungssteuerung überarbeiten wollte. Das ist jetzt passiert und rausgekommen ist eine doch sehr spezielle Lösung. Natürlich weiterhin in der Bastler-Edition.

Die Eve Thermo’s wurden durch die Heizungsthermostate von Homematic ersetzt. Bei Homematic wird grundsätzlich zwischen Homematic IP und Homematic Classic unterschieden. Der wesentliche Unterschied liegt im Protokoll, das zwischen den Geräten und der Zentrale gesprochen wird. Homematic IP ist der aktuelle Standard und dieser wird benötigt, wenn man die moderne App mit der Cloud-Anbindung nutzen will. Die Cloud-Lösung ist jedoch kein Muss und man kann alles unabhängig im eigenen Netzwerk betreiben.

Bei der Zentrale muss man zwischen drei Lösungen wählen. Möchte man es ganz einfach und eine ansprechende App für die Steuerung und Festlegung der Heizungspläne, dann wählt man den Homematic IP Access Point. An diesem Access Point werden alle Homematic IP Geräte angemeldet. Die Einstellungen werden über eine hübsche App gemacht und die Logik läuft über die Cloud. Soweit ich weiß benötigt man keinen zusätzlichen Account für die Cloud.

Möchte man etwas mehr Kontrolle, keine Cloud und mehr Optionen für die Einstellung/Programmierung, dann wählt man eine CCU2 oder CCU3. Mit dieser Zentrale kann man dann auch Homematic Classic Geräte betreiben. Aber man muss mit einer sehr veralteten Oberfläche leben. Bitte keinen Schock bekommen, aber so sieht die Oberfläche aus:

Möchte man etwas basteln und Geld sparen, dann bestellt man sich nur das Funkmodul und einen Raspberry Pi. Die Software, die auf einer CCU2 oder CCU3 läuft, kann man auch auf einem Raspberry Pi betreiben. Auf dem Pi läuft RaspberryMatic.

Natürlich habe ich mich für die letzte Variante entschieden. Ich kann jetzt schon verraten, dass ich zum Glück nicht sehr oft in die Oberfläche von Homematic muss, da die eigentliche Logik über Home Assistant und Node-RED läuft.

Damit der Artikel nicht extrem lang wird, werde ich nur die Steuerung für das Wohnzimmer vorstellen, da die anderen Räume auf der gleichen Basis aufbauen.

Hardware

Ein kurzer Überblick über die Hardware, die jetzt im Wohnzimmer zum Einsatz kommt, um die Heizungen zu steuern:

  • 2x Homematic IP Heizungsthermostate
  • 1x Homematic IP Wandthermostat
  • 1x Raspberry Pi 3B mit Homematic-Funkmodul
  • 1x Raspberry Pi 3B+ für Home Assistant und Node-RED
  • 1x Xiaomi Fensterkontakt
  • 1x CC2531 USB Stick für Zigbee

Homematic

Über die CCU sind die beiden Heizungsthermostate und das Wandthermostat miteinander verbunden und kommunizieren untereinander. Das hat den großen Vorteil, dass die zwei Heizungen im Wohzimmer zusammen arbeiten und die Temperatur aus der Mitte des Raumes als Referenz nutzen. Dies war mir besonders wichtig, da das Wohnzimmer und die offene Küche einen recht großen Raum ergeben, in dem sich die beiden Heizungen nur an einer Seite befinden.

In der CCU legt man eine Gruppe vom Typ „HmIP-Heizungssteuerung“ an. Diese erstellt dann die Direktverknüfpungen zwischen den Geräten.

Zusätzlich habe ich ein Programm angelegt, damit die Soll-Temperatur auf den Thermostaten aktualisiert wird. Von Home Assistant werde ich dann immer nur die Soll-Temperatur vom Wandthermostat verändern. Den Rest übernimmt dann die CCU.

Home Assistant

Da die meisten Einstellungen, die vorgenommen werden müssen, aus der Dokumentation von Home Assistant entnommen werden können, werde ich nur auf die Besonderheiten eingehen.

script:
  living_room_warm:
    alias: Wohnzimmer heizen
    sequence:
      - service: climate.set_temperature
        data:
          entity_id: climate.wohnzimmer_thermostat
          temperature: 22

  living_room_cold:
    alias: Wohnzimmer nicht heizen
    sequence:
      - service: climate.set_temperature
        data:
          entity_id: climate.wohnzimmer_thermostat
          temperature: 18

In Home Assistant habe ich zwei Skripte angelegt, die die Soll-Temperatur an das Wandthermostat übermitteln. Diese Skripte werden in Node-RED dann einfach nur aufgerufen. Somit lässt sich die Soll-Temperatur sehr einfach global ändern, wenn dies mal notwendig ist. In den letzten Monaten haben sich 18°C und 22°C als sehr brauchbar herausgestellt.

Jetzt fängt es an, dass die Bastellösung doch etwas komplizierter wird. 🙃 Es ist etwas aufwendiger, die Geräte im Wohnzimmer in den entsprechenden Zustand zu versetzen, wenn das Fenster geöffnet ist. Diese Funktion wird von Home Assistant nicht direkt angeboten, jedoch kann man den Wert manuell setzen.

logger:
  default: warning
  logs:
    homeassistant.components.homematic: debug
    pyhomematic: debug

Der Debug-Modus von Home Assistant für Homematic war dabei der beste Freund, um den Parameter herauszufinden. Der oben gezeigte Ausschnitt aktiviert den Debug-Modus für Homematic. Die Adressen der Geräte sieht man über die CCU.

script: 
  window_open_living_room:
    alias: Fenster Wohnzimmer geöffnet
    sequence:
      # Wohnzimmer Thermostat
      - service: homematic.set_device_value
        data:
          address: 000315699XXXX1
          channel: 1
          param: WINDOW_STATE
          value: 1
      # Wohnzimmer Heizung Fenster
      - service: homematic.set_device_value
        data:
          address: 000393C99XXX2
          channel: 1
          param: WINDOW_STATE
          value: 1
      # Wohnzimmer Heizung Fernseher
      - service: homematic.set_device_value
        data:
          address: 000393C99XXXX3
          channel: 1
          param: WINDOW_STATE
          value: 1

  window_close_living_room:
    alias: Fenster Wohnzimmer geschlossen
    sequence:
      # Thermostat Wohnzimmer
      - service: homematic.set_device_value
        data:
          address: 000315699XXXX1
          channel: 1
          param: WINDOW_STATE
          value: 0
      # Wohnzimmer Heizung Fenster
      - service: homematic.set_device_value
        data:
          address: 000393C99XXXX2
          channel: 1
          param: WINDOW_STATE
          value: 0
      # Wohnzimmer Heizung Fernseher
      - service: homematic.set_device_value
        data:
          address: 000393C99XXXX3
          channel: 1
          param: WINDOW_STATE
          value: 0

In der CCU lässt sich einstellen, wie sich die Geräte verhalten sollen, wenn das Fenster geöffnet ist. In meinem Fall wird die Soll-Temperatur auf 12°C gesenkt und somit die Heizung runtergefahren, wenn das Fenster geöffnet ist. Wenn das Fenster wieder geschlossen ist, dann wird die alte Soll-Temperatur wiederhergestellt.

Neben den Einstellungen für Homematic gibt es einen globalen Schalter, um die Heizungssteuerung zu aktivieren oder zu deaktivieren. Damit wird sicher gestellt, dass im Sommer die Heizung überhaupt nicht angesteuert wird.

Der globale Schalter ist mit einem Input Boolean umgesetzt.

input_boolean:
  heating_automation:
    name: Heizungssteuerung
    icon: mdi:radiator

Ansonsten wird in Home Assistant der Status der Heizung ausgegeben und die Option die zuvor angelegten Skripte manuell auszuführen.

Die eigentliche Magie der Steuerung passiert in Node-RED. Node-RED gibt es für Home Assistant als Add-On.

Zigbee2mqtt

Da ich sehr gerne die Freiheit habe, alle möglichen Systeme miteinander zu verbinden, kommt noch eine weitere Software zum Einsatz. 🙃

Um zu erkennen, ob das Fenster geöffnet ist oder nicht, verwende ich einen Fensterkontakt von Xiaomi. Dieser nutzt Zigbee als Funkstandard. Mit einem CC2531 USB Stick lassen sich Geräte, die auf Zigbee setzen, in Home Assistant integrieren ohne eine Bridge des Herstellers oder einer Cloud.

Zigbee2mqtt bringt alles zusammen und man kann dann wie gewohnt den Status in Home Assistant abfragen.

Nextcloud mit Kalender

Bis jetzt läuft die Steuerung noch nicht komplett im eigenen Netzwerk und autonom. Über Hetzner habe ich eine Nextcloud-Installation, in der ich für jeden Raum einen Kalender angelegt habe. Jeder Termin in dem Kalender repräsentiert die Heizphase am Tag. Um alles sauber zu trennen, sind die Kalender unter einem eigenständigen Account angelegt. Auf diesen Account hat Home Assistant Zugriff und der Status kann später über Node-RED abgefragt werden.

Die Kalender sind für meinen normalen Account freigegeben. Der Kalender kann unter iOS oder macOS eingerichtet werden und somit habe ich von jedem Gerät Zugriff auf die Heizphasen und kann diese anpassen.

Node-RED

Wie schon angekündigt passiert die eigentliche Steuerung in Node-RED. Über Home Assistant werden alle Geräte zusammengeführt. Nutzt man das Node-RED-Plugin für Hass.io, hat man direkt Zugriff auf alle Geräte und Dienste, die man vorher eingebunden hat.

Der folgende Flow zeigt die Steuerung für das Wohnzimmer. Auf die einzelnen Abschnitte will ich jetzt eingehen.

Auf der rechten Seite siehst du alle Eingänge, die als Auslöser dienen und der Startpunkt sind, um den Weg abzuarbeiten.

Die ersten beiden Eingänge „off“ und „on“ sind nur für Testzwecke, um den Kalender zu simulieren.

Der wichtigste Eingang ist „Wohnzimmer Kalender“. Wenn zum aktuellen Zeitpunkt ein Termin vorhanden ist, liefert der Eingang den Status on. Liegt kein Termin vor, dann wird ein off zurückgeben. Im Sommer möchte ich die Heizung komplett abschalten, deshalb wird im nächsten Schritt überprüft, ob die Steuerung überhaupt aktiv ist. Der Status dafür kann in Home Assistant gesetzt werden.

Weitere Bedingungen, um die Heizung einzuschalten ist die Anwesenheit und die Außentemperatur. Es muss mindestens eine Person zu Hause sein. Sind wir beide nicht zu Hause, muss natürlich auch nicht geheizt werden. Damit nicht unnötig geheizt wird, obwohl es draußen schon recht warm ist, muss es mindestens kälter als 18°C sein. Die Temperatur wir über OpenWeatherMap abgefragt. Erst jetzt wird die Unterscheidung vom Status des Kalenders gemacht.

Die Eingänge „Anwesenheit“ und „Außentemperatur“ werden ähnlich behandelt. Beide Eingänge haben einen positiven Ausgang und einen negativen Ausgang. Kommt jemand nach Hause oder die Temperatur fällt unter 18°C, dann wird der globale Schalter und der Status des Kalenders überprüft. Bleibt alles positiv, dann wird die Heizung eingeschaltet. Im negativ Fall wird nicht geheizt.

Um noch mal eine Sicherheit zu haben, damit nachts nicht geheizt wird, gibt der Eingang „23:00 Uhr“ ein Signal zu dieser Uhrzeit und die Heizung wird runtergefahren.

Im letzten Teil wird der Fensterkontakt eingebunden. Ist das Fenster geöffnet, dann werden die Heizungsthermostate in den Modus „Fenster geöffnet“ versetzt. Die Scripte dazu habe ich weiter oben vorgestellt. Gleiches funktioniert dann auch rückwärts. Ist das Fenster wieder geschlossen wird die alte Temperatur wiederhergestellt.

Zusätzlich gibt es noch eine Benachrichtigung über Telegram, wenn das Fenster 10 Minuten geöffnet ist. Auf diese Funktion werde ich in diesem Artikel nicht weiter eingehen. Zum Thema Luftqualität und Smarthome ist noch ein weiterer Artikel geplant.

Fazit

Beim Schreiben des Artikels ist mir wieder bewusst geworden, dass ich mir da eine doch sehr spezielle Lösung geschaffen habe, um die Heizungen zu steuern. 🤓 Aber sie hat den letzten Winter sehr gut funktioniert.

Mir war sehr wichtig, dass ich unabhängig von einer Hersteller-Cloud bin und die große Flexibiltät habe, um das System an unsere Anforderungen anzupassen. In der vorgestellten Hardware und Software habe ich für diesen Moment die perfekte Lösung gefunden.