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?
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
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!
Versuchs mal so:
define frank_licht DOIF ([rr_Frank:?home] and [LichtWetter:light] <= 3) (set HM_37DA82_Sw_02 on)
Das ? muss aber an das Reading, was NICHT triggern soll......
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.
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...
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.
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!?
ZitatEvtl. reicht schon ein "event-on-change-reading" bei Roommate!?
Das hört sich vernünftig an, werde ich gleich heute Abend ausprobieren!
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
Hallo Martin,
Baue Dein DOIF für den Roommate Ereignisbasiert (https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events) um. Dann wird nur geschalten wenn es für den Roommate ein Ereignis/Event gibt.