Hallo,
wollte mal eben schnell einen Test machen und habe jetzt ein Problem was ich nicht verstehe:
(
[{sunset(0,"HORIZON=-6")}-22:00|56] or
[{sunset(0,"HORIZON=-6")}-22:00] and [hl.01.Feiertag:tomorrow] ne "none" or
[21:24-21:26|01234] and [hl.01.Feiertag:tomorrow] eq "none") (set Switch on) DOELSE (set Switch off)
als Attribut habe ich wait 0:30 gesetzt.
Ich hätte jetzt erwartet, dass der Aktor nun mit 30sec. Verzögerung abschaltet. Macht er aber nicht, er hat exakt um 21:26 abgeschaltet.
Wo habe ich meinen Gedankenfehler?
Christian
NACHTRAG:
selbst Das funktioniert nicht mit dem wait-Attribut
([22:05-22:06]) (set EnO.switch.FFE88603 on)
DOELSE
(set EnO.switch.FFE88603 off)
Zitat von: Spartacus am 16 Dezember 2014, 21:31:00
Hallo,
wollte mal eben schnell einen Test machen und habe jetzt ein Problem was ich nicht verstehe:
(
[{sunset(0,"HORIZON=-6")}-22:00|56] or
[{sunset(0,"HORIZON=-6")}-22:00] and [hl.01.Feiertag:tomorrow] ne "none" or
[21:24-21:26|01234] and [hl.01.Feiertag:tomorrow] eq "none") (set Switch on) DOELSE (set Switch off)
als Attribut habe ich wait 0:30 gesetzt.
Ich hätte jetzt erwartet, dass der Aktor nun mit 30sec. Verzögerung abschaltet. Macht er aber nicht, er hat exakt um 21:26 abgeschaltet.
Wo habe ich meinen Gedankenfehler?
Christian
NACHTRAG:
selbst Das funktioniert nicht mit dem wait-Attribut
([22:05-22:06]) (set EnO.switch.FFE88603 on)
DOELSE
(set EnO.switch.FFE88603 off)
Auszug aus der commandref von DOIF: "Die Verzögerungen werden nur auf Events angewandt und nicht auf Zeitsteuerung.".
Den zeitlichen Offset muss die jeweilige Zeitfunktion leisten.
Gruß
Damian
Zitat von: Damian am 17 Dezember 2014, 09:39:27
Auszug aus der commandref von DOIF: "Die Verzögerungen werden nur auf Events angewandt und nicht auf Zeitsteuerung.".
Den zeitlichen Offset muss die jeweilige Zeitfunktion leisten.
Gruß
Damian
Hallo Damian,
das ist aber doof! Das habe ich glatt überlesen! Ich dachte ich könnte mich elegant aus folgender Situation retten:
"wenn zwischen SU und Abschaltzeit weniger als 30min liegen, schalte den Aktor nicht ein...."
Du hattest mal eine Lösung mit Twilight vorgeschlagen, aber das kann ich nicht nutzen, da Twilight keine offsets im sunset verarbeitet und ich benötige für einen anderen Fall unbedingt ein Event 60s vor dem sunset! Da Sunset und Twilight unterschiedliche Werte berechnen, kann ich es auch nicht kombinieren!
Dann muss ich mal überlegen, wie ich dieses Problem am Besten löse...
Danke
Christian
Zitat von: Spartacus am 17 Dezember 2014, 15:30:39
Hallo Damian,
das ist aber doof! Das habe ich glatt überlesen! Ich dachte ich könnte mich elegant aus folgender Situation retten:
"wenn zwischen SU und Abschaltzeit weniger als 30min liegen, schalte den Aktor nicht ein...."
Du hattest mal eine Lösung mit Twilight vorgeschlagen, aber das kann ich nicht nutzen, da Twilight keine offsets im sunset verarbeitet und ich benötige für einen anderen Fall unbedingt ein Event 60s vor dem sunset! Da Sunset und Twilight unterschiedliche Werte berechnen, kann ich es auch nicht kombinieren!
Dann muss ich mal überlegen, wie ich dieses Problem am Besten löse...
Danke
Christian
Du kannst doch durch die Horizont-Angabe früher etwas auslösen und dann mit at etwas zeitverzögert schalten.
Gruß
Damian
Damian,
vielen Dank für Deine Geduld. Ich glaube , ich habe meine Anforderung noch nicht deutlich rüberbringen können. HORIZON hilft m.E. nicht weiter...(kann aber auch sein, das ich nicht kappiert habe, was du meinst!)
Die Beleuchtung soll von Sonnenuntergang bis z.B. 22:00 Uhr laufen, aber mind. 30min an sein.
Wenn SU =21:30, dann würde der Aktor einschalten.
Wenn SU =21:31, dann passiert nichts.
Die Idee war, die Ausschaltzeit auf 21:30 zu setzten und mit wait um 30min zu verzögern..
Für die o.a. Anwendung würde das so aussehen.
SU=21:29, Aktor schaltet ein, und um 21:30 beginnt der Nachlauftimer. Dann ist um 22:00 Uhr das Licht aus. Somit wäre die Anforderung erfüllt.
Man könnte das auch irgendwie so lösen:
define di.01.GA.ss.SA.Licht DOIF (\
([16:30-22:30|56] or\
[16:30-22:30] and [hl.01.Feiertag:tomorrow] ne "none" or\
[16:30-21:30|01234] and [hl.01.Feiertag:tomorrow] eq "none" or\
[16:30-02:00] and [hl.01.Feiertag:state] eq "Silverster" \
) and [Tageslicht] eq "dunkel") (set GA.ss.SA.Licht on) DOELSE (set GA.ss.SA.Licht off)
attr di.01.GA.ss.SA.Licht alias autom. Gartenlicht
attr di.01.GA.ss.SA.Licht cmdState on|off
attr di.01.GA.ss.SA.Licht devStateIcon .*on:light_light_dim_100@lightgreen .*off:light_light_dim_00@red
attr di.01.GA.ss.SA.Licht group Scripte
attr di.01.GA.ss.SA.Licht room 05-Garten
attr di.01.GA.ss.SA.Licht wait 0:1800
Tageslicht ist ein dummy und wird über Sunset auf "dunkel" bzw. durch sunrise auf "hell" gesetzt. Das Problem was ich dann aber habe ist, dass nicht eingeschaltet wird, wenn "dunkel" erst nach der Einschaltzeit [16:30] zutrifft. Wenn man das hinkriegt, wäre alles gut!
Christian
Zitat von: Spartacus am 17 Dezember 2014, 22:38:05
Die Beleuchtung soll von Sonnenuntergang bis z.B. 22:00 Uhr laufen, aber mind. 30min an sein.
Wenn SU =21:30, dann würde der Aktor einschalten.
Wenn SU =21:31, dann passiert nichts.
define Licht AT *Sonnenuntergang if Endezeit - aktuelle Zeit >30 Minuten then set Lichtaktor on-til Endezeit
sollte eigentlich ausreichen
Hallo zusammen,
ich denke, das DOIF ist schon der richtige Weg!
@ Wuppi68,
danke für Deinen Tipp! Da ich auch Schaltzeiten nach 0:00 Uhr habe wird es schwierig mit der o.a. Formel
Wenn das Tageslicht-Dummy ein Event beim Wechsel von hell->dunkel;dunkel->hellauslösen würde, auf das getriggert werden könnte, wäre ja alles gut!
Christian.
NACHTRAG:
Geht doch! Hier meine Lösung. Durch das "event-on-change" wird der Trigger für "dunkel" ausgelöst und der Aktor schaltet, wenn es nach 16:30 dunkel wird.
define SA at *{sunrise(0,"HORIZON=-6")} set Tageslicht hell
attr SA alias Sonnenaufgang
attr SA group Scripte
attr SA room 99-Dienste
#
define SU at *{sunset(0,"HORIZON=-6")} set Tageslicht dunkel
attr SU alias Sonnenuntergang
attr SU group Scripte
attr SU room 99-Dienste
#
define Tageslicht dummy
attr Tageslicht event-on-change-reading state
attr Tageslicht room 98-Dummy
#
define di.01.GA.ss.SA.Licht DOIF (\
([16:30-22:30|56] or\
[16:30-22:30] and [hl.01.Feiertag:tomorrow] ne "none" or\
[16:30-21:30|01234] and [hl.01.Feiertag:tomorrow] eq "none" or\
[16:30-02:00] and [hl.01.Feiertag:state] eq "Silverster" \
) and [Tageslicht] eq "dunkel") (set GA.ss.SA.Licht on) DOELSE (set GA.ss.SA.Licht off)
attr di.01.GA.ss.SA.Licht alias autom. Gartenlicht
attr di.01.GA.ss.SA.Licht cmdState on|off
attr di.01.GA.ss.SA.Licht devStateIcon .*on:light_light_dim_100@lightgreen .*off:light_light_dim_00@red
attr di.01.GA.ss.SA.Licht group Scripte
attr di.01.GA.ss.SA.Licht room 05-Garten
Zitat von: Spartacus am 19 Dezember 2014, 13:11:32
Hallo zusammen,
ich denke, das DOIF ist schon der richtige Weg!
@ Wuppi68,
danke für Deinen Tipp! Da ich auch Schaltzeiten nach 0:00 Uhr habe wird es schwierig mit der o.a. Formel
Wenn das Tageslicht-Dummy ein Event beim Wechsel von hell->dunkel;dunkel->hellauslösen würde, auf das getriggert werden könnte, wäre ja alles gut!
Christian.
NACHTRAG:
Geht doch! Hier meine Lösung. Durch das "event-on-change" wird der Trigger für "dunkel" ausgelöst und der Aktor schaltet, wenn es nach 16:30 dunkel wird.
define SA at *{sunrise(0,"HORIZON=-6")} set Tageslicht hell
attr SA alias Sonnenaufgang
attr SA group Scripte
attr SA room 99-Dienste
#
define SU at *{sunset(0,"HORIZON=-6")} set Tageslicht dunkel
attr SU alias Sonnenuntergang
attr SU group Scripte
attr SU room 99-Dienste
#
define Tageslicht dummy
attr Tageslicht event-on-change-reading state
attr Tageslicht room 98-Dummy
#
define di.01.GA.ss.SA.Licht DOIF (\
([16:30-22:30|56] or\
[16:30-22:30] and [hl.01.Feiertag:tomorrow] ne "none" or\
[16:30-21:30|01234] and [hl.01.Feiertag:tomorrow] eq "none" or\
[16:30-02:00] and [hl.01.Feiertag:state] eq "Silverster" \
) and [Tageslicht] eq "dunkel") (set GA.ss.SA.Licht on) DOELSE (set GA.ss.SA.Licht off)
attr di.01.GA.ss.SA.Licht alias autom. Gartenlicht
attr di.01.GA.ss.SA.Licht cmdState on|off
attr di.01.GA.ss.SA.Licht devStateIcon .*on:light_light_dim_100@lightgreen .*off:light_light_dim_00@red
attr di.01.GA.ss.SA.Licht group Scripte
attr di.01.GA.ss.SA.Licht room 05-Garten
Das ist aber nichts anderes als, wenn du in deinem DOIF
statt:
... and [Tageslicht] eq "dunkel") (set ...
angibst:
... and [{sunset(0,"HORIZON=-6")-{sunrise(0,"HORIZON=-6")}]) (set ...
dann kannst du dir die ats und den dummy sparen.
Gruß
Damian
Zitat von: Damian am 19 Dezember 2014, 16:20:14
Das ist aber nichts anderes als, wenn du in deinem DOIF
statt:
... and [Tageslicht] eq "dunkel") (set ...
angibst:
... and [{sunset(0,"HORIZON=-6")-{sunrise(0,"HORIZON=-6")}]) (set ...
dann kannst du dir die ats und den dummy sparen.
Gruß
Damian
Hallo,
da hast Du natürlich auch wieder recht! Aber vielleicht hat mein Dummy doch nen Vorteil :)!
Ich kann es für mehrere DOIFs benutzen und es wird nur 1x berechnet....auf jeden Fall funzt es nun
Vielen Dank,
Christian
P.S.
Vielleicht hast Du noch ne Idee: Ich kriege das userReading einfach nicht gesetzt. Liegt das wirklich an den Punkten im Namen?
define ss.01.Tageslicht at *{sunset_abs("HORIZON=-4",0)} set Tageslicht dunkel
attr ss.01.Tageslicht alias Sonnenuntergang
attr ss.01.Tageslicht comment Sonnenuntergang, bürgerlich 0 bis -6 Grad
attr ss.01.Tageslicht group Scripte
attr ss.01.Tageslicht room 99-Dienste
attr ss.01.Tageslicht userReadings SU {sunset_abs ("HORIZON=-4,0")}
Hintergrund ist, dass ich den Sonnenuntergang in einer readingsGroup anzeigen möchte. Und dafür brauche ich das Reading...
Zitat von: Spartacus am 19 Dezember 2014, 18:32:11
Hallo,
da hast Du natürlich auch wieder recht! Aber vielleicht hat mein Dummy doch nen Vorteil :)!
Ich kann es für mehrere DOIFs benutzen und es wird nur 1x berechnet....auf jeden Fall funzt es nun
Vielen Dank,
Christian
Selbst das kannst du einfacher haben:
define Tageslicht DOIF ([{sunrise(0,"HORIZON=-6")}-{sunset(0,"HORIZON=-6")])
attr Tageslicht cmdState hell|dunkel
nur mit einer zusätzlichen Definition statt drei.
UserReadings benutze ich nicht, daher müssen andere helfen.
Gruß
Damian
Zitat von: Damian am 19 Dezember 2014, 22:21:55
Selbst das kannst du einfacher haben:
define Tageslicht DOIF ([{sunrise(0,"HORIZON=-6")}-{sunset(0,"HORIZON=-6")])
attr Tageslicht cmdState hell|dunkel
nur mit einer zusätzlichen Definition statt drei.
UserReadings benutze ich nicht, daher müssen andere helfen.
Gruß
Damian
Hallo Damian,
also der Code scheint nicht zu funktionieren. Die Klammer "}" bei sunset habe ich schon ergänzt und er Offset kommt nach dem HORIZON.
define di.01.Tageslicht DOIF ([{sunrise("HORIZON=-6",600)}-{sunset("HORIZON=-6,600")}])
attr di.01.Tageslicht alias Tageslicht
attr di.01.Tageslicht cmdState hell|dunkel
Zitat von: Spartacus am 20 Dezember 2014, 17:18:47
Hallo Damian,
also der Code scheint nicht zu funktionieren. Die Klammer "}" bei sunset habe ich schon ergänzt und er Offset kommt nach dem HORIZON.
define di.01.Tageslicht DOIF ([{sunrise("HORIZON=-6",600)}-{sunset("HORIZON=-6,600")}])
attr di.01.Tageslicht alias Tageslicht
attr di.01.Tageslicht cmdState hell|dunkel
Bei mir funktioniert die obige Definition. Der Status wird allerdings zum ersten Mal erst morgen gesetzt.
Gruß
Damian
Damian,
ist das "sunrise-sunset" oder soll das ein sunrise "bis" sunset sein. Dann fehlen da noch die eckigen Klammern.
Christian
Zitat von: Spartacus am 20 Dezember 2014, 17:35:54
Damian,
ist das "sunrise-sunset" oder soll das ein sunrise "bis" sunset sein. Dann fehlen da noch die eckigen Klammern.
Christian
Es ist ein Intervall [von-bis], wobei sunrise "von" ist und sunset "bis".
Hi,
ja danke! Habe es jetzt auch erkannt! Stehen ja die Zeiten von morgen schon drin..
D.h. Morgen um 07:57:21 wird auf "hell" geschaltet.
Wichtig ist nur, dass hier ein Event generiert wird, um das "Gartenlicht-DOIF" zu triggern (natürlich erst um 16:48).
Internals:
CFGFN config/99-Dienste.cfg
DEF ([{sunrise("HORIZON=-4",0)}-{sunset("HORIZON=-4,0")}])
NAME di.01.Tageslicht
NR 50
NTFY_ORDER 50-di.01.Tageslicht
STATE initialized
TYPE DOIF
Readings:
2014-12-20 17:40:07 state initialized
2014-12-20 17:40:07 timer_1_c1 21.12.2014 07:57:21
2014-12-20 17:40:07 timer_2_c1 21.12.2014 16:48:53
Condition:
0 DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
Days:
Devices:
Do:
0
Helper:
last_timer 2
sleeptimer -1
Realtime:
0 07:57:21
1 16:48:53
State:
Time:
0 {sunrise("HORIZON=-4",0)}
1 {sunset("HORIZON=-4,0")}
Timecond:
0 0
1 0
Timer:
0 0
1 0
Timerfunc:
Timers:
0 0 1
Attributes:
alias Tageslicht
cmdState hell|dunkel
comment Sonnenauf-/untergang, bürgerlich 0 bis -6 Grad
group Scripte
room 99-Dienste
Christian
Damian,
Ich habe noch eine Frage:
Das DOIF bleibt so lange auf initialisiert stehen, bis es dunkel oder hell wird. Das heisst, wenn ich in den Def Bereich gehe, dann muss ich warten, bis einer dieser Zustände eintrifft, richtig?
Kann man den Zustand nicht im State-File vorgeben?
Christian