Hauptmenü

Wait wird nicht abgebrochen

Begonnen von Skipper, 09 Juni 2018, 08:34:47

Vorheriges Thema - Nächstes Thema

Skipper

Hilfe,
mein Wait Timer wird nicht abgebrochen wenn die Bedingung unwahr wird.
Ich habe zum ersten mal in einem DOIF ein Wait verwendet. Es soll die Helligkeit im DOIF ausgewertet werden und wenn dieser Wert länger als 15 Minuten nicht kleiner als 3800 Lux wird, soll der Befehl ausgeführt werden. Wenn jetzt aber der Wert innerhalb der 15 Minuten kleiner wird soll natürlich nicht ausgeführt werden.
Mien DOIF:
defmod Sonnenrollo DOIF ([helligkeit:Lux] > 3800) (set Rollo down) DOELSEIF ([23:50])
attr Sonnenrollo do resetwait
attr Sonnenrollo wait 30:0

setstate Sonnenrollo cmd_1
setstate Sonnenrollo 2018-06-09 08:20:25 Device helligkeit
setstate Sonnenrollo 2018-06-09 08:20:45 cmd 1
setstate Sonnenrollo 2018-06-09 08:20:45 cmd_event helligkeit
setstate Sonnenrollo 2018-06-09 08:20:45 cmd_nr 1
setstate Sonnenrollo 2018-06-09 08:20:25 e_helligkeit_Lux 400
setstate Sonnenrollo 2018-06-08 17:24:55 mode enabled
setstate Sonnenrollo 2018-06-09 08:20:45 state cmd_1
setstate Sonnenrollo 2018-06-09 08:18:48 timer_01_c02 09.06.2018 23:50:00
setstate Sonnenrollo 2018-06-09 08:20:45 wait_timer no timer


Danke Gruß

Damian

#1
Ein Wait kann nur abgebrochen werden wenn sich der Zustand (Status) des Moduls ändert, bei deiner Definition ohne DOELSE ist das nicht der Fall.

Ich gehe aufgrund deiner Definition davon aus, dass der Rolladen höchstens nur einmal am Tag herunter soll und dort verbleiben. resetwait ist hier ganz falsch am Platz (verzögert das Herunterfahren bist es dunkel wird ;) )

Abbruch von Wait kannst du erreichen mit:

defmod Sonnenrollo DOIF ([helligkeit:Lux] > 3800) (set Rollo down) DOELSEIF ([23:50]) DOELSE

damit wird aber DOELSEIF ([23:50]) überflüssig, weil in der Nacht sowieso [helligkeit:Lux] < 3800 gilt, also der DOELSE-Fall

Dann kannst du auch gleich definieren:

defmod Sonnenrollo DOIF ([helligkeit:Lux] > 3800) (set Rollo down) DOELSE

was nichts anders ist als

defmod Sonnenrollo DOIF ([helligkeit:Lux] > 3800) (set Rollo down)

da bei bei einem Zustand ohne do always auch immer cmd2 existiert.

Bei diesen Definitionen kann set Rollo down allerdings auch mehrfach ausgeführt werden, was nicht stört, wenn der Rollladen ohnehin schon unten ist.

Dem kannst du etwas entgegenwirken, indem du auch cmd2-Zustand um paar Stunden verzögerst, bis zum nächsten Tag reicht es dann

wait 900:15000

Eleganter ist es die Sache zu entkoppeln.

Einmal ein DOIF mit Verzögerung für die Sonne:

define Sonne DOIF ([helligkeit:Lux] > 3800)
attr cmdState on|off
attr wait 900:900


dann

defmod Sonnenrollo DOIF ([Sonne] eq "on") (set Rollo down) DOELSEIF ([23:50])

ohne wait.

Hierbei wird set Rollo down definitiv nur einmal am Tag ausgeführt.

Ich schränke die Sache noch zusätzlich bei mir je nach Fensterausrichtung durch Zeitintervalle ein, z. B.

defmod Sonnenrollo DOIF ([Sonne] eq "on" and [14:00-21:00]) (set Rollo down) DOELSEIF ([00:00])

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

Skipper

Hallo,

ich habe mir ein Sonnendevice wie folgt angelegt:defmod Sonne DOIF ([helligkeit:Lux] > 3800) DOELSE
attr Sonne room Sonne
attr Sonne state on off
attr Sonne wait 30:30

aber das schaltet mit 30 sek. Verzögerung bei über 3800 Lux immer auf on.
Es bricht nie den Timer ab.
Was ist falsch?

Achso klar schränke ich in meinem produktiven DOIF das Zeitfenster noch ein. Hab ich hier aber der Einfachheit halber nicht gepostet weil es ja um den Waittimer geht.

Damian

Zitat von: Skipper am 09 Juni 2018, 22:50:02
Hallo,

ich habe mir ein Sonnendevice wie folgt angelegt:defmod Sonne DOIF ([helligkeit:Lux] > 3800) DOELSE
attr Sonne room Sonne
attr Sonne state on off
attr Sonne wait 30:30

aber das schaltet mit 30 sek. Verzögerung bei über 3800 Lux immer auf on.
Es bricht nie den Timer ab.
Was ist falsch?

Achso klar schränke ich in meinem produktiven DOIF das Zeitfenster noch ein. Hab ich hier aber der Einfachheit halber nicht gepostet weil es ja um den Waittimer geht.

attr Sonne state on|off

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

Skipper

Ok mmmm bei mir ändert er den state dann nicht in on oder off sondern in on|off woran liegt dass denn?

Damian

Zitat von: Skipper am 10 Juni 2018, 08:20:58
Ok mmmm bei mir ändert er den state dann nicht in on oder off sondern in on|off woran liegt dass denn?

ja, das Attribut heißt ja auch cmdState und nicht state - mein Fehler
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Skipper

mit dem habe ich gerade herumgespielt und siehe da ich habs auch raus gefunden. vielen Dank aber auf jedenfall für die Hilfe.