Hauptmenü

DOIF Problem

Begonnen von Spartacus, 16 Dezember 2014, 21:31:00

Vorheriges Thema - Nächstes Thema

Spartacus

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)
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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


Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Wuppi68

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
FHEM unter Proxmox als VM

Spartacus

#6
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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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...
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

Damian,
ist das "sunrise-sunset" oder soll das ein sunrise "bis" sunset sein. Dann fehlen da noch die eckigen Klammern.
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

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".
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R