FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: DeeSPe am 09 Mai 2017, 14:11:04

Titel: PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 09 Mai 2017, 14:11:04
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
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: CoolTux am 09 Mai 2017, 14:37:11
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
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 09 Mai 2017, 14:52:29
Das ist schon so lange, soweit ich mich recht erinnere, wie es absenceThreshold im Modul gibt und ärgert mich schon immer.

Gruß
Dan
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: CoolTux am 09 Mai 2017, 14:55:31
Also bei mir ist es erst vor ein oder zwei Monaten gekommen. Vorher hatte es gut funktioniert.
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 11 Mai 2017, 13:43:58
*Hust*
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: CoolTux am 11 Mai 2017, 13:52:03
**Lutschbonbon reich**
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: CoolTux am 11 Mai 2017, 13:55:18
Habe dem Markus mal eine Nachricht geschickt.
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 11 Mai 2017, 13:57:24
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
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: Markus Bloch am 11 Mai 2017, 22:03:41
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
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: CoolTux am 11 Mai 2017, 22:13:09
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?
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 11 Mai 2017, 22:17:49
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.
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 11 Mai 2017, 22:33:15
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
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 11 Mai 2017, 22:51:45
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
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag 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
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 11 Mai 2017, 23:19:15
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
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: CoolTux am 11 Mai 2017, 23:35:48
Ok, wahrscheinlich muss man sich Mal den ganzen Code anschauen. Werde das mal so einbauen und testen bei mir. Ausserdem schaue ich morgen mal in den Code.
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 11 Mai 2017, 23:37:38
Habe gerade vor $count noch das -- ergänzt damit der Zähler stimmt.
Bei mir überleben die absent Devices so schon mal sauber einen Neustart. 8)

Gruß
Dan
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 11 Mai 2017, 23:59:47
Ganz rund ist die Sache noch nicht, denn der Counter muss ja tatsächlich wieder auf 0 gesetzt werden.
Ich denke so geht es, die Readings waren einfach vertauscht:
ZitatIndex: 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, ".presenceThresholdCounter", 0);
                 readingsBulkUpdate($hash, "state", "absent");
                 readingsBulkUpdate($hash, "presence", "absent");
             }
@@ -1334,7 +1334,7 @@
         {
             if(++$count >= $presenceThreshold)
             {
-                readingsBulkUpdate($hash, ".presenceThresholdCounter", "0");
+                readingsBulkUpdate($hash, ".absenceThresholdCounter", 0);
                 readingsBulkUpdate($hash, "state", "present");
                 readingsBulkUpdate($hash, "presence", "present");


Gruß
Dan

EDIT:
Nein immer noch nicht!
Die Mischung aus beiden klappt nun gut bei mir:
Index: FHEM/73_PRESENCE.pm
===================================================================
--- FHEM/73_PRESENCE.pm (revision 14249)
+++ FHEM/73_PRESENCE.pm (working copy)
@@ -1289,7 +1289,8 @@
         {
             if(++$count >= $absenceThreshold)
             {
-                readingsBulkUpdate($hash, ".absenceThresholdCounter", 0);
+                readingsBulkUpdate($hash, ".presenceThresholdCounter", 0);
+                readingsBulkUpdate($hash, ".absenceThresholdCounter", $count);
                 readingsBulkUpdate($hash, "state", "absent");
                 readingsBulkUpdate($hash, "presence", "absent");
             }
@@ -1334,7 +1335,8 @@
         {
             if(++$count >= $presenceThreshold)
             {
-                readingsBulkUpdate($hash, ".presenceThresholdCounter", "0");
+                readingsBulkUpdate($hash, ".absenceThresholdCounter", 0);
+                readingsBulkUpdate($hash, ".presenceThresholdCounter", --$count);
                 readingsBulkUpdate($hash, "state", "present");
                 readingsBulkUpdate($hash, "presence", "present");
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 12 Mai 2017, 23:15:02
Hast Du es mal getestet Marko?

Gruß
Dan
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: CoolTux am 13 Mai 2017, 00:24:21
Zitat von: DeeSPe am 12 Mai 2017, 23:15:02
Hast Du es mal getestet Marko?

Gruß
Dan

Leider noch nicht. Bin noch nicht dazu gekommen. Stecke mitten im Umbau von AMAD fest  ;D
Läuft es bei Dir?


Grüße
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 13 Mai 2017, 00:35:25
Es tut erfolgreich seinen Dienst, überlebt die Neustarts problemlos und setzt auch den Zähler zurück.
Sogar wenn man mitten in einem absence Cycle neustartet, startet auch PRESENCE wieder beim richtigen Zähler.
Ganz perfekt ist der Zähler am Ende (nach Ablauf des Cycle) irgendwie teilweise noch nicht! 8)
Ist aber nur ein Schönheitsfehler, der nicht wirklich stört. Markus wird da sicher gleich die Lösung für sehen.
Habe allerdings bisher auch nur den absence Cycle getestet. presenceThreshold habe ich nicht im Einsatz.

Gruß
Dan
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: CoolTux am 13 Mai 2017, 00:39:21
Klingt auf jeden Fall gut. PresenceThreshold habe ich auch nicht im Einsatz.
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: Markus Bloch am 13 Mai 2017, 10:56:03
Hallo zusammen,

mein Fehler war, dass ich beim erreichen des finalen Zustands (absent/present), den Counter mit dem Wert 0 gespeichert habe, was bei einem Neustart ein erneutes durchgehen zufolge hat. Jetzt wird der Counter im korrekten Zustand gespeichert, sodass nach einem Neustart der Zustand sofort final gesetzt wird.

Vielen Dank für eure Hilfe.

Gruß
Markus
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: DeeSPe am 13 Mai 2017, 13:17:38
Danke, und freut mich dass Du das so schnell gefixt hast. :)
Dann war ja meine vorgeschlagene Änderung gar nicht sooo schlecht. 8)
Und eigentlich hattest Du ja, entgegen Deiner eigenen Vermutung, bereits alles vorbereitet. Nur war die Umsetzung noch nicht ganz perfekt.

Gruß
Dan
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: Markus Bloch am 13 Mai 2017, 15:14:05
Zitat von: DeeSPe am 13 Mai 2017, 13:17:38
Und eigentlich hattest Du ja, entgegen Deiner eigenen Vermutung, bereits alles vorbereitet. Nur war die Umsetzung noch nicht ganz perfekt.

Man wird mit dem zunehmenden Alter eben auch vergesslicher ;)
Titel: Antw:PRESENCE: "maybe absent" nach Neustart von FHEM
Beitrag von: CoolTux am 13 Mai 2017, 15:25:35
Und attraktiver, vergiss das attraktiver nicht!!!
;D  ;D  ;D