Hallo zusammen,
möchte das der notify verzögert startet:
define HW.gk.watchclose notify HW.gk.closed.* {if \
(ReadingsVal('HW.tk','state','') eq "closed") {fhem("sleep 2 ;; set FL.EG.anzeige.led07 led green");;} \
elsif(ReadingsVal('HW.tk','state','') eq "open"){fhem('set FL.EG.anzeige.led07 led orange');;}}
"define HW.gk.watchclose notify HW.gk.closed.* sleep 1 {if \...."
funkioniert leider nicht.
Hintergrund:
der HW.tk state kommt teilweise etwas verzögert...
Ungetestet aber das hier müsste funktionieren:
HW.gk.closed.* sleep 2;{if [...]
(Code für den DEF Bereich)
oder ein DOIF mit wait attribut.
HW.gk.closed.* sleep 2;{if [...]
Leider Nein, hatte ich auch probiert ..
So müsste es funktionieren:
define HW.gk.watchclose notify HW.gk.closed.* {
{fhem('sleep 1')}
if(ReadingsVal('HW.tk','state','') eq "closed") {fhem("set FL.EG.anzeige.led07 led green");}
elsif(ReadingsVal('HW.tk','state','') eq "open"){fhem('set FL.EG.anzeige.led07 led orange');}
}
Doch dann bekomme ich:
WARNING: sleep without additional commands is deprecated and blocks FHEM
Genau das wollte ich aber doch vermeiden, indem ich das sleep in ein Fhem schreibe ..
das sleep muss mit in den fhem(...) aufruf mit dem set und nicht einzeln alleine stehen.
gruss
andre
Zitat von: justme1968 am 19 August 2015, 16:44:36
das sleep muss mit in den fhem(...) aufruf mit dem set und nicht einzeln alleine stehen.
gruss
andre
Das hatte ich zuerst, funktioniert auch, jedoch möchte ich beim Event HW.gk (closed) etwas warten, da der Status des HW.tk noch nicht im FHEM angekommen sein kann.
HW.tk ist ein Türkontakt.
HW.gk ist ein Griffkontakt.
Meine Jungs schaffen es, die Türe quasi zeitgleich zu schließen (HW.tk) und zu verschließen (HW.gk).
Dann passiert es ab und zu, dass der HW.gk schneller ist als der HW.tk, deshalb der sleep.
Der sleep vor dem set bringt mir da also nichts, da der Türkontakt vorher abgefragt wurde...
dann muss das {if...} hinter das sleep. fhem sleep funktioniert nur wenn danach noch etwas kommt.
aber der ansatz das selber von hand in einem notify zu machen ist eigentlich schon falsch.
steck beide in eine structure und setz das notify auf die structure an.
gruss
andre
Danke, das ist das, was ich gesucht habe, danke für den Hinweis ..
Habe ich über ein DOIF realisiert... klappt einwandfrei.
eg_bar_fk ist mein Fensterkontakt, terrasse_ls der UP-Lichtschalter für die Terrasse
Wenn jemand die Türe aufmacht, geht das Licht mit Hilfe eines "Notify" an (wenn es dunkel ist, über Twilight gesteuert).
Beim Schließen kommt dann das DOIF, wartet erstmal 30 Sekunden (über das wait-Attribut) und prüft dann, ob das Licht noch an ist.
Wenn ja, dann wird nochmal ein on-for-timer über 4,5 Minuten gesetzt... damit bleibt nach dem Schließen der Tür das Licht max. 5 Minuten an.
([eg_bar_fk] eq "closed") ({
my $terrasse_ls_status=ReadingsVal("terrasse_ls","state","on");;
if($terrasse_ls_status eq "on"){
fhem("set terrasse_ls on-for-timer 270");;
}
})