Heizungs-Automation

Ich will hier mal (m)eine Automation für eine Heizung vorstellen.
Dabei habe ich ein TRV, ein ext. Thermostat, Schedule für die Zeitpläne, einen Außentemperatur-Sensor und einen Boolean, ob überhaupt die Heizung an ist. Außerdem wird die Anwesenheit geprüft.
(Als Bonbon wird zum Schluss noch der Wecker abgefragt).
Könnte man theoretisch auch eine Blueprint draus machen aber ich haben nur 4 Climates (die ich dann doch auch noch mal etwas individualisiere):

Als Trigger verwende ich den Temperatur-Sensor des jeweiligen Raums. Wenn sich dort die Temperatur verändert, soll getriggert werden.
Zusätzlich spätestens nach 10 Min.

Als Bedingung nehme ich die Außentemperatur, denn nur unter einer gewissen Außentemperatur soll die Heizungsautomation laufen.
Zusätzlich habe ich noch einen input_boolean, der auch bestimmt, ob die Heizung an oder aus ist.

In der Action kommen dann die Schedules und die Anwesenheit ins Spiel.
Erstes Bsp.:
alias: Wenn “Schedule Comfort” und “Jemand zu Hause” und “Temp < comfort”
If:
Hier wird geprüft, ob der Schedule (Zeitplan) “Comfort” aktiv ist.
Und es wird geprüft, ob jemand zu Hause ist.
Außerdem wird geprüft, ob die akt. gemessene Temp. <= der gewünschten Temp. ist.
Then:
Dann soll das TRV auf 2° über der gewünschte Temperatur setzen.

alias: Wenn “Schedule Comfort” und “Jemand zu Hause” und “Temp > comfort”
If:
Hier auch wieder die Prüfung des Schedule und der Anwesenheit.
Dieses mal wird geprüft, ob die akt. gemessene Temp. > der gewünschten Temp. ist.
Then:
Nun soll das TRV lediglich die Temperatur halten.

Ich glaub so wird jedes If / Then irgendwie klar.

alias: "Climate: Zimmer Buero"
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.buero_sensor_temperature
  - platform: time_pattern
    minutes: /10
condition:
  - condition: template
    value_template: >-
      {{states('sensor.balkon_temperatur') | float(0) <
      states('input_number.heizung_aussentemperatur') | float(0)}}
    alias: Außentemperatur < Helper
  - condition: state
    entity_id: input_boolean.heizung_an_aus
    state: "on"
action:
  - if:
      - condition: state
        entity_id: schedule.heizung_comfort
        state: "on"
      - condition: or
        conditions:
          - condition: state
            entity_id: group.somebody_home
            state: home
          - condition: state
            entity_id: device_tracker.a52s_von_xy
            state: home
          - condition: zone
            entity_id: person.zz
            zone: zone.home
      - condition: template
        value_template: >-
          {{states('sensor.buero_sensor_temperature') | float(0) <=
          states('input_number.heizung_buero_comfort') | float(0) - 0.1}}
    then:
      - service: climate.set_temperature
        data:
          temperature: "{{ states('input_number.heizung_buero_comfort') | float(0) + 1 }}"
        target:
          entity_id: climate.heizung_buero
    alias: Wenn "Schedule Comfort" und "Jemand zu Hause" und "Temp < comfort"
  - if:
      - condition: state
        entity_id: schedule.heizung_comfort
        state: "on"
      - condition: or
        conditions:
          - condition: state
            entity_id: group.somebody_home
            state: home
          - condition: state
            entity_id: device_tracker.a52s_von_xy
            state: home
          - condition: zone
            entity_id: person.zz
            zone: zone.home
      - condition: template
        value_template: >-
          {{states('sensor.buero_sensor_temperature') | float(0) >=
          states('input_number.heizung_buero_comfort') | float(0) + 0.1}}
    then:
      - service: climate.set_temperature
        data:
          temperature: "{{ states('input_number.heizung_buero_comfort') | float(0) + 0.5 }}"
        target:
          entity_id: climate.heizung_buero
    alias: Wenn "Schedule Comfort" und "Jemand zu Hause" und "Temp > comfort"
  - if:
      - condition: state
        entity_id: schedule.heizung_comfort
        state: "on"
      - condition: and
        conditions:
          - condition: state
            entity_id: group.somebody_home
            state: not_home
          - condition: state
            entity_id: device_tracker.a52s_von_xy
            state: not_home
          - condition: state
            entity_id: person.zz
            state: not_home
      - condition: template
        value_template: >-
          {{states('sensor.buero_sensor_temperature') | float(0) <=
          states('input_number.heizung_buero_eco') | float(0) - 0.1}}
    then:
      - service: climate.set_temperature
        data:
          temperature: "{{ states('input_number.heizung_buero_eco') | float(0) + 1 }}"
        target:
          entity_id: climate.heizung_buero
    alias: Wenn "Schedule Comfort" und "Keiner zu Hause" und "Temp < eco"
  - if:
      - condition: state
        entity_id: schedule.heizung_comfort
        state: "on"
      - condition: and
        conditions:
          - condition: state
            entity_id: group.somebody_home
            state: not_home
          - condition: state
            entity_id: device_tracker.a52s_von_xy
            state: not_home
          - condition: state
            entity_id: person.zz
            state: not_home
      - condition: template
        value_template: >-
          {{states('sensor.buero_sensor_temperature') | float(0) >=
          states('input_number.heizung_buero_eco') | float(0) + 0.1}}
    then:
      - service: climate.set_temperature
        data:
          temperature: "{{ states('input_number.heizung_buero_eco') | float(0) + 0.5 }}"
        target:
          entity_id: climate.heizung_buero
    alias: Wenn "Schedule Comfort" und "Keiner zu Hause" und "Temp > eco"
  - if:
      - condition: state
        entity_id: schedule.heizung_eco
        state: "on"
      - condition: template
        value_template: >-
          {{states('sensor.buero_sensor_temperature') | float(0) <=
          states('input_number.heizung_buero_eco') | float(0) - 0.1}}
    then:
      - service: climate.set_temperature
        data:
          temperature: "{{ states('input_number.heizung_buero_eco') | float(0) + 1 }}"
        target:
          entity_id: climate.heizung_buero
    alias: Wenn "Schedule Eco" und "Temp < eco"
  - if:
      - condition: state
        entity_id: schedule.heizung_eco
        state: "on"
      - condition: template
        value_template: >-
          {{states('sensor.buero_sensor_temperature') | float(0) >=
          states('input_number.heizung_buero_eco') | float(0) + 0.1}}
    then:
      - service: climate.set_temperature
        data:
          temperature: "{{ states('input_number.heizung_buero_eco') | float(0) + 0.5 }}"
        target:
          entity_id: climate.heizung_buero
    alias: Wenn "Schedule Eco" und "Temp > eco"
  - if:
      - condition: state
        entity_id: schedule.heizung_comfort
        state: "off"
      - condition: state
        entity_id: schedule.heizung_eco
        state: "off"
      - condition: state
        state: "off"
        entity_id: input_boolean.heizung_wecker
      - condition: template
        value_template: >-
          {{states('sensor.buero_sensor_temperature') | float(0) <=
          states('input_number.heizung_buero_nacht') | float(0) - 0.1}}
    then:
      - service: climate.set_temperature
        data:
          temperature: "{{ states('input_number.heizung_buero_nacht') | float(0) + 1 }}"
        target:
          entity_id: climate.heizung_buero
    alias: Wenn "Nachts" und "Temp < nacht"
  - if:
      - condition: state
        entity_id: schedule.heizung_comfort
        state: "off"
      - condition: state
        entity_id: schedule.heizung_eco
        state: "off"
      - condition: state
        state: "off"
        entity_id: input_boolean.heizung_wecker
      - condition: template
        value_template: >-
          {{states('sensor.buero_sensor_temperature') | float(0) >=
          states('input_number.heizung_buero_nacht') | float(0) + 0.1}}
    then:
      - service: climate.set_temperature
        data:
          temperature: "{{ states('input_number.heizung_buero_nacht') | float(0) + 0.5 }}"
        target:
          entity_id: climate.heizung_buero
    alias: Wenn "Nachts" und "Temp > nacht"
  - if:
      - condition: state
        entity_id: schedule.heizung_comfort
        state: "off"
      - condition: state
        entity_id: schedule.heizung_eco
        state: "off"
      - condition: state
        entity_id: input_boolean.heizung_wecker
        state: "on"
      - condition: state
        entity_id: group.somebody_home
        state: home
      - condition: template
        value_template: >-
          {{states('sensor.buero_sensor_temperature') | float(0) <=
          states('input_number.heizung_buero_eco') | float(0) - 0.1}}
    then:
      - service: climate.set_temperature
        data:
          temperature: "{{ states('input_number.heizung_buero_eco') | float(0) + 1 }}"
        target:
          entity_id: climate.heizung_buero
    alias: Wenn "Wecker" und "Jemand zu Hause" und "Temp < eco"
  - if:
      - condition: state
        entity_id: schedule.heizung_comfort
        state: "off"
      - condition: state
        entity_id: schedule.heizung_eco
        state: "off"
      - condition: state
        entity_id: input_boolean.heizung_wecker
        state: "on"
      - condition: state
        entity_id: group.somebody_home
        state: home
      - condition: template
        value_template: >-
          {{states('sensor.buero_sensor_temperature') | float(0) >=
          states('input_number.heizung_buero_eco') | float(0) + 0.1}}
    then:
      - service: climate.set_temperature
        data:
          temperature: "{{ states('input_number.heizung_buero_eco') | float(0) + 0.5 }}"
        target:
          entity_id: climate.heizung_buero
    alias: Wenn "Wecker" und "Jemand zu Hause" und "Temp > eco"
mode: single


Falls die Frage jetzt wg. evtl. Fensterkontakte kommt, ja da habe ich eine extra Automation.
Wenn Fenster auf, dann deaktiviere die o.g. Automation und mache die Heizung aus bzw. stelle sie auf 5°.
Wenn Fenster wieder zu, dann halt wieder die Zimmer-Automation aktivieren.

10 „Gefällt mir“

Hallo Maxe,
passt nicht anz zum Thema, aber ich wolte mir deine Automation kopieren und testen.
Also bin ich oben rechts in deinem Code auf kopieren, habe eine neue Automation geöffnet, die drei Punkte - bearbetien als Yaml code und habe es eingefügt.
Ich kann dort aber nicht speichern.
Und wenn ich wieder zurück gehe, in den visuellen Editor ist es leer.
klicke ich wieder auf in Yaml - auch leer :thinking:
Kanst mir vielleicht einen Tipp geben?
Danke!!!

Ich habe meinen Code oben noch mal bearbeitet und die Leerzeilen und Umbrüche gelöscht.

Kannst also noch mal testen.

Ich glaube du musst im yaml deine Entitäten eintragen, denn die von @maxe kennt dein HA nicht

Alternativ vielleicht den Code mit einem externen Editor (Nodpad +) einfügen und abspeichern könnte auch gehen.

Hi Maxe,
vielen Dank!
Die Fomartierung hat geholfen, jetzt funktioniert alles :+1:

Weil die Fragen via PN aufkamen, hier noch mal ein paar Ergänzungen:

Als Helfer habe ich folgende angelegt:

input_number.heizung_aussentemperatur: Nummern Helfer für die Außen-Temperatur, wo die Heizung nicht mehr angehen soll. Da kann ich z.B. 17° einstellen, ab der Temp soll die Heizung ausbleiben.

schedule.heizung_comfort / schedule.heizung_eco: jeweils Zeitplan Helfer um die Tageszeit zu bestimmen, wann Comfort (8:00 - 19:00) oder Eco (19:00 - 21:00) geheizt werden soll.

input_number.heizung_buero_comfort / input_number.heizung_buero_eco: jeweils Nummern Helfer, um die Wunschtemperatur für Comfort (21°) oder Eco (19°) einzugeben.

Ich glaube das war das wichtigste an Helfern.

Anwesenheit kannst du über
device_tracker.a52s_von_xy
person.zz

oder über eine eigene Gruppe: Helfer für Anwesenheit - #2 von maxe

Ich switche mal von Thread Better Thermostat Card - #34 von tomg hier rüber

# Heizkörper TRV
climate.heizung_buero
# Raum Temperatur Sensor
sensor.buero_sensor_temperature
# Außentemperatur Sensor
sensor.balkon_temperatur

# Heizung on/off
input_boolean.heizung_an_aus
# unter dieser Zahl wird Automation ausgeführt
input_number.heizung_aussentemperatur
# Wecker on/off vermutlich von android phone
input_boolean.heizung_wecker
# Zahl Comfort Temperatur
input_number.heizung_buero_comfort
# Zahl Eco Temperatur
input_number.heizung_buero_eco


#  Anwesenheitserkennung
group.somebody_home
device_tracker.a52s_von_xy
person.zz

# Scheduler
schedule.heizung_comfort
schedule.heizung_eco

und beantworte die Fragen:

Ja

Ist ein Zeitplan-Helfer, welche in der angegebenen Zeit den Status ON hat und sonst OFF.

Ist meine Wunschtemperatur, die ich bei Anwesenheit tagsüber anpeile.

Ich triggere die Zeit von meinem Android-Wecker und setze dann einen input_boolean auf on. Sobald der Scheduler Comfort beginnt, setzte ich den Helper wieder off:

description:
mode: restart
trigger:
  - platform: time
    at: sensor.maxe_sm_g780g_next_alarm
    id: wecker-mode-an
  - platform: state
    entity_id:
      - schedule.heizung_comfort
    to: "on"
    id: wecker-mode-aus
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - wecker-mode-an
          - condition: state
            entity_id: input_boolean.heizung_wecker
            state: "off"
        sequence:
          - service: input_boolean.turn_on
            data: {}
            target:
              entity_id: input_boolean.heizung_wecker
      - conditions:
          - condition: trigger
            id:
              - wecker-mode-aus
          - condition: state
            entity_id: input_boolean.heizung_wecker
            state: "on"
        sequence:
          - service: input_boolean.turn_off
            data: {}
            target:
              entity_id: input_boolean.heizung_wecker

Ja das mit dem Android Wecker ist schon echt cool. :ok_hand:
Leider habe ich für den ios Wecker noch keine dauerhaft funktionierende Lösung gefunden :frowning:

Was mir gerade noch so einfällt, du lässt die Heizung auf deine Comfort Temperatur schalten, wenn der Wecker klingelt?
Ist das dann aber nicht zu spät, weil es ja zb im Bad noch zu kalt ist bzw. max die Eco Temperatur hat?
Ich kann ja mit Weckern nicht arbeiten, aber ich habe in meiner Automation zb dass ich 30 Min. vor dem Wecker (bei mir Kalendereintrag) die Heizung zumindest im Bad hochfahre, damit diese schon warm ist, wenn ich dort bin.

Ich persönlich lasse die Heizung 45 min. vor dem Wecker auf Comfort Temperatur laufen, dafür ist aber ein Template Trigger notwendig. Ich wollte es hier relativ einfach und verständlich halten.

platform: template
value_template: |
  {% set alarm_time = as_timestamp(states('sensor.maxe_sm_g780g_next_alarm')) %}
  {% set time_now = as_timestamp(now()) %}
  {{ time_now >= alarm_time - 2700 }}
id: wecker-mode-an
2 „Gefällt mir“

Ein Beitrag wurde in ein neues Thema verschoben: Zeitversetzt bei Heizungs-Thermostaten mit Zigbee2MQTT

22 Beiträge wurden in ein existierendes Thema verschoben: Zeitversetzt bei Heizungs-Thermostaten mit Zigbee2MQTT

Da es hier um “Anleitungen” und nicht um Grundsatzfragen zur Zeitübertragung geht.

Hallo,

Du hast ja eine Gruppe somebody_home angelegt:

      - condition: state
        entity_id: group.somebody_home
        state: home

Ich schaffe es nicht, das anzulegen. Welche Art von “Gruppe” ist das denn?

Ich habe es mit folgendem Code in der groups.yaml gemacht, hatte ich hier schon beschrieben: Heizungs-Automation - #7 von maxe

################
# Sombody home #
################

somebody_home:
  name: Somebody
  entities:
    - person.xy
    - person.maxe
  all: false


##################
# Everybody home #
##################

everybody_home:
  name: Everybody
  entities:
    - person.xy
    - person.maxe
  all: true

Aber vielleicht hangelst du dich auch mal hier dran