Hallo zusammen,
ich fahre meine Rollladen mit Doif Funktionen mit Sunset und Sunrise hoch und runter.
Wie ermittelt FHEM den Sonnen Auf bzw. Abgang?
In meiner fhem.cfg habe ich meine Koordinaten hinterlegt. Muss ich noch eine Funktion einbauen die Täglich den Sonnen Auf und Abgang abfrägt?
Gruß
Michael
Gib mal in die Kommandozeile {sunset()}
ein. Wenn der Wert Sinn macht, passt alles. Wenn das DOIF nicht tut, was es soll poste hier mal ein list des DOIFs
Ich habe gerade mal {sunset()} eingegeben und erhalte 21:12:14 zurück.
Wenn ich {sunrise()} eingebe erhalte ich 29:23:57, das sieht ein wenig komisch aus oder?
Mein kompletter Doif lautet:
## Wenn Rollladen geschlossen und Türe aufgemacht wird, Rollladen auf 50% hoch fahren
([KT_EG_FLUR_TUE] eq "open" and [RL_EG_FLUR_TUE] eq "down")
(set RL_EG_FLUR_TUE pct 50)
## Wenn Türe geschlossen wird und Rollladen oben ist soll zwischen 22:00 und 02:00 der Rollladen runtergefahren werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [RL_EG_FLUR_TUE] eq "up" and [?20:00-02:00])
(set RL_EG_FLUR_TUE down)
## Wenn Türe geschlossen wird und Rollladen auf 50% steht soll der Rollladen geschlossen werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [RL_EG_FLUR_TUE] eq "50")
(set RL_EG_FLUR_TUE down)
## Rollladen soll zum Sonnenaufgang hochgefahren werden
DOELSEIF ([{sunrise("REAL",0,"06:00","08:00")}])
(set RL_EG_FLUR_TUE up)
## Rollladen soll zum Sonnuntergang runtergefahren werden wenn die Türe geschlossen ist
DOELSEIF ([{sunset (0,"20:00","21:00")}] and [KT_EG_FLUR_TUE] eq "closed" and [RL_EG_FLUR_TUE] eq "up")
(set RL_EG_FLUR_TUE down)
Der Rollladen ist um 20:22:20 runtergefahren :-(
Gruß
Michael
Sunset/sunrise
Addieren 24 Stunden, wenn's am nächsten Tag ist, 5:23 sollte passen. Deine Rollläden sind runter gefahren, weil du die Türe zugemacht hast. Wenn das nur eine Abfrage und kein Trigger sein soll, muss ein ? vorne dran
Du meinst vermutlich die 24 Stunden abziehen oder? Wie kommt denn der falsche Wert zustande? ???
Stimmt der Code mit dem Abzug der 24 Stunden?
Die Türe wurde um 20:22 nicht zugemacht, Sie ist seit 14:00 zu ???
## Wenn Rollladen geschlossen und Türe aufgemacht wird, Rollladen auf 50% hoch fahren
([KT_EG_FLUR_TUE] eq "open" and [RL_EG_FLUR_TUE] eq "down")
(set RL_EG_FLUR_TUE pct 50)
## Wenn Türe geschlossen wird und Rollladen oben ist soll zwischen 22:00 und 02:00 der Rollladen runtergefahren werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [RL_EG_FLUR_TUE] eq "up" and [?20:00-02:00])
(set RL_EG_FLUR_TUE down)
## Wenn Türe geschlossen wird und Rollladen auf 50% steht soll der Rollladen geschlossen werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [RL_EG_FLUR_TUE] eq "50")
(set RL_EG_FLUR_TUE down)
## Rollladen soll zum Sonnenaufgang hochgefahren werden
DOELSEIF ([{sunrise("REAL",-86400,"06:00","08:00")}])
(set RL_EG_FLUR_TUE up)
## Rollladen soll zum Sonnuntergang runtergefahren werden wenn die Türe geschlossen ist
DOELSEIF ([{sunset (0,"20:00","21:00")}] and [KT_EG_FLUR_TUE] eq "closed" and [RL_EG_FLUR_TUE] eq "up")
(set RL_EG_FLUR_TUE down)
mach vielleicht mal ein "list" des DOIFs, dann sieht man mehr.
Was ich meinte:
DOELSEIF ([{sunset (0,"20:00","21:00")}] and [?KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "up")
KT_EG_FLUR_TUE und RL_EG_FLUR_TUE sollen nur überprüft werden und nicht triggern, oder?
Möglicherweise hat KT_EG_FLUR_TUE heute als die Rolläden runter sind, das erste event geschickt, das in das Zeitintervall fällt... Hat KT_EG_FLUR_TUE ein event-on-change-reading attribut?
So hier der List vom DOIFs
Internals:
DEF ## Wenn Rollladen geschlossen und Türe aufgemacht wird, Rollladen auf 50% hoch fahren
([KT_EG_FLUR_TUE] eq "open" and [RL_EG_FLUR_TUE] eq "down")
(set RL_EG_FLUR_TUE pct 50)
## Wenn Türe geschlossen wird und Rollladen oben ist soll zwischen 22:00 und 02:00 der Rollladen runtergefahren werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [RL_EG_FLUR_TUE] eq "up" and [?20:00-02:00])
(set RL_EG_FLUR_TUE down)
## Wenn Türe geschlossen wird und Rollladen auf 50% steht soll der Rollladen geschlossen werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [RL_EG_FLUR_TUE] eq "50")
(set RL_EG_FLUR_TUE down)
## Rollladen soll zum Sonnenaufgang hochgefahren werden
DOELSEIF ([{sunrise("REAL",0,"06:00","08:00")}])
(set RL_EG_FLUR_TUE up)
## Rollladen soll zum Sonnuntergang runtergefahren werden wenn die Türe geschlossen ist
DOELSEIF ([{sunset (0,"20:00","21:00")}] and [KT_EG_FLUR_TUE] eq "closed" and [RL_EG_FLUR_TUE] eq "up")
(set RL_EG_FLUR_TUE down)
NAME EG_FLUR_TUE
NR 77
NTFY_ORDER 50-EG_FLUR_TUE
STATE cmd_2
TYPE DOIF
Readings:
2017-05-01 21:23:23 Device KT_EG_FLUR_TUE
2017-05-01 20:22:20 cmd 2
2017-05-01 20:22:20 cmd_event RL_EG_FLUR_TUE
2017-05-01 20:22:20 cmd_nr 2
2017-05-01 21:23:23 e_KT_EG_FLUR_TUE_STATE closed
2017-05-01 20:23:02 e_RL_EG_FLUR_TUE_STATE down
2017-05-01 20:22:20 state cmd_2
2017-05-01 10:13:12 timer_01_c02 01.05.2017 20:00:00
2017-05-01 10:13:12 timer_02_c02 02.05.2017 02:00:00
2017-05-01 10:13:12 timer_03_c04 02.05.2017 06:05:12
2017-05-01 21:00:00 timer_04_c05 02.05.2017 21:00:00
Condition:
0 InternalDoIf($hash,'KT_EG_FLUR_TUE','STATE') eq "open" and InternalDoIf($hash,'RL_EG_FLUR_TUE','STATE') eq "down"
1 InternalDoIf($hash,'KT_EG_FLUR_TUE','STATE') eq "closed" and InternalDoIf($hash,'RL_EG_FLUR_TUE','STATE') eq "up" and DOIF_time($hash,0,1,$wday,$hms)
2 InternalDoIf($hash,'KT_EG_FLUR_TUE','STATE') eq "closed" and InternalDoIf($hash,'RL_EG_FLUR_TUE','STATE') eq "50"
3 DOIF_time_once($hash,2,$wday)
4 DOIF_time_once($hash,3,$wday) and InternalDoIf($hash,'KT_EG_FLUR_TUE','STATE') eq "closed" and InternalDoIf($hash,'RL_EG_FLUR_TUE','STATE') eq "up"
Days:
Devices:
0 KT_EG_FLUR_TUE RL_EG_FLUR_TUE
1 KT_EG_FLUR_TUE RL_EG_FLUR_TUE
2 KT_EG_FLUR_TUE RL_EG_FLUR_TUE
4 KT_EG_FLUR_TUE RL_EG_FLUR_TUE
all KT_EG_FLUR_TUE RL_EG_FLUR_TUE
Do:
0:
0 set RL_EG_FLUR_TUE pct 50
1:
0 set RL_EG_FLUR_TUE down
2:
0 set RL_EG_FLUR_TUE down
3:
0 set RL_EG_FLUR_TUE up
4:
0 set RL_EG_FLUR_TUE down
5:
Helper:
event Activity: alive
globalinit 1
last_timer 4
sleeptimer -1
timerdev RL_EG_FLUR_TUE
timerevent deviceMsg: up (to HMLAN1),level: 100,motor: down:up,pct: 100,up,timedOn: down
triggerDev KT_EG_FLUR_TUE
timerevents:
deviceMsg: up (to HMLAN1)
level: 100
motor: down:up
pct: 100
up
timedOn: down
set_off
timereventsState:
deviceMsg: up (to HMLAN1)
level: 100
motor: down:up
pct: 100
state: on
timedOn: down
triggerEvents:
Activity: alive
triggerEventsState:
Activity: alive
Internals:
0 KT_EG_FLUR_TUE:STATE RL_EG_FLUR_TUE:STATE
1 KT_EG_FLUR_TUE:STATE RL_EG_FLUR_TUE:STATE
2 KT_EG_FLUR_TUE:STATE RL_EG_FLUR_TUE:STATE
4 KT_EG_FLUR_TUE:STATE RL_EG_FLUR_TUE:STATE
all KT_EG_FLUR_TUE:STATE RL_EG_FLUR_TUE:STATE
Interval:
0 -1
1 0
Itimer:
Localtime:
0 1493661600
1 1493683200
2 1493697912
3 1493751600
Readings:
Realtime:
0 20:00:00
1 02:00:00
2 06:05:12
3 21:00:00
Regexp:
0:
1:
2:
3:
4:
All:
State:
State:
Time:
0 20:00:00
1 02:00:00
2 {sunrise("REAL",0,"06:00","08:00")}
3 {sunset(0,"20:00","21:00")}
Timecond:
0 1
1 1
2 3
3 4
Timer:
0 0
1 0
2 0
3 0
Timers:
3 2
4 3
Trigger:
Triggertime:
1493683200:
localtime 1493683200
Hash:
1493697912:
localtime 1493697912
Hash:
1493751600:
localtime 1493751600
Hash:
Attributes:
do always
Genau KT_EG_FLUR_TUE und RL_EG_FLUR_TUE sollen nur überprüft werden, dann setze ich mal das "?" davor.
Nein der KT_EG_FLUR_TUE hat kein event-on-change-reading attribut.
Hast Du das mit dem Abzug der 24 Stunden so gemeint:
([{sunrise("REAL",-86400,"06:00","08:00")}])
ok,
cmd_2 hat deine Rollläden zugemacht (also diese Zeile:
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [RL_EG_FLUR_TUE] eq "up" and [?20:00-02:00])
der Auslöser war RL_EG_FLUR_TUE, der "closed" gesendet hat. RL_EG_FLUR_TUE braucht ein
attr RL_EG_FLUR_TUE event-on-change-reading state
ggf. weitere readings, falls relevant.
sunset kümmert sich schon selbst um die 24h (d.h. sobald es nach Mitternacht ist, werden keine 24h mehr dazu addiert) Du solltest da also im DOIF nichts abziehen (nur gedanklich zum überprüfen - oder du nimmst sunset_abs).
Ok, ich habe jetzt das
attr RL_EG_FLUR_TUE event-on-change-reading state
gesetzt und mein DOIF entsprechend abgeändert:
## Wenn Rollladen geschlossen und Türe aufgemacht wird, Rollladen auf 50% hoch fahren
([KT_EG_FLUR_TUE] eq "open" and [?RL_EG_FLUR_TUE] eq "down")
(set RL_EG_FLUR_TUE pct 50)
## Wenn Türe geschlossen wird und Rollladen oben ist soll zwischen 22:00 und 02:00 der Rollladen runtergefahren werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "up" and [?20:00-02:00])
(set RL_EG_FLUR_TUE down)
## Wenn Türe geschlossen wird und Rollladen auf 50% steht soll der Rollladen geschlossen werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "50")
(set RL_EG_FLUR_TUE down)
## Rollladen soll zum Sonnenaufgang hochgefahren werden
DOELSEIF ([{sunrise(0,"06:00","06:30")}])
(set RL_EG_FLUR_TUE up)
## Rollladen soll zum Sonnuntergang runtergefahren werden wenn die Türe geschlossen ist
DOELSEIF ([{sunset (0,"20:00","21:00")}] and [?KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "up")
(set RL_EG_FLUR_TUE down)
Bin gespannt ob es funktioniert, Danke Dir schon mal !
Hallo,
nach dem ich das Reading:
attr RL_EG_FLUR_TUE event-on-change-reading state
gesetzt habe, funktioniert mein DOIF nicht mehr:
## Wenn Rollladen geschlossen und Türe aufgemacht wird, Rollladen auf 50% hoch fahren
([KT_EG_FLUR_TUE] eq "open" and [?RL_EG_FLUR_TUE] eq "down")
(set RL_EG_FLUR_TUE pct 50)
Ob der Rollladen heute abend runterfährt werde ich berichten.
Gruß
Michael
btw. https://fhem.de/commandref.html#SUNRISE_EL
sunrise()/sunset() returns the absolute time of the next sunrise/sunset, adding 24 hours if the next event is tomorrow, to use it in the timespec of an at device or for the on-till command for FS20 devices.
sunrise_rel()/sunset_rel() returns the relative time to the next sunrise/sunset.
sunrise_abs()/sunset_abs() return the absolute time of the corresponding event today (no 24 hours added).
sunrise_abs_dat()/sunset_abs_dat() return the absolute time of the corresponding event to a given date(no 24 hours added).
Hallo zusammen,
leider fährt mein Rollladen abends immer noch nicht so runter wie ich es möchte :-(
Heute ist er bereits um 20:13:36 anstatt um 21:00 Uhr runtergefahren. Sonnenuntergang wäre um 21:17:08.
Mein Doif lautet:
## Wenn Rollladen geschlossen und Türe aufgemacht wird, Rollladen auf 50% hoch fahren
([KT_EG_FLUR_TUE] eq "open" and [?RL_EG_FLUR_TUE] eq "down")
(set RL_EG_FLUR_TUE pct 50)
## Wenn Türe geschlossen wird und Rollladen oben ist soll zwischen 20:00 und 02:00 der Rollladen runtergefahren werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "up" and [?20:00-02:00])
(set RL_EG_FLUR_TUE down)
## Wenn Türe geschlossen wird und Rollladen auf 50% steht soll der Rollladen geschlossen werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "50")
(set RL_EG_FLUR_TUE down)
## Rollladen soll zum Sonnenaufgang hochgefahren werden
DOELSEIF ([{sunrise(0,"06:00","06:30")}])
(set RL_EG_FLUR_TUE up)
## Rollladen soll zum Sonnuntergang runtergefahren werden wenn die Türe geschlossen ist
DOELSEIF ([{sunset (0,"20:00","21:00")}] and [?KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "up")
(set RL_EG_FLUR_TUE down)
Hier mein List vom Doif:
Internals:
DEF ## Wenn Rollladen geschlossen und Türe aufgemacht wird, Rollladen auf 50% hoch fahren
([KT_EG_FLUR_TUE] eq "open" and [?RL_EG_FLUR_TUE] eq "down")
(set RL_EG_FLUR_TUE pct 50)
## Wenn Türe geschlossen wird und Rollladen oben ist soll zwischen 22:00 und 02:00 der Rollladen runtergefahren werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "up" and [?20:00-02:00])
(set RL_EG_FLUR_TUE down)
## Wenn Türe geschlossen wird und Rollladen auf 50% steht soll der Rollladen geschlossen werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "50")
(set RL_EG_FLUR_TUE down)
## Rollladen soll zum Sonnenaufgang hochgefahren werden
DOELSEIF ([{sunrise(0,"06:00","06:30")}])
(set RL_EG_FLUR_TUE up)
## Rollladen soll zum Sonnuntergang runtergefahren werden wenn die Türe geschlossen ist
DOELSEIF ([{sunset (0,"20:00","21:00")}] and [?KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "up")
(set RL_EG_FLUR_TUE down)
NAME EG_FLUR_TUE
NR 77
NTFY_ORDER 50-EG_FLUR_TUE
STATE cmd_2
TYPE DOIF
Readings:
2017-05-04 20:40:42 Device KT_EG_FLUR_TUE
2017-05-04 20:40:42 cmd 2
2017-05-04 20:40:42 cmd_event KT_EG_FLUR_TUE
2017-05-04 20:40:42 cmd_nr 2
2017-05-04 20:40:42 e_KT_EG_FLUR_TUE_STATE closed
2017-05-04 20:40:42 state cmd_2
2017-05-04 02:00:00 timer_01_c02 04.05.2017 20:00:00
2017-05-04 02:00:00 timer_02_c02 05.05.2017 02:00:00
2017-05-04 06:00:00 timer_03_c04 05.05.2017 06:00:00
2017-05-04 21:00:00 timer_04_c05 05.05.2017 21:00:00
Condition:
0 InternalDoIf($hash,'KT_EG_FLUR_TUE','STATE') eq "open" and InternalDoIf($hash,'RL_EG_FLUR_TUE','STATE') eq "down"
1 InternalDoIf($hash,'KT_EG_FLUR_TUE','STATE') eq "closed" and InternalDoIf($hash,'RL_EG_FLUR_TUE','STATE') eq "up" and DOIF_time($hash,0,1,$wday,$hms)
2 InternalDoIf($hash,'KT_EG_FLUR_TUE','STATE') eq "closed" and InternalDoIf($hash,'RL_EG_FLUR_TUE','STATE') eq "50"
3 DOIF_time_once($hash,2,$wday)
4 DOIF_time_once($hash,3,$wday) and InternalDoIf($hash,'KT_EG_FLUR_TUE','STATE') eq "closed" and InternalDoIf($hash,'RL_EG_FLUR_TUE','STATE') eq "up"
Days:
Devices:
0 KT_EG_FLUR_TUE
1 KT_EG_FLUR_TUE
2 KT_EG_FLUR_TUE
all KT_EG_FLUR_TUE
Do:
0:
0 set RL_EG_FLUR_TUE pct 50
1:
0 set RL_EG_FLUR_TUE down
2:
0 set RL_EG_FLUR_TUE down
3:
0 set RL_EG_FLUR_TUE up
4:
0 set RL_EG_FLUR_TUE down
5:
Helper:
event timer_4
globalinit 1
last_timer 4
sleeptimer -1
timerdev KT_EG_FLUR_TUE
timerevent battery: ok,contact: closed (to broadcast),closed,trigDst_broadcast: noConfig,trigger_cnt: 14
triggerDev
timerevents:
battery: ok
contact: closed (to broadcast)
closed
trigDst_broadcast: noConfig
trigger_cnt: 14
timereventsState:
battery: ok
contact: closed (to broadcast)
state: closed
trigDst_broadcast: noConfig
trigger_cnt: 14
triggerEvents:
timer_4
triggerEventsState:
battery: ok
contact: closed (to broadcast)
state: closed
trigDst_broadcast: noConfig
trigger_cnt: 14
Internals:
0 KT_EG_FLUR_TUE:STATE RL_EG_FLUR_TUE:STATE
1 KT_EG_FLUR_TUE:STATE RL_EG_FLUR_TUE:STATE
2 KT_EG_FLUR_TUE:STATE RL_EG_FLUR_TUE:STATE
4 KT_EG_FLUR_TUE:STATE RL_EG_FLUR_TUE:STATE
all KT_EG_FLUR_TUE:STATE RL_EG_FLUR_TUE:STATE
Interval:
0 -1
1 0
Itimer:
Localtime:
0 1493920800
1 1493942400
2 1493956800
3 1494010800
Readings:
Realtime:
0 20:00:00
1 02:00:00
2 06:00:00
3 21:00:00
Regexp:
0:
1:
2:
3:
4:
All:
State:
State:
Time:
0 20:00:00
1 02:00:00
2 {sunrise(0,"06:00","06:30")}
3 {sunset(0,"20:00","21:00")}
Timecond:
0 1
1 1
2 3
3 4
Timer:
0 0
1 0
2 0
3 0
Timers:
3 2
4 3
Trigger:
Triggertime:
1493942400:
localtime 1493942400
Hash:
1493956800:
localtime 1493956800
Hash:
1494010800:
localtime 1494010800
Hash:
Attributes:
do always
Nachdem ich wie KernSani geschrieben habe
attr RL_EG_FLUR_TUE event-on-change-reading state
eingefügt habe, fährt mein Rollladen nach dem öffnen zur Lüftung nicht mehr runter. Somit habe ich Event wieder entfernt.
Hat mir jemand eine Idee? Übersehe ich etwas?
Gruß
Michael
wenn ich es richtig verstehe, dann hat dieser "zweig" ausgelöst und dein rollo ist runtergefahren
## Wenn Türe geschlossen wird und Rollladen oben ist soll zwischen 20:00 und 02:00 der Rollladen runtergefahren werden
DOELSEIF ([KT_EG_FLUR_TUE] eq "closed" and [?RL_EG_FLUR_TUE] eq "up" and [?20:00-02:00])
(set RL_EG_FLUR_TUE down)
auszug aus deinem doif-list
Readings:
2017-05-04 20:40:42 Device KT_EG_FLUR_TUE
2017-05-04 20:40:42 cmd 2
2017-05-04 20:40:42 cmd_event KT_EG_FLUR_TUE
2017-05-04 20:40:42 cmd_nr 2
2017-05-04 20:40:42 e_KT_EG_FLUR_TUE_STATE closed
2017-05-04 20:40:42 state cmd_2
Die Türe wurde gestern zwischen 20:00 und 21:00 nicht geöffent und somit auch nicht geschlossen :-(
Ich weis nicht warum der Türkontakt einen closed geschickt hat.
Zitat von: michaelapp am 05 Mai 2017, 09:09:25
Die Türe wurde gestern zwischen 20:00 und 21:00 nicht geöffent und somit auch nicht geschlossen :-(
Ich weis nicht warum der Türkontakt einen closed geschickt hat.
[KT_EG_FLUR_TUE] eq "closed"
Bei dieser Abfrage wird getriggert, wenn KT_EG_FLUR_TUE irgend ein Event erzeugt z. B. battery ok
du hast mehrere Möglichkeiten:
[KT_EG_FLUR_TUE:state] eq "closed"
attr <dein DOIF-Modul> checkReadingEvent 1
siehe https://fhem.de/commandref_DE.html#DOIF_checkReadingEvent
oder nur auf das Ereignis triggern:
[KT_EG_FLUR_TUE:"closed"] and ...