Gelöst: Housekeeping für event-aggregator ohne Event ?

Begonnen von hasselh, 19 Juli 2021, 10:47:42

Vorheriges Thema - Nächstes Thema

hasselh

Hallo Zusammen,

ich verwende das event-aggregator Attribut um mit einigen im Haus verteilten PIR Sensoren so etwas wie eine Präsenzerkennung hinzubekommen. Dinge wie Heizung sollen natürlich nicht gleich bei der allerersten Bewegung angehen.. also nur wenn eine bestimmte Anzahl Events pro Zeiteinheit anfällt. Hier meine Definition:

defmod kg_b01 EnOcean 00001043
attr kg_b01 IODev FGW14
attr kg_b01 eep F6-02-01
attr kg_b01 event-aggregator state::none:n:600
attr kg_b01 manufID 7FF
attr kg_b01 subType switch
attr kg_b01 suppressReading channel.
attr kg_b01 teachMethod RPS


Jetzt zu meinem Problem... Wenn Mann/Frau den Raum verlässt, dann bleibt der event-aggregator Zähler stehen und wird erst dann zurückgesetzt, wenn wieder jemand (z.B. am nächsten Tag) den Raum betritt. Wenn ich den Code in der fhem.pl und TimeSeries.pm richtig verstehe, wird kein Timer zum "aufräumen" (also ein Aufruf von trimToHoldTime() nach der unter holdTime deginierten Zeit) gesetzt.

Jetzt zu meiner Frage: Gibt es irgendeine einfache Möglichkeit das "housekeeping" vom event-aggregator zu triggern, so das die Zähler auch wieder auf null laufen, wenn keine Events mehr anfallen ?

Gruss,  hasselh

hasselh

OK, ich hab es (für mich) folgendermaßen gelöst:


defmod aggregator_cleanup notify [dek]g_b\d\d:buttons:.released { \
    my $holdtime=$defs{$NAME}{READINGS}{"state"}{".ts"}{"holdTime"} + 2;; \
    fhem("sleep $holdtime quiet;; { ".\
         "\$defs{'$NAME'}{READINGS}{'state'}{'.ts'}->trimToHoldTime();;;;".\
         "\$defs{'$NAME'}{'STATE'}=\$defs{'$NAME'}{READINGS}{'state'}{'.ts'}{'n'} }") }


Falls jemand noch eine elegantere Möglichkeit hat, immer her damit  :)