Hallo,
habe heute ein Problem mit diesem DOIF festgestellt. Ich könnte schwören, es hat mal funktioniert:
Internals:
CFGFN Config/05-Garten.cfg
DEF ([16:30-[help.01.GA.ss.SA.Licht.dum]] and
[help.Tageslicht.dum] eq "dunkel" and
[?help.Tageslicht.dum:SU] lt {TimeOffset (OffTimeLicht(),'-30')})
(set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on, set help.01.GA.ss.SA.Licht.dum {(OffTimeLicht())})
DOELSE
(set GA.ss.SA.Licht off)
NAME di.01.GA.ss.SA.Licht
NR 613
NTFY_ORDER 50-di.01.GA.ss.SA.Licht
STATE off
TYPE DOIF
Readings:
2016-06-07 21:53:30 Device help.Tageslicht.dum
2016-06-07 22:00:00 cmd 2
2016-06-07 22:00:00 cmd_event timer_2
2016-06-07 22:00:00 cmd_nr 2
2016-06-07 21:53:30 e_help.Tageslicht.dum_STATE dunkel
2016-06-07 21:53:30 e_help.Tageslicht.dum_SU 21:54:19
2016-06-07 22:00:00 state off
2016-06-07 22:00:00 timer_1_c1 08.06.2016 16:30:00
2016-06-07 22:00:00 timer_2_c1 08.06.2016 22:00:00
Condition:
0 DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf($hash,'help.Tageslicht.dum','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "dunkel" and ReadingValDoIf($hash,'help.Tageslicht.dum','SU','','',AttrVal($hash->{NAME},'notexist',undef)) lt {TimeOffset (OffTimeLicht(),'-30')}
Days:
Devices:
0 help.Tageslicht.dum
all help.Tageslicht.dum
Do:
0:
0 set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on, set help.01.GA.ss.SA.Licht.dum {(OffTimeLicht())}
1:
0 set GA.ss.SA.Licht off
Helper:
event timer_2
globalinit 1
last_timer 2
sleeptimer -1
timerdev
timerevent timer_2
triggerDev
timerevents:
timer_2
timereventsState:
state: dunkel
triggerEvents:
timer_2
triggerEventsState:
state: dunkel
Internals:
0 help.Tageslicht.dum:STATE
all help.Tageslicht.dum:STATE
Interval:
0 -1
1 0
Itimer:
all help.01.GA.ss.SA.Licht.dum
Localtime:
0 1465396200
1 1465416000
Readings:
0 help.Tageslicht.dum:SU
all help.Tageslicht.dum:SU
Realtime:
0 16:30:00
1 22:00:00
Regexp:
0:
All:
State:
Time:
0 16:30:00
1 [help.01.GA.ss.SA.Licht.dum]
Timecond:
0 0
1 0
Timer:
0 0
1 0
Timers:
0 0 1
Trigger:
Triggertime:
1465396200:
localtime 1465396200
Hash:
1465416000:
localtime 1465416000
Hash:
Attributes:
alias autom. Gartenlicht
cmdState on|off
devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
do always
group Scripte
room 05-Garten
sortby 01
Folgendes Problem:
das and
[?help.Tageslicht.dum:SU] lt {TimeOffset (OffTimeLicht(),'-30')})
soll verhindern, dass "GA.ss.SA.Licht" nicht eingeschaltet wird, wenn "OffTimeLicht() -30min" kleiner als "help.Tageslicht.dum:SU "ist.
OfftimeLicht() ist 22:00 und help.Tageslicht.dum:SU=21:54:19. Also ist die Bedingung unwahr und das Licht sollte nicht schalten.
Komischerweise wird aber trotzdem bei [help.Tageslicht.dum] eq "dunkel"
eingeschaltet.
Wieso passiert das, wo ist hier der Wurm drin? Die TimeOffset-Routine ist hier aus dem Forum uns sollte korrekt laufen.
Christian
Logge das Schaltverhalten des DOIF mit, dann kannst Du dem Fehler auf die Spur kommen.
define listDOIF DOIF (["^di.01.GA.ss.SA.Licht$"]) (({Log 3, "listDOIF: Gerät: $DEVICE:[$DEVICE] --> Event: $EVENT"}))
attr listDOIF do always
Zusätzlich könntest Du alle relevanten Readings und Funktionen in den Log-Befehl mit einbauen.
Hi Ellert,
danke für den Tipp! Ich lasse das heute mal laufen. Irgendwie ist das schon sehr komisch! Das Einschalten wird einfach nicht verhindert! Leider habe ich das Log vom letzten Jahr nicht mehr! Aber wie gesagt, da hat das funktioniert! Offenbar hat sich irgendwo ein Fehler (unbewußt) eingeschlichen.
.....
2016-06-05_21:51:45 GA.ss.SA.Licht on
2016-06-05_22:00:00 GA.ss.SA.Licht off
2016-06-06_21:52:39 GA.ss.SA.Licht on
2016-06-06_22:00:00 GA.ss.SA.Licht off
2016-06-07_21:53:30 GA.ss.SA.Licht on
2016-06-07_22:00:00 GA.ss.SA.Licht off
Du könntest mal die geschweiften Klammern weglassen. Im Bedingungsteil ist alles ausserhalb [] wie Perlcode zu schreiben.
DOIF hat einige Updates erfahren, falls Du kürzlich aktualisiert hast, daran könnte es liegen.
Hi,
ah! Meinst bei TimeOffset und OfftimeLicht?
dann würde das so aussehen.
([16:30-[help.01.GA.ss.SA.Licht.dum]] and
[help.Tageslicht.dum] eq "dunkel" and
[?help.Tageslicht.dum:SU] lt TimeOffset (OffTimeLicht(),'-30'))
(set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on, set help.01.GA.ss.SA.Licht.dum (OffTimeLicht()))
DOELSE
(set GA.ss.SA.Licht off)
Ich merke schon, Updates zu machen kann nicht immer gut sein. Wenn das so ist, muss ic meine anderen DOIFs auch mal durchsuchen...
Christian
Nein, nur im Bedingungsteil die geschweiften Klammern weglassen.
Moin,
hm! Habe es jetzt gestern Abend so wie oben beschrieben, laufen lassen und es hat eigentlich funktioniert. Wahrscheinlich aber nur, weil "set help.01.GA.ss.SA.Licht.dum (OffTimeLicht())" sowieso auf 22:00 Uhr gesetzt war. Also mache ich hier die Klammern wieder drum und lass es heute Abend noch mal laufen.
(set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on, set help.01.GA.ss.SA.Licht.dum {(OffTimeLicht())})
Christian
set help.01.GA.ss.SA.Licht.dum (OffTimeLicht()) ist gleichzeitig ein Trigger, also solltest du dir mal attr selftrigger näher anschauen.
Hallo Per,
danke für den Tipp,
damals musste man das so lösen, da die Berechnung aus OfftimeLicht() nicht ausgeführt wurde, nachdem das Licht eingeschaltet wurde.
Allerdings habe ich noch nicht ganz verstanden, wie ich das nun ändern muss.
([16:30-(OffTimeLicht())] and
[help.Tageslicht.dum] eq "dunkel" and
[?help.Tageslicht.dum:SU] lt TimeOffset (OffTimeLicht(),'-30'))
(set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on)
DOELSE
(set GA.ss.SA.Licht off)
Kann ich die Funktion OfftimeLicht() direkt für die zweite Schaltzeit verwenden, sodass ich die Variable " help.01.GA.ss.SA.Licht.dum" sparen kann?
Ansonsten erkenne ich den Vorteil des attributs "selftrigger all" nicht ganz, bzw. verstehe nicht, wie es eingesetzt werden soll. Habe die commandref zwar gelesen, aber es hat nicht "klick" gemacht!
Christian
Hallo,
das mit dem "selftrigger" von Per verstehe ich nicht!
Habe den Code nun so gelassen. Das funktioniert soweit wieder!
([16:30-[help.01.GA.ss.SA.Licht.dum]] and
[help.Tageslicht.dum] eq "dunkel" and
[?help.Tageslicht.dum:SU] lt TimeOffset (OffTimeLicht(),'-30'))
(set GA.ss.SA.Licht on, set help.01.EG.wz.RO.dum on, set help.01.GA.ss.SA.Licht.dum {(OffTimeLicht())})
DOELSE
(set GA.ss.SA.Licht off)
Spartacus