Hallo zusammen,
ich versuche mich mal wieder an einen DOIF (scheint einfach zu mächtig für mich zu sein).
([{sunset(-3600)}] and [rr_location_tania] eq "home") (set Weihnachten_Tania on) DOELSEIF ([23:00]) (set Weihnachten_Tania off) DOELSEIF ([05:00] and [rr_location_tania] eq "home") (set Weihnachten_Tania on) DOELSEIF ([09:00]) (set Weihnachten_Tania off)
schaltet halt leider nicht wie es soll und bleibt im cmd4 :-( habe ich da ein attr vergessen ?
Internals:
DEF ([{sunset(-3600)}] and [rr_location_tania] eq "home") (set Weihnachten_Tania on) DOELSEIF ([23:00]) (set Weihnachten_Tania off) DOELSEIF ([05:00] and [rr_location_tania] eq "home") (set Weihnachten_Tania on) DOELSEIF ([09:00]) (set Weihnachten_Tania off)
NAME Weihnachten_Tania_doif
NR 487
NTFY_ORDER 50-Weihnachten_Tania_doif
STATE cmd_4
TYPE DOIF
Readings:
2015-12-04 20:14:51 Device rr_location_tania
2015-12-04 09:00:01 cmd_event timer_4
2015-12-04 09:00:01 cmd_nr 4
2015-12-04 20:14:51 e_rr_location_tania_STATE home
2015-12-04 09:00:01 state cmd_4
2015-12-04 15:35:35 timer_1_c1 05.12.2015 15:35:10
2015-12-03 23:00:00 timer_2_c2 04.12.2015 23:00:00
2015-12-04 05:00:00 timer_3_c3 05.12.2015 05:00:00
2015-12-04 09:00:01 timer_4_c4 05.12.2015 09:00:00
Condition:
0 DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and InternalDoIf('rr_location_tania','STATE','') eq "home"
1 DOIF_time_once($hash,$hash->{timer}{1},$wday,"")
2 DOIF_time_once($hash,$hash->{timer}{2},$wday,"") and InternalDoIf('rr_location_tania','STATE','') eq "home"
3 DOIF_time_once($hash,$hash->{timer}{3},$wday,"")
Days:
Devices:
0 rr_location_tania
2 rr_location_tania
all rr_location_tania
Do:
0:
0 set Weihnachten_Tania on
1:
0 set Weihnachten_Tania off
2:
0 set Weihnachten_Tania on
3:
0 set Weihnachten_Tania off
4:
Helper:
globalinit 1
last_timer 4
sleeptimer -1
Internals:
0 rr_location_tania:STATE
2 rr_location_tania:STATE
all rr_location_tania:STATE
Itimer:
Readings:
Realtime:
0 15:35:10
1 23:00:00
2 05:00:00
3 09:00:00
State:
Time:
0 {sunset(-3600)}
1 23:00:00
2 05:00:00
3 09:00:00
Timecond:
0 0
1 1
2 2
3 3
Timer:
0 0
1 0
2 0
3 0
Timerfunc:
Timers:
0 0
1 1
2 2
3 3
Trigger:
Attributes:
room Tania
hi,
ich hab dein DOIF mal ein bisschen "übersichtlicher" gestaltet:
(([{sunset(-3600)}] or [05:00]) and [rr_location_tania] eq "home") (set Weihnachten_Tania on)
DOELSEIF ([23:00] or [09:00]) (set Weihnachten_Tania off)
Sumit wird Weihnachten_Tania um 5h und eine Stunde von Sonenuntergang eingeschaltet, wenn Tanja zuhause ist. Ist sie zu diesem Zeitpunkt oder später nicht zuhause, dann bleibt das Device aus.
umd 23 bzw. 9 Uhr wird das Device wieder ausgeschaltet.
Ich vermute, dass du erreichen möchtest, dass die Beleuchtung angeschaltet wird, wenn Tanja zwischen 5 und 9 Uhr bzw. eine Stunde vor Sonnenuntergang und 23h zuhause ist?! Du fragst den Zustand nur zu einem Bestimmten Zeitpunkt und nicht zu einem Bereich ab.
Wenn ich richtig vermutet habe, dann muss dein DOIF so aussehen:
(([{sunset(-3600)}-22:59] or [05:00-8:59]) and [rr_location_tania] eq "home") (set Weihnachten_Tania on)
DOELSEIF ([23:00] or [09:00]) (set Weihnachten_Tania off)
Hallo l2r,
vielen Dank, da hast Du mir mal wieder aus einer Denkpatsche geholfen. An die Möglichkeit der Zeitbereiche hatte ich nicht gedacht. Der Fall würde jetzt aber kein "weggehen" während der Einschaltzeit berücksichtigen, oder ?
Gruß
Micha
Das erreichst durch ein weiteres or in der doelseif Bedingung:
Einfach or [rr_location_tania] ne "home"
hinzufügen
Gruß Michael
Hallo Michael,
ne steht dann für nicht home ? Und der code wäre dann (([{sunset(-3600)}-22:59] or [05:00-8:59]) and [rr_location_tania] eq "home") (set Weihnachten_Tania on) DOELSEIF ([23:00] or [09:00]) or [rr_Tania_location] ne "hone" (set Weihnachten_Tania off)
Wenn Sie dann im Zeitfenster zurückkommt, geht ja das doif wieder von vorne los.
Gruß
Micha
Jo
Jetzt musst du die Klammer nicht nach [09:00] sondern nach der hinzugefügten Bedingung schließen und meine Schreibfehler anpassen hone -> home
Gruß Michael
Die erste Fall wird aber nur aufgerufen wenn in der Zwischenzeit cmd_2 ausgeführt wurde, da sich sonst für das doif nix ändert, sollte bei dir aber so passen.
Für andere Fälle kann man sonst das Attribut do auf always setzen, dann wird immer ausgelöst, wenn die Bedingung wahr ist, egal ob die gleiche Bedingungen davor wahr war oder nicht. Das erzeugt in deinem Fall aber viele ausklingen, da du ja einen Bereich verwendest
Hallo,
wenn ich darf, würde ich mich gerne mit einem ähnlichem Problem hier einklinken.
([{sunset("HORIZON=-1",0,"15:00","22:30")}] and [whg.jemand.dum] eq "on") (set ambiente.struc on) DOELSEIF ([{sunset("HORIZON=-1",10,"15:00","22:30")}] and ([handy.struc] eq "present" or isZuhause() == 1)) (set ambiente.struc on)
Zur Erklärung:
Es soll im ersten folgendes passieren: Wenn jemand nach Hause kommt, wird whg.jemand.dum auf on geschaltet, sollte das nach Sonnenuntergang zwischen 15:00 und 22:30 Uhr passieren, soll die ambiente.struc geschaltet werden.
im zweiten: wenn die handy.struc auf present steht, oder die Variable isZuhause auf 1 und dann der Sonnenuntergang eintritt, dann soll ambiente.struc geschaltet werden.
Ich bin mir eben nicht sicher, beim ersten Teil. Zumindest funktioniert er momentan nicht ;-)
gruß Marc
wenn ich das beim ersten überfliegen richtig sehe, dann hast du ein ähnliches Problem, wie oben im Thread...
Du fragst einen bestimmten Zeitpunkt ab und keinen Zeitraum.
die Sunset-Funktion gibt nach meinem Verständnis einen sunset-Zeitpunkt aus, sofern dieser zwischen 15 und 22:30 liegt. somit hast du einen Zeitpunkt
Versuch mal
[{sunset("HORIZON=-1",0,"15:00","22:30")}-22:30]
somit gehst du von deinem Zeitpunkt des Sonnenuntergangs, der zwischen 15 und 22:30 liegt, bis 22:30 .
Ich hoffe das war verständlich.
P.S.: wenn du den Code {sunset("HORIZON=-1",0,"15:00","22:30")}
oben in die Command-Zeile eingibst, dann erhälst du ja auch nur einen Zeitangabe und keinen Bereich
Zitat von: l2r am 08 Dezember 2015, 18:10:30
wenn ich das beim ersten überfliegen richtig sehe, dann hast du ein ähnliches Problem, wie oben im Thread...
Du fragst einen bestimmten Zeitpunkt ab und keinen Zeitraum.
die Sunset-Funktion gibt nach meinem Verständnis einen sunset-Zeitpunkt aus, sofern dieser zwischen 15 und 22:30 liegt. somit hast du einen Zeitpunkt
Versuch mal
[{sunset("HORIZON=-1",0,"15:00","22:30")}-22:30]
somit gehst du von deinem Zeitpunkt des Sonnenuntergangs, der zwischen 15 und 22:30 liegt, bis 22:30 .
Ich hoffe das war verständlich.
P.S.: wenn du den Code {sunset("HORIZON=-1",0,"15:00","22:30")}
oben in die Command-Zeile eingibst, dann erhälst du ja auch nur einen Zeitangabe und keinen Bereich
Jepp, klingt logisch und ist im nachhinein betrachtet auch klar .....
Beim testen, habe ich dann direkt ein anderes Problem noch erkannt und zwar, das es einen unterschied zwischen Internals State und Readings State gibt. Lag bei mir daran, das bei dem dummy noch ein eventMap mit /on:da/off:weg/ definiert war und ich ja "on" abgefragt habe vom Reading, aber auf das "da" gehen musste.
Aber ich danke dir trotzdem für den Denkanstoss.
gruß Marc
Hallo Michael,
hab es erstmal verkürzt auf:
(([{sunset(-3600)}-22:59] or [05:00-8:59]) and [rr_location_tania] eq "home") (set Weihnachten_Tania on) DOELSEIF ([23:00] or [09:00]) (set Weihnachten_Tania off)
komm nicht hin mit dem or [rr_Tania_location] ne "home"
wo ich jetzt die Klammer auf / zu machen muss.
Gruß
Micha
(
(
[lw12.tv] eq "on"
or [hm.dim.1] != "off"
or [hm.dim.2.sw] != "off"
)
and [Bewohner] eq "home"
)
(set hm.steckdose.1 on)
DOELSE
(set hm.steckdose.1 off)
Snippet aus dem DEF Teil des DOIFs
das ist meine Weihnachtsbeleuchtung, sobald Licht an ist UND ich zu Hause bin geht die Steckdose an :-)
hi,
wenn ich jetzt nicht auf die schnelle was durcheinander werfe, dann müsste das bei dir so aussehen:
(([{sunset(-3600)}-22:59] or [05:00-8:59]) and [rr_location_tania] eq "home") (set Weihnachten_Tania on)
DOELSEIF ([23:00] or [09:00] or [rr_Tania_location] ne "home") (set Weihnachten_Tania off)
P.S.: ich hab mir angewöhnt jedes neue DOELSEIF zumindest in eine neue Zeile zu schreiben. Das erhöht die Lesbarkeit ungemein ;)
Gruß Michael
und wo wir grade bei Erleichterungen sind, ist mir folgender Thread aufgefallen:
http://forum.fhem.de/index.php?topic=45373.0 (http://forum.fhem.de/index.php?topic=45373.0)