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.

11 „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

Hi,

wie müsste das in einer Blueprint aussehen?

- alias: Außentemperatur < Helper
    condition: template
    value_template: >
      {{states('!input temperatur_aussen') | float(0) < states('!input heizung_aus') | float(0)}}

So funktioniert es leider nicht. Wenn ich die Sensoren seperat einsetze ist die Bedingung erfüllt.

Danke für eure Hilfe.

Welche Blueprint denn? Hat die Blueprint nicht evtl. schon eine Einstellung zur Außentemperatur?

Ich habe mir aus deiner Autmatisation eine Blueprint gebaut, bzw. es probiert.
Hier mal der Anfang:

blueprint:
  name: Heizungs Automatisation
  description: Steuert den Heizkörper ....
  domain: automation
  input:
    section_thermostat:
      name: Thermostat
      icon: mdi.thermostat-auto
      description: Heizungsthermostat des Raumes
      input:
        thermostat:
          name: Heizungstermostat
          description: Heizungsthermostat des Raumes
          default: {}
          selector:
            entity:
              filter:
                domain: climate
    section_temperaturen:
      name: Temperaturen
      icon: mdi.thermometer
      description: Hier müssen die Temperatursensoren eingetragen werden
      input:
        temperatur_raum:
          name: Raumtemperatur
          description: Temperatursensor des Raumes
          default: {}
          selector:
            entity:
              filter:
                domain: sensor
                device_class: temperature
        temperatur_aussen:
          name: Aussentemperatur
          description: Temperatursensor von draußen
          default: {}
          selector:
            entity:
              filter:
                domain: sensor
                device_class: temperature
    section_parameter:
      name: Parameter
      icon: mdi.speedometer
      description: Hier müssen die Parameter eingegeben werden.
      input:
        heizung_sommer:
          name: Heizung Sommerbetrieb
          description: Heizung ist im Sommerbetrieb
          default: {}
          selector:
            entity:
              filter:
                domain: input_boolean
        heizung_wecker:
          name: Heizung Wecker
          description: Heizung Wecker Trigger
          default: {}
          selector:
            entity:
              filter:
                domain: input_boolean
        heizung_aus:
          name: Heizung aus
          description: Temperatur bei der die Heizung ausgeschaltet werden soll
          default: {}
          selector:
            entity:
              filter:
                domain: input_number
        heizung_comfort:
          name: Heizung Comfort Temperatur
          description: Comfort Temperatur auf die geregelt werden soll
          default: {}
          selector:
            entity:
              filter:
                domain: input_number
        heizung_eco:
          name: Heizung Eco Temperatur
          description: Eco Temperatur auf die geregelt werden soll
          default: {}
          selector:
            entity:
              filter:
                domain: input_number
        heizung_nacht:
          name: Heizung Nacht Temperatur
          description: Nacht Temperatur auf die geregelt werden soll
          default: {}
          selector:
            entity:
              filter:
                domain: input_number
    section_zeitplan:
      name: Zeitpläne
      icon: mdi.timetable
      description: Zeitpläne für die Regelung
      input:
        plan_comfort:
          name: Zeitplan Comfort
          description: Zeitplan für die Comfort Tempertaur
          default: {}
          selector:
            entity:
              filter:
                domain: schedule
        plan_eco:
          name: Zeitplan Eco
          description: Zeitplan für die Eco Tempertaur
          default: {}
          selector:
            entity:
              filter:
                domain: schedule
    section_person:
      name: Persönlich
      icon: mdi.account
      description: Personen bezogene Parameter
      input:
        person:
          name: Benutzer
          description: Benutzer der im Raum lebt
          default: {}
          selector:
            entity:
              filter:
                domain: person
        somebody:
          name: Jemand Zuhause
          description: Jemand zu Hause
          default: {}
          selector:
            entity:
              filter:
                domain: group
        device:
          name: Gerät
          description: Gerät von der Person im Raum
          default: {}
          selector:
            entity:
              filter:
                domain: device_tracker

mode: single
triggers:
  - entity_id:
      - !input temperatur_raum
    trigger: state
  - minutes: /10
    trigger: time_pattern
conditions:
  - alias: Außentemperatur < Helper
    condition: template
    value_template: >
      {{states('!input temperatur_aussen') | float(0) < states('!input heizung_aus') | float(0)}}
  - condition: state
    entity_id: !input heizung_sommer
    state: "off"

Leider bekomme ich beim Template keine richtigen Daten raus, solange ich mit den den Inputvariablen arbeite.
Trage ich die Entitäten statisch ein, funktioniert es.
Kannst du mir damit weiterhelfen?

Imho kannst du im template nicht mit den !input arbeiten. Du musst die also vorher Variablen anlegen

variables:
  temperatur_aussen: !input temperatur_aussen
  heizung_aus: !input heizung_aus

Dann kannst du damit im Template arbeiten.

    value_template: >
      {{states('temperatur_aussen') | float(0) < states('heizung_aus') | float(0)}}

Funktioniert leider trotzdem nicht.


Im Sensor für temperatur_aussen steht 14.78 und in Heizung aus steht 19.0.
Damit sollte die Bedingung eigentlich erfüllt sein.

Gibt es eine möglich in einen debug Modus zu gehen? Ich würde gerne sehen was in der Input und in der neuen Variable steht, wenn aus der Blueprint eine Automatisierung generiert wurde.

Warum machst du es nicht einfach über einen Nummerischen Zustand

conditions:
  - condition: numeric_state
    entity_id: !input temperatur_aussen
    below: !input heizung_aus