Hauptmenü

Verständnisfrage zu DOIF

Begonnen von flaxig, 13 Juli 2015, 09:22:05

Vorheriges Thema - Nächstes Thema

flaxig

Hallo,

ich möchte gerne das Licht im Flur einschalten wenn ich nach hause komme, soweit so klar und nicht besonders schwer :)
Nun soll das Licht aber nur angehen, wenn es draussen dunkel ist, also Twilight-Wert mit einbauen.
DOIF soll aber nur auf den ROOMMATE-Wert triggern, nicht auf den Twilight-Wert, sprich wenn ich zu Hause bin
und es wird dunkel soll das Licht nicht angehen, sondern nur wenn ich nach Hause komme.

Mein DOIF habe ich folgendermassen definiert:

define frank_licht DOIF ([rr_Frank] eq "home" and [?LichtWetter:light] <= 3) (set HM_37DA82_Sw_02 on)


da ich in der Referenz gelesen habe:
Zitat
Zeitintervalle, Readings und Stati ohne Trigger

Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage.

Anwendungsbeispiel: Licht soll zwischen 06:00 und 10:00 angehen, getriggert wird nur durch den Taster nicht um 06:00 bzw. 10:00 Uhr

define di_motion DOIF ([?06:00-10:00] and [button])(set lamp on-for-timer 600)
attr di_motion do always

Habe ich das mit dem Fragezeichen irgendwie falsch verstanden?


odie13690

Zitat von: flaxig am 13 Juli 2015, 09:22:05
Hallo,

ich möchte gerne das Licht im Flur einschalten wenn ich nach hause komme, soweit so klar und nicht besonders schwer :)
Nun soll das Licht aber nur angehen, wenn es draussen dunkel ist, also Twilight-Wert mit einbauen.
DOIF soll aber nur auf den ROOMMATE-Wert triggern, nicht auf den Twilight-Wert, sprich wenn ich zu Hause bin
und es wird dunkel soll das Licht nicht angehen, sondern nur wenn ich nach Hause komme.

Mein DOIF habe ich folgendermassen definiert:

define frank_licht DOIF ([rr_Frank] eq "home" and [?LichtWetter:light] <= 3) (set HM_37DA82_Sw_02 on)


da ich in der Referenz gelesen habe:
Habe ich das mit dem Fragezeichen irgendwie falsch verstanden?

Soweit ich das verstanden habe, funktioniert das Fragezeichen an dieser Stelle nur bei Zeiten...

Vielleicht hilft eher dieser Teil der CommandRef weiter?
ZitatEreignissteuerung über Auswertung von Events

Eine Alternative zur Auswertung von Stati oder Readings ist das Auswerten von Ereignissen (Events) mit Hilfe von regulären Ausdrücken, wie beim notify. Eingeleitet wird die Angabe eines regulären Ausdrucks durch ein Fragezeichen. Die Syntax lautet: [<devicename>:?<regexp>]

Anwendungsbeispiel: wie oben, jedoch wird hier nur das Ereignis (welches im Eventmonitor erscheint) ausgewertet und nicht der Status von "remotecontrol" wie im vorherigen Beispiel

define di_garage DOIF ([remotecontrol:?on]) (set garage on) DOELSEIF ([remotecontrol] eq "off") (set garage off)

In diesem Beispiel wird nach dem Vorkommen von "on" innerhalb des Events gesucht. Falls "on" gefunden wird, wird der Ausdruck wahr und der DOIF-Fall wird ausgeführt, ansonsten wird der DOELSEIF-Fall ausgeführt. Die Auswertung von reinen Ereignissen bietet sich dann an, wenn ein Modul keinen Status oder Readings benutzt, die man abfragen kann, wie z. B. beim Modul "sequence". Die Angabe von regulären Ausdrücken kann recht komplex werden und würde die Aufzählung aller Möglichkeiten an dieser Stelle den Rahmen sprengen. Weitere Informationenen zu regulären Ausdrücken sollten in der Perl-Dokumentation nachgeschlagen werden. Die logische Verknüpfung "and" mehrerer Ereignisse ist nicht sinnvoll, da zu einem Zeitpunkt immer nur ein Ereignis zutreffen kann.

odie13690

Michi240281

Das müsste mit dem ? eigentlich funktionieren, zumindest funktioniert es bei mir in zahlreichen DOIFs.

Was ich mir vorstellen könnte: Dein Home-Status wird immer wieder getriggert.......schau da mal nach!
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

flurin

Versuchs mal so:


define frank_licht DOIF ([rr_Frank:?home] and [LichtWetter:light] <= 3) (set HM_37DA82_Sw_02 on)


Michi240281

Das ? muss aber an das Reading, was NICHT triggern soll......
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

flurin

Zitat von: Michi240281 am 13 Juli 2015, 12:57:25
Das ? muss aber an das Reading, was NICHT triggern soll......

Das Fragezeichen hat je nach Position verschiedene Eigenschaften. Siehe "DOIF:Ereignissteuerung über Auswertung von Events"

Selbst wenn "[LichtWetter:light] <= 3" triggert, wird der Befehl nur ausgeführt, wenn "[rr_Frank:?home]" wahr ist.




Virsacer

Zitat von: flaxig am 13 Juli 2015, 09:22:05
DOIF soll aber nur auf den ROOMMATE-Wert triggern, nicht auf den Twilight-Wert, sprich wenn ich zu Hause bin
und es wird dunkel soll das Licht nicht angehen, sondern nur wenn ich nach Hause komme.

Mein DOIF habe ich folgendermassen definiert:

define frank_licht DOIF ([rr_Frank] eq "home" and [?LichtWetter:light] <= 3) (set HM_37DA82_Sw_02 on)


Also dein DOIF stimmt...
...aber es funktioniert doch nicht so wie du erwartest, sonst hättest du nicht gefragt, oder?
Evtl. das "do" attribut nicht auf always gesetzt?
Ansonsten erzähl mal was passiert oder nicht passiert...

flaxig

Folgendes soll passieren:
Wenn ich nach Hause komme und es IST! draussen dunkel, soll das Licht angehen.
Das funktioniert auch!

Folgendes soll nicht passieren:
Wenn ich schon zu Hause bin, und es wir währenddessen dunkel geht das Licht an.
Aber auch das passiert.

Deswegen habe ich das Fragezeichen mit eingebaut, dass Lichtwetter nur abgefragt wird, wenn ein Trigger von Roommate kommt. (von "abset" nach "home")
Und Lichtwetter nicht als Trigger wirkt.

Virsacer

Ok, das kommt dann aber daher, dass Roommate den Status (mit dem gleichen Wert) aktualisiert.
In den DOIF-Readings kannst du ja auch sehen, was ausgelöst hat...

Evtl. reicht schon ein "event-on-change-reading" bei Roommate!?

flaxig

ZitatEvtl. reicht schon ein "event-on-change-reading" bei Roommate!?

Das hört sich vernünftig an, werde ich gleich heute Abend ausprobieren!

Waldgeist78

Hallo,

ich habe aktuell das gleiche Problem und komme zu keiner Lösung.
Ich möchte das das Licht nur angeht wenn der Schwellwert von "Twilight_weather" kleiner 22 ist und ich gerade nach Hause komme.
Wenn ich daheim bin soll er nichts machen.
Bis vor kurzem hat das auch fehlerfrei funktioniert, nur seit einem Fhem Update vor etwa 2 Wochen geht nicht mehr. Er schaltet auch das Licht wenn ich daheim bin.

Hat jemand eine Idee?

define heimkommen DOIF ([Bewohner:state] eq "home" and [?Twilight:twilight_weather] < 22.0)  (sleep 180;;set L_WZ_re rgb 96ff0d;;sleep 1;;set L_WZ_re on-for-timer 400;;set L_WZ_li rgb FF8A14 : pct 75)

Danke & Gruß Martin

CoolTux

Hallo Martin,

Baue Dein DOIF für den Roommate Ereignisbasiert um. Dann wird nur geschalten wenn es für den Roommate ein Ereignis/Event gibt.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net