PRESENCE: "maybe absent" nach Neustart von FHEM

Begonnen von DeeSPe, 09 Mai 2017, 14:11:04

Vorheriges Thema - Nächstes Thema

DeeSPe

Wie schon im Titel beschrieben frage ich mich warum die PRESENCE Devices nach einem Neustart von FHEM immer wieder bei "maybe absent" anfangen, obwohl sie vor dem Neustart auf "absent" standen.
Das ist in einigen Situationen sehr hinderlich denn z.B. ein notify auf "absent" wird dann nach dem Neustart und Durchlaufen der "absenceThreshold" erneut getriggert, da ja zwischenzeitlich state auf "maybe absent" stand und sich somit von "absent" unterscheidet. Ob das bei "presenceThreshold" auch so ist kann ich nicht sagen, da ich es nicht brauche.

Warum ist das so "unglücklich"?
Lässt sich das beheben?
Der letzte Stand vor dem Neustart müsste doch eigentlich aus dem statefile kommen und dementsprechend wieder "absent" sein!? ???

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

CoolTux

Das ist auch erst seit dem letzten oder vorletzten Update so. Hatte das auch schon angesprochen, allerdings im falschen Thread.

@Markus
Hast Du eine Idee wie das auf einmal da rein gekommen sein kann?



Grüße
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

DeeSPe

Das ist schon so lange, soweit ich mich recht erinnere, wie es absenceThreshold im Modul gibt und ärgert mich schon immer.

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

CoolTux

Also bei mir ist es erst vor ein oder zwei Monaten gekommen. Vorher hatte es gut funktioniert.
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

DeeSPe

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

CoolTux

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

CoolTux

Habe dem Markus mal eine Nachricht geschickt.
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

DeeSPe

Zitat von: CoolTux am 11 Mai 2017, 13:55:18
Habe dem Markus mal eine Nachricht geschickt.

Danke, dann können wir ja gespannt sein... 8)

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

Markus Bloch

Hallo zusammen,

sorry, dass ich den Thread übersehen habe. Ich bin in letzter Zeit nicht mehr so häufig im Forum unterwegs. Der Sommer kommt ;)

Der Grund liegt daran, dass die internen Counter beim Start von FHEM noch nicht existieren:
$hash->{helper}{PRESENT_COUNT}
$hash->{helper}{ABSENT_COUNT}


Sie zählen dann erst hoch und erst dann gehen sie final auf absent bzw. present.

Diesen Counter müsste man eigentlich abspeichern in Form von Readings mit Punkt beginnend. Beim Starten müsste man die Counter darüber wieder einlesen, dann wäre der Status beim ersten Check sofort wieder absent/present.

Kann ich erst am Wochenende angehen, oder jemand stellt einen funktionierenden Patch bereit  8)

Viele Grüße

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)

CoolTux

Und was ist wenn Du sie in der define einfach deklarierst?

$hash->{helper}{PRESENT_COUNT} = 0;
$hash->{helper}{ABSENT_COUNT} = 0;


Würde das in der Define Funktion Sinn ergeben?
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

DeeSPe

Bei mir gibt es bereits entsprechende Readings an den Devices.
Und ich habe die da nicht zusätzlich erzeugt. 8)

Internals:
   ADDRESS    BLABLABLA
   CHANGED
   DEF        lan-bluetooth BLABLABLA 127.0.0.1:5333 10 30
   DeviceName 127.0.0.1:5333
   FD         38
   MODE       lan-bluetooth
   NAME       PRESENCE_rr_Dan
   NOTIFYDEV  global
   NR         101
   NTFY_ORDER 50-PRESENCE_rr_Dan
   PARTIAL
   STATE      present
   TIMEOUT_NORMAL 10
   TIMEOUT_PRESENT 30
   TYPE       PRESENCE
   Helper:
     Dblog:
       Battery:
         Logdb:
           TIME       1494523617.09942
           VALUE      85
       Presence:
         Logdb:
           TIME       1494523599.10279
           VALUE      present
   Readings:
     2017-05-11 19:26:29   .absenceThresholdCounter 0
     2017-05-11 22:14:39   .presenceThresholdCounter 0
     2017-05-11 19:26:57   battery         85
     2017-05-11 19:26:39   command_accepted yes
     2017-05-11 22:14:39   daemon          lepresenced V0.81
     2017-05-11 22:14:39   device_name     Gigaset G-tag
     2017-05-11 22:14:39   presence        present
     2017-05-11 22:14:39   rssi            -70
     2017-05-11 22:14:39   state           present
   Helper:
     CURRENT_STATE present
     CURRENT_TIMEOUT present
Attributes:
   absenceThreshold 10


Gruß
Dan

P.S. Kann gerne warten, kein Stress Markus.
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

DeeSPe

Schaue gerade mal interessenhalber ins Modul:

        if(grep(m/^(?:INITIALIZED|REREADCFG)$/, @{$events}))
        {
            $hash->{helper}{ABSENT_COUNT} = int(ReadingsVal($name, ".absenceThresholdCounter", 0));
            $hash->{helper}{PRESENT_COUNT} = int(ReadingsVal($name, ".presenceThresholdCounter", 0));
        }


Wird sogar wieder eingelesen.

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

DeeSPe

#12
Du hast leider die Readings immer auf 0 gesetzt wenn die Threshold erreicht war. 8)

Hier ein kurz getesteter Diff der bei mir funktioniert wie gewünscht.


Zitat
Index: FHEM/73_PRESENCE.pm
===================================================================
--- FHEM/73_PRESENCE.pm   (revision 14249)
+++ FHEM/73_PRESENCE.pm   (working copy)
@@ -1289,7 +1289,7 @@
         {
             if(++$count >= $absenceThreshold)
             {
-                readingsBulkUpdate($hash, ".absenceThresholdCounter", 0);
+                readingsBulkUpdate($hash, ".absenceThresholdCounter", $count);
                 readingsBulkUpdate($hash, "state", "absent");
                 readingsBulkUpdate($hash, "presence", "absent");
             }
@@ -1334,7 +1334,7 @@
         {
             if(++$count >= $presenceThreshold)
             {
-                readingsBulkUpdate($hash, ".presenceThresholdCounter", "0");
+                readingsBulkUpdate($hash, ".presenceThresholdCounter", $count);
                 readingsBulkUpdate($hash, "state", "present");
                 readingsBulkUpdate($hash, "presence", "present");


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

CoolTux

Also für mich ergibt die Null Sinn. Der Threshold ist abgeschlossen, die Readings werden gesetzt und der Zähler geht wieder auf Null. Wieso soll das jetzt falsch sein?


Grüße
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

DeeSPe

Zitat von: CoolTux am 11 Mai 2017, 23:16:35
Also für mich ergibt die Null Sinn. Der Threshold ist abgeschlossen, die Readings werden gesetzt und der Zähler geht wieder auf Null. Wieso soll das jetzt falsch sein?


Grüße

Eben nicht!
Der Zähler muss doch auf dem letzten (höchsten) Stand stehen bleiben, damit der eben beim Neustart nicht bei 0 anfängt zu zählen sondern bei dem letzten Stand und damit merkt dass der absent Cycle schon durchlaufen ist.

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