Zeitschleife Bedingungsabfrage für Automation (Start Geschirrspüler wenn genug Leistung PV)

Moin zusammen, ich lese schon länger passiv mit und habe schon einiges gelernt, was die Basics angeht. Dafür vorab schon mal vielen Dank an alle Forenmitglieder.

Ich habe da eine Kleinigkeit, die ich auch mit viel Googlen irgendwie nicht gelöst bekomme.
Eigentlich ist die Automation ziemlich simpel. Ich drücke auf einen selbst erstellten Button, der eine Abfrage nach dem Solarertrag für die nächsten 60 Minuten abfragt. Ist dieser größer X wird ein definiertes Programm des Geschirrspülers getriggert.

Jetzt zum Problem - ist die Bedingung nicht erfüllt endet die Automation und muss nochmal per Button gestartet werden. Und damit geht die Automation dieser Automation halt verloren.

Ich brauche also eine Zeitschleife die alle 10 Min abfragt ob die Bedingung mittlerweile erfüllt ist.

Ich denke die Lösung liegt irgendwo in Richtung repeat/while nach der condition. Aber ich bekomme es einfach nicht hin, die Automation zum Laufen zu bekommen.

Ich poste mal unformatiert den Code, damit ihr den Ablauf mal seht.

alias: geschirrspüler_test
description: Starte Geschirrspüler wenn Leistung X erreicht ist
triggers:
  - entity_id:
  - input_button.geschirrspuler_zeitversetzt_remote_starten
    trigger: state
conditions:
  - condition: numeric_state
    entity_id: sensor.solcast_pv_forecast_prognose_aktuelle_stunde
    above: 2500
actions:
  - action: home_connect.start_program
    data:
      device_id: 154ab0332b91a4bdac486fsj76cd96
      program: Dishcare.Dishwasher.Program.Kurz60
    enabled: false
mode: single

Vorab schon mal vielen Dank für eure Hilfe!

Gruß
Paul

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)

Sorry, habs unformatiert eingefügt weil ich vom Smartphone geschrieben hab… Danke fürs korrigieren

Wenn ich es richtig verstanden habe, soll die Automatisierung 60 Min. darauf warten, dass der Sensor über 2500 ist und dann starten.

Entweder mit “warte auf Auslöser”

actions:
  - wait_for_trigger:
      - trigger: numeric_state
        entity_id:
          - sensor.solcast_pv_forecast_prognose_aktuelle_stunde
        above: 2500
    timeout:
      hours: 1
      minutes: 0
      seconds: 0
      milliseconds: 0
    continue_on_timeout: false

Oder aber mein Favorit: Trigger und Bedingung kombinieren.

Trigger: sensor über 2500
ODER: Helfer geht an

Bedingung: Helfer ist on
UND: Sensor über 2500

Hi Maxe, danke für Deine Antwort.

Den Weg kannte ich nicht.
Das heißt er fragt nun eine Stunde ununterbrochen ab, ob die Bedingung erfüllt ist? Führt das nicht zu unnötiger Last im System?

Vielleicht nochmal detaillierter geschildert. Ich habe über Solcast für meine PV Anlage eine Vorhersage laufen die ich per api abrufe. In dieser gibt es den Wert “Prognose kommende 2 Stunden”. Diese Entität hat diverse Attribute der dazu führt, dass sich der Wert (in Wh) im Laufe des Tages ändert.
Sobald dieser nun über 2000 oder 2500 springt, soll der Spüler anspringen.

Macht es da nicht mehr Sinn, abzufragen und wenn Bedingung nicht erfüllt sein sollte, 60 Minuten später nochmal abzufragen ob die Bedingung nun erfüllt ist?
Selbst wenn es jetzt bis zum Nachmittag dauert bis so viel Leistung kommt (Bewölkung), dann wären es nur eine handvoll Abfragen bis zur Ausführung…

Anbei mal ein Bild von der Entität der Prognose.

Vielleicht hab ich ja auch einen Denkfehler und es gibt einen viel einfacheren (oder logischeren) Weg um diese Automation umzusetzen… Bin da offen :slight_smile:
Ziel ist, dass der Spüler läuft wenn die PV genug Leistung generiert.

Alternativer Vorschlag:
Anstelle des Startknopfes könnte man auch eine Schalter “Erlaubnis fürs Arbeiten” anlegen und den Start triggern, sobald die Vorhersage erfüllt ist.
Zusätzlich würde ich auch noch einmal auf das Einschalten der Erlaubnis triggern, falls die Bedingung schon vor dem Erlauben erfüllt ist, sonst läuft die Automation möglicherweise nicht los.

alias: geschirrspüler_test
description: Starte Geschirrspüler wenn Leistung X erreicht ist
triggers:
  - trigger: state
    entity_id:
      - input_boolean.geschirrspuler_zeitversetzt_remote_starten_erlaubt
    to: "on"
    from: "off"
  - trigger: numeric_state
    entity_id:
      - sensor.solcast_pv_forecast_prognose_aktuelle_stunde
    above: 2500
conditions:
  - condition: state
    entity_id: input_boolean.geschirrspuler_zeitversetzt_remote_starten_erlaubt
    state: "on"
  - condition: numeric_state
    entity_id: sensor.solcast_pv_forecast_prognose_aktuelle_stunde
    above: 2500
actions:
  - action: home_connect.start_program
    data:
      device_id: 154ab0332b91a4bdac486fsj76cd96
      program: Dishcare.Dishwasher.Program.Kurz60
    enabled: false
mode: single

Hi Lutz, danke für Deine Antwort.

Ja, das war meine erste Idee. Leider musste ich diese verwerfen, weil der Geschirrspüler sozusagen in einen dauerhaften Fernstart Modus versetzt werden muss, damit ich das triggern per HA nutzen kann.

Da diese mindestens 2500 Wh aus der Bedingung aber ziemlich regelmäßig erreicht werden, würde das Ding dann zwischendurch immer wieder angeschmissen werden…
Daher brauch ich den Umweg, dass erst nach manueller Freigabe (per Button) geschaut werden soll ob genug Leistung da ist und es losgehen kann…

Da fragt keine ne Stunde lang was ab.
Es wird lediglich eine Stunde auf den Auslöser gewartet.

Aber wie schon geschrieben, würde ich eh Trigger und Bedingung kombinieren.

Ah okay, dann hab ich das falsch verstanden. Danke für die Erklärung.

Aber das wäre ja tatsächlich eine simple Lösung. Also wird von der Automatisierung quasi die Entität “Prognose nächste 2 Stunden” überwacht und wenn der Wert über X dann wird die Action gestartet??

Dann kann ich den doch simpel auf 12 Stunden warten setzen und die Automatisierung morgens per Button aktivieren. Dann kann HA einfach selbstständig überwachen und den Spüler starten wenn genug kommt?

Das ist aus meiner Sicht sogar “sauberer” als eine Zeitschleife.

Es sei denn ich hab deinen Vorschlag schon wieder falsch verstanden :rofl:

Vielen Dank, ich probiere das morgen einfach mal aus.

Warte auf Trigger für 12h würde ich nicht machen.

Meine Empfehlung kennst du.

Man könnte bei meinem Vorschlag unter actions als Erstes die Starterlaubnis wieder wegnehmen und dann die Maschine starten. Dann wäre ein mehfaches Starten nicht möglich bis die Freigabe wieder manuell erteilt wird.

@LutzHB was ist an deinem Vorschlag denn anders als an meinem?

Das wäre ja auch mein Favorit.

Soweit ich das verstanden habe möchte er die Maschine starten, sobald nach der Startfreigage/Startbutton die Solarertragsvorhersage für die nachsten 60 Minuten über 2500 ist oder? Wenn nach 60 Minuten die Bedingung noch nicht erfüllt ist, dann schaltet die Maschine doch so nicht ein, da der Timeout abgelaufen ist oder? In meinem Fall würder er sofort starten, wenn die Vorhersage bereits auf 2500 steht und auch mehr als 60 Minuten warten, wenn nicht erfüllt.

…Aber das mit dem Timeout finde ich interressant, dass habe ich so noch nicht verwendet. Da finde ich bei mir bestimmt demnächst noch einen Anwendungsfall…

@LutzHB
Meinen Vorschlag hast du aber gelesen?
Siehe hier:

Er hat als Helfer einen Input_button, keinen Switch. Bleibt der nach einmaliger Betätigung auf an? Buttons habe ich irgendwie noch nie verwendet…

Ja, genau das war ja auch mein Vorschlag. Er muss einen Helfer anschalten.
Den kann er in der Aktion wieder ausschalten.

Ich befürchte bei Wait und Schleifen immer, dass ich mich irgendwie blockiere. Die Eingangsbedingungen sind nicht mehr erfüllt und das Programm hängt immer noch im Wait oder ander herum, es schaltet plötzlich was und ich weiß nicht genau woher es kam. Deshalb versuche meist Warteschleifen etc. zu umgehen. Kann sein, dass das bei Homeassistant alles ganz toll funktioniert, habe ich aber leider noch keine Erfahrung mit.
Von jeder neuen Idee lerne ich nur. Von mir aus kann er gerne Deinen Vorschlag versuchen. Je nachdem, was für ihn einfacher ist.

Moin zusammen.

Erstmal vielen Dank für eure rege Beteiligung. Das freut mich sehr.

Alle Vorschläge machen Sinn (wenn ich sie richtig verstanden habe), und haben jeweils ihre Berechtigung.
Ich frage mich als Laie jetzt nur, wo der Unterschied liegt?

Ob ich einen Helfer bastel, der über 2500 Wh auf “on” springt und damit als trigger benutzt wird, oder ob ich einfach den “numeric_state” der Entität selbst für Dauer x abfrage kommt doch am Ende aufs Gleiche raus, oder?!

In meinem Fall handelt es sich ja sozusagen um eine “Tages Automatisierung”, und keine dauerhafte Automatisierung die selbstständig wiederkehrend ausgeführt werden soll. Sprich, wenn der Spüler voll gepackt ist und ich den Button drücke soll er im Verlauf des Tages das Geschirr spülen wenn genug PV Leistung da ist. Und wenn das innerhalb dieser 12 Stunden nicht der Fall sein sollte (was ab Herbst durchaus mal passieren kann) dann ist das halt so und ich schalte ihn Abends manuell ein, oder drücke den Button am nächste Morgen einfach nochmal für den nächsten Versuch…

Bitte nicht falsch verstehen, ich möchte nur vollständig begreifen, was gegen den 12 Stunden timeout spricht weil das für mich der einfachste Weg wäre und mir einen zusätzlichen Helfer sparen würde.

Vielen Dank für eure Beteiligung.
Gruß Paul

Der Helfer soll nicht bei über 2500 auf on springen. Das ist der Helfer, den du manuell auf on stellst. Eben halt ein input_boolean und kein input_button.

Es muss HA nur einmal neu starten o.ä., schon ist das “Warte auf” weg.

Also noch mal:
Lege dir statt des Button einen Schalter (input_boolean) an.

Dann die Automatisierung wie folgt:
Trigger: sensor über 2500
ODER input_boolean geht an

Bedingung: input_boolean ist on
UND Sensor über 2500

Aktion: Schalte input_boolean aus
und starte Geschirrspüler

Erklärung:
Entweder wenn der Schalter (input_boolean) von dir gedrückt wird oder wenn über 2500 wird ausgelöst … aber nur wenn der Schalter an ist und über 2500.
In der Aktion wird dann der Schalter fürs nächste Mal wieder ausgeschaltet und die Maschine gestartet.

Ich mache sämtliche PV Abfragen zeitgesteuert, dass diese alle 10 Minuten los laufen und dann verschiedene Bedingungen prüfen z.B. u.a. den PV Strom. Dann brauchst auch kein Helfer oder sonstiges.

Zusätzlich würde ich dir raten (um den WAF zu steigern) noch zu überlegen eine Zielzeit einzubauen, wann die Maschine spätestens fertig sein soll, falls mal nicht genügend Überschuss da ist (der winter kommt).

@maxe
Danke, das wäre ein valider Grund für den input_boolean statt dem input_button.
Hab noch nie einen input_boolean verwendet und werde mir das generell mal anschauen. Der Unterschied wäre also nur, dass der Schalter quasi solange an ist, bis die Automatisierung (oder ich selbst manuell) ihn wieder ausschalte, richtig?

@MelleD
Das ist auch clever. Und das löst quasi die von maxe angesprochene Problematik wenn die Automatisierung mal unterbrochen wird.
Aber wie sieht es bei dem Thema mit der Last für das System aus? Oder sind diese wiederkehrenden Abfragen so nichtig, dass es keine große Last verursacht?

Zum anderen Thema, das hab ich glaub ich in einem YT Video von Simon mal gesehen. Glaube, der hatte da auch eine Zielzeit mit drin…
→ beim Code mit dem timeout könnte man ja ziemlich easy einfach “continue_on_timeout: false” auf true setzen - dann würde der Spüler ja trotzdem nach spätestens 12 Stunden starten… Und damit wäre der WAF dann im grünen Bereich :laughing: :rofl:

Wenn 2-3 Automationen alle 10 Minuten laufen, die ein paar Bedingungen prüfen, was soll da Last erzeugen? Die blockieren ja nichts.
Meistens habe ich auch 2 Automationen. Eine die den Start regelt und eine wenn das Programm beendet wird, um Sachen wieder zurückzusetzen und z.B. Notification zu senden

Ich habe die Logik unabhängig von Home Connect oder einem System gebaut und klar für die Frau auch eine UI zum Einstellen + auch für das Programm usw.
Da kannst dich wirklich austoben :wink: