Heizungen automatisiert ein- und ausschalten

Du willst deine Heizungsthermostate automatisiert steuern über Tür und Fensterkontakte in Home Assistant? Ich zeig dir wie es geht 🎉

Heizungen automatisiert ein- und ausschalten
Photo by e24 / Unsplash / Image

Seit dem ich mein zuhause nun überall mit smarten Thermostaten ausgerüstet habe und alle Fenster mit entsprechenden Kontakten von Aqara versehen habe, stellt sich nun die Frage, wie ich am geschicktesten die Thermostate schalten kann, sobald ein Fenster geöffnet wird.

Warum das ganze? 🤔

Als ich noch im Ökosystem von AVM unterwegs war, bot es sich an auch von AVM entsprechende Thermostate zu holen. Das klappte auch sehr gut. Aber, der "Lüftungsmodus" klappt mit den Thermostaten im Altbau recht schlecht. Darum musste ich das über Home Assistant automatisieren.

Voraussetzungen 📃

Damit das klappt, solltest du zum einen Heizkörper-Thermostate haben und entsprechende Tür- bzw. Fensterkontakte haben. Von welchem Hersteller ist erst einmal egal, Hauptsache sie sind schon in Home Assistant eingebunden.

Dann solltest du entsprechende Räume als "Areas" in Home Assistant anlegen und die Sensoren als auch Thermostate diesen Bereichen zuweisen.

Die Automation 🤖

Ist alles getan, legst du eine neue Automation an, die den nachfolgenden Inhalt hat. Bitte passe die entsprechende Zeilen an:

- binary_sensor.fenster_badezimmer
- binary_sensor.fenster_wohnzimmer
- binary_sensor.fenster_kinderzimmer
- binary_sensor.fenster_schlafzimmer

Diese Liste sollte deine binary_sensorder Fenster- und Türkontakte enthalten.

alias: Heizung aus wenn Fenster auf
description: ""
trigger:
  - platform: state
    to:
      - "on"
      - "off"
    entity_id:
      - binary_sensor.fenster_badezimmer
      - binary_sensor.fenster_wohnzimmer
      - binary_sensor.fenster_kinderzimmer
      - binary_sensor.fenster_schlafzimmer
condition: []
action:
  - variables:
      area: "{{ area_name(trigger.entity_id) }}"
      targets: >
        {{ expand(area_entities(area)) | selectattr('domain','eq','climate') |
        map(attribute='entity_id') | join(',')  }}
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ trigger.to_state.state == 'on' }}"
        sequence:
          - service: scene.create
            data:
              scene_id: thermostat_settings_{{area | lower}}
              snapshot_entities: "{{ targets }}"
          - delay: 5
          - service: climate.turn_off
            target:
              entity_id: "{{ targets }}"
          - service: notify.notify
            data:
              title: "{{ state_attr(trigger.entity_id, 'friendly_name') }} geöffnet"
              message: Heizungen in {{ area }} abgeschaltet
      - conditions:
          - condition: template
            value_template: "{{ trigger.to_state.state == 'off' }}"
        sequence:
          - service: scene.turn_on
            target:
              entity_id: scene.thermostat_settings_{{area | lower}}
          - service: notify.notify
            data:
              title: "{{ state_attr(trigger.entity_id, 'friendly_name') }} geschlossen"
              message: Heizungen in {{ area }} eingeschaltet
mode: parallel
max: 10

Eigentlich ist die Automation recht simpel, denn sie macht folgendes:

  • Variablen-Zuweisung:
    • area = Der auslösende Bereich
    • targets = Alle Entitäten mit der Domain climate, Rückgabe nur die entity_idund getrennt mit Komma
  • Kondition wenn wenn der State der Entität onist:
    • Die Sequenz ausführen:
      • Anlage einer Szene zum Zwischenspeichern des aktuellen Status des Thermostates
      • 5 Sekunden warten
      • Service climate.turn_offausführen mit der/den ermittelten Entität(en)
      • Benachrichtigung senden
  • Kondition wenn wenn der State der Entität offist:
    • Die Sequenz enthält:
      • Einschalten der zuvor gespeicherten Szene (Zurücksetzen des Status vor Öffnen der Fenster)
      • Service climate.turn_offausführen mit der/den ermittelten Entität(en)
      • Benachrichtigung senden