[bug] 73_PRESENCE.pm - Parameter present-check-interval wird ignoriert

Begonnen von betateilchen, 02 Juni 2016, 20:47:39

Vorheriges Thema - Nächstes Thema

betateilchen

Obwohl ich einen present-timeout von 120 Sekunden definiert habe:

define gtag PRESENCE lan-bluetooth 11:.... 192.168.123.157:5333 30 120

wird der Parameter einfach komplett ignoriert:


2016-06-02 20:39:49 PRESENCE gtag presence: present
2016-06-02 20:40:20 PRESENCE gtag presence: present
2016-06-02 20:40:49 PRESENCE gtag presence: present
2016-06-02 20:41:19 PRESENCE gtag presence: present
2016-06-02 20:41:49 PRESENCE gtag presence: absent
2016-06-02 20:42:19 PRESENCE gtag presence: present
2016-06-02 20:42:49 PRESENCE gtag presence: present


Vermutlich fängt die Ursache des Problems schon damit an,
dass an dieser Stelle im Code PRESENCE steht anstatt PRESENT (wie an allen anderen Stellen)


Index: 73_PRESENCE.pm
===================================================================
--- 73_PRESENCE.pm (revision 11578)
+++ 73_PRESENCE.pm (working copy)
@@ -170,7 +170,7 @@
     }

     my $timeout = $hash->{TIMEOUT_NORMAL};
-    my $presence_timeout = $hash->{TIMEOUT_PRESENCE};
+    my $presence_timeout = $hash->{TIMEOUT_PRESENT};

     if(defined($timeout) and not $timeout =~ /^\d+$/)
     {


Aber selbst wenn ich das in PRESENT ändere, ändert sich das Verhalten nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

moskito

Hab gerade mal bei mir nachgeschaut - funktioniert alles wie es soll. Allerdings mit local-bluetooth und lan-ping.

2016.06.02 21:15:23 4: PRESENCE (handy) - rescheduling next check in 60 seconds
FHEM auf Intel NUC/Proxmox & Debian 12 + HM-CFG-USB + zigbee2mqtt + Zwave + Enocean

Markus Bloch

Hallo Udo,

deine Beobachtung ist durchaus korrekt, was das Verhalten angeht. Die Stelle im Code welche Dir aufgefallen ist, dient lediglich der Syntax-Prüfung im Rahmen der Define-Funktion. Dennoch handelt es sich hier um einen Fehler. Werd ich fixen.

Zum Verhalten mit lan-bluetooth gebe ich Dir Recht, da funktioniert das present-timeout nicht. Das liegt daran, dass ich das damals für diese Variante mit in den collectord geschoben habe, wo man  für jeden Raum einzeln ein present-timeout setzen kann. Generell habe ich nichts gegen diese "Sonderlocke" zu schließen, da presenced und collectord damit jeweils umgehen können. presenced würde das neue timeout entsprechend umsetzen und collectord würde es eh ignorieren, da es eigene timeouts konfiguriert hat.

Ich nehme an du verwendest den lepresenced von Patrick für einen Low-Energy Scan.

Ich werde das ganze wahrscheinlich am Wochenende ändern können, dauert also nicht mehr lange ;)

Gruß und gute Nacht

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)

betateilchen

Zitat von: Markus Bloch am 02 Juni 2016, 22:03:26
Ich nehme an du verwendest den lepresenced von Patrick für einen Low-Energy Scan.

Ich werde das ganze wahrscheinlich am Wochenende ändern können, dauert also nicht mehr lange ;)

Ja, lepresenced. Und nur keinen Streß, so schlimm ist das Ganze nicht, es ist mir heute beim "Spielen" nur aufgefallen. Mit collectord habe ich noch gar nicht gearbeitet. Bin ja schon froh, dass ich den Sinn von lepresenced verstanden habe  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus Bloch

Hallo Udo,

hab ich soeben eingecheckt. Habe es bei mir ausgiebig mit dem normalen presenced getestet. Sollte aber auch mit lepresenced funktionieren. Da ich aktuell keinen LE-Tag habe, konnte ich das nicht exakt verifizieren. Ich habe aber den Perl-Code von Patricks lepresenced durchgeschaut und denke, dass es klappen sollte.

Gruß und ein angenehmes Wochenende

Markus

Edit: Solltest du nur ein svn update und reload 73_PRESENCE machen, muss zusätzlich ein modify der Define-Parameter gemacht werden, da eine Änderung in der DefineFn enthalten ist ;-)
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

betateilchen

Hallo Markus,

danke für Deine Unterstützung. Das Verhalten hat sich tatsächlich verändert:


2016-06-04 21:51:34 PRESENCE gtag present
2016-06-04 21:51:34 PRESENCE gtag presence: present
2016-06-04 21:51:34 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 21:53:34 PRESENCE gtag present
2016-06-04 21:53:34 PRESENCE gtag presence: present
2016-06-04 21:53:34 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 21:55:34 PRESENCE gtag present
2016-06-04 21:55:34 PRESENCE gtag presence: present
2016-06-04 21:55:34 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 21:57:34 PRESENCE gtag present
2016-06-04 21:57:34 PRESENCE gtag presence: present
2016-06-04 21:57:34 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 21:59:34 PRESENCE gtag present
2016-06-04 21:59:34 PRESENCE gtag presence: present
2016-06-04 21:59:34 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 22:01:34 PRESENCE gtag absent
2016-06-04 22:01:34 PRESENCE gtag presence: absent
2016-06-04 22:01:35 PRESENCE gtag command_accepted: yes
2016-06-04 22:01:35 PRESENCE gtag absent
2016-06-04 22:01:35 PRESENCE gtag presence: absent
2016-06-04 22:02:05 PRESENCE gtag absent
2016-06-04 22:02:05 PRESENCE gtag presence: absent
2016-06-04 22:02:35 PRESENCE gtag absent
2016-06-04 22:02:35 PRESENCE gtag presence: absent
2016-06-04 22:03:05 PRESENCE gtag present
2016-06-04 22:03:05 PRESENCE gtag presence: present
2016-06-04 22:03:05 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 22:03:05 PRESENCE gtag command_accepted: yes
2016-06-04 22:03:05 PRESENCE gtag present
2016-06-04 22:03:05 PRESENCE gtag presence: present
2016-06-04 22:03:05 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 22:05:57 PRESENCE gtag present
2016-06-04 22:05:57 PRESENCE gtag presence: present
2016-06-04 22:05:57 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 22:07:05 PRESENCE gtag present
2016-06-04 22:07:05 PRESENCE gtag presence: present
2016-06-04 22:07:05 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 22:09:05 PRESENCE gtag absent
2016-06-04 22:09:05 PRESENCE gtag presence: absent
2016-06-04 22:09:06 PRESENCE gtag command_accepted: yes
2016-06-04 22:09:06 PRESENCE gtag absent
2016-06-04 22:09:06 PRESENCE gtag presence: absent
2016-06-04 22:09:35 PRESENCE gtag present
2016-06-04 22:09:35 PRESENCE gtag presence: present
2016-06-04 22:09:35 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 22:09:36 PRESENCE gtag command_accepted: yes
2016-06-04 22:09:37 PRESENCE gtag present
2016-06-04 22:09:37 PRESENCE gtag presence: present
2016-06-04 22:09:37 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 22:11:36 PRESENCE gtag present
2016-06-04 22:11:36 PRESENCE gtag presence: present
2016-06-04 22:11:36 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 22:13:36 PRESENCE gtag present
2016-06-04 22:13:36 PRESENCE gtag presence: present
2016-06-04 22:13:36 PRESENCE gtag device_name: Gigaset G-tag


Lediglich beim Statuswechsel scheint was durcheinander zu kommen, aber im großen und ganzen passt das schon.

Die zweite "absent" Phase ist übrigens eigenartig, ich hatte keine der beteiligten Komponenten bewegt.
Aber solche absent-Effekte scheinen bei den g-tags manchmal vorzukommen.

War übrigens gar nicht so einfach, innerhalb meiner Wohnung das absent zu provozieren, meine Wohnung ist scheinbar zu klein...  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Hallo Udo,

Solche abent Effekte kommen in der Tat öfters vor. Daher empfehle ich das Attribut absenceThreshold zu verwenden.


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

Markus Bloch

Hallo Udo,

super, dass es funktioniert :)

Zitat von: betateilchen am 04 Juni 2016, 22:17:12
Lediglich beim Statuswechsel scheint was durcheinander zu kommen, aber im großen und ganzen passt das schon.

Was genau meinst du? Sah soweit alles in Ordnung für mich aus.

Diese sporadischen absent-Effekte können durchaus vorkommen. Wie von CoolTux vorgeschlagen, kann man hier das Attribut absenceThreshold verwenden um eine tatsächliche Abwesenheit erst nach X "absent"-Ergebnissen zu setzen. Als Zwischenstatus kommt dann "maybe absent". Sobald die gewünschte Anzahl erreicht ist, wird der Status dann final auf "absent" gesetzt.

Alternativ kann man auch die alte Variante mit einem Watchdog verwenden.

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)

betateilchen

Hallo Markus,

Zitat von: Markus Bloch am 05 Juni 2016, 15:52:13
Was genau meinst du? Sah soweit alles in Ordnung für mich aus.

Es ist irgendwie auch alles in Ordnung, ich versuche mal zu beschreiben, was ich meine.
Immer wenn es von present auf absent (oder umgekehrt) wechselt, kommen zwei Events (mit gleichem Status) sehr kurz hintereinander. Wie gesagt, absolut nicht dramatisch, es fiel mir nur auf.



2016-06-04 21:59:34 PRESENCE gtag presence: present
2016-06-04 21:59:34 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 22:01:34 PRESENCE gtag absent
2016-06-04 22:01:34 PRESENCE gtag presence: absent
2016-06-04 22:01:35 PRESENCE gtag command_accepted: yes
2016-06-04 22:01:35 PRESENCE gtag absent
2016-06-04 22:01:35 PRESENCE gtag presence: absent

2016-06-04 22:02:35 PRESENCE gtag presence: absent
2016-06-04 22:03:05 PRESENCE gtag present
2016-06-04 22:03:05 PRESENCE gtag presence: present
2016-06-04 22:03:05 PRESENCE gtag device_name: Gigaset G-tag
2016-06-04 22:03:05 PRESENCE gtag command_accepted: yes
2016-06-04 22:03:05 PRESENCE gtag present
2016-06-04 22:03:05 PRESENCE gtag presence: present
2016-06-04 22:03:05 PRESENCE gtag device_name: Gigaset G-tag

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus Bloch

Das ist ein normales Verhalten. Sobald der Status wechselt (absent->present / present->absent) wird das neue Interval (normal oder present) an lepresenced übermittelt. Aufgrund der Änderung des Intervals wird der Status sofort nochmals übermittelt, da es quasi ein "Auftragsänderung" für lepresenced ist.

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)

betateilchen

Dann ist ja alles gut :)

Danke nochmal für die schnelle Anpassung.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!