Autor Thema: [Testversion] npresenced für Anwesenheitserkennung  (Gelesen 1663 mal)

Offline pldemon

  • New Member
  • *
  • Beiträge: 27
[Testversion] npresenced für Anwesenheitserkennung
« am: 18 Februar 2021, 13:52:34 »
Hallo,

anbei wollte ich euch ein System vorstellen, dass ich für die Erkennung der Anwesenheit von Bluetooth-Geräten nutze. Wie schon presenced, nutzt auch das neue Tool hcitool (oder bluetoothctl bei Bedarf) für die Abfrage. Als Unterbau habe ich lepresenced genommen, weshalb die Parametrisierung zwischen den beiden Tools weitgehend gleichgeblieben ist.

Idee

Der Grund für eine Implementierung ist die Arbeitsweise von presenced, wo aktiv nach definierten Geräten nach dem Round-robin-Prinzip nachgefragt wird. Das führt dazu, dass bei einer größeren Zahl an Geräten die Erkennung von Anwesenheit teils erheblich verzögert wird, was bei Trigger-Indizierten Aktionen recht störend ist.

Funktionsweise

Npresenced folgt einem anderen Prinzip und implementiert einen einfachen Scheduler, der die folgenden Annahmen trifft:

                a) Bei freien Ressourcen wird automatisch nach Geräten gefragt, die als Abwesend markiert wurden – unabhängig des Intervalls (ohne aber dass die Abfragen der anderen Geräte verzögert/gestört werden)

                b) Geräte, die einen kürzeren Intervall in FHEM eingetragen haben, werden priorisiert abgefragt

                c) Wird die Anwesenheit eines Geräts erkannt, wird FHEM sofort über den Zustand informiert

                d) Bei Anwesenheit, wird das Gerät nur noch in dem in FHEM eingestellten Intervall überprüft. Dadurch sollen dem System mehr Ressourcen für die Abfragen der abwesenden Geräte verschafft werden

                e) Wird der in FHEM eingestellte Intervall überschritten und ist das Gerät nicht erreichbar, wird es als Abwesend an FHEM gemeldet

Diese Annahmen führen dazu, dass die Erkennung der Anwesenheit bei der Nutzung einer größeren Zahl an Geräten erheblich beschleunigt wird. In meinem Fall fiel der Zeitraum von teils einer Minute bis hin zu wenigen Sekunden.

Verfügbarkeit

Die Quellen von nprecenced finden sich auf GitHub. Neben dem Tool liegen da auch presenced und lepresenced, da ich das komplette Verzeichnis geklont habe und ursprünglich alles in lepresenced eingebaut habe. Der Übersicht wegen habe ich es aber wieder verworfen. Aus diesem Grund finden sich auch in lepresenced kleinere Anpassungen. Diese werde ich aber direkt an den Autor senden.

Projekt
https://github.com/pldemone/fhem-presenced.git


Nutzung

Start des Tools:

# git clone https://github.com/pldemone/fhem-presenced.git
# cd fhem-presenced/
# ./src/npresenced -l LOG_INFO -t stdout --fast

Definition in FHEM:

define iPhone PRESENCE lan-bluetooth 11:22:33:44:55:66 192.168.0.2:5333 60
 
Das System findet sich bei mir in einem produktiven Einsatz. Ich überprüfe damit die Anwesenheit diverser Iphone- und Garmin-Geräte, um Aktionen unmittelbar bei einer Ankunft auszulösen. Das hat recht gut funktioniert, weshalb ich euch diese Lösung ebenfalls vorstellen mag.

Im Anhang noch ein kleiner Screenshot, das demonstriert, wie die Präsenz zweier Smartwatches für die Anwesenheit genutzt wird. Man kann hier ziemlich genau erkennen, wie die Watches von verschiedenen Routern erkannt werden, während sich die Bewohner im Haus bewegt haben.



Gruß,
Mirko

Update: Beschreibung verbessert; Server als nicht privilegierten Nutzer starten; Erkennung geringfügig optimiert
Update (2022-07-27): Erkennung der Anwesenheit optimiert; Ressourceverbrauch gesenkt
« Letzte Änderung: 05 August 2022, 16:55:11 von pldemon »

Offline Jamo

  • Hero Member
  • *****
  • Beiträge: 1596
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #1 am: 19 Februar 2021, 08:58:53 »
Hallo Mirko,
das hört sich prima an. Kann ich den npresenced auch mit dem collectord zusammen benutzen?
Ich nehme an, ich muss dann auf allen verteilten RaspberryPi lepresenced stoppen, npresenced auf den verteilten RaspberryPi installieren und starten, und dann sollte das wie vorher funktionieren, oder?
Lepresenced muss gestoppt werden, sonst ist der port 5333 schon belegt und es kann keine TCP verbindung aufgebaut werden.

Ist das soweit korrekt?
Homematic (UART/HMUSB), Debmatic, HUEBridge, Zigbee, FB, Alexa (fhem-lazy), livetracking, LaCrosse JeeLink

Offline pldemon

  • New Member
  • *
  • Beiträge: 27
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #2 am: 19 Februar 2021, 16:02:38 »
Hallo Jamo,

Kann ich den npresenced auch mit dem collectord zusammen benutzen?

Ja, habe es zwar nicht exzessiv getestet, aber ein kurzer Test funktioniert. Sofern ich es aber korrekt überblicke, arbeitet collectord Intervall-basiert, was die Reaktion verzögern wird.

Ich nehme an, ich muss dann auf allen verteilten RaspberryPi lepresenced stoppen, npresenced auf den verteilten RaspberryPi installieren und starten, und dann sollte das wie vorher funktionieren, oder?  Lepresenced muss gestoppt werden, sonst ist der port 5333 schon belegt und es kann keine TCP verbindung aufgebaut werden.

Theoretisch ja. Du kannst auch beide Systeme gleichzeitig laufen lassen und die Ports ändern - sie sind nicht fest verdrahtet. Bitte beachte aber, dass jedes Mal, wenn npresenced eine Abfrage sendet, der Scan von lepresenced angehalten wird.

Zum Verständnis, welches System man nutzen sollte, eine Erklärung was lepresenced und npresenced unterschieided. Man sollte wissen, wie die Systeme arbeiten und das passende Konzept wählen, bevor man sie einsetzt :)

lepresenced ist technisch gesehen ein Sniffer/Scanner, der fortwährend mittels »hcidump -i DEV« alle am Gerät ankommende Traffic aufzeichnet. Definiert man in FHEM ein Device, überprüft lepresenced, ob es in seinem Scan in dem definierten Zeitraum etwas von diesem Gerät empfangen hat. Sendet ein Device allerdings keine Nachrichten (oder nur sehr sporadisch), wird es von hcidump/lepresenced nicht erkannt oder irrtümlich als inaktiv markiert. Das passiert vor allem bei Smartphones und Smartwatches.

npresenced/presenced geht einen anderen Weg, denn es fragt aktiv nach Geräten nach. Definiert man in FHEM ein Device, fragt npresenced/presenced in dem eingestellten Zeitraum mittels »hcitool i name DEV« nach dem Namen. Meldet es sich, wissen npresenced/presenced, dass das Device existiert. Das Problem ist aber, dass jede Abfrage eine gewisse Zeit dauert, in der das Bluetooth-Subsystem blockiert ist. Npresence optimiert diesen Zugriff und stellt sicher, dass die wichtigen Anfragen priorisiert werden und man beispielsweise die Anwesenheit schneller erkennt.

Solltest du also Telefone oder Watches überwachen wollen, wirst du wahrscheinlich zu npresenced/presenced greifen müssen, denn sie werden nicht mit lepresenced zuverlässig erkannt. Hast du dagegen BLE-Geräte, wie beispielsweise G-tag Beacons, die automatisch einen Advertising Request senden, wirst du mit lepresenced besser fahren können. Wie bereits schon oben geschrieben, kann man aber auch beide Ansätze gleichzeitig nutzen.

Noch ein Hinweis zur Erkennung: Raspberry-Nutzer sollten sich einen günstigen USB-BT-Dongle holen (Kostenpunkt ca. 10euro). Sie haben eine erheblich größere Reichweite im Vergleich zum internen BT-Receiver. Ich für meinen Fall habe mittlerweile nur noch ein Gerät zentral im Einsatz und überwache damit ein komplettes Einfamilienhaus (samt Garage und Keller).

Gruß,
Mirko
« Letzte Änderung: 19 Februar 2021, 16:20:31 von pldemon »

Offline Jamo

  • Hero Member
  • *****
  • Beiträge: 1596
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #3 am: 20 Februar 2021, 09:30:42 »
Hallo Mirko,
Zitat
Zum Verständnis, welches System man nutzen sollte
Wow, danke, die Erklärung war mal richtig hilfreich, das hatte ich hier so im Forum noch nicht gefunden.
Das npresenced aktiv die Geräte anfragt, kam aus deinem ersten Beitrag erstmal nicht so raus, Ich hatte angenommen der Haupunterschied sei das scheduling (lepresenced = feste periode, npresenced = sobald eine freie resource verfügbar ist).
Dann bleibe ich für meine GTags bei lepresenced, aber werde deinen npresenced für mein iPhone an den Start bringen.
Danke nochmal!!!
« Letzte Änderung: 20 Februar 2021, 09:38:20 von Jamo »
Homematic (UART/HMUSB), Debmatic, HUEBridge, Zigbee, FB, Alexa (fhem-lazy), livetracking, LaCrosse JeeLink

Offline pldemon

  • New Member
  • *
  • Beiträge: 27
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #4 am: 07 April 2021, 14:30:18 »
Kurzes Update:

Das Script wurde weiter entschlackt, sodass es auch auf Embedded-Geräten, wie beispielsweise einem OpenWRT-Router ohne Systemd gestartet werden kann. Die CPU-Auslastung des Routers wird dabei kaum beeinflusst. Bei einem TP-Link Archer C7 (v2) liegt sie beispielsweise bei ca. 3%.

Gruß,
Mirko
Informativ Informativ x 1 Liste anzeigen

Offline pldemon

  • New Member
  • *
  • Beiträge: 27
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #5 am: 27 Juli 2022, 10:43:25 »
Kurzes Update:

Habe nun mein Routersetup im Haus ein wenig optimiert und das Script deshalb darauf angepasst. Aktuell läuft es bei mir seit einem Monat parallel auf 2 TP-Link Archer C7 (v5) und einem TP-Link Archer C7 (v2), was die Erkennung noch viel genauer und Schneller macht (Siehe Screenshot im ersten Beitrag). Das hat mich dazu bewogen, auf das GPS-Tracking für die Erkennung der Ankunft im Haus komplett zu verzichten.

Gruß,
Mirko
« Letzte Änderung: 27 Juli 2022, 10:51:42 von pldemon »

Offline DetlefR

  • Full Member
  • ***
  • Beiträge: 184
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #6 am: 27 Juli 2022, 17:42:23 »
Macht fürs erste einen guten Eindruck.

Ich habe für "Aussen" eingerichtet. Mal sehen, ob das Licht jetzt früher angeht. :)


Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 12274
  • NIVEAu ist keine Creme...
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #7 am: 27 Juli 2022, 19:20:14 »
Uiuiui, habe es auch schon lange laufen und bin begeistert! :)

Habe lange mit WLAN und Handy rungetan: immer irgendwie "Murks" (verschiedene Dinge inkl. hping3 und Unifi)

Aber seit ich npresenced nutze funktioniert das wunderbar...

Danke, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Offline binford6000

  • Tester
  • Hero Member
  • ****
  • Beiträge: 1511
  • 🏠⚙️💡🛠📱
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #8 am: 31 Juli 2022, 16:36:51 »
Das System findet sich bei mir in einem produktiven Einsatz. Ich überprüfe damit die Anwesenheit diverser Iphone, Apple Watch und Garmin-Geräte, um Aktionen unmittelbar bei einer Ankunft auszulösen. Das hat recht gut funktioniert, weshalb ich euch diese Lösung ebenfalls vorstellen mag.

Hallo pldemon,
du schreibst du würdest mit npresenced u.a. auch eine Apple Watch sehen.
Soweit ich informiert bin kommuniziert die Apple Watch nur mit ihrem verbundenen iPhone über BT. Ansonsten ist sie maximal nur sporadisch
zu sehen. Wie hast du das hinbekommen?

VG Sebastian
Proxmox mit: nextcloud, fhem, pihole, docker, bitwarden, deconz, TasmoAdmin
fhem mit: deconz, Sonos2mqtt, alexa-fhem, Telegram, livetracking, fhemApp als Frontend
Testumgebung: docker pull fhem/fhem

Offline DetlefR

  • Full Member
  • ***
  • Beiträge: 184
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #9 am: 01 August 2022, 18:01:35 »
Zu Apple kann ich nichts sagen, aber meine Galaxy Watch antwortet auf Bluetooth. Aber nur, wenn sie keine Verbindung zum Telefon hat.


Offline binford6000

  • Tester
  • Hero Member
  • ****
  • Beiträge: 1511
  • 🏠⚙️💡🛠📱
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #10 am: 01 August 2022, 19:08:50 »
Apple spendiert der Watch etwa alle 45 Minuten eine neue MAC-Adresse. siehe auch:
https://github.com/dalehumby/ESPHome-Apple-Watch-detection
Proxmox mit: nextcloud, fhem, pihole, docker, bitwarden, deconz, TasmoAdmin
fhem mit: deconz, Sonos2mqtt, alexa-fhem, Telegram, livetracking, fhemApp als Frontend
Testumgebung: docker pull fhem/fhem

Offline DetlefR

  • Full Member
  • ***
  • Beiträge: 184
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #11 am: 01 August 2022, 19:20:17 »
Zitat
https://github.com/dalehumby/ESPHome-Apple-Watch-detection

Das beschreibt aber BLE. Also eher was für lepresenced.

Offline binford6000

  • Tester
  • Hero Member
  • ****
  • Beiträge: 1511
  • 🏠⚙️💡🛠📱
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #12 am: 01 August 2022, 19:21:58 »
Daher ja die Frage an den TE wie er seine Apple Watch damit erkennt...  ;)
Proxmox mit: nextcloud, fhem, pihole, docker, bitwarden, deconz, TasmoAdmin
fhem mit: deconz, Sonos2mqtt, alexa-fhem, Telegram, livetracking, fhemApp als Frontend
Testumgebung: docker pull fhem/fhem

Offline pldemon

  • New Member
  • *
  • Beiträge: 27
Antw:[Testversion] npresenced für Anwesenheitserkennung
« Antwort #13 am: 05 August 2022, 17:02:43 »
Daher ja die Frage an den TE wie er seine Apple Watch damit erkennt...  ;)

Hi,

Sorry, hat leider ein wenig länger gedauert, da ich im Urlaub bin.

Die Beschreibung entspricht leider nicht mehr der Realität und ich habe die Stelle mit der Watch entfernt.

Hier eine kurze Erklärung: Die Watch musste nicht sichtbar sein, sondern nur auf die Anfrage antworten. Bei der ersten Generation hat es wunderbar funktioniert. Leider ist mir die Uhr kaputtgegangen und ich habe sie durch eine neue Generation ersetzt. Diese hat zwar auch geantwortet, aber wie du schon geschrieben hast sehr unzuverlässig, weshalb sie nicht für die Erkennung der Präsenz verwenden werden kann.

Gruß,
Mirko


 

decade-submarginal