DOIF mit mehreren DO-Blöcken scheitert

Begonnen von sk001, 09 August 2024, 17:16:59

Vorheriges Thema - Nächstes Thema

sk001

Hallo zusammen!
Ich habe ein DOIF mit mehreren DOIF/DOIFELSE-Bedingungen:

DOIF ([[du_BewaesserungZeitpunkt2]] and [?du_Bewaesserung_Aktiv] eq "on" and [?du_BewaesserungAktiv_Vorne] eq "on")
(set Garten.Bewaesserung.Ventil1_ToepfeVorne on-for-timer {([du_DauerBewaesserungVorne]*60)},{Log 1, ("Bewässerung vorne aktiv...")})
DOELSEIF ([[du_BewaesserungZeitpunkt2]] and [?du_Bewaesserung_Aktiv] eq "on" and [?du_BewaesserungAktiv_Hinten] eq "on")
(set Garten.Bewaesserung.Ventil3_ToepfeHinten on-for-timer {([du_DauerBewaesserungHinten]*60)},{Log 1, ("Bewässerung hinten aktiv...")})

In dieser Umsetzung wird leider immer nur der DOIF-Teil ausgeführt obwohl ich das Attribut "wait 0:130" mitgebe und der DOELSEIF-Teil dann also 130s nach dem DOIF-Teil ausgeführt werden soll (so habe ich die Doku zumindest verstanden). Zusätzlich habe ich "do always" gesetzt (ist das in diesem Fall überhaupt erforderlich?), aber der DOELSEIF-Teil wird nicht ausgeführt. Ich finde leider den Fehler nicht. Kann mir bitte jemand einen Hinweis geben, was ich falsch mache?

Danke!

Damian

Du hast die Doku falsch verstanden. Der DOELSEIF-Teil wird nicht automatisch nach 130 Sekunden ausgeführt, sondern 130 Sekunden nachdem die DOELSEIF-Bedingung durch einen Trigger wahr wurde.

Wenn zwei Teile zeitverzögern nacheinander ausgeführt werden sollen, dann haben sie gemeinsam nur eine Bedingung (hier also ohne DOELSEIF) und werden hintereinander geschrieben. Die wait-Angaben werden dann durch Komma getrennt, also 0,130
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

sk001

#2
Danke für die Erläuterung!
Ich habe das jetzt in zwei DOIF's verlagert. Das zweite DOIF wird dann so lange verzögert, bis das erste DOIF durchgelaufen ist und startet 10 Sekunden danach.

([([du_BewaesserungZeitpunkt2]+[du_DauerBewaesserungVorne]*60+10) ] and [?du_Bewaesserung_Aktiv] eq "on" and [?du_BewaesserungAktiv_Hinten] eq "on")
(set Garten.Bewaesserung.Ventil3_ToepfeHinten on-for-timer {([du_DauerBewaesserungHinten]*60)},{Log 1, ("Bewässerung hinten aktiv...")})

rabehd

Ich würde das in ein Device packen und das mit wait und einem IF für den zweiten Abschnitt (du_BewaesserungAktiv_Hinten] eq "on") machen.
Alternativ geht das auch in einem notify.
Auch funktionierende Lösungen kann man hinterfragen.