erweiterung von PRESENCE/(le)presenced/collectord um rssi werte

Begonnen von justme1968, 10 Juni 2016, 17:36:24

Vorheriges Thema - Nächstes Thema

michael.winkler

#90
im Skript ist ein ) in der Zeile 949 zu viel


syntax error at ./collectord line 949, near "))"
Global symbol "$rssi_data" requires explicit package name at ./collectord line 954.
Global symbol "$rssi_data" requires explicit package name at ./collectord line 954.


michael.winkler

Habe es jetzt am laufen. Kann mir noch jemand sagen warum bei mir keine Batteryinfos angezeigt werden?


Internals:
   ADDRESS    xxxx
   CFGFN
   DEF        lan-bluetooth xxxx 10.10.0.232:5222
   DeviceName 10.10.0.232:5222
   FD         25
   MODE       lan-bluetooth
   NAME       Niklas.blue
   NOTIFYDEV  global
   NR         7461
   NTFY_ORDER 50-Niklas.blue
   PARTIAL
   STATE      present
   TIMEOUT_NORMAL 30
   TIMEOUT_PRESENT 30
   TYPE       PRESENCE
   READINGS:
     2017-07-27 11:55:43   command_accepted yes
     2017-07-27 12:07:44   daemon          lepresenced V0.81
     2017-07-27 12:07:44   device_name     Gigaset G-tag
     2017-07-27 09:34:01   model           lan-bluetooth
     2017-07-27 12:07:44   presence        present
     2017-07-27 12:07:44   room            Haus LE
     2017-07-27 12:07:44   rooms           Haus LE
     2017-07-27 12:07:44   rssi            -85
     2017-07-27 12:07:44   rssi_Haus LE    -85
     2017-07-27 12:07:44   state           present
   helper:
     CURRENT_STATE present
     CURRENT_TIMEOUT normal
     DISABLED   0
Attributes:
   userReadings Batterie,Battery

Phiolin

#92
Zitat von: Markus Bloch am 26 Juli 2017, 23:51:20
Da bin ich mal gespannt. Ich habe das damals bewusst nicht gemacht, da es zu viel Akku ziehen könnte (getestet habe ich das nicht). Mir reichte die Aussage "anwesend/abwesend". Ich lasse mich überraschen, wie Du das ganze löst.

Bisher funktioniert das bei mir mit unseren iPhones (6 und 7 Plus) und Apple Watches relativ problemlos.
Aktuell verwende ich eine Kombi aus

hcitool name <address>

und wenn der Name zurückgegeben wird und das Device demnach anwesend ist, bestimme ich die RSSI über

hcitool cc <address> && hcitool rssi <address>

Mit "cc" kann eine Verbindung ohne vorher notwendige Koppelung aufgebaut werden, die vom Device aber schon nach wenigen Sekunden wieder abgebaut wird. Es reicht aber um über das nachgelagerte "rssi" den RSSI Wert der Verbindung auszulesen.
Beim Akku-Verbrauch habe ich bisher keine spürbare Mehrbelastung festgestellt. Bluetooth ist an den Geräten sowieso an, da sich iPhone und Apple Watch sonst nicht miteinander unterhalten könnten. Die Belastung dürfte bei aktuellen Geräten daher zu verschmerzen sein.
Das einzige Problem das ich habe ist, dass sich bei mir manchmal das Bluetooth Device am Raspberry (und auch am Synology NAS) weghängt und nur noch mit Timeouts reagiert, bis man entweder rebooted oder den Bluetooth Stack neu startet. Das scheint mir aber eher ein Stabilitätsproblem des Treibers zu sein. Das Grenze ich momentan ein, indem ich die Intervalle und Pausen zwischen den Checks erhöhe um das Device nicht zu überlasten. Das Synology NAS scheint da noch empfindlicher zu sein, verwendet aber auch eine viel ältere Version von bluez, die ich jetzt erst mal via debian-chroot durch eine aktuelle ersetzt habe. Das scheint hier schon zu helfen.

Eine Variante die ich gerade parallel teste, ist das Monitoring der Bluetooth Schnittstelle über den System-Dbus anstelle von hcitool, u.a. auch da hcitool in neuen Versionen von bluez nicht mehr enthalten sein wird, da es deprecated ist. Hierzu verwende ich ein recht kurzes und einfaches Python Script. Da muss ich noch schauen, wie ich die RSSI Daten vom Python Script an den presenced bekomme, oder ob ich das direkt an den Collectord schicken kann. Da ich weder Python noch Perl Experte bin, kämpfe ich da noch ein wenig. Wenn das alles mit PHP funktionieren würde, wäre ich wahrscheinlich schon fertig. ;)

Da hcitool Deprecated ist und in aktuellen bluez Versionen nicht mehr standardmäßig enthalten ist, müssen wir uns meines Erachtens mittelfristig eh eine andere Lösung überlegen, wie wir an die Bluetooth Daten kommen. Das wird auch den lepresenced treffen.
Die passende Variante scheint mir die bluez API für Dbus zu sein, um darüber die Daten direkt vom System-Dbus abzugreifen. Dafür gibt es vermutlich auch ein Perl Modul im CPAN, aber da ich mich weder mit Perl noch mit Python noch mit Dbus tiefgreifend auskenne, für Python aber einen Beispielcode gefunden habe, der beinahe schon das macht, was ich eh brauche, habe ich das jetzt erst mal in Python getestet.
Vermutlich wird sich das entweder in Perl adaptieren lassen, oder man schreibt den (le)presenced halt einfach in Python neu, so kompliziert ist der Code ja nicht.

Phiolin

Im heutigen Update des collectord sind ein paar Fehler beim Zusammenbauen der Strings für die Räume.
Neben der oben schon erwähnten zusätzlichen Klammer ')' in Zeile 949, sind in der nächsten Zeile auch noch ein paar ' und ; fehlerhaft. Der ganze Block sollte besser so aussehen, ansonsten kommen falsche Readings zurück:

    if(@rooms > 0)
    {
        my $rssi_data = join(";", map("rssi_".$_."='".$rssi_results{$_}."'", map {s/\s+/_/rg } keys %rssi_results));
        my $ret = "present".
                (defined($hroom) ? ";room='".$hroom."';" : "").
                "rooms='".join(",",sort  @rooms)."'".
                (defined($hroom) ? ";".$hash->{$hroom}{data} : (defined($hash->{$rooms[0]}{data}) ? ";".$hash->{$rooms[0]}{data} : "")).
                (defined($rssi_data) ? ";".$rssi_data : "");
    }


Ansonsten läuft er aber bisher problemlos. :)

Markus Bloch

Hallo zusammen,

vielen Dank für die Hinweise. Habe ich soeben korrigiert. Nun sollte alles passen.

Funktioniert auch der RSSI-Vergleich bei mehr als einem Raum?

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)

Phiolin

Ja, bisher funktioniert der Vergleich hier problemlos. :)
Würde sagen, morgen noch mal abwarten und dann können neue Pakete her.

Phiolin

Kurze Rückmeldung: Bisher keine weiteren Probleme mit dem collectord. Kann dann also wohl gepackt werden. :)

dtavb

#97
Hoi Ihr,

ich habe mir ebenfalls ein bt-tracking nach Eurem Vorbild zusammen gebastelt.
BT via raspi3 (produktives System) ist Mist, das hat mich so Nerven gekostet...
Letztendlich zum Testen: USB Dongle via passthrough und KVM an virt. Host (lab-system) und siehe da, alles hübsch :)
All die Probleme gibt es mit dem Dongle tatsächlich nicht, wollte es ja nicht glauben - geschweige BT und WiFi gleichzeitig auf dem rapsi3. Zum Haare raufen...
Das könnte man eigentlich erwähnen oder darauf hinweisen:
https://wiki.fhem.de/wiki/Anwesenheitserkennung

Freut mich, die rssi-Werte wollte ich schon irgendwie abfragen. Schön dass Ihr das mit einbaut!

Damit ist es dann bestimmt möglich eine Art Abfrage zu erstellen, damit im Presence-Modul nicht mehrere Räume unter "rooms" auftauchen?
habe Testweise 2 Systeme laufen, Werkstatt und Wohnzimmer. In der Werkstatt ist der Empfang echt mies, daher taucht nur Werkstatt unter rooms auf.
Sobald ich in den Flur gehe, steht schon Werkstatt,Wohnzimmer unter rooms. Bin ich nur im Wohnzimmer, stehen trotzdem noch beide Räume unter rooms.


Danke Euch für die tolle Arbeit!

Grüsse,
dtavb
fhem:pi3&kvm, z-wave, it-funk, milight, zigbee, wifi, bt & presence, geo-tracking, alexa, esp.
Monitoring: ELK(syslog), grafana (grafik), netdata (ermittlung)
Security: haproxy (access), ossec (überall), snort (access), opnsense (fw)
Geplant: KVM-Cluster

micky0867

rooms ist doch der Plural. room der Singular. Wenn das Tag von mehreren Räumen empfangen wird, wird das in rooms abgebildet. room ist der Raum mit dem besten rssi

Gesendet von meinem ONEPLUS A3003 mit Tapatalk


dtavb

Hoi micky, ooook, unter readings habe ich room nicht als Einzahl, nur rooms.
Muss ich das reading room manuell hervorholen?
fhem:pi3&kvm, z-wave, it-funk, milight, zigbee, wifi, bt & presence, geo-tracking, alexa, esp.
Monitoring: ELK(syslog), grafana (grafik), netdata (ermittlung)
Security: haproxy (access), ossec (überall), snort (access), opnsense (fw)
Geplant: KVM-Cluster

popy

#100
Hallo.

Danke für diesen tollen thread.
Habe derzeit noch local-bluetooth Erkennung auf einem RPI laufen, würde aber gerne meinen zweiten mit collectord & presenced in Betrieb nehmen.
Wollte schon immer eine genauere Erkennung unserer Phones machen, nun geht dies mittels dem rssi Wert  :D

Wo ich mir noch nicht ganz sicher bin ist, dass das deb Paket des presenced ca. 1 Jahr alt ist?
Auch wenn ich den code aufmache finde ich nichts im hinblick auf rssi.

Oder versteh ich da was falsch?

Nach der Installation lt. dem WIki mit den neuesten Paketen finde ich kein RSSI reading?
Siehe Anhang.


Freue mich über jede Hilfe  ;)
Danke
pOpY

popy

#101
Zitat von: Phiolin am 29 Juli 2017, 22:23:13
Kurze Rückmeldung: Bisher keine weiteren Probleme mit dem collectord. Kann dann also wohl gepackt werden. :)

Hallo @Phiolin.

Wo bekomme ich deine aktuellste modifizierte presenced version inkl. rssi Unterstützung her?
Werde da nicht ganz schlau aus dem WIki: https://wiki.fhem.de/wiki/PRESENCE
Habe mir die Versionen installiert, presenced/collectord Erkennung funktioniert soweit, aber weit und breit kein rssi Wert ersichtlich.

Danke
Tobias

Jamo

rssi gibts nur beim lepresenced, nicht beim presenced.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

popy

#103
Oben ist die rede davon dass es in presenced auch (testweise) implementiert wurde, mit:


hcitool name <address>

und wenn der Name zurückgegeben wird und das Device demnach anwesend ist, bestimme ich die RSSI über

hcitool cc <address> && hcitool rssi <address>

Mit "cc" kann eine Verbindung ohne vorher notwendige Koppelung aufgebaut werden, die vom Device aber schon nach wenigen Sekunden wieder abgebaut wird. Es reicht aber um über das nachgelagerte "rssi" den RSSI Wert der Verbindung auszulesen.


Habe das manuell per SSH getestet, funktioniert wirklich, ohne zu koppeln bekommt man einen RSSI Wert  ;)
Wäre toll wenn die erweiterte Version von "Phiolin" hier zur Verfügung gestellt werden könnte  ::)

Danke
pOpY

Phiolin

Kann ich nachher machen, ist aber etwas experimentell. Bei mir funktioniert es aber weitestgehend problemlos seit vielen Wochen. :)
Mittlerweile benutze ich anstatt hcitool cc aber l2ping. Das sollte aber auch auf den meisten Systemen standardmäßig verfügbar sein.
Suche ich später raus, wenn ich wieder Zuhause bin.