Heizungssteuerung / Fenster offen

Wir steuern unsere Heizungsventile (Livisi/Fritz) über HA und möchten sie um Fensterkontakte ergänzen. Nun bin ich mir nicht über eine sinnvolle Logik im Klaren.

  1. Zum einen gibt es Zeiten, zu denen sich die Temperaturen ändern.
  2. Bei offenen Fenster soll die Temperatur auf 8 Grad abgesenkt werden.

Wie kombiniert man das am sinnvollsten, so dass nach dem Schließen die Temperatur eingestellt wird, die zu dem Zeitpunkt vorgesehen ist.

Wie macht ihr das?

Wie viele unterschiedliche Temperaturwerte hast du denn bzw. willst du haben? Wenn es sich um zwei handelt, dann wäre vielleicht dieser Blueprint etwas für dich: 🔥 Advanced Heating Control - Blueprints Exchange - Home Assistant Community

Der oben genannte Blueprint macht die Heizung aus, sobald ein Fensterkontakt das Fenster als offen meldet.

Eigentlich reicht es, eine weitere Automatisierung zu erstellen.

Trigger: Fenster auf (TriggerID)
Trigger: Fenster zu

Bedingung: Heizung ist an / Winter o.ä.

Aktion:
Wenn ausgelöst durch Fenster auf, dann die Heiz-Automatisierung deaktivieren und auf 8°.
Sonst Heiz-Automatisierung an.

Ich habe derzeit 3 Schaltzeiten, 7 Uhr, 14 Uhr, 19 Uhr.

Kompliziert wird es, wenn das Fenster 18:50 geöffnet und 19:10 geschlossen wird.

Eine mögliche Lösung könnte wie folgt aussehen:

Du erstellst dir einen Template-Sensor unter den Helfern mit folgendem Inhalt:

{% if now().hour >= 7 and now().hour < 14 %} 1
{% elif now().hour >= 14 and now().hour < 19 %} 2
{% else %} 3
{% endif %}

Wenn die Zweit zwischen 7 und 14 Uhr ist, wird 1 ausgegeben. Ist es zwischen 14 und 19 Uhr, hat der Sensor den Wert 2. Sonst, also zwischen 19 und 7 Uhr, den Wert 3. Die Zahlen 1, 2, und 3 können natürlich durch andere Zahlen oder Begriffe ersetzt werden.

Auf die selbe Art kannst du natürlich auch mit einem weiteren Helfer die Temperaturwerte zeitlich verändern lassen.

Um dann in den Heizungsautomationen die entsprechende Temperatur zu verwenden, kann dies mit dem Auswählen-Baustein realisiert werden. Bspw. die Aktion sähen wie folgt aus:

choose:
  - conditions:
      - condition: state
        entity_id: sensor.heizwahl
        state: "1"
    sequence:
      - action: climate.set_temperature
        metadata: {}
        data:
          temperature: 15
        target:
          entity_id: climate.toilette
    alias: Schaltung 7 - 14 Uhr
  - conditions:
      - condition: state
        entity_id: sensor.heizwahl
        state: "2"
    sequence:
      - action: climate.set_temperature
        metadata: {}
        data:
          temperature: 25
        target:
          entity_id: climate.toilette
    alias: Schaltung 14 - 19 Uhr
  - conditions:
      - condition: state
        entity_id: sensor.heizwahl
        state: "3"
    sequence:
      - action: climate.set_temperature
        metadata: {}
        data:
          temperature: 20
        target:
          entity_id: climate.toilette
    alias: Schaltung 19 - 7 Uhr

Du müsstest sensor.heizwahl natürlich durch deinen Sensor ersetzen. Für den Fall, dass du auch die Temperaturen über einen Helfer übertragen möchtest, sähe das für ein Aktion so aus:

action: climate.set_temperature
metadata: {}
data:
  temperature: "{{ states('sensor.heizwahl') | float }}"
target:
  entity_id: climate.toilette

Das hätte den Vorteil, dass du nur an einer Stelle, nämlich in der Konfiguration des entsprechenden Helfers, die Temperaturwerte einstellen müsstest. Soll die Temperatur jedoch von Raum zu Raum unterschiedlich sein, bringt das nun keinen Mehrwert mehr :wink:

Ich würde dann für jeden Raum drei Automationen machen:

  1. Einstellen der Temperatur zur entsprechenden Zeit
    Als Trigger bspw. die Änderung des Sensors, bei mir sensor.heizwahl. Denn dort hast du ja die Zeiten bereits definiert. Und wenn der Wert sich ändert, wird aufgrund seines Wertes die entsprechende Option gewählt.
  2. Heizung auf 8°C, wenn Fenster offen
  3. Heizung ein, wenn Fenster wieder geschlossen
    Auch hier kommt der Auswahl-Baustein von oben hinein, damit zur richtigen Zeit die richtige Temperatur gewählt wird.

Möglicherweise kann man dies auch eleganter lösen, sprich mit weniger Automationen. Vielleicht sogar in einer pro Raum, in der verschiedene Bedingungen verschachtelt werden. Hier muss ich gestehen, habe ich mich noch nicht so viel damit beschäftigt. Daher ist mein Ansatz eher rudimentärer Art, sollte aber genauso funktionieren.

2 „Gefällt mir“

Vielen Dank für die nützlichen Hinweise.
Wie bekomme ich denn folgende Logik in die Heizungssteuerung?

- action: climate.set_temperature
    metadata: {}
    data:
      temperature: {if(binary_sensor.lumi_fenster_bibliothek_opening is on) then 8 
               else "{{ states('input_number.tbibliothek') | float(0) }}"
    target:
      entity_id: climate.bibliothek

Diese Logik soll verhindern, dass die Heizung zu einer Schaltzeit hochgeregelt, wenn das Fenster offen ist.

Ich weiß nicht, weswegen du diese Überprüfung über ein Template machen möchtest. Es gibt den Wenn-Dann-Baustein:

if:
  - condition: state
    entity_id: binary_sensor.fenster_schlafzimmer
    state: "off"
then:
  - action: climate.set_temperature
    metadata: {}
    data:
      temperature: 10
    target:
      entity_id: climate.schlafzimmer

In der grafischen Obefläche sieht es dann so aus:

Um ehrlich zu sein, ist die gesamte Heizungssteuerung zustandsgesteuert. Um 19 Uhr wird nicht die Temperatur verändert, sondern ein Zustand gesetzt, aber nur wenn wir zuhause sind und kein Testlauf gemacht wird. So kann jeder Zustand auch manuell gesetzt werden. Dann müsste man mit verschachtelten Bedingungen arbeiten. Bin nicht sicher, ob HA das kann und es wird auch ganz schön unübersichtlich.

Ob du in den Aktionen einen Temperaturwert setzt oder einen Zustand, ist ja vollkommen wurscht. Geht ja alles :smiley:

Man kann alles auch manuell einstellen, auch wenn es eine Automation dafür gibt. Automationen sind kein Hinderungsgrund für manuelle Eingaben.

HA kann viel.

Möglichkeit 1
alias: Heiztest
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.heizwahl
  - trigger: numeric_state
    entity_id:
      - zone.home
    above: 0
  - trigger: state
    entity_id:
      - binary_sensor.fenster_schlafzimmer
    from: "on"
    to: "off"
conditions:
  - condition: numeric_state
    entity_id: zone.home
    above: 0
  - condition: state
    entity_id: binary_sensor.alle_turen
    state: "off"
actions:
  - choose:
      - conditions:
          - condition: state
            entity_id: sensor.heizwahl
            state: "1"
        sequence:
          - action: climate.set_temperature
            metadata: {}
            data:
              temperature: 15
            target:
              entity_id: climate.toilette
      - conditions:
          - condition: state
            entity_id: sensor.heizwahl
            state: "2"
        sequence:
          - action: climate.set_temperature
            metadata: {}
            data:
              temperature: 25
            target:
              entity_id: climate.toilette
      - conditions:
          - condition: state
            entity_id: sensor.heizwahl
            state: "3"
        sequence:
          - action: climate.set_temperature
            metadata: {}
            data:
              temperature: 20
            target:
              entity_id: climate.toilette
mode: single

In dieser Möglichkeit wird die Automatisierung ausgelöst, wenn

  • sich der Status einer Entität ändert (In diesem Fall der Sensor, den ich oben für die verschiedenen Uhrzeiten erstellt habe) ODER
  • wenn eine Person zu Hause ist, also der Zustand von zone.home größer als 0 wird ODER
  • wenn ein Fenster geschlossen wird.

Die Aktionen werden aber nur dann ausgeführt, wenn

(Nicht wunrdern, dass er trotz nicht aller erfüllten Bedingungen die Aktion ausführt. Das ist normal, wenn man eine Automation manuell startet.)

Diese oder andere Bedingungen lassen sich auch über den entsprechenden Aktionen einfügen. Beispielhaft mal über der ersten Aktion:

actions:
  - choose:
      - conditions:
          - condition: state
            entity_id: sensor.heizwahl
            state: "1"
        sequence:
          - if:
              - condition: state
                entity_id: person.misterx
                state: home
              - condition: state
                entity_id: binary_sensor.alle_turen
                state: "off"
            then:
              - action: persistent_notification.create
                data:
                  message: "1"
      - conditions:
          - condition: state
            entity_id: sensor.heizwahl
            state: "2"
        sequence:
          - action: persistent_notification.create
            data:
              message: "2"
      - conditions:
          - condition: state
            entity_id: sensor.heizwahl
            state: "3"
        sequence:
          - action: notify.persistent_notification
            data:
              message: "3"
mode: single

Es wird nur dann die Benachrichtigung gesendet, also die Aktion tatsächlich ausgeführt, wenn die Entität person.misterx den Zustand home und die Entität binary_sensor.alle_turen den Zustand off besitzt. Dann sieht der untere Teil des Trace wie folgt aus:

Die Heizwahl kann 1 sein, was sie in diesem Fall auch war. Aber die anderen Bedingungen wurden nicht erfüllt. Daher gibt es in diesem Fall keine Benachrichtigung.

In der graphischen Ansicht befinden sich diese Bedingungen unter der Schaltfläche
Screenshot_20241013_100303

Da hast du einige Möglichkeiten, die du auswählen und auch miteinander verschachteln kannst.

2 „Gefällt mir“