Anwesenheitserkennung Bluetooth PebbleBee

Begonnen von tomster, 06 November 2014, 10:01:16

Vorheriges Thema - Nächstes Thema

oliv06

I eventually found out the cause of my CPU issue : I had a "PRESENCE local-bluetooth" definition in fhem.cfg. Seems not possible to use BT and BLE at the same time.

justme1968

@steffen: das script läuft ziemlich sicher als root.

wie bekommen das schon noch hin.

@oliv06: not at the same time with the same usb dongle. but it should be positible to add a second one. 
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

oliv06

@ Steffen : I used the sticky bit for rights on hciconfig, but everything did not work as expected (especially fhem stop did not kill the hciconfig process...). Everything seems to work now with the following configuration :
sudoers :
fhem ALL=(ALL) NOPASSWD:ALL
fhem.cfg :
define pd PRESENCED sudo -u root /usr/bin/hcitool lescan --duplicates

Probably not the most secured configuration however

Markus Bloch

Hallo zusammen,ich lese ab und zu mal mit mangels Zeit. Bin echt erstaunt was andre da gezaubert hat. Super Arbeit

Als ich das Modul so durchsehe kam mir die Idee ob man diese Art von non-blocking Shell execution nicht ähnlich wie bei HttpUtils_NonBlockingGet als System-Modul bereit zustellen. Sowas liese sich dann wieder einfacher verwenden als das ganze manuell in PRESENCE oder wie aktuell in Andre's PRESENCED zu implementieren. Ich würde mir hier das gleiche Grundkonzept wünschen wie bei den HttpUtils mit einem Parameter Hash. Den Kill nach x Sekunden währe ja dann der execution Timeout wenn der Befehl bis dahin immer noch läuft.

Das würde ich dann auch sofort in PRESENCE einbauen für eure Bluetooth Tags.

Was meint ihr bzw speziell andre dazu?

Schönes Nächtle
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

justme1968

#139
guten morgen ;)

die idee die integration anders und besser zu machen ist gut.

das HttpUtils beispiel ist es aber auf den zweiten blick glaube ich nicht weil es wichtige unterschiede gibt: ein HttpUtils aufruf bearbeitet eine anfrage mit einer definierten antwortlänge und liefert diese auf ein mal zurück. die antwort ist (meist) für ein fhem device bestimmt.

beim lescan sollte es normalerweise keinen kill geben und der callback würde unterm strich zu einer readFn.

der aufruf darf auch nur ein mal zentral und nicht durch jedes (logische) presence device erfolgen weil sich das hcitool nur ein mal gleichzeitig (pro dongle) aufrufen lässt. die auswertung würde dann eher per parse und dispatch erfolgen.

je generischer man das jetzt aber macht um so unhandlicher wird es für den endanwender weil er sie clients und match listen konfigurieren müsste.

wie wäre es trozdem genau hier anzusetzen aber zumindest die schnittstelle nicht genetisch zu implementieren sondern genau auf den anwendungsfall zugeschnitten:

aus dem aktuellen PRESENCED wird ein hcitool modul. das bekommt die möglichkeit wahlweise lescan oder scan auszuführen. bei scan auf jeden fall mit timeout und für lescan optional auch statt der duplicates option. hier könnte man auch abwechselnd scan und lescan aufrufen um mit einem  dongle beides abzudecken.

dieses modul sammelt alle bluetoth devices in der nähe und bekommt ein get um die aktuell gesehene device liste mit namen auszuspucken. das würde auch das problem lösen die adresse eines neuen tag zu finden.

PRESENCE bekommt eine dispatch funktion die vom hcitool modul aufgerufen wird. ein tag das in reichweite kommt könnte (optional)  sofort auf present gehen ohne den presence timeout abzuwarten. es wäre nur noch der absence timeout nötig.

das lescan modul könne per autocreate direkt das passende presence device erzeugen wenn ein pairForSec parameter gesetzt wird. d.h. ein neuer tag wird dann nur kurz in die nähe gebracht und ist als device in fhem bekannt.

eventuell kann man später auch noch eine geschickte integration mit den roommate modulen einbauen.

die multiroom fähigkeit von collectord würde ich aber gerne erhalten bzw. auch hier erreichen.

vielleicht kann man das konzept das scannen und cachen von bresence zu trennen auch auf andere bereiche erweitern die mehrere geräte in einem rutsch liefern. mir fällt gerade spontan die snmp/mac überwachung ein und vielleicht das regelmäßige scannen eines ganzen netzwerks oder teils. beides könnte man dann mit einem ein mal geforkten script mit endlosschleife tun und nicht immer wieder neu per BlockingCall

was denkst du?

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

gero

Wenn ihr schon dabei seid, das Konzept neu zu diskutieren, könntet ihr auch überlegen, ob man nicht nur die gesehenen BLE Tags listet, sondern auch direkt die Advertisement Data und den RSSI Wert. Damit wäre das Modul noch universeller verwendbar. Z.B. könnte man anhand des RSSI Wertes eine grobe Entfernungsschätzung zum Tag machen, oder man könnte BLE Sensoren auf die gleich Art und Weise einbinden, falls sie ihre Sensordaten in den Advertisement Paketen codieren.

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

Steffen

Zitat von: oliv06 am 24 November 2014, 23:49:27
@ Steffen : I used the sticky bit for rights on hciconfig, but everything did not work as expected (especially fhem stop did not kill the hciconfig process...). Everything seems to work now with the following configuration :
sudoers :
fhem ALL=(ALL) NOPASSWD:ALL
fhem.cfg :
define pd PRESENCED sudo -u root /usr/bin/hcitool lescan --duplicates

Probably not the most secured configuration however

@oliv06 A thousand thanks!

Guten Morgen!

Also hier kann man wenigstens vom einem kleinen Erfolg reden denn mit dieser Eingabe vom @oliv06 Bekomme ich ein "Present",
aber deswegen nur kleiner Erfolg den es wechselt im ca.2sek die ganze Zeit zwischen "absent<>Present"?!?

Wenn das so bleiben würde ja auch nicht das wahre wäre, aber vielleicht hat ja doch noch einer von euch eine Idee wo man da noch ansetzten könnte?

Mfg Steffen

Mfg Steffen


justme1968

@gero: daran habe ich auch schon gedacht.

so viel ich weiß liefert lescan diese informationen nicht.

ich weiß nicht ob man etwas anderes wie hcidump gleichzeitig laufen lassen kann.

@steffen: sieh es erst mal positiv. es ist ein rechteproblem.

zwei sekunden ist sehr komisch. die timeouts im presence modul sind doch viel höher. oder hast du von hand etwas anderes hand?

bitte mach ganz sicher das keine system blutooth routinen mehr laufen die dazwischenfunken. das war bei oliv06 ja auch zuerst so. 

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Mitch

LESCAN "sieht" nur Adressen, keine weitern Infos.

steffen, welche bluez Version hast Du?
Schau mal mit ps ax, was da alles an Prozessen läuft.

Ich würde auch mal alles an BT vom System schmeissen und neu installieren.
Dein Fehler scheint mir nicht am Modul zu liegen.
FHEM im Proxmox Container

justme1968

#144
scheinbar gibt es noch eine low level interface in bluez das man verwenden kann.

kannst du mal bitte probieren ob man btmon parallel verwenden kann? reicht eventuell btmon alleine? liefert es auch die nötige info?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

gero

Korrekt: hcitool liefert keine weiteren Infos.
Aber es gibt noch einige andere Möglichkeiten:
- paralleles Verwenden von hcidump (evtl. btmon, aber da sehe ich keine großen Vorteile)
- Verwenden eines selbstentwickelten Tools außerhalb von FHEM (z.B. mit Python https://github.com/IanHarvey/bluepy, JavaScript https://github.com/sandeepmistry/noble, oder C/C++, oder, oder ...)
- Direktes Ansprechen der HCI Sockets aus Perl/fhem

Vom Konzept her fände ich die letzte Variante am schönsten.

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

justme1968

#146
d.h. hcidump oder btmon geht definitiv parallel zu scan/lescan?

wenn das so ist würde ich erst mal einen parallelen aufruf einbauen. mal sehen wie gut die rssi werte überhaupt sind. wenn sie gut genug sind könnte man vielleicht sogar in richtung triangulation denken...

wenn sich die rssi werte bewähren würde ich direkt das HCI socket verwenden. hast du einen link wo es dokumentation dazu gibt?

weisst du ob es über das socket dann möclich ist normale und le devices gleichzeitig zu erkennen ?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

gero

Zitat von: justme1968 am 25 November 2014, 11:25:30
d.h. hcidump oder btmon geht definitiv parallel zu scan/lescan?
hcidump läuft ohne Probleme parallel zu hcitool. btmon hab ich bisher nicht verwendet.

Zitat von: justme1968 am 25 November 2014, 11:25:30
wenn das so ist würde ich erst mal einen parallelen aufruf einbauen. mal sehen wie gut die rssi werte überhaupt sind. wenn sie gut genug sind könnte man vielleicht sogar in richtung triangulation denken...
Die RSSI Werte sind herstellerabhängig und bieten nur eine grobe Indikation, wie weit der Tag entfernt ist. Außerdem ist Bluetooth mit seinen 2.4GHz sehr empfindlich, was Abschirmung angeht. D.h. in einer Wohnung (durch Wände hindurch) kannst du eine simple Triangulation vergessen. Aber man könnte zumindest unterscheiden, ob der Tag nur in der Nähe ist (z.B. in der Nähe der Wohnung, oder ob ein Schlüsselbund mit Tag an der dafür vorgesehenen Stelle liegt. u.ä.)

Zitat von: justme1968 am 25 November 2014, 11:25:30
wenn sich die rssi werte bewähren würde ich direkt das HCI socket verwenden. hast du einen link wo es dokumentation dazu gibt?
Das HCI Interface ist in der Bluetooth Core Spec definiert. Die HCI Sockets selbst, werden durch den Linux Kernel realisiert. Am leichtesten ist sich den Code von hcitool und hcidump aus bluez anzusehen.
Falls du an der Stelle nicht weiterkommst, kann ich dir evtl. helfen.

Zitat von: justme1968 am 25 November 2014, 11:25:30
weisst du ob es über das socket dann möclich ist normale und le devices gleichzeitig zu erkennen ?
Da bin ich mir gerade nicht ganz sicher. Das müßte man untersuchen.

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

Steffen

Zitat von: Mitch am 25 November 2014, 09:29:37
LESCAN "sieht" nur Adressen, keine weitern Infos.

steffen, welche bluez Version hast Du?
Schau mal mit ps ax, was da alles an Prozessen läuft.

Ich würde auch mal alles an BT vom System schmeissen und neu installieren.
Dein Fehler scheint mir nicht am Modul zu liegen.

Hallo!

Hatte mal bluez deinstalliert und nochmal neu installiert, aber wechselt immer noch.
Hier mal das Ergebnis von PS ax vielleicht erkennt ihr was darauf:

PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:04 init [2]
    2 ?        S      0:00 [kthreadd]
    3 ?        S      0:06 [ksoftirqd/0]
    4 ?        S      0:00 [kworker/0:0]
    5 ?        S      0:00 [kworker/u:0]
    6 ?        S      0:00 [migration/0]
    7 ?        S      0:00 [migration/1]
    8 ?        S      0:00 [kworker/1:0]
    9 ?        S      0:00 [ksoftirqd/1]
   10 ?        S<     0:00 [cpuset]
   11 ?        S<     0:00 [khelper]
   12 ?        S      0:00 [kdevtmpfs]
   13 ?        S<     0:00 [netns]
   14 ?        S      0:00 [sync_supers]
   15 ?        S      0:00 [bdi-default]
   16 ?        S<     0:00 [kintegrityd]
   17 ?        S<     0:00 [crypto]
   18 ?        S<     0:00 [kblockd]
   19 ?        S      0:00 [khubd]
   20 ?        S<     0:00 [cpufreq_uevent]
   21 ?        S      0:00 [kworker/0:1]
   22 ?        S<     0:00 [cfg80211]
   23 ?        S<     0:00 [rpciod]
   24 ?        S      0:00 [khungtaskd]
   25 ?        S      0:00 [kswapd0]
   26 ?        SN     0:00 [ksmd]
   27 ?        S      0:00 [fsnotify_mark]
   28 ?        S<     0:00 [nfsiod]
   29 ?        S<     0:00 [cifsiod]
   30 ?        S<     0:00 [xfsalloc]
   31 ?        S<     0:00 [xfs_mru_cache]
   32 ?        S<     0:00 [xfslogd]
   46 ?        S      0:00 [kworker/1:1]
   47 ?        S      0:00 [nandd]
   48 ?        S      0:00 [nfmtd]
   49 ?        S      0:00 [scsi_eh_0]
   50 ?        S      0:00 [kworker/u:1]
   51 ?        S      0:00 [kworker/u:2]
   58 ?        S<     0:00 [kmpathd]
   59 ?        S<     0:00 [kmpath_handlerd]
   60 ?        S      0:00 [cfinteractive]
   61 ?        S<     0:00 [binder]
   62 ?        S<     0:00 [codec_resume]
   63 ?        S      0:00 [hdmi proc]
   64 ?        S<     0:00 [deferwq]
   65 ?        S      0:00 [jbd2/sda1-8]
   66 ?        S<     0:00 [ext4-dio-unwrit]
  180 ?        Ss     0:00 udevd --daemon
  334 ?        S      0:00 [flush-8:0]
  574 ?        S      0:00 [kworker/1:2]
  587 ?        S<     0:00 [krfcommd]
  649 ?        S      0:00 [dhd_cfg80211_ev]
  650 ?        S      0:00 [dhd_watchdog]
  651 ?        S      0:00 [dhd_dpc]
  652 ?        S      0:00 [dhd_sysioc]
1870 ?        Ss     0:00 /usr/sbin/nmbd -D
1918 ?        S<     0:00 [hci0]
1919 ?        S      0:00 /usr/sbin/hciattach /dev/ttyS1 any
1921 ?        S      0:00 [kworker/0:2]
1923 ?        Ss     0:00 /usr/sbin/smbd -D
1941 ?        Ss     0:00 startpar -f -- samba
1943 ?        S      0:00 /usr/sbin/smbd -D
1948 ?        Ss     0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
1949 ?        S      0:00 php-fpm: pool www
1950 ?        S      0:00 php-fpm: pool www
2013 ?        Sl     0:00 /usr/sbin/rsyslogd -c5
2072 ?        Ss     0:00 /usr/sbin/cron
2095 ?        S      0:23 perl fhem.pl fhem.cfg
2102 ?        Ss     0:00 startpar -f -- fhem
2213 ?        Ss     0:00 /usr/bin/dbus-daemon --system
2270 ?        Ss     0:00 /usr/sbin/bluetoothd
2297 ?        S      0:00 avahi-daemon: running [cubie.local]
2298 ?        S      0:00 avahi-daemon: chroot helper
2340 ?        Ssl    0:02 /usr/sbin/NetworkManager
2369 ?        Ss     0:00 nginx: master process /usr/sbin/nginx
2371 ?        S      0:00 nginx: worker process
2372 ?        S      0:00 nginx: worker process
2373 ?        S      0:00 nginx: worker process
2374 ?        S      0:00 nginx: worker process
2392 ?        S      0:00 /bin/sh /usr/bin/mysqld_safe
2396 ?        Sl     0:00 /usr/lib/policykit-1/polkitd --no-debug
2413 ?        Sl     0:00 /usr/sbin/gdm3
2549 ?        S      0:00 /sbin/wpa_supplicant -u -s -O /var/run/wpa_supplicant
2759 ?        Ss     0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -c /var/lib/ntp/ntp.conf.dhcp -u 101:104
2868 ?        Sl     0:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock
2869 ?        S      0:00 logger -t mysqld -p daemon.error
2954 ?        Ss     0:00 /usr/sbin/sshd
3060 tty1     Ss+    0:00 /sbin/getty 38400 tty1
3061 tty2     Ss+    0:00 /sbin/getty 38400 tty2
3062 tty3     Ss+    0:00 /sbin/getty 38400 tty3
3063 tty4     Ss+    0:00 /sbin/getty 38400 tty4
3064 tty5     Ss+    0:00 /sbin/getty 38400 tty5
3065 tty6     Ss+    0:00 /sbin/getty 38400 tty6
3066 ttyS0    Ss+    0:00 /sbin/getty -L ttyS0 115200 vt100
3069 ?        S      0:00 udevd --daemon
3070 ?        S      0:00 udevd --daemon
3152 ?        S      0:00 sudo -u root /usr/bin/hcitool lescan --duplicates
3153 ?        S      0:00 /usr/bin/hcitool lescan --duplicates
3155 ?        Ss     0:00 sshd: root@pts/0
3157 pts/0    Ss     0:00 -bash
3204 pts/0    S+     0:00 sudo ps ax
3205 pts/0    R+     0:00 ps ax


justme1968

@gero: mir würde es reichen zu erkennen das ich im gleich zimmer bin und nicht zwei stockwerte drunter.

ich schaue mir das mit dem hic socket auf jeden fall an. ich muss nur erst mal ein system zusammenbauen mit dem ich auch wirklich testen kann. wie oben schon geschrieben: bis jetzt ist alles auf dem trockenen zusammengebaut. und mein estimote ibeacon finde ich gerade auch nicht. lach.

@Steffen: da ist schon mal was:
Zitat2270 ?        Ss     0:00 /usr/sbin/bluetoothd

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968