mit dem angehängten patch wird sleep etwas erweitert:
- um die möglichkeit die zeit auch per timespec oder {perlfunc} anzugeben
d.h.: sleep 00:05; ...
sleep {wieLangeSollIchSchlafen()}; ... - um die möglichkeit auch auf ein event zu warten
d.h.: sleep lampe:off; ...
- die cancel liste gibt jetzt auch event/endzeit mit aus
- nach ende des sleep wird die id mit geloggt wenn vorhanden
- nach ende des sleep wird die ausgabe des folgenden kommandos per asyncOutput auch auf CL ausgegeben
d.h. man kann z.b. per telnet testen ohne ins log schauen zu müssen
- createNtfyHash ignoriert devices bei denen disable gesetzt ist
anmerkungen:
- bei nicht verwenden des neuen features ist der progammfluss wie vorher.
d.h. es gibt keine 'strafe' durch das ausführen von zusätzlichen prüfungen oder code. - wenn man das event feature verwendet ist der overhead identisch zu einem notify aber ohne das ein delete nötig ist.
hintergrund des ganzen war mein wunsch die bewässerungszonen im garten nacheinander laufen zu lassen. das kann man zwar im prinzip auch über das bisherige sleep, at oder notfy, aber mit den folgenden nachteilen:
- sleep: wenn sich die einschaltzeiten ändern (on-for-timer im device) muss man die sleep anpassen oder von vornherein genug zeit gelassen haben
- at: wie bei sleep
- notify: wenn die reihenfolge nicht immer gleich sein soll (morgens rasen->beet1->beet2 nachmittags nur rasen->beet2) wird es unhandlich
jetzt kann man einfach der reihe nach ein ventil öffnen und danach warten bis es wieder zu ist:
set v1 on-for-timer 600; sleep v1:off; set v2 on-for-timer 300; sleep v2:off; set v3 on-for-timer 300
Klasse!
Ich habe mir das jetzt nicht angeschaut. Beim Lesen viel mir aber spontan zum Event ein. Gibt es einen Abbruch sollte das erwartete Event nicht kommen?
nicht eingebaut bzw. automatisch.
das war zumindest für meine anwendungsfälle nicht nötig:
- wenn das event ausbleibt ist entweder etwas schlimmeres nicht in ordnung:
- die timer laufen alle in den devices direkt weil hm
- es globale watchdogs die jedes ventil und noch mal ein vorgeschaltetes
nc hauptventil überwachen und nach gewisser zeit zu machen
- bei den lampen ist es einfach so: wenn das event aus bleibt soll nichts passieren
aber automatisch könnte man auch mehr als ein sleep starten und unterschiedliche events verwenden und dann gegenseitig abbrechen.
hier soll nur der einfache fall abgedeckt werden. eine einfache reihenfolge.
wenn es komplizierter wird ist eher watchdog oder sequence das richtige.
ansonsten: die wartenden sleeps lassen sich benennen und abbrechen, die unbenannten
lassen sich von hand auflisten und abbrechen.
Danke Dir für die Erklärung. Auf jeden Fall eine sehr gute Erweiterung.
@rudi: unabhängig von dem patch hier: mir fällt gerade auf das man in CommandRereadCfg %sleepers auch zurück setzen sollte.
%ntfyHash zurücksetzen passiert zwar vermutlich über den seiteneffekt das neue device angelegt werden. ist aber irgendwie trozdem unschön. ich vermute das noch einiges andere vergessen ist.
Bitte um ein bisschen Geduld, ich brauche dafuer ein/zwei Stunden Zeit mit klaren Kopf.
Habe es modifiziert eingecheckt:
- syntax/doku bleibt unveraendert
- statt die notify Routinen teilweise zu kopieren habe ich ein notify definiert mit TEMPORARY und ignore
- alle sleeps werden in %sleepers eingetragen, und sind damit per cancel anzeigbar/loeschbar.
Bitte testen, und melden falls was nicht passt.
%sleepers und ntfyHash habe ich jetzt in CommandRereadCfg auch zurueckgesetzt.
Rudi können Deine Änderungen Auswirkungen auf ReadFn oder $hash->{CL} haben. Gibt da Probleme mit dem ESPEasy Modul
https://forum.fhem.de/index.php/topic,100477.msg939268.html#msg939268