Heizplan über Automatisierung

Rat und Tat rings um Home Assistant Automationen.


Antworten
Benutzeravatar
TOM
Beiträge: 22
Registriert: Do 14. Apr 2022, 15:51
1
Has thanked: 14 times
Been thanked: 1 time

Heizplan über Automatisierung

Beitrag von TOM »

Ich wollte das Thema auch hier in diesem schönen Forum kurz anbringen.
Ich habe mir für jeden Raum eine Automatisierung angelegt, wo ich die Zeiten und
Soll/Set-Temperaturen für eine Woche festlege.
Die Temperaturen und Zeiten habe ich flexibel mit helper gelöst.
Soweit funktioniert das auch. Ich habe nur aktuell noch ein Problem, dass mir
irgendwann die Set/Soll Temperaturen der Heizkörper Thermostate alle auf 0 Grad stehen :shock:
Ich kann noch nicht nachvollziehen wie und wann das passiert.
Habt ihr ein Vorschläge wie ich das eingrenzen kann oder vllt. seht ihr am Code schon, wo mein Fehler liegt.

Code: Alles auswählen

alias: HEIZUNG Anne Heizplan
description: Set thermostat for Heat
trigger:
  - id: schedule
    platform: time
    at:
      - input_datetime.anne_sp1_wk
      - input_datetime.anne_sp2_wk
      - input_datetime.anne_sp3_wk
      - input_datetime.anne_sp4_wk
      - input_datetime.anne_sp5_wk
      - input_datetime.anne_sp1_wknd
      - input_datetime.anne_sp2_wknd
      - input_datetime.anne_sp3_wknd
      - input_datetime.anne_sp4_wknd
      - input_datetime.anne_sp5_wknd
  - id: override
    platform: state
    entity_id: input_boolean.heizsaison
    to: "on"
    for: "00:00:30"
  - id: disable
    platform: state
    entity_id: input_boolean.heizsaison
    to: "off"
    for: "00:00:30"
condition: []
action:
  - choose:
      - conditions:
          - "{{ trigger.id != 'disable' }}"
          - "{{ is_state('input_boolean.heizsaison', 'on') }}"
        sequence:
          - service: climate.set_temperature
            target:
              entity_id: climate.anne
            data:
              temperature: |-
                {% if now().isoweekday() in [1,2,3,4,5] %}
                  {% if (now().hour == state_attr('input_datetime.anne_sp1_wk', 'hour') and now().minute == state_attr('input_datetime.anne_sp1_wk', 'minute'))  %}
                    {{ states('input_number.anne_t1_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.anne_sp2_wk', 'hour') and now().minute == state_attr('input_datetime.anne_sp2_wk', 'minute'))  %}
                    {{ states('input_number.anne_t2_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.anne_sp3_wk', 'hour') and now().minute == state_attr('input_datetime.anne_sp3_wk', 'minute'))  %}
                    {{ states('input_number.anne_t3_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.anne_sp4_wk', 'hour') and now().minute == state_attr('input_datetime.anne_sp4_wk', 'minute'))  %}
                    {{ states('input_number.anne_t4_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.anne_sp5_wk', 'hour') and now().minute == state_attr('input_datetime.anne_sp5_wk', 'minute'))  %}
                    {{ states('input_number.anne_t5_wk')|float(default=0) }}
                  {% else %}
                    0
                  {% endif %}
                {% else %}
                  {% if (now().hour == state_attr('input_datetime.anne_sp1_wknd', 'hour') and now().minute == state_attr('input_datetime.anne_sp1_wknd', 'minute'))  %}
                    {{ states('input_number.anne_t1_wknd')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.anne_sp2_wknd', 'hour') and now().minute == state_attr('input_datetime.anne_sp2_wknd', 'minute'))  %}
                    {{ states('input_number.anne_t2_wknd')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.anne_sp3_wknd', 'hour') and now().minute == state_attr('input_datetime.anne_sp3_wknd', 'minute'))  %}
                    {{ states('input_number.anne_t3_wknd')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.anne_sp4_wknd', 'hour') and now().minute == state_attr('input_datetime.anne_sp4_wknd', 'minute'))  %}
                    {{ states('input_number.anne_t4_wknd')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.anne_sp5_wknd', 'hour') and now().minute == state_attr('input_datetime.anne_sp5_wknd', 'minute'))  %}
                    {{ states('input_number.anne_t5_wknd')|float(default=0) }}
                  {% else %}a
                    0
                  {% endif %}
                {% endif %}
      - conditions:
          - "{{ trigger.id == 'disable' }}"
        sequence:
          - service: climate.turn_off
            target:
              entity_id: climate.anne
            data:
              hvac_mode: "off"
    default: []
mode: single
iScreen Shoter - 20221028115059010.jpg
iScreen Shoter - 20221028115059010.jpg (209.26 KiB) 452 mal betrachtet
Benutzeravatar
Osorkon
Administrator
Beiträge: 1905
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 60 times
Been thanked: 516 times
Kontaktdaten:

Re: Heizplan über Automatisierung

Beitrag von Osorkon »

Wer nimmt den Wert 0 an? Der Helfer oder das Thermostat?

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Benutzeravatar
TOM
Beiträge: 22
Registriert: Do 14. Apr 2022, 15:51
1
Has thanked: 14 times
Been thanked: 1 time

Re: Heizplan über Automatisierung

Beitrag von TOM »

Das Heizkörperthermostat selber hat als Soll-Wert dann "0"
was ja dem default Wert entspricht.
Ich gehe davon aus, dass irgendwann ein Fehler auftritt
und das HKT auf den default geht.
Woran es genau liegt, habe ich noch nicht herausgefunden.
Besser ist es, wenn ich die zweite condition (ganz unten im Code)
entferne.

Benutzeravatar
Osorkon
Administrator
Beiträge: 1905
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 60 times
Been thanked: 516 times
Kontaktdaten:

Re: Heizplan über Automatisierung

Beitrag von Osorkon »

Es kann ja nur zwei Gründe geben.

Entweder gibt einer Deiner input_number einen ungültigen Wert zurück, da default = 0
Oder keine der Bedingungen innerhalb Deiner if-else Anweisung trifft zu, da else = 0

Und das fällt Dir leichter von der Hand als den Scheduler zu benutzen?!

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Benutzeravatar
TOM
Beiträge: 22
Registriert: Do 14. Apr 2022, 15:51
1
Has thanked: 14 times
Been thanked: 1 time

Re: Heizplan über Automatisierung

Beitrag von TOM »

Hi Danke dir für deine Rückmeldung.
Mal schauen. Aktuell läuft es jetzt stabil.
Aber es gibt immer Verbesserungsmöglichkeiten!

Und das würde ohne euch Profis sehr oft
nicht möglich sein. Danke für Euere Hilfen.

Die Thermostatate haben keinen "off"
und können den Wert "0" auch nicht darstellen.

wg. Scheduler (NICHT) Nutzung:
Wenn jetzt dann alles läuft, finde ich es
wesentlich angenehmer, mal schnell die Zeit oder Temperatur
für den nächsten Tag zu ändern.
... weil sich an der Aufstehzeit was geändert hat....
Schnell aufs iPhone "Dashboard" einen Klick und schon läuft
alles eine Stunde früher ab... usw.

So hat eben jeder im Leben seine Gewohnheiten und kann ja
die "Technik" drum herum dementsprechend anpassen, das alle
Familienmitglieder zufrieden sind.

Benutzeravatar
TOM
Beiträge: 22
Registriert: Do 14. Apr 2022, 15:51
1
Has thanked: 14 times
Been thanked: 1 time

Re: Heizplan über Automatisierung

Beitrag von TOM »

Wer Interesse hat.
So ist der aktuelle Stand,
für meine Erfassung der Schaltzeiten und Zieltemperaturen (Helper),
die dann in der Automation verwendet werden.
Bin für jegliche Vorschläge dankbar.

Code: Alles auswählen

alias: HEIZUNG WEZ Heizplan
description: Set thermostat for Heat
trigger:
  - id: schedule
    platform: time
    at:
      - input_datetime.wez_sp1_wk
      - input_datetime.wez_sp2_wk
      - input_datetime.wez_sp3_wk
      - input_datetime.wez_sp4_wk
      - input_datetime.wez_sp5_wk
      - input_datetime.wez_sp1_wknd
      - input_datetime.wez_sp2_wknd
      - input_datetime.wez_sp3_wknd
      - input_datetime.wez_sp4_wknd
      - input_datetime.wez_sp5_wknd
  - id: override
    platform: state
    entity_id: input_boolean.heizsaison
    to: "on"
    for: "00:00:30"
  - id: disable
    platform: state
    entity_id: input_boolean.heizsaison
    to: "off"
    for: "00:00:30"
condition: []
action:
  - choose:
      - conditions:
          - "{{ trigger.id != 'disable' }}"
          - "{{ is_state('input_boolean.heizsaison', 'on') }}"
        sequence:
          - service: climate.set_temperature
            target:
              entity_id: climate.wez
            data:
              temperature: |-
                {% if now().isoweekday() in [1,2,3,4,7] %}
                  {% if (now().hour == state_attr('input_datetime.wez_sp1_wk', 'hour') and now().minute == state_attr('input_datetime.wez_sp1_wk', 'minute'))  %}
                    {{ states('input_number.wez_t1_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.wez_sp2_wk', 'hour') and now().minute == state_attr('input_datetime.wez_sp2_wk', 'minute'))  %}
                    {{ states('input_number.wez_t2_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.wez_sp3_wk', 'hour') and now().minute == state_attr('input_datetime.wez_sp3_wk', 'minute'))  %}
                    {{ states('input_number.wez_t3_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.wez_sp4_wk', 'hour') and now().minute == state_attr('input_datetime.wez_sp4_wk', 'minute'))  %}
                    {{ states('input_number.wez_t4_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.wez_sp5_wk', 'hour') and now().minute == state_attr('input_datetime.wez_sp5_wk', 'minute'))  %}
                    {{ states('input_number.wez_t5_wk')|float(default=0) }}
                  {% else %}
                    0
                  {% endif %}
                {% else %}
                  {% if (now().hour == state_attr('input_datetime.wez_sp1_wknd', 'hour') and now().minute == state_attr('input_datetime.wez_sp1_wknd', 'minute'))  %}
                    {{ states('input_number.wez_t1_wknd')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.wez_sp2_wknd', 'hour') and now().minute == state_attr('input_datetime.wez_sp2_wknd', 'minute'))  %}
                    {{ states('input_number.wez_t2_wknd')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.wez_sp3_wknd', 'hour') and now().minute == state_attr('input_datetime.wez_sp3_wknd', 'minute'))  %}
                    {{ states('input_number.wez_t3_wknd')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.wez_sp4_wknd', 'hour') and now().minute == state_attr('input_datetime.wez_sp4_wknd', 'minute'))  %}
                    {{ states('input_number.wez_t4_wknd')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.wez_sp5_wknd', 'hour') and now().minute == state_attr('input_datetime.wez_sp5_wknd', 'minute'))  %}
                    {{ states('input_number.wez_t5_wknd')|float(default=0) }}
                  {% else %}a
                    0
                  {% endif %}
                {% endif %}
    default: []
  - delay:
      hours: 0
      minutes: 0
      seconds: 3
      milliseconds: 0
  - service: input_number.set_value
    data:
      value: "{{ state_attr('climate.wez','temperature') }}"
    target:
      entity_id: input_number.heizung_wez_save
mode: single
iScreen Shoter - 20221115093129689.jpg
iScreen Shoter - 20221115093129689.jpg (332.96 KiB) 407 mal betrachtet
Benutzeravatar
TOM
Beiträge: 22
Registriert: Do 14. Apr 2022, 15:51
1
Has thanked: 14 times
Been thanked: 1 time

Re: Heizplan über Automatisierung

Beitrag von TOM »

Da ich dieses Forum hier echt sehr gut finde, möchte ich meinen Discord Beitrag auch hier weiter teilen.
Es geht weiterhin um meine HEIZPLAN Automasierung.
Hier mein Zwischenstand meiner Heizungs-Automation, mit Time Helper und Temp Helper. Mein Ziel war/ist die Änderung der Wochenschaltzeiten möglichst flexibel, einfach und leich bedienbar zu machen. Mein Profil ist für Mo-DO (wk), Freitag (fr), Samstag (sa) und Sonntag (so) getrennt einstellbar.

Code: Alles auswählen

alias: HEIZUNG Küche Heizplan SIC
description: Set thermostat for Heat
trigger:
  - id: schedule
    platform: time
    at:
      - input_datetime.kueche_sp1_wk
      - input_datetime.kueche_sp2_wk
      - input_datetime.kueche_sp3_wk
      - input_datetime.kueche_sp4_wk
      - input_datetime.kueche_sp5_wk
      - input_datetime.kueche_sp1_fr
      - input_datetime.kueche_sp2_fr
      - input_datetime.kueche_sp3_fr
      - input_datetime.kueche_sp4_fr
      - input_datetime.kueche_sp5_fr
      - input_datetime.kueche_sp1_sa
      - input_datetime.kueche_sp2_sa
      - input_datetime.kueche_sp3_sa
      - input_datetime.kueche_sp4_sa
      - input_datetime.kueche_sp5_sa
      - input_datetime.kueche_sp1_so
      - input_datetime.kueche_sp2_so
      - input_datetime.kueche_sp3_so
      - input_datetime.kueche_sp4_so
      - input_datetime.kueche_sp5_so
  - id: override
    platform: state
    entity_id: input_boolean.heizsaison
    to: "on"
    for: "00:00:30"
  - id: disable
    platform: state
    entity_id: input_boolean.heizsaison
    to: "off"
    for: "00:00:30"
condition:
  - condition: state
    entity_id: input_boolean.heizung_kueche_off
    state: "off"
action:
  - choose:
      - conditions:
          - "{{ trigger.id != 'disable' }}"
          - "{{ is_state('input_boolean.heizsaison', 'on') }}"
        sequence:
          - service: climate.set_temperature
            target:
              entity_id: climate.kueche
            data:
              temperature: |-
                {% if now().isoweekday() in [1,2,3,4] %}
                  {% if (now().hour == state_attr('input_datetime.kueche_sp1_wk', 'hour') and now().minute == state_attr('input_datetime.kueche_sp1_wk', 'minute'))  %}
                    {{ states('input_number.kueche_t1_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp2_wk', 'hour') and now().minute == state_attr('input_datetime.kueche_sp2_wk', 'minute'))  %}
                    {{ states('input_number.kueche_t2_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp3_wk', 'hour') and now().minute == state_attr('input_datetime.kueche_sp3_wk', 'minute'))  %}
                    {{ states('input_number.kueche_t3_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp4_wk', 'hour') and now().minute == state_attr('input_datetime.kueche_sp4_wk', 'minute'))  %}
                    {{ states('input_number.kueche_t4_wk')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp5_wk', 'hour') and now().minute == state_attr('input_datetime.kueche_sp5_wk', 'minute'))  %}
                    {{ states('input_number.kueche_t5_wk')|float(default=0) }}
                  {% else %}
                    0
                  {% endif %}
                {% elif now().isoweekday() in [5] %}
                  {% if (now().hour == state_attr('input_datetime.kueche_sp1_fr', 'hour') and now().minute == state_attr('input_datetime.kueche_sp1_fr', 'minute'))  %}
                    {{ states('input_number.kueche_t1_fr')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp2_fr', 'hour') and now().minute == state_attr('input_datetime.kueche_sp2_fr', 'minute'))  %}
                    {{ states('input_number.kueche_t2_fr')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp3_fr', 'hour') and now().minute == state_attr('input_datetime.kueche_sp3_fr', 'minute'))  %}
                    {{ states('input_number.kueche_t3_fr')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp4_fr', 'hour') and now().minute == state_attr('input_datetime.kueche_sp4_fr', 'minute'))  %}
                    {{ states('input_number.kueche_t4_fr')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp5_fr', 'hour') and now().minute == state_attr('input_datetime.kueche_sp5_fr', 'minute'))  %}
                    {{ states('input_number.kueche_t5_fr')|float(default=0) }}
                  {% else %}
                    0
                  {% endif %}
                {% elif now().isoweekday() in [6] %}
                  {% if (now().hour == state_attr('input_datetime.kueche_sp1_sa', 'hour') and now().minute == state_attr('input_datetime.kueche_sp1_sa', 'minute'))  %}
                    {{ states('input_number.kueche_t1_sa')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp2_sa', 'hour') and now().minute == state_attr('input_datetime.kueche_sp2_sa', 'minute'))  %}
                    {{ states('input_number.kueche_t2_sa')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp3_sa', 'hour') and now().minute == state_attr('input_datetime.kueche_sp3_sa', 'minute'))  %}
                    {{ states('input_number.kueche_t3_sa')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp4_sa', 'hour') and now().minute == state_attr('input_datetime.kueche_sp4_sa', 'minute'))  %}
                    {{ states('input_number.kueche_t4_sa')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp5_sa', 'hour') and now().minute == state_attr('input_datetime.kueche_sp5_sa', 'minute'))  %}
                    {{ states('input_number.kueche_t5_sa')|float(default=0) }}
                  {% else %}
                    0
                  {% endif %}
                {% else %}
                  {% if (now().hour == state_attr('input_datetime.kueche_sp1_so', 'hour') and now().minute == state_attr('input_datetime.kueche_sp1_so', 'minute'))  %}
                    {{ states('input_number.kueche_t1_so')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp2_so', 'hour') and now().minute == state_attr('input_datetime.kueche_sp2_so', 'minute'))  %}
                    {{ states('input_number.kueche_t2_so')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp3_so', 'hour') and now().minute == state_attr('input_datetime.kueche_sp3_so', 'minute'))  %}
                    {{ states('input_number.kueche_t3_so')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp4_so', 'hour') and now().minute == state_attr('input_datetime.kueche_sp4_so', 'minute'))  %}
                    {{ states('input_number.kueche_t4_so')|float(default=0) }}
                  {% elif (now().hour == state_attr('input_datetime.kueche_sp5_so', 'hour') and now().minute == state_attr('input_datetime.kueche_sp5_so', 'minute'))  %}
                    {{ states('input_number.kueche_t5_so')|float(default=0) }}
                  {% else %}
                    0
                  {% endif %}
                {% endif %}
    default: []
  - delay:
      hours: 0
      minutes: 0
      seconds: 3
      milliseconds: 0
    enabled: true
  - service: input_number.set_value
    data:
      value: "{{ state_attr('climate.kueche','temperature') }}"
    target:
      entity_id: input_number.heizung_kueche_save
    enabled: true
mode: restart

Jetzt aber zu meinem aktuellen PROBLEM
Die Automation funktioniert soweit, nur wenn im action Bereich ({% elif now().isoweekday() in [5] %}) input_datetime.kueche_sp*_fr eine Zeit eingestellt ist, die jetzt gerade aktuell wird, geht die set_temparature in den (default=0) Modus.
Ich bin mir nicht sicher, ob ich die aktionbereich wk/fr/sa/so korrekt eingebunden habe.
Ich hoffe man kann verstehen,

meilu
Beiträge: 1
Registriert: Mo 8. Jan 2024, 13:22

Re: Heizplan über Automatisierung

Beitrag von meilu »

Ich hätte auch gerne so einen Heizplan.
habe schon eine Heizungssteuerung mit Helfer und Automatisationen gebaut.
Wo muss dieser yaml code hin. und was muss ich anpassen
wäre für Hilfe dankbar

Benutzeravatar
Volker
Beiträge: 211
Registriert: Mi 28. Jun 2023, 17:20
Wohnort: Südhessen
Has thanked: 71 times
Been thanked: 26 times

Re: Heizplan über Automatisierung

Beitrag von Volker »

@TOM Sieht ja sehr aufwendig und beeindruckend aus.

Gab es einen Grund dafür nicht die Scheduler Card zu nutzen ?

Home Assistant auf HP T630 8GB SSD 128GB
.... und einen unbändigen Spieltrieb :D ....

Antworten