Guten Tag,
ich versuche gerade, meine Außenbeleuchtung einfacher zu realisieren. Dazu gibt es jetzt Lichtszenen, zwischen denen hin- und hergeschaltet werden soll. Die Einschaltzeit ist Sonnenunterganz, die Ausschaltzeit soll sich in Abhängigkeit von Kalender und Ferienstatus (ist morgen ein Ferientag, dann länger) mit Hilfe von DOIF_Readings berechnen lassen.
Mein Ansatz ist:
Internals:
CFGFN
DEF ([{sunset_abs(-900)}-[$SELF:OffNight]])
(set LS_AussenNachtbeleuchtung scene StandardDimmed)
##DOELSEIF ([{sunrise_abs(1200,"05:30","09:00")}-09:00] and [?SH] eq "none")
## (set LS_AussenNachtbeleuchtung scene StandardDimmed)
##DOELSEIF ([{sunrise_abs(1200,"06:30","09:00")}-09:00] and [?SH] ne "none")
## (set LS_AussenNachtbeleuchtung scene StandardDimmed)
DOELSE
(set LS_AussenNachtbeleuchtung scene AllOff)
NAME DI_TimerAussenlichtOnOff
NR 199
NTFY_ORDER 50-DI_TimerAussenlichtOnOff
STATE cmd_2
TYPE DOIF
DOIF_Readings:
OffNight "22:45:00"
READINGS:
2018-08-19 15:00:24 cmd 2
2018-08-19 15:00:24 cmd_event DI_TimerAussenlichtOnOff
2018-08-19 15:00:24 cmd_nr 2
2018-08-19 14:58:53 mode enabled
2018-08-19 15:00:24 state cmd_2
2018-08-19 14:58:53 timer_01_c01 19.08.2018 21:12:00
2018-08-19 14:58:53 timer_02_c01 error: Wrong timespec : either HH:MM:SS or {perlcode}
Regex:
condition:
0 DOIF_time($hash,0,1,$wday,$hms)
days:
devices:
do:
0:
0 set LS_AussenNachtbeleuchtung scene StandardDimmed
1:
0 set LS_AussenNachtbeleuchtung scene AllOff
helper:
DOIF_Readings_events
DOIF_eventas
globalinit 1
last_timer 2
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
internals:
interval:
0 -1
1 0
itimer:
all DI_TimerAussenlichtOnOff
localtime:
0 1534705920
readings:
realtime:
0 21:12:00
time:
0 {sunset_abs(-900)}
1 [DI_TimerAussenlichtOnOff:OffNight]
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
triggertime:
1534705920:
localtime 1534705920
hash:
uiState:
uiTable:
Attributes:
DOIF_Readings OffNight:"22:45:00"
room Aussen,SYS_Events
DOIF_Readings OffNight soll die Ausschaltzeit bestimmen. Ist derzeit auf den Wert "22:45:00" (mit Anführungszeichen) gesetzt, da DOIF Readings das : als Trennzeichen interpretiert.
Später soll das Konstrukt eher
([Kalendar:tomorrow] eq "none" ? "21:45:00" : "22:30:00")
sein.
Die erste DOIF-Bedingung verwendet nun OffNight für die Zeitangabe:
[{sunset_abs(-900)}-[$SELF:OffNight]]
Leider meckert DOIF mit mir, daß dies keine korrekte Zeitangabe sei. Was mache ich denn wohl flasch?
Danke, -MN
Anführungszeichen weg
Danke,
aber das ändert nichts am Fehler:
Internals:
CFGFN
DEF ([{sunset_abs(-900)}-[$SELF:OffNight]])
(set LS_AussenNachtbeleuchtung scene StandardDimmed)
##DOELSEIF ([{sunrise_abs(1200,"05:30","09:00")}-09:00] and [?SH] eq "none")
## (set LS_AussenNachtbeleuchtung scene StandardDimmed)
##DOELSEIF ([{sunrise_abs(1200,"06:30","09:00")}-09:00] and [?SH] ne "none")
## (set LS_AussenNachtbeleuchtung scene StandardDimmed)
DOELSE
(set LS_AussenNachtbeleuchtung scene AllOff)
NAME DI_TimerAussenlichtOnOff
NR 199
NTFY_ORDER 50-DI_TimerAussenlichtOnOff
STATE initialize
TYPE DOIF
DOIF_Readings:
OffNight 22
READINGS:
2018-08-19 16:52:33 mode enabled
2018-08-19 16:52:33 state initialize
2018-08-19 14:58:53 timer_01_c01 19.08.2018 21:12:00
2018-08-19 14:58:53 timer_02_c01 error: Wrong timespec : either HH:MM:SS or {perlcode}
Regex:
condition:
0 DOIF_time($hash,0,1,$wday,$hms)
days:
devices:
do:
0:
0 set LS_AussenNachtbeleuchtung scene StandardDimmed
1:
0 set LS_AussenNachtbeleuchtung scene AllOff
helper:
DOIF_Readings_events
DOIF_eventas
globalinit 1
last_timer 2
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
internals:
interval:
0 -1
1 0
itimer:
all DI_TimerAussenlichtOnOff
localtime:
0 1534705920
readings:
realtime:
0 21:12:00
time:
0 {sunset_abs(-900)}
1 [DI_TimerAussenlichtOnOff:OffNight]
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
triggertime:
1534705920:
localtime 1534705920
hash:
uiState:
uiTable:
Attributes:
DOIF_Readings OffNight:22:45:00
room Aussen,SYS_Events
Ich verwende DOIF.pm
# $Id: 98_DOIF.pm 16406 2018-03-14 18:02:13Z Damian $
Danke, -MN
DOIF_Readings aktualisiert erst, wenn ein Trigger passend zu der Definition kommt, da deine Definition mit "22:45:00" statisch ist und keinen Trigger beinhaltet, wird auch kein Reading entstehen.
Danke für die Hilfe, Damian.
Ciao, -MN
Dann habe ich eine Frage:
Wenn ein komplexes DOIF von einem DOIF_Reading abhängt, welches nur selten aktualisiert wird (z.B. Ferientage), wird es nach einem Neustart zu Fehlern in den DOIF-Bedingungen kommen, bis das DOIF_Reading triggert.
Liesse sich evtl. das "initialize"-Attribut auf DOIF_Readings übertragen, damit es einen Defaultwert gibt, bis sich das Reading durch einen Trigger aktualisiert?
Ciao, -MN
PS Oder gibt es eine clevere Lösung für dieses Problem?
Zitat von: Morgennebel am 19 August 2018, 18:47:54
Dann habe ich eine Frage:
Wenn ein komplexes DOIF von einem DOIF_Reading abhängt, welches nur selten aktualisiert wird (z.B. Ferientage), wird es nach einem Neustart zu Fehlern in den DOIF-Bedingungen kommen, bis das DOIF_Reading triggert.
Liesse sich evtl. das "initialize"-Attribut auf DOIF_Readings übertragen, damit es einen Defaultwert gibt, bis sich das Reading durch einen Trigger aktualisiert?
Ciao, -MN
PS Oder gibt es eine clevere Lösung für dieses Problem?
Ein einmal gesetztes Reading bleibt doch auch nach dem Neustart erhalten. Ich werde vermutlich in der kommenden DOIF-Version, bei DOIF_Readings ein definiertes Reading bereits bei der Definition setzen.