Aktion zeitversetzt ausführen

Begonnen von svenson08, 23 Januar 2013, 22:14:27

Vorheriges Thema - Nächstes Thema

svenson08

Hallo,

ich hab folgendes Problem, bzw. Frage. Ich lasse 2 Rolläden zeitlich um 5 Sekunden versetzt hoch bzw.
runter fahren. Das funktioniert eigentlich auch.

Umgesetzt hab ich das wie folgt:


define ntfy_RollosHintermHaus notify ROLO_RollaedenHintermHaus:.* {\
  if('%' eq 'Runter') {\
fhem 'setstate ROLO_RollaedenHintermHaus Runter';;\
fhem 'set WZ_RolladenTuer_01 off';;\
  fhem 'define tmp_time_RollosHintermHaus at +00:00:05 set WZ_RolladenFenster_01 off';;\
  } elsif('%' eq 'Hoch') {\
fhem 'setstate ROLO_RollaedenHintermHaus Hoch';;\
fhem 'set WZ_RolladenTuer_01 on';;\
fhem 'define tmp_time_RollosHintermHaus at +00:00:05 set WZ_RolladenFenster_01 on';;\
  } \
}


im Log findet sich der Eintrag

ROLO_RollaedenHintermHaus return value: tmp_time_RollosHintermHaus already defined, delete it first

was auch verständlich ist, tmp_time_RollosHintermHaus erstelle ich in Hoch wie auch in Runter. Das kann so
nicht richtig sein.

Meine Frage ist nur, wie ich das hin bekomme das tmp_time_RollosHintermHaus nur einmal erstellt wird.
Mach ich das mit modify? Und wenn ja wie würde das in meinem Beispiel aussehen? Oder ist meine Routine so
gänzlich optimierungsbedürftig?

Gruß Svenson

Reinerlein

Hi Svenson,

das einfachste dürfte erstmal sein, die beiden verschieden zu nennen.

Also bei einem Notify den Namen des Notify um ein '_On' erweitern, den anderen um ein '_Off' (z.B. natürlich)

Dann kommt zumindest nur noch dann eine Meldung, wenn du innerhalb dieser 5 Sekunden nochmal drückst...

Grüße Reinerlein

svenson08

Hallo Reinerlein,

du meinst das ich tmp_time_RollosHintermHaus einfach nicht zwei mal verwende sondern für hoch und runter zwei unterschiedliche Namen nutzte, das werde ich dann mal so testen.

Aber für mein Verständnis, wieso kommt dann die Meldung wenn ich innerhalb dieser 5 Sekunden noch mal drücke und warum kommt die Meldung nicht wenn ich nicht innerhalb der 5 Sekunden noch mal drücke nicht? Wie lange "existiert" den der definierte Timer? Wird der nach der Ausführung gelöscht?

Gruß Svenson

Reinerlein

Hi Svenson,

der Timer existiert genau solange wie nötig. In deinem Fall soll nach 5 Sekunden einmal etwas getan werden, er tut es und ist aus der Timerliste raus.
Du kannst einen Timer auch mit * definieren. Dann programmiert der sich immer wieder neu nach der Ausführung.

Solange der Timer existiert, wird eine Fehlermeldung auftauchen, wenn du ihn nochmal definieren willst.

Du kannst einen Timer auch löschen. Dann erhältst du aber eine Meldung, wenn es ihn gerade nicht gibt :-) Das ist aber meist die unwichtigere Meldung, da dann das Timeranlegen auf jeden Fall funktionieren wird...

Grüße Reinerlein