[gelöst] DOIF Watchdog. Wait wird nicht gelöscht

Begonnen von T3mplate, 10 Juni 2017, 20:08:23

Vorheriges Thema - Nächstes Thema

T3mplate

Ich habe ein neues DOIF geschrieben um meine Rolladen helligkeitsgesteuert in verschiedenen Stellungen zu bringen.
Grundsätzlich funktioniert das auch, allerdings habe ich mir durch das Attribut wait erhofft, dass das DOIF wie beim Watchdog X Sekunden wartet.
Wenn alle Bedingungen über diese Zeitspanne erfüllt sind, dann wird das command ausgeführt, ansonsten nicht.

Bei mir wird nach Eintreten des Ereignisses allerdings der Timer gestartet aber nicht angehalten/ gelöscht, wenn Zwischendurch die Voraussetzungen nicht mehr erfüllt sind.

Hier das Device:
defmod WZ_Rolladen_Helligkeit DOIF ([ZWave_Sensor_aussen:luminance:d] > 1000 and [8:00-{sunset("CIVIL",0,"17:00","22:00")}] and [WZ_Rolladen_Status:state] < 3) (set WZ_Rolladen_Status 3) DOELSEIF\
([ZWave_Sensor_aussen:luminance:d] > 2500 and [8:00-{sunset("CIVIL",0,"17:00","21:00")}] and [WZ_Rolladen_Status:state] < 4) (set WZ_Rolladen_Status 4) DOELSEIF\
([ZWave_Sensor_aussen:luminance:d] > 5000 and [8:00-{sunset("CIVIL",0,"17:00","20:00")}] and [WZ_Rolladen_Status:state] < 5) (set WZ_Rolladen_Status 5) DOELSEIF\
([ZWave_Sensor_aussen:luminance:d] < 3000 and [9:00-{sunset("CIVIL",0,"17:00","21:00")}] and [WZ_Rolladen_Status:state] > 4) (set WZ_Rolladen_Status 4) DOELSEIF\
([ZWave_Sensor_aussen:luminance:d] < 1000 and [9:00-{sunset("CIVIL",0,"17:00","21:00")}] and [WZ_Rolladen_Status:state] > 3) (set WZ_Rolladen_Status 3) DOELSEIF\
([ZWave_Sensor_aussen:luminance:d] < 200 and [9:00-{sunset("CIVIL",0,"17:00","21:00")}] and [WZ_Rolladen_Status:state] > 2) (set WZ_Rolladen_Status 1)
attr WZ_Rolladen_Helligkeit group Rolladen_Wohnzimmer
attr WZ_Rolladen_Helligkeit icon fts_shutter_updown
attr WZ_Rolladen_Helligkeit room Wohnzimmer-BG
attr WZ_Rolladen_Helligkeit wait 600:600:600:900:900:600


Hier ein Log über die Schaltung:
2017-06-10_08:58:24 WZ_Rolladen_Status 4
2017-06-10_08:59:00 WZ_Rolladen_Status 4   << addLog
2017-06-10_09:46:03 WZ_Rolladen_Status 3
2017-06-10_09:59:00 WZ_Rolladen_Status 3   << addLog
2017-06-10_10:59:00 WZ_Rolladen_Status 3   << addLog
2017-06-10_11:33:53 WZ_Rolladen_Status 4
2017-06-10_11:59:00 WZ_Rolladen_Status 4   << addLog
2017-06-10_11:59:15 WZ_Rolladen_Status 5
2017-06-10_12:14:12 WZ_Rolladen_Status 4


Man sieht, dass 9:46 von Status 4 auf 3 gewechselt wurde und 12:14 von Status 5 auf 4.

Hier die Helligkeitswerte dazu:
2017-06-10_09:00:16 ZWave_Sensor_aussen temperature: 18.6 C
2017-06-10_09:07:54 ZWave_Sensor_aussen luminance: 1032 Lux
2017-06-10_09:10:15 ZWave_Sensor_aussen temperature: 18.9 C
2017-06-10_09:17:54 ZWave_Sensor_aussen luminance: 1153 Lux
2017-06-10_09:20:15 ZWave_Sensor_aussen temperature: 19.3 C
2017-06-10_09:27:54 ZWave_Sensor_aussen luminance: 1233 Lux
2017-06-10_09:30:14 ZWave_Sensor_aussen temperature: 19.5 C
2017-06-10_09:31:03 ZWave_Sensor_aussen luminance: 838 Lux
2017-06-10_09:31:15 ZWave_Sensor_aussen luminance: 1225 Lux
2017-06-10_09:36:22 ZWave_Sensor_aussen luminance: 782 Lux
2017-06-10_09:36:59 ZWave_Sensor_aussen luminance: 1266 Lux
2017-06-10_09:40:13 ZWave_Sensor_aussen temperature: 19.9 C
2017-06-10_09:46:58 ZWave_Sensor_aussen luminance: 1435 Lux
2017-06-10_09:50:13 ZWave_Sensor_aussen temperature: 20.1 C
2017-06-10_09:53:25 ZWave_Sensor_aussen luminance: 1128 Lux
2017-06-10_09:53:36 ZWave_Sensor_aussen luminance: 1516 Lux
2017-06-10_09:53:44 ZWave_Sensor_aussen luminance: 1161 Lux
2017-06-10_09:54:06 ZWave_Sensor_aussen luminance: 1556 Lux
2017-06-10_09:55:59 ZWave_Sensor_aussen luminance: 1040 Lux
2017-06-10_09:56:19 ZWave_Sensor_aussen luminance: 1491 Lux
...
2017-06-10_11:54:13 ZWave_Sensor_aussen luminance: 2024 Lux
2017-06-10_11:54:57 ZWave_Sensor_aussen luminance: 3064 Lux
2017-06-10_11:55:01 ZWave_Sensor_aussen luminance: 3499 Lux
2017-06-10_11:55:05 ZWave_Sensor_aussen luminance: 4386 Lux
2017-06-10_11:55:09 ZWave_Sensor_aussen luminance: 4902 Lux
2017-06-10_11:55:30 ZWave_Sensor_aussen luminance: 4483 Lux
2017-06-10_11:56:42 ZWave_Sensor_aussen luminance: 3596 Lux
2017-06-10_11:56:47 ZWave_Sensor_aussen luminance: 3015 Lux
2017-06-10_11:56:52 ZWave_Sensor_aussen luminance: 4225 Lux
2017-06-10_11:56:58 ZWave_Sensor_aussen luminance: 4870 Lux
2017-06-10_11:59:45 ZWave_Sensor_aussen temperature: 23.9 C
2017-06-10_12:00:19 ZWave_Sensor_aussen luminance: 4580 Lux
2017-06-10_12:00:35 ZWave_Sensor_aussen luminance: 5225 Lux
2017-06-10_12:00:47 ZWave_Sensor_aussen luminance: 4032 Lux
2017-06-10_12:00:55 ZWave_Sensor_aussen luminance: 3209 Lux
2017-06-10_12:01:06 ZWave_Sensor_aussen luminance: 4741 Lux
2017-06-10_12:01:09 ZWave_Sensor_aussen luminance: 5257 Lux
2017-06-10_12:02:30 ZWave_Sensor_aussen luminance: 4080 Lux
2017-06-10_12:02:33 ZWave_Sensor_aussen luminance: 2935 Lux
2017-06-10_12:02:39 ZWave_Sensor_aussen luminance: 3548 Lux
2017-06-10_12:02:51 ZWave_Sensor_aussen luminance: 4128 Lux
2017-06-10_12:02:56 ZWave_Sensor_aussen luminance: 3273 Lux
2017-06-10_12:03:03 ZWave_Sensor_aussen luminance: 2790 Lux
2017-06-10_12:03:08 ZWave_Sensor_aussen luminance: 3483 Lux
2017-06-10_12:03:11 ZWave_Sensor_aussen luminance: 4548 Lux
2017-06-10_12:03:14 ZWave_Sensor_aussen luminance: 5386 Lux
2017-06-10_12:04:54 ZWave_Sensor_aussen luminance: 4677 Lux
2017-06-10_12:05:03 ZWave_Sensor_aussen luminance: 3483 Lux
2017-06-10_12:05:17 ZWave_Sensor_aussen luminance: 2725 Lux
2017-06-10_12:05:36 ZWave_Sensor_aussen luminance: 2241 Lux
2017-06-10_12:06:17 ZWave_Sensor_aussen luminance: 1927 Lux
2017-06-10_12:07:47 ZWave_Sensor_aussen luminance: 1669 Lux
2017-06-10_12:17:36 ZWave_Sensor_aussen luminance: 1935 Lux
2017-06-10_12:19:19 ZWave_Sensor_aussen luminance: 2338 Lux
2017-06-10_12:19:26 ZWave_Sensor_aussen luminance: 3709 Lux


Im Log des Sensors erkennt man aber, dass nur 9:31 (900 Sekunden vor 9:46) der Wert von 1000 Lux unterschritten wurde.
Folglich hätte der Timer dann abbrechen müssen.
Die Erklärung für den Wechsel 12:14 ist noch schwieriger.

Kann mir jemand helfen?

Damian

Du musst DOELSE am Ende dranhängen, damit ein Zustandswechsel stattfindet und ein wait-timer unterbrochen werden kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

T3mplate

#2
Danke für die schnelle Antwort.
Nur das ich es richtig verstehe:
DOIF checkt zwar zwischendurch ob die Bedingungen noch erfüllt sind, kann den Timer aber nicht unterbrechen, weil es dafür in einen anderen Zustand wechseln müsste. Dies kann es aber nicht, weil auch die anderen Bedingungen nicht erfüllt sind. Deshalb läuft der timer weiter.
Das DOELSE fügt einen Zustand ein, der immer erreichbar ist. Damit kann das wait auch entfernt werden. Richtig?

Damian

Zitat von: T3mplate am 10 Juni 2017, 20:24:01
Danke für die schnelle Antwort.
Nur das ich es richtig verstehe:
DOIF checkt zwar zwischendurch ob die Bedingungen noch erfüllt sind, kann den Timer aber nicht unterbrechen, weil es dafür in einen anderen Zustand wechseln müsste. Dies kann es aber nicht, weil auch die anderen Bedingungen nicht erfüllt sind. Deshalb läuft der timer weiter.
Das DOELSE fügt einen Zustand ein, der immer erreichbar ist. Damit kann das wait auch entfernt werden. Richtig?

so ist es
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

T3mplate