Hallo zusammen,
lässt sich folgendes per DOIF realsisieren?
Eine Bedingung 3x prüfen und dabei zwischen jeder Prüfung 5 Minuten warten. Wenn die Bedingung nach der dritten Prüfung immer noch nicht zutrifft, dann etwas ausführen.
Danke,
Hulzer
Hallo,
würde es auch gehen, 15 Minuten lang konstant auf Änderung zu überwachen oder müssen es exakt 3 Überprüfungen mit jeweils 5 Minuten Wartezeit sein? Ich nehme an, dass du etwas ausführen möchtest, sobald eine Bedingung eine längere Zeit zutrifft und sich nicht geändert hat, oder?
Dazu könntest du das Attribut "wait" deiner DOIF Abfrage einfach auf 15 Minuten setzen. Somit wird die gewünscht Aktion ausgeführt, sobald deine Bedingung 15 Minuten (oder eine andere beliebige Zeit) am Stück ohne Änderung erfüllt war. Näheres dazu in der fhem commandref unter DOIF.
Gruß,
Martin
Hallo,
vielleicht war ich etwas zu ungenau ;-)
Voraussetzung
Schalter S
Aktor A
Bedingung für DOIF
S ändert sich
Schritt 1
Status von A hat bestimmen Wert?
ja--> nichts tun
nein -> Command C1 ausführen
5 Minuten warten
Schritt 2
Status von A hat bestimmen Wert?
ja--> nichts tun
nein -> Command C1 ausführen
5 Minuten warten
Schritt 3
Status von A hat bestimmen Wert?
ja--> nichts tun
nein -> Command C2 ausführen
beenden
Oder anders ausgedrückt:
Ich habe einen Schalter S und einen Gerätestatus G.
Wenn der Zustand von Schalter S ändert, soll geprüft werden ob sich auch der Gerätestatus G geändert hat. Wenn dies nach 5 Minuten nicht der Fall sein sollte, dann soll ein Command C1 ausgeführt werden und nochmal 5 Minuten gewartet werden. Dann soll nochmals geschaut werden, ob sich der Gerätestatus G geändert hat, wenn nicht, dann nochmal Command C1 ausführen und 5 Minuten warten.
Hat sich dann nach 5 Minuten der Gerätestatus G immer noch nicht geändet, dann Command C2 ausführen und nicht mehr weiter prüfen bis zu nächsten Zustandsänderung von Schalter S.
Danke
Schon etwas älter, aber da ich eh gerade mit DOIF übe:
define myDOIF DOIF ([A] eq "on")
DOELSEIF ([S] eq "off")
DOELSEIF ([S] eq "on" and [myDOIF] eq "Abhilfe2")(C2)
DOELSEIF ([S] eq "on" and [myDOIF] eq "Abhilfe1")(C1)
DOELSEIF ([S] eq "on")(C1)
attr myDOIF wait 0:0:300:300:5
attr myDOIF cmdState on|off|Alarm|Abhilfe2|Abhilfe1
Dem letzten Zweig habe ich mal 5s spendiert, damit A überhaupt eine Chance hat, auf S zu reagieren.
Nebenbei: cmdState ist (bis auf die Syntax :() ne feine Sache! Damit kann man DOIFs prima rekursiv verwenden.