FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: flaxig am 13 Juli 2015, 09:22:05

Titel: Verständnisfrage zu DOIF
Beitrag 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:
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?

Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: odie13690 am 13 Juli 2015, 09:41:07
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
Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: Michi240281 am 13 Juli 2015, 10:42:57
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!
Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: flurin am 13 Juli 2015, 12:04:15
Versuchs mal so:


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

Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: Michi240281 am 13 Juli 2015, 12:57:25
Das ? muss aber an das Reading, was NICHT triggern soll......
Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: flurin am 13 Juli 2015, 13:22:46
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.



Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: Virsacer am 13 Juli 2015, 18:29:10
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...
Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: flaxig am 13 Juli 2015, 19:02:52
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.
Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: Virsacer am 13 Juli 2015, 19:12:26
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!?
Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: flaxig am 13 Juli 2015, 19:21:16
ZitatEvtl. reicht schon ein "event-on-change-reading" bei Roommate!?

Das hört sich vernünftig an, werde ich gleich heute Abend ausprobieren!
Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: Waldgeist78 am 19 April 2017, 21:58:22
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
Titel: Antw:Verständnisfrage zu DOIF
Beitrag von: CoolTux am 20 April 2017, 06:37:16
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.