DOIF - Mehrere Prüfung hintereinander mit Pause

Begonnen von hulzer, 15 April 2015, 14:49:42

Vorheriges Thema - Nächstes Thema

hulzer

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

Mathea

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

hulzer

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

Per

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.