Hallo,
ich möchte den Rolladen einer Terrassentüre grundsätzlich zum Sonnenuntergang absenken. Allerdings nur dann, wenn auch die Türe verschlossen ist. Wenn nicht verschlossen, sollte bis ca. Sonnenaufgang trotzdem noch bei späterem Verschluss der Rolladen absenken.
Ich habe folgende Definition für DOIF:
([{sunset(-600,"","22:00")}-{sunrise_abs(+900,"","07:58")}] and [HWR_Aussentuer_Verschluss] eq "closed" and [?HWR_Rollo_Tuer] ne "off" and [?HWR_Rollo_Tuer:motor] =~ "stop:.*") (set HWR_Rollo_Tuer 0)
Allerdings klappt es so nicht. Nach dem Startzeitpunkt wurde die Türe verschlossen, Trigger hat ausgelöst. Allerdings scheint da die zeitliche Bedingung nicht mehr gegriffen zu haben.
Wo ist der Fehler?
Edit:
Ich denke, das Problem könnte sein, dass der timer_1_c1 unmittelbar nachdem der Zeitpunkt überschritten ist, bereits auf den nächsten sunset aktualisiert wird. M.E. müsste aber stattdessen - laienhaft formuliert - ein timer_3_c1 mit dem nächsten sunset angelegt werden und nach Ablauf des bis sunrise_abs definierten Zeitfensters müsste dann timer_1_c1 und timer_2_c1 gelöscht werden, timer_3_c1 würde zu timer_1_c1 und timer_2_c1 würde aktualisiert.
Meine Vermutung bestätigt sich insoweit:
Wenn zum Zeitpunkt timer_1_c1 auch der Verschluss gegeben ist, wird der Rolladen abgesenkt. Wird erst verschlossen nach dem Zeitpunkt timer_1_c1 aber vor timer_2_c1, klappt das nicht - obwohl es klappen sollte :).
Zitat von: Ralli am 21 April 2015, 07:16:21
Meine Vermutung bestätigt sich insoweit:
Wenn zum Zeitpunkt timer_1_c1 auch der Verschluss gegeben ist, wird der Rolladen abgesenkt. Wird erst verschlossen nach dem Zeitpunkt timer_1_c1 aber vor timer_2_c1, klappt das nicht - obwohl es klappen sollte :).
Dann poste hier die Ausgabe von list <dein_doif_modul> von einem solchen Fall.
Gruß
Damian
Mache ich heute abend, danke.
Aber die Definition sollte so eigentlich richtig sein, oder habe ich einen Logik-Fehler eingebaut?
Zitat von: Ralli am 21 April 2015, 08:53:47
Mache ich heute abend, danke.
Aber die Definition sollte so eigentlich richtig sein, oder habe ich einen Logik-Fehler eingebaut?
Du hast nur einen Fall und kein do always Attribut. Damit wird das Kommando nur nach Zustandswechsel ausgeführt, d. h. es muss zwischendurch cmd_2 (false) zuschlagen, bevor wieder cmd_1 ausgeführt wird.
Gruß
Damian
Korrekt. Aber die Zustandsänderung muss ja zwangsläufig kommen, wenn beide Bedingungen erfüllt sind - also wenn Zeitfenster gegeben und Verschluss ebenfalls gegeben. Dann müsste CMD1 ausgeführt werden. Es wird ja auf jeden Fall nach Ablauf des Zeitfensters (das nicht vorhandene) CMD2 ausgeführt, es sei denn, die ganze Nacht wäre kein Verschluss eingetreten. Somit habe ich täglich auf jeden Fall einen Statuswechsel.
Zitat von: Ralli am 21 April 2015, 09:28:09
Korrekt. Aber die Zustandsänderung muss ja zwangsläufig kommen, wenn beide Bedingungen erfüllt sind - also wenn Zeitfenster gegeben und Verschluss ebenfalls gegeben. Dann müsste CMD1 ausgeführt werden. Es wird ja auf jeden Fall nach Ablauf des Zeitfensters (das nicht vorhandene) CMD2 ausgeführt, es sei denn, die ganze Nacht wäre kein Verschluss eingetreten. Somit habe ich täglich auf jeden Fall einen Statuswechsel.
Wenn ein Statuswechsel sichergestellt ist, dann sind zumindest schon mal die Voraussetzungen erfüllt.
Gruß
Damian
Wie versprochen hier die lists. Aber: es ist wie immer, Murphys Gesetz hat zugeschlagen, und heute hat es - ohne Codeänderungen - so geklappt wie erwartet. Grrr ;D.
DOIF vor timer_1_c1:
Internals:
DEF ([{sunset(-600,"","22:00")}-{sunrise_abs(+900,"","07:58")}] and [HWR_Aussentuer_Verschluss] eq "closed" and [?HWR_Rollo_Tuer] ne "off" and [?HWR_Rollo_Tuer:motor] =~ "stop:.*") (set HWR_Rollo_Tuer 0)
NAME TuerenRolloRunter_Timer
NR 425
NTFY_ORDER 50-TuerenRolloRunter_Timer
STATE cmd_2
TYPE DOIF
CHANGETIME:
Helper:
Dblog:
Cmd_event:
Eventlog:
TIME 1429589070.56963
VALUE timer_2
Cmd_nr:
Eventlog:
TIME 1429589070.56963
VALUE 2
State:
Eventlog:
TIME 1429589070.56963
VALUE cmd_2
Readings:
2015-04-21 06:04:30 cmd_event timer_2
2015-04-21 06:04:30 cmd_nr 2
2015-04-21 19:08:47 e_HWR_Aussentuer_Verschluss_STATE open
2015-04-21 06:04:30 state cmd_2
2015-04-20 20:54:52 timer_1_c1 21.04.2015 20:56:36
2015-04-21 06:04:30 timer_2_c1 22.04.2015 06:02:21
2015-04-19 12:49:16 wait_timer no timer
Condition:
0 DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('HWR_Aussentuer_Verschluss','STATE','') eq "closed" and InternalDoIf('HWR_Rollo_Tuer','STATE','') ne "off" and ReadingValDoIf('HWR_Rollo_Tuer','motor','') =~ "stop:.*"
Days:
Devices:
0 HWR_Aussentuer_Verschluss
all HWR_Aussentuer_Verschluss
Do:
0 set HWR_Rollo_Tuer 0
Helper:
last_timer 2
sleeptimer -1
Internals:
0 HWR_Aussentuer_Verschluss:STATE
all HWR_Aussentuer_Verschluss:STATE
Itimer:
Readings:
Realtime:
0 20:56:36
1 06:02:21
State:
Time:
0 {sunset(-600,"","22:00")}
1 {sunrise_abs(+900,"","07:58")}
Timecond:
0 0
1 0
Timer:
0 0
1 0
Timerfunc:
Timers:
0 0 1
Trigger:
Attributes:
disable 0
group Timer
room System
wait 30
DOIF nach timer_1_c1 aber mit noch offenem Verschluss:
Internals:
DEF ([{sunset(-600,"","22:00")}-{sunrise_abs(+900,"","07:58")}] and [HWR_Aussentuer_Verschluss] eq "closed" and [?HWR_Rollo_Tuer] ne "off" and [?HWR_Rollo_Tuer:motor] =~ "stop:.*") (set HWR_Rollo_Tuer 0)
NAME TuerenRolloRunter_Timer
NR 425
NTFY_ORDER 50-TuerenRolloRunter_Timer
STATE cmd_2
TYPE DOIF
CHANGETIME:
Helper:
Dblog:
Cmd_event:
Eventlog:
TIME 1429589070.56963
VALUE timer_2
Cmd_nr:
Eventlog:
TIME 1429589070.56963
VALUE 2
State:
Eventlog:
TIME 1429589070.56963
VALUE cmd_2
Readings:
2015-04-21 06:04:30 cmd_event timer_2
2015-04-21 06:04:30 cmd_nr 2
2015-04-21 19:08:47 e_HWR_Aussentuer_Verschluss_STATE open
2015-04-21 06:04:30 state cmd_2
2015-04-21 20:56:36 timer_1_c1 22.04.2015 20:58:21
2015-04-21 06:04:30 timer_2_c1 22.04.2015 06:02:21
2015-04-19 12:49:16 wait_timer no timer
Condition:
0 DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('HWR_Aussentuer_Verschluss','STATE','') eq "closed" and InternalDoIf('HWR_Rollo_Tuer','STATE','') ne "off" and ReadingValDoIf('HWR_Rollo_Tuer','motor','') =~ "stop:.*"
Days:
Devices:
0 HWR_Aussentuer_Verschluss
all HWR_Aussentuer_Verschluss
Do:
0 set HWR_Rollo_Tuer 0
Helper:
last_timer 2
sleeptimer -1
Internals:
0 HWR_Aussentuer_Verschluss:STATE
all HWR_Aussentuer_Verschluss:STATE
Itimer:
Readings:
Realtime:
0 20:58:21
1 06:02:21
State:
Time:
0 {sunset(-600,"","22:00")}
1 {sunrise_abs(+900,"","07:58")}
Timecond:
0 0
1 0
Timer:
0 0
1 0
Timerfunc:
Timers:
0 0 1
Trigger:
Attributes:
disable 0
group Timer
room System
wait 30
Und schlussendlich nach timer_1_c1 und auch nach danach eingetretenem Verschluss:
Internals:
DEF ([{sunset(-600,"","22:00")}-{sunrise_abs(+900,"","07:58")}] and [HWR_Aussentuer_Verschluss] eq "closed" and [?HWR_Rollo_Tuer] ne "off" and [?HWR_Rollo_Tuer:motor] =~ "stop:.*") (set HWR_Rollo_Tuer 0)
NAME TuerenRolloRunter_Timer
NR 425
NTFY_ORDER 50-TuerenRolloRunter_Timer
STATE cmd_1
TYPE DOIF
CHANGETIME:
Helper:
Dblog:
Cmd_event:
Eventlog:
TIME 1429642808.27356
VALUE HWR_Aussentuer_Verschluss
Cmd_nr:
Eventlog:
TIME 1429642808.27356
VALUE 1
State:
Eventlog:
TIME 1429642808.27356
VALUE cmd_1
Wait_timer:
Eventlog:
TIME 1429642808.00541
VALUE no timer
Readings:
2015-04-21 21:00:08 cmd_event HWR_Aussentuer_Verschluss
2015-04-21 21:00:08 cmd_nr 1
2015-04-21 20:59:37 e_HWR_Aussentuer_Verschluss_STATE closed
2015-04-21 21:00:08 state cmd_1
2015-04-21 20:56:36 timer_1_c1 22.04.2015 20:58:21
2015-04-21 06:04:30 timer_2_c1 22.04.2015 06:02:21
2015-04-21 21:00:08 wait_timer no timer
Condition:
0 DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('HWR_Aussentuer_Verschluss','STATE','') eq "closed" and InternalDoIf('HWR_Rollo_Tuer','STATE','') ne "off" and ReadingValDoIf('HWR_Rollo_Tuer','motor','') =~ "stop:.*"
Days:
Devices:
0 HWR_Aussentuer_Verschluss
all HWR_Aussentuer_Verschluss
Do:
0 set HWR_Rollo_Tuer 0
Helper:
last_timer 2
sleepdevice HWR_Aussentuer_Verschluss
sleeptimer -1
Internals:
0 HWR_Aussentuer_Verschluss:STATE
all HWR_Aussentuer_Verschluss:STATE
Itimer:
Readings:
Realtime:
0 20:58:21
1 06:02:21
State:
Time:
0 {sunset(-600,"","22:00")}
1 {sunrise_abs(+900,"","07:58")}
Timecond:
0 0
1 0
Timer:
0 0
1 0
Timerfunc:
Timers:
0 0 1
Trigger:
Attributes:
disable 0
group Timer
room System
wait 30
Sobald es das nächste mal nicht wie erwartet klappt, werde ich den entsprechenden list hier posten.
Zitat von: Ralli am 21 April 2015, 21:07:12
Sobald es das nächste mal nicht wie erwartet klappt, werde ich den entsprechenden list hier posten.
Dass das Zeit-Intervall fälschlicherweise nicht wahr ist, ist eher unwahrscheinlich, ich würde eher auf eine der mit and verknüpften Bedingungen: [?HWR_Rollo_Tuer] ne "off" and [?HWR_Rollo_Tuer:motor] =~ "stop:.*" tippen, die zu diesem Zeitpunkt möglicherweise nicht wahr ist.
Gruß
Damian