vorschlag: erweiterung von sleep / warten ein event

Begonnen von justme1968, 06 Mai 2019, 21:27:04

Vorheriges Thema - Nächstes Thema

justme1968

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

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

CoolTux

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?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

CoolTux

Danke Dir für die Erklärung. Auf jeden Fall eine sehr gute Erweiterung.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

@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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig

Bitte um ein bisschen Geduld, ich brauche dafuer ein/zwei Stunden Zeit mit klaren Kopf.

rudolfkoenig

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.

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net