ich habe gerade nen Knoten im Hirn und finde einfach keine Möglichkeit wie ich einzelne Aktionen abbrechen lassen kann wenn Sie nicht innerhalb einer Zeit erfüllt worden sind.
Das Szenario:
Ich habe verschiedene Gardena Bluetooth Ventile, welche durch die Smart Irrigation aktiviert werden wenn die Bewässerungszeit über 120Sekunden ist. Da diese jedoch von Zeit zu Zeit nicht erreichbar sind wird vorher geprüft ob diese da sind. Wenn nicht dann wird eine Schleife gesetzt das den ESP Proxy neustartet, dann 3 Minuten wartet. Bis das Ventil wieder verfügbar ist. und dann Bewässert. Ansonsten, also wenn das Ventil verfügbar ist wird sofort bewässert.
Nun zum Problem:
Durch die Schleife läuft das ja unendlich lang sollte sich das Ventil nicht mehr anmelden, Batterie leer oder warum auch immer… Deshalb möchte ich einen Timer von zb. 60 Minuten starten. Wenn in dieser Zeit das Ventil nicht wieder erreichbar ist, dann soll diese eine Aktionskette abgebrochen werden und er zur nächsten Aktion(nächstes Ventil) springen.
Das hier ist der Code für ein Ventil.
# Wenn die berechnete Zeit über 120s dann soll die nachfolgende Aktion ausgelöst werden.
if:
- condition: numeric_state
entity_id: sensor.smart_irrigation_zone2_rasen
above: 120
then:
# Wenn das Ventil aber nicht verfügbar ist dann erstelle eine Wiederholungsschleife ( starte den ESP Neu und warte 3 Minuten. Solange bis das Ventil wieder da ist)
- if:
- condition: state
entity_id: switch.gardena_rasen_2_offen
state: unavailable
then:
- repeat:
sequence:
- device_id: 7e47df87c7bcab40ad9eb5781667fb1e
domain: button
entity_id: 9d552b8aeba0640e0b91b88c83e1db7d
type: press
- delay:
hours: 0
minutes: 3
seconds: 0
milliseconds: 0
until:
- condition: or
conditions:
- condition: state
entity_id: switch.gardena_rasen_2_offen
state: "on"
- condition: state
entity_id: switch.gardena_rasen_2_offen
state: "off"
# Wenn das Ventil dann wieder da ist, starte das Skript das den Sekunden Wert der Integration in Minuten umrechnet und dieses dann in das Ventil zur Öffnung der Zeit schreibt.
- action: script.set_gardena_rasen_2_value_in_minutes
data: {}
# Warte sicherheitshalber 10 Sekunden bis der passende Bucket gelöscht wird.
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- action: smart_irrigation.reset_bucket
target:
entity_id: sensor.smart_irrigation_zone2_rasen
data: {}
# Um keine Ventile gleichzeitig zu öffnen wegen dem Wasserdruck warte bis sich der Zustand von On zu Off ändert. Aber maximal 1 Stunde, denn das ist die maximale Bewässerungszeit.
- wait_for_trigger:
- platform: state
entity_id:
- switch.gardena_rasen_2_offen
from: "on"
to: "off"
timeout:
hours: 1
minutes: 0
seconds: 0
milliseconds: 0
else:
# Wenn das Ventil aber sofort verfügbar war, starte sofort das Skript.
- action: script.set_gardena_rasen_2_value_in_minutes
data: {}
- delay:
hours: 0
minutes: 0
# Warte sicherheitshalber 10 Sekunden bis der passende Bucket gelöscht wird.
seconds: 10
milliseconds: 0
- action: smart_irrigation.reset_bucket
target:
entity_id: sensor.smart_irrigation_zone2_rasen
data: {}
# Um keine Ventile gleichzeitig zu öffnen wegen dem Wasserdruck warte bis sich der Zustand von On zu Off ändert. Aber maximal 1 Stunde, denn das ist die maximale Bewässerungszeit.
- wait_for_trigger:
- platform: state
entity_id:
- switch.gardena_rasen_2_offen
from: "on"
to: "off"
timeout:
hours: 1
minutes: 0
seconds: 0
milliseconds: 0
Trigger: Hier kannst du einen Zeitplan festlegen, wann die Automation regelmäßig überprüft werden soll.
Bedingung: Passe die Bedingung an, um zu prüfen, ob das Ventil tatsächlich geschlossen ist.
Aktion:
Das Ventil wird ausgeschaltet und wieder eingeschaltet.
Ein Zähler wird erhöht, um die Anzahl der Versuche zu verfolgen.
Solange der Zähler kleiner als 3 ist, wird die Schleife wiederholt.
Wichtige Anpassungen:
Entity-IDs: Ersetze binary_sensor.ventil_status und switch.ventil durch die korrekten Entity-IDs in deiner Home Assistant-Instanz.
Trigger: Wähle einen geeigneten Trigger aus (z.B. Zeitplan, Sensor, anderes Ereignis).
Bedingung: Passe die Bedingung an deine spezifische Situation an.
Zähler: Erstelle einen input_number-Entität namens ventil_reboot_counter, um die Anzahl der Versuche zu speichern.
Zusätzliche Überlegungen:
Fehlerbehandlung: Du könntest eine Nachricht in ein Logbuch schreiben oder eine Benachrichtigung senden, wenn der maximale Anzahl an Versuchen erreicht ist.
Fehlerursache: Versuche herauszufinden, warum das Ventil nicht reagiert. Möglicherweise gibt es ein anderes Problem, das behoben werden muss.
Optimierung: Du könntest die Wartezeit zwischen den Versuchen anpassen oder weitere Bedingungen hinzufügen.
Visualisierung:
Um einen besseren Überblick zu behalten, kannst du die Automation in der Home Assistant-Oberfläche visualisieren. Es gibt verschiedene Add-ons und Integrationen, die dies ermöglichen.
Hinweis:
Sicherheit: Stelle sicher, dass die Automation keine unerwünschten Nebeneffekte hat.
Testen: Teste die Automation gründlich, bevor du sie im produktiven Einsatz verwendest.
Mit dieser Automation hast du eine robuste Lösung, um dein Ventil automatisch neu zu starten, falls es Probleme gibt.
Möchtest du weitere Anpassungen oder Ergänzungen vornehmen?
Danke dir für deinen Tipp. Wenn ich den Code richtig verstehe, dann bezieht er sich auf den Bereich (rot markiert) diesen könnte ich dadurch ersetzen, dann wird nach dem festgelegten Counter der rote Part beendet, würde aber dann direkt darunter weitermachen, er müsste aber alles darunter liegende mit abbrechen, also der gesamte blaue Bereich müsste beendet werden. Ich muss also irgendwie davor, also zu Beginn des DANN etwas einbinden. Ich dachte ja an ein Oder (entweder Zeit läuft ab oder die Aktionskette wurde erfüllt) nur gibt es a kein Oder bei Aktionen sondern nur bei Bedingungen.
Ich werfe mal was relativ einfaches ins Renne.
Kauf Dir anständige Bewässrung-Ventile!
Auswahl als Aktion:
Option 1:
Wenn Ventil geschlossen, also nicht nicht verfügbar.
Dann Ventil öffnen.
Option 2:
Wenn Ventil nicht verfügbar und letze Änderung nicht älter als 60 min. Also das Ventil ist nicht länger als 60 min nicht verfügbar.
Dann ESP neu starten, 3 min warten und die Automatisierung neu starten.
Danke dir für deinen Code. Habe mit Options bisher noch nicht so gearbeitet da ich mit wenn dann sonst immer alles hinbekommen habe. Aber da das wohl etwas mächtiger ist sollte ich mich damit mal befassen.
Zu den Ventilen. Ja da mag es bestimmt besseres geben, nur habe ich an der Stelle keinen Strom deshalb sind es die 9V von Gardena geworden.
Dein Code sieht gut aus vielen Dank. Werd ich mir auch mal näher anschauen. Ich habe gegen Mitternacht tatsächlich noch nen Code zusammen bekommen der das auch bewirken soll. war eigentlich ganz simple, in die “Wiederholen bis Schleife” einfach ein zusätzliches Oder in die Bedingung mit rein. Manchmal sieht man den Wald vor lauter Bäumen einfach nicht.