Automation löst um 0 Uhr aus

Ich möchte unter nachfolgend beschriebenen Randbedingungen eine Brauchwasserheizung einschalten. Geschafft habe ich:
Einschalten 11:00 Uhr, Abschalten über kWh Grenze, Abschalten unter SOC Grenze.
Die Automation startet aber immer schon erstmals um Mitternacht/0 Uhr.
Hat hier jemand eine Lösung?

Bedingungen:
Heizstab einschalten wenn
Uhrzeit 11:00 Uhr UND
Batterie SOC > 50% UND (im Sommer wird die Batterie meist sehr früh geladen)
heute schon verbrauchte Heizenergie < 3.8 kWh (der Brauchwasser wurde noch nicht beheizt))

Heizstab auschalten wenn
Batterie SOC < 50% ODER (falls wider Erwarten die PV Einstrahlung abfällt)
heute schon verbrauchte Heizenergie > 3.8 kWh (Erfahrungswert, Brauchwasser ausreichend erwärmt, Thermostat regelt schon an/aus).

alias: Brauchwasserheizung
description: ""
triggers:
  - at: "11:00:00"
    id: Einschaltzeit Brauchwasserheizung
    trigger: time
  - entity_id:
      - sensor.foxess_bat_soc_2
    trigger: numeric_state
    below: 40
    id: Bat SOC unterschritten
  - trigger: numeric_state
    entity_id:
      - sensor.foxess_bat_soc_2
    above: 60
    id: Bat SOC überschritten
  - entity_id:
      - sensor.brauchwasserheizung_energie_tagl_h
    trigger: numeric_state
    id: Brauchwasser Energie unterschritten
    below: 3.8
  - trigger: numeric_state
    entity_id:
      - sensor.brauchwasserheizung_energie_tagl_h
    above: 4
    id: Brauchwasserenergie überschritten
conditions: []
actions:
  - if:
      - condition: trigger
        id:
          - Einschaltzeit Brauchwasserheizung
          - Bat SOC überschritten
          - Brauchwasser Energie unterschritten
    then:
      - type: turn_on
        device_id: 1229a8dda37db265075b1797991c229c
        entity_id: 3dd5dc175cfc0c33128ba9f781dd80ef
        domain: switch
    else:
      - type: turn_off
        device_id: 1229a8dda37db265075b1797991c229c
        entity_id: 3dd5dc175cfc0c33128ba9f781dd80ef
        domain: switch
      - if:
          - condition: or
            conditions:
              - condition: trigger
                id:
                  - Brauchwasserenergie überschritten
                  - Bat SOC unterschritten
        then: []
mode: single

Was sagt/zeigt die Trace Timeline um Mitternacht? Hier sollte man den Grund deutlich erkennen?

Und Trigger sind ODER. Bedingungen sind UND, außer man deklariert es anders.

Ich bin nicht gerade Experte, was YAML angeht, aber so wie ich das sehe, hast du jede Menge Trigger und jeder einzelne davon kann deine Automation auslösen.
Bei dir dürfte es dieser teil sein, der dir um Mitternacht die Automation auslöst, wenn energie täglich (sensor.brauchwasserheizung_energie_tagl_h) auf null gesetzt wird. Dabei gehe ich davon aus, daß es ein Verbrauchszähler mit täglicher Rücksetzung um null Uhr ist.)

Conditions, also Bedingungen, wann die Automation wirklich eingeschaltet werden soll, hast du keine und die if-Abfrage dürfte in den actions ebenfalls true sein, weil ja “Brauchwasser Energie unterschritten” in diesem Moment true ist.


4. Juli 2025 um 00:00:00
4. Juli 2025
Brauchwasserheizung ausgelöst durch numerischen Zustand von Brauchwasserheizung Energie tägl._H
00:00:00 - Vor 12 Stunden
Brauchwasserheizung Brauchwasserheizung eingeschaltet ausgelöst durch Automation Brauchwasserheizung ausgelöst durch numerischen Zustand von Brauchwasserheizung Energie tägl._H
00:00:00 - Vor 12 Stunden

Der Auslöser ist wohl die Brauchwasserenergie_tgl. (wird ja Mitternacht auf 0 gesetzt). Ist meine if -condition für “Einschalten” keine UND Bedingung sondern ODER?
Könntest du mir das “richtig” formulieren (YAML-code)?
Die ODER- Ausschaltbedingungen scheinen zu stimmen:

entity_id:
  - sensor.foxess_bat_soc_2
trigger: numeric_state
below: 40
id: Bat SOC unterschritten

4. Juli 2025 um 11:45:19
4. Juli 2025
Brauchwasserheizung ausgelöst durch numerischen Zustand von Brauchwasserheizung Energie tägl._H
11:45:19 - Vor 1 Stunde
Brauchwasserheizung Brauchwasserheizung ausgeschaltet ausgelöst durch Automation Brauchwasserheizung ausgelöst durch numerischen Zustand von Brauchwasserheizung Energie tägl._H
11:45:19 - Vor 1 Stunde

Die IF-Bedingung ist eher unnötig an dieser Stelle. So wich ich es verstanden habe, löst alles, was unter

triggers:

steht, die Automation aus (oder) und alles was unter

conditions:

steht sind die Bedingungen (und)

Ich würde es im grafischen Editor machen und als "Auslöser (trigger) nur die Uhrzeit nehmen.
Unter “und wenn” (conditions) die Bedingungen (Also Akku voll und die Energie) eintragen.

Fürs Ausschalten dann eine zweite Automation, bei der der Batteriestand und die Energie in als Auslöser (trigger) stehen.

Der Grafische Editor spuckt mir dazu folgende YAML aus:

Einschalten

description: ""
mode: single
triggers:
  - trigger: time
    at: "11:00:00"
conditions:
  - condition: numeric_state
    entity_id: sensor.foxess_bat_soc_2
    above: 50
  - condition: numeric_state
    entity_id: sensor.brauchwasserheizung_energie_tagl_h
    below: 3.8
actions:
  - action: switch.turn_on
    metadata: {}
    data: {}

dazu das Ausschalten:

description: ""
mode: single
triggers:
  - trigger: numeric_state
    entity_id:
      - sensor.foxess_bat_soc_2
    below: 50
  - trigger: numeric_state
    entity_id:
      - sensor.brauchwasserheizung_energie_tagl_h
    above: 3.8
conditions: []
actions:
  - action: switch.turn_off
    metadata: {}
    data: {}

Allerdings solltest du noch beim Batteriestand und der Energie eine Hysterese einbauen, sonst kann es passieren, daß der Ausgang nur kurz an ist, wenn die Energie bereits fast erreicht ist oder der Akku nur knapp über 50% steht.

1 „Gefällt mir“

Das ist eine ODER und somit falsch. Und ich würde bei der Aktion auch nicht nur nach Ausgelöst durch abfragen sondern noch mal die Bedingungen in eine UND-Abfrage setzen.

Ich würde es in etwa so umsetzen

alias: Brauchwasserheizung
description: ""
triggers:
  - at: "11:00:00"
    id: Einschaltzeit Brauchwasserheizung
    trigger: time
  - entity_id:
      - sensor.foxess_bat_soc_2
    trigger: numeric_state
    below: 40
    id: Bat SOC unterschritten
  - trigger: numeric_state
    entity_id:
      - sensor.foxess_bat_soc_2
    above: 60
    id: Bat SOC überschritten
  - entity_id:
      - sensor.brauchwasserheizung_energie_tagl_h
    trigger: numeric_state
    id: Brauchwasser Energie unterschritten
    below: 3.8
  - trigger: numeric_state
    entity_id:
      - sensor.brauchwasserheizung_energie_tagl_h
    above: 4
    id: Brauchwasserenergie überschritten
conditions: []
actions:
  - if:
      - condition: trigger
        id:
          - Einschaltzeit Brauchwasserheizung
          - Bat SOC überschritten
          - Brauchwasser Energie unterschritten
    then:
      - if:
          - condition: numeric_state
            entity_id: sensor.foxess_bat_soc_2
            above: 40
          - condition: numeric_state
            entity_id: sensor.foxess_bat_soc_2
            above: 40
        then:
          - type: turn_on
            device_id: 1229a8dda37db265075b1797991c229c
            entity_id: 3dd5dc175cfc0c33128ba9f781dd80ef
            domain: switch
    else:
      - if:
          - condition: or
            conditions:
              - condition: trigger
                id:
                  - Brauchwasserenergie überschritten
                  - Bat SOC unterschritten
        then:
          - type: turn_off
            device_id: 1229a8dda37db265075b1797991c229c
            entity_id: 3dd5dc175cfc0c33128ba9f781dd80ef
            domain: switch
mode: single

Du musst action: - then - ifdeine Sensoren und Werte noch anpassen.

Danke, so für mich fast alles nachvollziehbar, auch über das Resultat sichtbar im graphischen editor.
Was ich nicht verstehe, ist:

actions:
  - if:
      - condition: trigger
        id:
          - Einschaltzeit Brauchwasserheizung
          - Bat SOC überschritten
          - Brauchwasser Energie unterschritten
    then:
      - if:
          - condition: numeric_state
            entity_id: sensor.foxess_bat_soc_2
            above: 40
          - condition: numeric_state
            entity_id: sensor.foxess_bat_soc_2
            above: 40
        then:

action, wenn die 3 trigger (UND)-bedingungen zutreffen (verstanden)
dann, Bedingung ,wenn nochmal 2*SOC zutreffen. Ist hier einmal versehentlich doppelt, oder ist noch mal Ober-/Untergrenze SOC gemeint?

Ich hatte keine Lust alle deine Werte zu übernehmen. Da müssen deine 3 Bedingungen rein.

Die sind immer noch ODER! Es sind keine Bedingungen sondern Auslöser/Trigger. Deshalb in der Action noch die Bedingungen (UND).

1 „Gefällt mir“

danke, ich werde das dann mal so testen und berichte morgen.

danke, schaut auch gut aus, Hysterese wäre dann wichtig. Ich probiere mal die “komplexere” Lösung von “sirector” mit einer Automation aus (…falscher Ehrgeiz). Eine Rückfall Ebene ist bei mir immer gut.

Läuft noch nicht, in erster Variante gestern wurde die Automation noch mitternachts gestartet (hatte nur die eine Triggerbedingung Bat SOC).
Habe dann die Automation nach meiner Interpretation deines Vorschlages erweitert .

alias: Brauchwasserheizung
description: ""
triggers:
  - at: "11:00:00"
    id: Einschaltzeit Brauchwasserheizung
    trigger: time
  - entity_id:
      - sensor.foxess_bat_soc_2
    trigger: numeric_state
    below: 40
    id: Bat SOC unterschritten
  - trigger: numeric_state
    entity_id:
      - sensor.foxess_bat_soc_2
    above: 60
    id: Bat SOC überschritten
  - entity_id:
      - sensor.brauchwasserheizung_energie_tagl_h
    trigger: numeric_state
    id: Brauchwasser Energie unterschritten
    below: 3.8
  - trigger: numeric_state
    entity_id:
      - sensor.brauchwasserheizung_energie_tagl_h
    above: 4
    id: Brauchwasserenergie überschritten
conditions: []
actions:
  - if:
      - condition: trigger
        id:
          - Einschaltzeit Brauchwasserheizung
    then:
      - if:
          - condition: numeric_state
            entity_id: sensor.foxess_bat_soc_2
            above: 40
          - condition: and
            conditions:
              - condition: trigger
                id:
                  - Bat SOC überschritten
              - condition: and
                conditions: []
              - condition: trigger
                id:
                  - Brauchwasser Energie unterschritten
        then:
          - type: turn_on
            device_id: 1229a8dda37db265075b1797991c229c
            entity_id: 3dd5dc175cfc0c33128ba9f781dd80ef
            domain: switch
    else:
      - if:
          - condition: or
            conditions:
              - condition: trigger
                id:
                  - Brauchwasserenergie überschritten
                  - Bat SOC unterschritten
        then:
          - type: turn_off
            device_id: 1229a8dda37db265075b1797991c229c
            entity_id: 3dd5dc175cfc0c33128ba9f781dd80ef
            domain: switch
mode: single

Ergebnis: um 0:00 Uhr nicht gestartet, um 11:00 Uhr auch nicht.
Trigger Eintrag um 0:00 Uhr gibt es nicht, Trigger um 11:00 Uhr:


6. Juli 2025 um 11:00:00
Durch time am 6. Juli 2025 um 11:00:00 ausgelöst
Wenn: then-Aktion ausgeführt
Wenn: Keine Aktion ausgeführt

Habe wohl den Vorschlag falsch interpretiert oder umgesetzt. Kannst/willst du noch korrigieren? Ansonsten werde ich meinen Ehrgeiz zügeln und die für mich taugliche “einfachere” Lösung probieren,

Ich habe mir jetzt nicht alles im Detail angesehen. Aber wie sollen zwei Trigger gleichzeitig wahr sein?

Es kann immer nur ein Trigger auslösen. Damit kann es unmöglich durch einen anderen Trigger ausgelöst sein.

kann also niemals zutreffen.

Außerdem sind leere Abfragen drin. Diese wirst Du auch sehen, wenn Du den visuellen Editor aktivierst.

Danke Frank, ich habe jetzt deine “einfache” Lösung (1 Ein-, 1 Aus- Automation) umgesetzt, läuft zumindest richtig an: 11:00 Uhr + SOC >x + energie <x. Schaltet aus bei energie >x. Die anderen Bedingungen sind noch nicht eingetreten und testbar.
Danke

Danke, stimmt. Der visuelle Editor überfordert mich, gehe manchmal eine Zeile zuviel weiter.

Danke sirector, deinen Lösungsansatz werde ich auch noch mal versuchen, ich teste erst mal noch den “einfachen” 2- automationen- Ansatz aus.
Wenn das stabil läuft (unter allen Triggern), spiele ich mit deinem Ansatz weiter. (obwohl: never change a running system)