vorschlag PRESENCE threshold

Begonnen von justme1968, 07 April 2016, 12:10:05

Vorheriges Thema - Nächstes Thema

justme1968

hallo markus,

ich spiele seit ein paar tagen mit dem gedanken ob man presence nicht um einen optionalen threshold erweitern könnte.

dieser würde festlegen nach wie vielen malen nichterreichbarkeit der status tatsächlich auf absent geht. d.h. wenn das attribut gesetzt ist würde der zustand beim ersten mal nicht direkt auf absent gehen sondern zuerst auf 'maybe absent' oder auch undetermined. erst wenn sich die nichterreichbarkeit dann x mal wiederholt geht der status auf 'absent'. beim ersten erreichbar geht der status auf jeden fall sofort auf 'present'.

den zusätzlichen zustand könnte man in plots und auch notifys direkt mit auswerten oder je nach dem wie rum man die plot function bzw. regex wählt dem absent oder present status zuschlagen.

das ganze kann man zwar auch über einen watchdog lösen aber wenn mehrere presence devices hat ist der overhead deutlich größer als wenn es direkt eingebaut wäre. weil es zusätzliche devices braucht und auch deutlich mehr events erzeugt werden.

würdest du einen solchen patch einbauen oder es sogar selber machen :) wollen?

eigentlich ist es nur ein zusätzlicher zähler und ein bisschen umräumen um die verteilten updates von state und presence an einer stelle zusammen zu fassen und dort dann auch den zähler auszuwerten.

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

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

Markus Bloch

Hallo Andre,

anbei mein Vorschlag wie ich es einchecken würde. Am Ende gibt es eine neue Funktion PRESENCE_ProcessState(). Diese bildet die Logik dazu ab und wird an den entsprechenden Stellen genutzt um die state/presence-Readings zu updaten.

Zu nutzendes Attribut ist absenceThreshold.

Erstmal alles ohne commandref-Doku für dich zum testen. Sollte alles passen, würde ich es so inkl. Doku einchecken.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

das klingt klasse. schaue ich mir nachher gleich an.

vielen dank
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

justme1968

hallo markus,

ich hätte nur zwei anmerkungen:

- ich würde für den zwischenzustand die readings auf einen eigenen wert setzen. 'undetermined' oder 'maybe absent'. dann kann man auch bei gesetzten attribut ohne am wert etwas zu ändern in notifys oder in den plots flexibel reagieren. sogar auf alle drei zustände.

- den counter stand würde ich mit level 3 oder besser noch 4 loggen. nicht mit 2.

ansonsten: vielen dank :)

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

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

Markus Bloch

Hallo Andre,

zu deinen Anmerkungen:

Zitat von: justme1968 am 09 April 2016, 20:53:04
- ich würde für den zwischenzustand die readings auf einen eigenen wert setzen. 'undetermined' oder 'maybe absent'. dann kann man auch bei gesetzten attribut ohne am wert etwas zu ändern in notifys oder in den plots flexibel reagieren. sogar auf alle drei zustände.

Bei dem Zwischenzustand bin ich mir momentan nicht sicher, ob man ihn ausgeben soll oder nicht. Unter dem Gesichtspunkt "der User sollte wissen, was er da konfiguriert hat", sollte man davon ausgehen können, dass dem User der Verzug um bspw. 3 Checkintervalle bekannt sein sollte, bis der Status auf "absent" umspringt. Wenn ich nun einen Zwischenstatus wie bspw. "maybe absent" einführe, sehe ich die Gefahr, das einige User aufgrund von Unwissen oder gefährlichem Halbwissen ein notify mit "iPhone:.*absent" oder "iPhone:.*absent.*" definiert haben, das gar nicht mehr auf dem Schirm haben und dann diese tolle neue Funktion im CHANGED entdecken.

Ich bin daher gespalten was das angeht.

Zitat von: justme1968 am 09 April 2016, 20:53:04
- den counter stand würde ich mit level 3 oder besser noch 4 loggen. nicht mit 2.

Das war nur für mich zum testen/debuggen. In der Live-Version würde ich es auf 4 setzen.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

ich hätte kein problem damit da es ja nur aktiv wird wenn das attribut gesetzt wird.

wenn du meinst das es trotzdem zu problem kommen könnte würde ich den zwischenzustand durch ein weiteres attribut aktivieren. die möglichkeit alle drei zustände zu haben ist neben der einfacheren konfiguration und dem einsparen von zusätzlichen devices noch ein vorteil gegenüber threshold.

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

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

Markus Bloch

Ich werde es morgen mit "maybe absent" als Zwischenstatus bei aktiviertem absenceThreshold einchecken.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

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

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

dev0

@Andre: Ich benutze noch das angepasste 73_PRESENCE.pm Modul von Dir aus dem diesem Beitrag. Um das Modul nicht immer selbst patchen zu müssen, würde mich in diesem Zusammenhang interesssieren, wie Du jetzt die BT-LE Dongles auswertest. Angepasstes presenced script oder habe ich die "offizielle Lösung" verschlafen?

/Uli

Markus Bloch

Änderung mit neuem Attribut ist eingecheckt.

Schönes Wochenende wünsch ich :)

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

kumue

ich kann kein neues Attribut finden...

73_PRESENCE.pm       11213 2016-04-09 16:48:28Z markusbloch

Markus Bloch

Erst mit dem morgigen update ;) ansonsten musst du dir es manuell aus dem SVN herunterladen und in den Modul-Ordner schieben:

https://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/FHEM/73_PRESENCE.pm?format=raw

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

kumue

Zitat von: Markus Bloch am 10 April 2016, 11:51:53
Erst mit dem morgigen update ;) ansonsten musst du dir es manuell aus dem SVN herunterladen und in den Modul-Ordner schieben:

https://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/FHEM/73_PRESENCE.pm?format=raw

Gruß
Markus

Ok, danke.
Ich glaub, ich kann mich bis morgen noch gedulden.
Schönen Sonntag noch !

raimundl

Hallo,

vorerst DANKE - funktioniert prima und vereinfacht einiges bei mir - tolles Modul!

Nur eine Frage interessehalber:

Wofür ist das Attribut "powerCmd" gedacht?

LG
Homematic: Licht, Heizung, Alarm, Alexa ... auf einen RaspberryPi3+mit OS "Stretch" und RPI-RF-MOD mit piVCCU3 (HMCCU), ca. 40 HM Komponenten, alexa, MobileAlerts, Hue Ledstripes....

justme1968

wenn du powerCmd passend setzt kannst du es z.b. mit devStateIcon als kommando beim klick auf das icon hinterlegen und so geräte ein oder aus schalten.

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

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

Markus Bloch

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

raimundl

Zitat von: Markus Bloch am 11 April 2016, 14:51:59
siehe commandref: http://fhem.de/commandref_DE.html#PRESENCE_powerCmd

Hallo,
natürlich habe ich die commandref gelesen (auch Fhemwiki). Da ich das Modul voll im Einsatz habe - Android Handy via Bluetooth mit Raspi3 - wollte ich auch dieses Attribut erforschen. Ein praxisbezogenes Beispiel würde mir hier sicher weiterhelfen. Aber wie gesagt, vorerst nur interessehalber.

Danke und LG
Homematic: Licht, Heizung, Alarm, Alexa ... auf einen RaspberryPi3+mit OS "Stretch" und RPI-RF-MOD mit piVCCU3 (HMCCU), ca. 40 HM Komponenten, alexa, MobileAlerts, Hue Ledstripes....

justme1968

wenn du einen rechner überwachst kannst du ihn z.b. per klick mit wol einschalten und per ssh ausschalten.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Markus Bloch

Kam der Wunsch nicht sogar von Dir, Andre? :D
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

ja:) und es funktioniert wunderbar.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

raimundl

Hallo!

Wenn ich es nun richtig verstanden habe, kann man nicht nur einen "ping-Befehl" sondern eben auch andere Befehle im Netzwerk senden.
Da ich vorerst nur mit Bluetooth arbeite, habe ich diese Möglichkeit nicht berücksichtigt.

Danke und LG
Homematic: Licht, Heizung, Alarm, Alexa ... auf einen RaspberryPi3+mit OS "Stretch" und RPI-RF-MOD mit piVCCU3 (HMCCU), ca. 40 HM Komponenten, alexa, MobileAlerts, Hue Ledstripes....

DeeSPe

Ich will einfach mal danke sagen für diese tolle und sinnvolle Erweiterung des PRESENCE Moduls.
Bin schwer begeistert, das löst meine teilweise Nichterreichbarkeitsprobleme meines Handys ohne dass ich etwas anderes definieren muss.
Super Vorschlag Andre und super umgesetzt Markus.

Also nochmals vielen Dank.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Jamo

Hallo Markus,
danke für das PRESENCE threshold update, das funktioniert super und erschlägt mir 2 Watchdogs!

Zum PowerCommand: Damit kann man entweder einen FHEM-Befehl zum Einschalten definieren, oder aber zum Ausschalten hinterlegen, aber nicht beides. Wie geht das wenn ich ein WOL zum Aufwecken haben muss, und ein Telnet/ssh zum remote 'sleep' (z.B für eine NAS)?

Bräuchte es dann nicht noch ein 2-tes PowerOffCommand?

Gruss, Ingolf
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

justme1968

in $ARGUMENT steht in es gerade um on oder off geht.  du kannst also z.b. mit der {...} perl variante und einem if beide fälle abdecken.

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

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

Devender

Nabend zusammen!

von mir auch vielen Dank für die tolle Erweiterung und die Idee dazu  :)
Allerdings hätte ich eine Frage dazu bzw. zum Attr. devStateIcon
   
Ich hatte bisher folgendes konfiguriert:
devStateIcon present:10px-kreis-gruen absent:10px-kreis-rot

Mit dem Neuen Status wollte ich jetzt diese hier ergänzen:
maybe absent:10px-kreis-gelb

Allerdings funktioniert das nicht. Es wird kein gelber Kreis angezeigt (zum Test mit gruen klappt auch nicht)
Auch ein Setzen des Textes "maybe absend" in " " klappt auch nicht,
Kann es sein, dass das Attr. devStateIcon nur einzelne Wörter akzeptiert?

Wie kann ich das umgehen bzw. geht das überhaupt so, wie ich mir das vorgestellt habe?

Danke und Grüße,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

Paul

Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

Devender

FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

justme1968

hallo markus,

noch eine idee: wie wäre es in einem reading zu dokumentieren wann der letzte wechsel auf absent bzw. present stattgefunden hat?

anbei ein vorschlag wie das aussehen könnte. das ganze absichtlich nur bei absent und present und bei absent mit rückrechnung um den absenceThreshold zeitraum.

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

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

Markus Bloch

Hallo Andre,

wenn man doch aber das ganze aus https://forum.fhem.de/index.php/topic,52483.0.html umsetzt, wäre dies doch nicht nötig, oder irre ich mich da?

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

nicht ganz :)

der unterschied ist das zurück rechnen des zeitpunktes.

in der geposteten version hatte ich auch noch etwas zweites vergessen: ich verwende ja bei mir die dhcp lease per snmp als kriterium. deshalb würde ich gerne neben das peitraums der in dem vorschlag schon drin ist zusätzlich noch eine zusätzliche konfigurierbare (dhcp lease) zeit abziehen um so zumindest rückwärts so genau wie möglich die richtige absence zeit zu bekommen.

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

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

Markus Bloch

Wieso? Wenn das Reading "presence" den Timestamp enthält, wann es zuletzt geändert wurde (was ja dein Patch in dem anderen Thread bewirken soll), dann kann man doch den Zeitpunkt der Änderung mittels ReadingsTimestamp oder ReadingsAge ermitteln. Ich persönlich würde diese Lösung vorziehen, da sie systemweit anwendbar ist.

Dein Fall mit dem DHCP Lease versteh ich gerade irgendwie nicht...  :-\

Gruß
Markus

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

das mit dem rechnen ist zwar prinzipiell kein problem. beim ftui ist es aber einfacher nur ein reading anzuzeigen.

das ginge zwar über user readings aber eigentliche grund ist natürlich das der vorschlag hier ist eine halbe stunde älter ist als der generelle ansatz aus dem anderen theead :)

eine airport base station meldet ein gerät erst etwa 15 minuten nach dem letzten kontakt als abwesend. ich vermute das ist die lease zeit. ich habe aber noch nicht nachgeschaut.

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

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

ragnarok

#32
Kann ich mir hier noch eine kleine Änderung wünschen ?

Eingestiegen bin ich in das Presence Modul ohne die absenceThreshold und ich reagiere explizit auf presence = present / absent mit je einem Notify genau auf diese Statusänderung.

Jetzt habe ich noch einen absenceThreshold definiert und keinen Timeout. Mein Problem ist nun, dass in der 73_PRESENCE.pm Methode ProcessState der Status auch von absent auf maybe absent wechselt, sobald dann nochmal der absenceThreshold abläuft, wird mein notify nochmal getriggert.

Mich interessiert aber nur die Kette von present->maybe absent->absent und nicht absent->maybe absent->absent.

Das "if($hash->{MODE} eq "event")" trifft nicht zu, weshalb er da in das else geht.

Ich habe es bei mir lokal auch schon umgebaut, nur mit dem nächsten Update ist das natürlich nochmal weg.

Könnte man also die folgende Stelle

            if(++$count >= $absenceThreshold)
            {
                readingsBulkUpdate($hash, ".presenceThresholdCounter", 0);
                readingsBulkUpdate($hash, ".absenceThresholdCounter", ($count-1));
                readingsBulkUpdate($hash, "state", "absent");
                readingsBulkUpdate($hash, "presence", "absent");
            }
            else
            {
                $hash->{helper}{ABSENT_COUNT} = $count;

                readingsBulkUpdate($hash, ".presenceThresholdCounter", 0);
                readingsBulkUpdate($hash, ".absenceThresholdCounter", $count);
                readingsBulkUpdate($hash, "state", "maybe absent");
                readingsBulkUpdate($hash, "presence", "maybe absent");

                Log3 $name, 4, "PRESENCE ($name) - device is absent after $count check".($count == 1 ? "" : "s").". ".($absenceThreshold-$count)." check".(($absenceThreshold-$count) == 1 ? "" : "s")." left $
            }


ändern auf das hier und analog dazu auch untendrunter, wenn $state gleich "present" ?

            if(++$count >= $absenceThreshold)
            {
                readingsBulkUpdate($hash, ".presenceThresholdCounter", 0);
                readingsBulkUpdate($hash, ".absenceThresholdCounter", ($count-1));
                readingsBulkUpdate($hash, "state", "absent");
                readingsBulkUpdate($hash, "presence", "absent");
            }
            else
            {
                $hash->{helper}{ABSENT_COUNT} = $count;

                readingsBulkUpdate($hash, ".presenceThresholdCounter", 0);
                readingsBulkUpdate($hash, ".absenceThresholdCounter", $count);
                if ($current_state ne "absent")
                {
                    readingsBulkUpdate($hash, "state", "maybe absent");
                    readingsBulkUpdate($hash, "presence", "maybe absent");
                }

                Log3 $name, 4, "PRESENCE ($name) - device is absent after $count check".($count == 1 ? "" : "s").". ".($absenceThreshold-$count)." check".(($absenceThreshold-$count) == 1 ? "" : "s")." left $
            }


In meinen Augen ist es so sogar richtiger, wie es aktuell ist.

Als Modus habe ich function gewählt und benutze die checkAllFritzMACpresent aus dem Wiki.

Markus Bloch

#33
Hallo Ragnarok,

eigentlich können mMn nur folgende Zustandswechsel auftreten:

present -> absent -> present  (ohne absenceThreshold/presentThreshold)
present -> maybe absent -> absent (absenceThreshold=2)
absent -> maybe present -> present (presenceThreshold=2)

absent -> maybe present -> absent (erster Check positiv, zweiter negativ)
present -> maybe absent -> present (erster Check negativ, zweiter positiv)

Ein Zustandswechsel absent -> maybe absent -> absent ist so nicht vorgesehen und habe ich auch bei meinen (damaligen) Tests nicht feststellen können. In so einem Fall, bleibt der Status konstant auf absent.

Falls das bei dir dennoch der Fall sein sollte, bitte mal die Ausgabe des FHEM-Befehls "list" von deiner PRESENCE-Definition hier posten, sowie das verbose-Attribut deiner PRESENCE-Definition bitte mal auf 5 stellen, einige Zeit warten bis der Fehler wieder auftritt und dann bitte die gesamten Logmeldungen zu PRESENCE aus deinem fhem.log hier anhängen.

Vielen Dank

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

ragnarok

Hallo Markus,

danke für deine Antwort. Frag mich bitte nicht, was ich am 27. da gemacht habe, ich kriege es grad nicht mehr nachgestellt.

Hab das ganze zwischenzeitlich noch eingeschränkt, dass das Notify nur morgens innerhalb einer bestimmten Uhrzeit auf absent reagieren soll und das gleiche auch mittags bei present. Ansonsten wurde das Notify ohne weitere Aktion beendet.

Hab jetzt mal testweise wieder die originale 73_PRESENCE.pm aktiv und dafür gesorgt, dass ich bei jedem Wechsel auf present oder absent ne Nachricht per Telegram bekomme.

Falls ich da jetzt wieder erwarten Botschaft bekomme, würde ich mich nochmal melden ;-)

Gruß Michael