Seite 1 von 1

Heizplan über Automatisierung

Verfasst: Fr 28. Okt 2022, 11:51
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) 563 mal betrachtet

Re: Heizplan über Automatisierung

Verfasst: Fr 28. Okt 2022, 14:17
von Osorkon

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

Gruß
Osorkon


Re: Heizplan über Automatisierung

Verfasst: Fr 11. Nov 2022, 20:08
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.


Re: Heizplan über Automatisierung

Verfasst: Fr 11. Nov 2022, 23:31
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


Re: Heizplan über Automatisierung

Verfasst: Di 15. Nov 2022, 08:12
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.


Re: Heizplan über Automatisierung

Verfasst: Di 15. Nov 2022, 09:34
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) 518 mal betrachtet

Re: Heizplan über Automatisierung

Verfasst: Di 22. Nov 2022, 09:52
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,


Re: Heizplan über Automatisierung

Verfasst: Mo 8. Jan 2024, 13:49
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


Re: Heizplan über Automatisierung

Verfasst: Di 9. Jan 2024, 17:23
von Volker

@TOM Sieht ja sehr aufwendig und beeindruckend aus.

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