Effizientes Event-Handling mit Taster-Auswertungen und Timestamp-Berechnungen

Begonnen von zife, 07 März 2022, 18:00:14

Vorheriges Thema - Nächstes Thema

zife

Hallo fhem'ler,

für mein Problem habe ich zahlreiche Puzzlestücke gefunden, aber genau das bringt mich jetzt durcheinander. Zu viele Teile, und einzelne fehlen. Da ich mich inzwischen auch auf halbwegs brauchbares Event-Handling konzentriere (Stichworte Systemlast & Stil) bitte ich um Hilfe, wie ich meine Idee effizent und "schlau" umsetzen könnte.

Ich habe Rolladen-Taster (ja, bin immer noch dran), die die Rolläden direkt steuern. Daran gibt es auch nichts zu rütteln aus diversen Gründen (WAF, Ausfallsicherheit, etc.). Ich möchte aber, dass diese Fahrten ausgewertet werden und die neue Position des Rolladens ins Rolladen-Device geschrieben wird.

Nachdem meine Umwege über ROLLO letztlich an Systemlast und Komplexität gescheitert sind, nun eine neue Idee.

Ich würde gerne bei Tasterdruck den Timestamp wegspeichern (Puzzlestück "ReadingsTimestamp") und beim zweiten Druck noch einmal, um dann aus der Differenz (Puzzlestücke "time_str2num" und "round") die Position herzuleiten, zu runden und diese ins Device zu schreiben (Puzzlestück "setreading").

Aus diesen Teilen habe ich mir jetzt mal in Gedanken so ein Konstrukt gebastelt:



Ich würde ein Dummy anlegen ("KorrekturDummy"), das die Werte "an" oder "aus" haben kann.

Dann 3 Notifys (oder Doifs):

Notify 1 horcht auf den Tasterdruck und KorrekturDummy = aus. Wenn es triggert, speichert es die aktuelle Position des Rolladens, den aktuellen Timestamp des Tasterdrucks und setzt das KorrekturDummy auf "an".

Notify 2 horcht auf den Tasterdruck und KorrekturDummy = an. Wenn das triggert, speichert es einen zweiten Timestamp, berechnet aus den Daten oben die neue Position und schreibt sie ins Rolladen-Device.

Notify 3 horcht auf Rollo-Device "open" oder "closed" und KorrekturDummy = an. Wenn das triggert, hat der Nutzer das Rollo nicht mehr manuell gestoppt und es ist in einer Endlage. Dann wird das KorrekturDummy wieder "aus" gesetzt und es gibt nichts zu korrigieren.



Natürlich müssten noch Logik-Checks rein, also kein Auslösen, wenn man "Runter" drückt und der Rolladen schon unten ist, und ein Zwischenschritt, falls der Nutzer während der Fahrt per Taster die Richtung wechselt, etc. Das wäre kein Problem, nur Fleiß. Auch könnte ich wohl die ersten beiden Notifys noch in eins verschmelzen, aber das ist Feintuning.

Bevor ich jetzt das ganze in Code gieße und die Ärmchen links und rechts dranschraube, bitte ich um Feedback, ob man das nicht noch besser/eleganter lösen kann. Und ich bitte um Hinweise, wo ich die o.g. Daten wegspeichern sollte - als Readings meines Dummys (gaaanz schlechter Stil, wie man hier so liest)? Oder als userreading des Tasters/Rolladen-Devices? Oder in eine Variable, die notify-übergreifend abgefragt werden kann?

Eine komplette perl-Sub o.ä. traue ich mir noch nicht so recht zu - bin schon froh, wenn meine Perl-Elemente in den DOIFs und NOTIFYs funzen. Meine Fragen hier beweisen es  8)


Dann Feuer frei... wie mach ich ein hübsches Puzzle aus den Teilen? Hab ich mich schon verrannt?
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?