Heizung im Zeitfenster einschalten und Abschalten unter Bedingungen

Ich versuche jetzt das An- und Abschalten der Brauchwasserheizung in “einer” Automation zu lösen. Aufgabe:

Einschalten nur zwischen 11:00Uhr und 15:00Uhr, wenn
SOC > 60% UND tägliche (heutige) Energiemenge für Heizen < 4,5 kWh
Auschalten wenn SOC < 60% ODER Energiemenge > 4.5 kWh ODER Zeit nach 15:00 Uhr:
Automation im YAML Code:

alias: Brauchwasser_2
description: schaltet Brauchwasserheizung ein bei SOC>60% bis 4,5 kWh geheizt wurde
triggers:
  - trigger: time
    at: "11:00:00"
    id: Brauchwasser Ein  nach 11:00 Uhr
  - trigger: time
    at: "15:00:00"
    id: Brauchwasser Aus  vor 15:00 Uhr
  - trigger: numeric_state
    entity_id:
      - sensor.brauchwasserheizung_energie_tagl_h
    above: 4.5
    id: Brauchwasserheizung hat 4.5 kWh erreicht
conditions:
  - condition: trigger
    id:
      - Brauchwasser Ein  nach 11:00 Uhr
      - Brauchwasser Aus  vor 15:00 Uhr
actions:
  - if:
      - condition: numeric_state
        entity_id: sensor.foxess_bat_soc_2
        above: 60
      - condition: numeric_state
        entity_id: sensor.brauchwasserheizung_energie_tagl_h
        below: 4.5
    then:
      - type: turn_on
        device_id: 1229a8dda37db265075b1797991c229c
        entity_id: 3dd5dc175cfc0c33128ba9f781dd80ef
        domain: switch
      - if:
          - condition: or
            conditions:
              - condition: numeric_state
                entity_id: sensor.foxess_bat_soc_2
                below: 60
              - condition: numeric_state
                entity_id: sensor.brauchwasserheizung_energie_tagl_h
                above: 4.5
              - condition: time
                after: "15:01:00"
        then:
          - type: turn_off
            device_id: 1229a8dda37db265075b1797991c229c
            entity_id: 3dd5dc175cfc0c33128ba9f781dd80ef
            domain: switch
mode: single

Das Ergebnis:
Nach Unterschreiten der SOC Grenze schaltet die Heizung ab, dann wieder über 60% Ein. Die anderen Bedingungen scheinen nicht zu greifen.
Das Takten der Heizung nachfolgend kommt vom Thermostat durch Erreichen der eingestellten Thermostat Temperatur.
Über Hilfe wäre ich sehr dankbar.
Grüße Otto

Moin @tschako,

ich habe gerade leider nicht die Möglichkeit den Code nach deinen Vorgaben anzupassen aber ich denke für deinen Anwendungszweck, vor allem um alles in einer Automation zu haben, wird dir die “Choose-Funktion” weitehelfen können.

Anbei ist ein Beispielcode einer Automation von mir die das Licht automatisch ein- und auch ausschalten kann sollte es zwischenzeitig mal ein wenig düsterer werden wenn eine Wolke vorbeizieht:

alias: Licht bei Wolke
description: Schaltet das Licht ein wenn die Beleuchtungsstärke sinkt
triggers:
  - trigger: numeric_state
    entity_id:
      - sensor.presencedetector_illuminance
    for:
      hours: 0
      minutes: 0
      seconds: 20
    below: 60
  - trigger: numeric_state
    entity_id:
      - sensor.presencedetector_illuminance
    for:
      hours: 0
      minutes: 2
      seconds: 0
    above: 70
conditions: []
actions:
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: sensor.presencedetector_illuminance
            below: 60
        sequence:
          - action: light.turn_on
            metadata: {}
            data: {}
            target:
              area_id:
                - kuche
                - flur
          - action: switch.turn_on
            metadata: {}
            data: {}
            target:
              device_id: 0565953cbee81229d79e1069e6955f7f
      - conditions:
          - condition: numeric_state
            entity_id: sensor.presencedetector_illuminance
            above: 70
        sequence:
          - action: light.turn_off
            metadata: {}
            data: {}
            target:
              area_id:
                - kuche
                - flur
          - action: switch.turn_off
            metadata: {}
            data: {}
            target:
              device_id: 0565953cbee81229d79e1069e6955f7f
mode: single


Man kann problemlos weitere Bedienungen für die jeweiligen Optionen festlegen :slight_smile:

VG Jax

Hier mein 5-cent Vorschlag

Zusammenfassung
alias: 1 forum aut
description: ""
triggers:
  - trigger: template
    value_template: >
      {{ (states('sensor.foxess_bat_soc_2') | float > 60)
      and 
         (states('sensor.brauchwasserheizung_energie_tagl_h') | float < 4.5) }}
    id: Einschalten
  - trigger: template
    value_template: >
      {{ (states('sensor.foxess_bat_soc_2') | float < 60)
      and 
         (states('sensor.brauchwasserheizung_energie_tagl_h') | float > 4.5) }}
    id: Ausschalten
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Einschalten
          - condition: time
            after: "11:00:00"
            before: "15:00:00"
        sequence: []
      - conditions:
          - condition: trigger
            id:
              - Ausschalten
          - condition: time
            after: "15:00:00"
            before: "11:00:00"
        sequence: []
mode: single


In den sequence der Optionen muß natürlich noch etwas eingetragen werden.

Sofern du die gewünschte Aktionen in den Optionen noch ergänzt sollte es passen - sieht für mich zumindest schlüssig aus :slight_smile:

Ab diesem Punkt steht bei mir zumindest immer der Praxistest an bevor ich weiter herum-doktore :smiley:

Ich habe mit der choose- funktion noch nichts gemacht.
Ich kann mich in das Beispiel von “bacardi” :cocktail_glass: :wink:besser hineinversetzen.
Danke mal für das Beispiel.

Hallo, vielen Dank, ich habe deine Automation angepasst:

  • Ausschaltbedingungen ODER statt UND
  • sequence: …turn on/off zugefügt.

Es scheint aber noch fehlerhaft zu sein, mit zeitlich oder Energie angepassten Werten lief es noch nicht.
Siehst du hier noch Fehler im code?

alias: Brauchwasser_3
description: ""
triggers:
  - trigger: template
    value_template: |
      {{ (states('sensor.foxess_bat_soc_2') | float > 60) and 
         (states('sensor.brauchwasserheizung_energie_tagl_h') | float < 6.1) }}
    id: Einschalten
  - trigger: template
    value_template: |
      {{ (states('sensor.foxess_bat_soc_2') | float < 60) or 
         (states('sensor.brauchwasserheizung_energie_tagl_h') | float > 6.2) }}
    id: Ausschalten
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Einschalten
          - condition: time
            after: "19:00:00"
            before: "20:00:00"
        sequence:
          - type: turn_on
            device_id: 1229a8dda37db265075b1797991c229c
            entity_id: 3dd5dc175cfc0c33128ba9f781dd80ef
            domain: switch
      - conditions:
          - condition: trigger
            id:
              - Ausschalten
          - condition: time
            after: "20:00:00"
            before: "19:00:00"
        sequence:
          - type: turn_off
            device_id: 1229a8dda37db265075b1797991c229c
            entity_id: 3dd5dc175cfc0c33128ba9f781dd80ef
            domain: switch
mode: single

Könnte hieran liegen - umgedreht wird ein Schuh draus.

Ich würde es auch gleich hier richtig machen. Nimm die Entities anstelle von device_id. Da hast Du langfristig weniger Ärger.

action: switch.turn_off
metadata: {}
data: {}
target:
  entity_id: switch.xxx

Ich habe nochmals angepasst, löst aber nicht aus, um 21:10Uhr, Energie 6 kWh.
angefügt die Automation und den trace.

Hat noch jemand eine andere Idee?

alias: Brauchwasser_3
description: ""
triggers:
  - trigger: template
    value_template: |
      {{ (states('sensor.foxess_bat_soc_2') | float > 60) and 
         (states('sensor.brauchwasserheizung_energie_tagl_h') | float < 6.1) }}
    id: Einschalten
  - trigger: template
    value_template: |
      {{ (states('sensor.foxess_bat_soc_2') | float < 60) or 
         (states('sensor.brauchwasserheizung_energie_tagl_h') | float > 6.2) }}
    id: Ausschalten
conditions: null
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Einschalten
          - condition: time
            after: "21:00:00"
            before: "22:00:00"
        sequence:
          - action: switch.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: switch.brauchwasserheizung
      - conditions:
          - condition: trigger
            id:
              - Ausschalten
          - condition: time
            after: "22:00:00"
            before: "21:00:00"
        sequence:
          - action: switch.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: switch.brauchwasserheizung
mode: single


trace:

{
  "trace": {
    "last_step": "action/0/choose/1/conditions/0",
    "run_id": "db7cea5a425e159b96ad254796d803f5",
    "state": "stopped",
    "script_execution": "finished",
    "timestamp": {
      "start": "2025-09-02T19:15:41.062824+00:00",
      "finish": "2025-09-02T19:15:41.139973+00:00"
    },
    "domain": "automation",
    "item_id": "1756829256968",
    "trigger": null,
    "trace": {
      "trigger": [
        {
          "path": "trigger",
          "timestamp": "2025-09-02T19:15:41.063079+00:00",
          "changed_variables": {
            "this": {
              "entity_id": "automation.brauchwasser_3",
              "state": "on",
              "attributes": {
                "id": "1756829256968",
                "last_triggered": "2025-09-02T19:03:40.477603+00:00",
                "mode": "single",
                "current": 0,
                "friendly_name": "Brauchwasser_3"
              },
              "last_changed": "2025-09-02T19:04:13.643453+00:00",
              "last_reported": "2025-09-02T19:04:13.643453+00:00",
              "last_updated": "2025-09-02T19:04:13.643453+00:00",
              "context": {
                "id": "01K45X1FJBFQ7VSE2QQQ29X4V5",
                "parent_id": null,
                "user_id": null
              }
            },
            "trigger": {
              "platform": null
            }
          }
        }
      ],
      "action/0": [
        {
          "path": "action/0",
          "timestamp": "2025-09-02T19:15:41.107588+00:00",
          "changed_variables": {
            "context": {
              "id": "01K45XPEW6MMR496NT5AA2B06G",
              "parent_id": "01K45XPEW5XY7KAN8SYTS7W828",
              "user_id": null
            }
          }
        }
      ],
      "action/0/choose/0": [
        {
          "path": "action/0/choose/0",
          "timestamp": "2025-09-02T19:15:41.108135+00:00",
          "result": {
            "result": false
          }
        }
      ],
      "action/0/choose/0/conditions/0": [
        {
          "path": "action/0/choose/0/conditions/0",
          "timestamp": "2025-09-02T19:15:41.108240+00:00",
          "result": {
            "result": false
          }
        }
      ],
      "action/0/choose/1": [
        {
          "path": "action/0/choose/1",
          "timestamp": "2025-09-02T19:15:41.108380+00:00",
          "result": {
            "result": false
          }
        }
      ],
      "action/0/choose/1/conditions/0": [
        {
          "path": "action/0/choose/1/conditions/0",
          "timestamp": "2025-09-02T19:15:41.108453+00:00",
          "result": {
            "result": false
          }
        }
      ]
    },
    "config": {
      "id": "1756829256968",
      "alias": "Brauchwasser_3",
      "description": "",
      "triggers": [
        {
          "trigger": "template",
          "value_template": "{{ (states('sensor.foxess_bat_soc_2') | float > 60) and \n   (states('sensor.brauchwasserheizung_energie_tagl_h') | float < 6.1) }}\n",
          "id": "Einschalten"
        },
        {
          "trigger": "template",
          "value_template": "{{ (states('sensor.foxess_bat_soc_2') | float < 60) or \n   (states('sensor.brauchwasserheizung_energie_tagl_h') | float > 6.2) }}\n",
          "id": "Ausschalten"
        }
      ],
      "conditions": null,
      "actions": [
        {
          "choose": [
            {
              "conditions": [
                {
                  "condition": "trigger",
                  "id": [
                    "Einschalten"
                  ]
                },
                {
                  "condition": "time",
                  "after": "21:00:00",
                  "before": "22:00:00"
                }
              ],
              "sequence": [
                {
                  "action": "switch.turn_on",
                  "metadata": {},
                  "data": {},
                  "target": {
                    "entity_id": "switch.brauchwasserheizung"
                  }
                }
              ]
            },
            {
              "conditions": [
                {
                  "condition": "trigger",
                  "id": [
                    "Ausschalten"
                  ]
                },
                {
                  "condition": "time",
                  "after": "22:00:00",
                  "before": "21:00:00"
                }
              ],
              "sequence": [
                {
                  "action": "switch.turn_off",
                  "metadata": {},
                  "data": {},
                  "target": {
                    "entity_id": "switch.brauchwasserheizung"
                  }
                }
              ]
            }
          ]
        }
      ],
      "mode": "single"
    },
    "blueprint_inputs": null,
    "context": {
      "id": "01K45XPEW6MMR496NT5AA2B06G",
      "parent_id": "01K45XPEW5XY7KAN8SYTS7W828",
      "user_id": null
    }
  },
  "logbookEntries": []
}

Schreibst Du zur Sicherheit noch einmal Deine Anforderungen auf, damit ich diese nicht mißverstehe.

Die Automatisation hat 2 Auslöser

  • Trigger1: soc2 > 60 UND brauch < 6.1
  • Trigger2: soc2 < 60 ODER brauch > 6.2
  • Keine Uhrzeit triggert irgendetwas
  • Bei Trigger1 wird dann geprüft, ob es nach 21 und vor 22 ist, dann AN
  • Bei Trigger2 wird dann geprüft, ob es nach 22 und vor 21 ist, dann AUS

conditions: null stimmt was nicht
condition: [] ist besser

Dann im Trace steht

"trigger": {
  "platform": null
}

Das läßt darauf schließen, daß Du die Automatisation manuell angestoßen hast. Dann läuft sie automatisch an den Optionen vorbei, weil keine Trigger ID zutrifft.

Ich habe am Anfang es so beschrieben:

Einschalten nur zwischen 11:00Uhr und 15:00Uhr, wenn
SOC > 60% UND tägliche (heutige) Energiemenge für Heizen < 4,5 kWh
Auschalten wenn SOC < 60% ODER Energiemenge > 4.5 kWh ODER Zeit nach 15:00 Uhr:

Dann aber mit Hilfe deiner Version versucht umzusetzen, hatte es ja schon in anderer Art versucht. (siehe oben).

Diesen Teil habe ich überlesen, dann passe ich die Trigger der Aut. nocheinmal an. Jetzt wird auch zu 15 Uhr ausgeschaltet.

Zusammenfassung
alias: 1 forum aut
description: ""
triggers:
  - trigger: template
    value_template: >
      {{ states('sensor.foxess_bat_soc_2') | float(0) > 60 and
      states('sensor.brauchwasserheizung_energie_tagl_h') | float(0) < 4.5 }}
    id: Einschalten
  - trigger: template
    value_template: >
      {{ states('sensor.foxess_bat_soc_2') | float(0) < 60 and
      states('sensor.brauchwasserheizung_energie_tagl_h') | float(0) > 4.5 }}
    id: Ausschalten
  - trigger: time
    at: "15:00:10"
    id: 15Uhr
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Einschalten
          - condition: time
            after: "11:00:00"
            before: "15:00:00"
        sequence:
          - action: switch.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: switch.brauchwasserheizung
      - conditions:
          - condition: or
            conditions:
              - condition: trigger
                id:
                  - Ausschalten
              - condition: trigger
                id:
                  - 15Uhr
          - condition: time
            after: "15:00:00"
            before: "11:00:00"
        sequence:
          - action: switch.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: switch.brauchwasserheizung
mode: single

Hallo nochmal, so läuft es auch nicht wirklich. Die Einschaltbedingung (nach 11:00 Uhr, SOC > 60%) stimmt zwar, die Ausschaltbedingungen SOC < 60% oder Energie > 4.5 kWh lösen aber nicht aus.
Ich habe ca. 14:50 Uhr selbst abgeschaltet, weil SOC schon bei 15% lag.

Ich weiß nicht, ob es an den templates liegt (Zustandswechsel falsch ↔ wahr), da kenne ich mich nicht aus.
Ebensowenig ob man die “Nicht Einschaltzeit” bzw. Ausschaltzeit zweimal definieren muß mit trigger id und über condition time.

Ich kann meine Einstiegsvariante (Brauchwasserheizung 2, siehe oben) nachvollziehen, aber die läuft ja auch nicht :cry:

Trotzdem Danke, ich nehme wieder mal meine backup Variante 1 für Aus, 1 für Ein.

screenshot von heute:

durch die aktuelle (deine) Version:

alias: Brauchwasser_3
description: ""
triggers:
  - trigger: template
    value_template: >
      {{ states('sensor.foxess_bat_soc_2') | float(0) > 60 and
      states('sensor.brauchwasserheizung_energie_tagl_h') | float(0) < 4.5 }}
    id: Einschalten
  - trigger: template
    value_template: >
      {{ states('sensor.foxess_bat_soc_2') | float(0) < 60 or
      states('sensor.brauchwasserheizung_energie_tagl_h') | float(0) > 4.5 }}
    id: Ausschalten
  - trigger: time
    at: "15:00:00"
    id: 15Uhr
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Einschalten
          - condition: time
            after: "11:00:00"
            before: "15:00:00"
        sequence:
          - action: switch.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: switch.brauchwasserheizung
      - conditions:
          - condition: or
            conditions:
              - condition: trigger
                id:
                  - Ausschalten
              - condition: trigger
                id:
                  - 15Uhr
          - condition: time
            after: "15:00:00"
            before: "11:00:00"
        sequence:
          - action: switch.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: switch.brauchwasserheizung
mode: single