Détection de présence par beacon

C’est la rentrée et afin de travailler mon anglais, je vous propose ici la traduction d’un article tiré du wiki anglophone et écrit par un de nos contributeurs français : jml. Merci de son autorisation de traduction.

Cet article détaille donc la mise en place de la détection de présence via des « beacons » ces petit capteurs bluetooth low energy que l’on peut attacher à nos clés de voiture, ou à nos enfants pour ne pas les perdre.

 

Nut_beacon

Voici le lien du forum ou l’annonce de son tuto est faite https://easydomoticz.com/forum/viewtopic.php?f=17&t=2047

et le le lien du wiki https://www.domoticz.com/wiki/Presence_detection_%28Bluetooth_4.0_Low_energy_Beacon%29

Je reprends éhontément les images issues du wiki.

But

Faire de la détection de présence d’un ou plusieurs beacon via BlueTooth Low Energy V4.0 dans Domoticz afin de savoir si le porteur du beacon en question est à proximité. Ainsi on pourra armer/désarmer les alarmes Domoticz en testant la présence/absence du/des beacons ou bien d’autres choses.

La présence d’un ou plusieurs beacons sera testée par un script qui affecte une valeur à une variable Domoticz.

Ce script possède 2 modes de fonctionnement. On peut choisir pour chaque beacon le mode préféré

  • REPEAT MODE : Pour un  beacon à portée, le script met à jour la variable Domoticz à « HOME » toutes les  3 secondes suivant la puissance du signal RSSI, sinon c’est « AWAY » qui est mis dans la variable.
  • SWITCH_MODE : Pour un beacon à proximité la variable est mise à « HOME » seulement une fois, sinon c’est  « AWAY » .

La détection est vraiment rapide (moins de 10 secondes), ensuite la présence/absence est vérifiée toutes les 5 secondes par comparaison à l’heure de la dernière présence de chaque beacon

Nous aurons donc besoin d’une variable de type string par beacon.

Beacon_uservariable

Puis des scripts Lua, Blocky ou autres pourront donc tester la valeur de la variable pour déclencher des actions Domoticz.

 Matériel

Ce tuto à été réalisé à l’aide d’un Raspberry Pi.

La clé USB Bluetooth BLE.

Les beacons utilisant bluetooth il faudra une clé USB Bluetooth 4.0 compatible avec le PI.

J’utilise celui ci : http://www.amazon.fr/SODIAL-Adaptateur-Bluetooth-Dongle-Ordinateur/dp/B00L317IL4/277-2648083-3402713?ie=UTF8&redirect=true&ref_=pe_386181_37038081_TE_3p_dp_1
https://www.amazon.co.uk/gp/product/B00XTU53A0/ref=oh_aui_detailpage_o09_s00?ie=UTF8&psc=1
– Plugable USB-BT4LE adapter: http://plugable.com/products/usb-bt4le (uses BCM20702 chipset)
– CSR chipset adapter http://www.amazon.co.uk/Version-Bluetooth-Adapter-Compatible-Windows/dp/B00A0CBOTE

Beacon

Ce type de beacon fonctionne correctement :
Vous les trouvez pour environ  10€
http://www.aliexpress.com/item/New-Nut-2-update-Nut-3-Nut-mini-Smart-Finder-Itag-Bluetooth-WiFi-Tracker-Locator-Luggage/32477579557.html
http://www.aliexpress.com/item/2015-Nut-2-Smart-Tag-Bluetooth-Tracker-Child-Pet-Key-Finder-Locator-Alarm-for-iphone-Android/32477066584.html
http://eu.banggood.com/Wholesale-Warehouse-Mini-Smart-Patch-Alarm-Tag-Bluetooth-GPS-Tracker-Locator-For-iPhone-Android-etc-wp-Uk-988462.html
La présence est détectée en 4 à 8 secondes. L’absence est décidée en moins de 15 sec quand le tracker s’éloigne et tombe hors de portée.

La clé USB SODIAL BLE  détecte à 12m (en vue directe) ou à 2 étages.

http://www.banggood.com/Mini-Smart-Patch-Alarm-Tag-Bluetooth-GPS-Tracker-Locator-For-iPhone-Android-etc-p-988462.html
https://www.amazon.co.uk/gp/product/B014P9VK5K/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

Ils ne fonctionnent pas :
Je n’ai pas réussi à les faire fonctionner. Ils arrêtent d’émettre lorsque ils sont déconnectés de leur téléphones.
http://www.banggood.com/Sfd-p-985626.html .
http://www.banggood.com/Bluetooth-4_0-Self-Portrait-Remote-Control-Anti-Lost-Electronic-Finder-p-974320.html
http://www.banggood.com/Wifi-Smart-Bluetooth-4_0-Tracker-GPS-Locator-Tag-Alarm-Anti-lost-Device-GPS-Track-for-iPhone-Android-p-1028944.html – TI SensorTag

Le bluetooth avec bluez et sans blues 🙂

Il nous faudra bluez pour le bluetooth

Bluez nécessite un kernel > 3.5

Un petit

 sudo apt-get update
 sudo apt-get install -y libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev

Et  BLE à besoin d’un bluez  >5.3

Vérifiez la version avec un

apt-cache policy bluez

 

Vérifiez la dernière version ici  : http://www.kernel.org/pub/linux/bluetooth/ (et changez les numeros de versions en conséquence ). La compilation prends aux alentours de 20 minutes, il faudra rebooter ensuite.

sudo mkdir bluez
cd bluez
sudo wget "http://www.kernel.org/pub/linux/bluetooth/bluez-5.39.tar.xz" 
sudo tar -xJf bluez-5.39.tar.xz
cd bluez-5.39
sudo ./configure --disable-systemd
sudo make
sudo make install
sudo apt-get install python-bluez python-requests
sudo cp attrib/gatttool /usr/local/bin/
sudo shutdown -r now

TODO check the right of gatttool. (set execution right chmod +x ?)

Premier Test

Pour être sur que la clé USB Bluetooth est bien reconnue, lancez un

lsusb 

On voit apparaitre une ligne Cambrige Silicon Radio:

Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 04d8:f55e Microchip Technology, Inc.
Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 001 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

Bien, l’adaptateur USB est sur le  Bus 001 Device 006.

Pour en savoir plus  prenez le numéro ID 0a12: et faites

sudo lsusb -v -d 0a12:

Il y a quelques pages de caractéristiques qui s’affichent.

lancez maintenant hciconfig.

hci0: Type: BR/EDR Bus: USB
 BD Address: 00:1A:7D:DA:71:11 ACL MTU: 310:10 SCO MTU: 64:8
 UP RUNNING
 RX bytes:2772 acl:0 sco:0 events:120 errors:0
 TX bytes:1109 acl:0 sco:0 commands:91 errors:0

on voit que l’adaptateur Bluetooth est sur hci0, si cela n’était pas le cas vous devez adapter les scripts python dont il est question ci-dessous avec votre configuration.

Récupérez  les fichier test_beacon.py et check_beacon_presence.py ici https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence-detection-beacon/test_beacon.py

ou copiez/collez dans votre terminal :

sudo wget https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence-detection-beacon/test_beacon.py
sudo python test_beacon.py

Cela lance la détection des beacons à proximité.

Il FAUT noter la MAC Address et la fréquence à laquelle le beacon émet , nous en aurons besoin pour la suite.

Si j’ai un conseil, si vous avez plusieurs beacons, mettez les en route un par un, pas tous ensemble, et notez pour chacun sa MAC address.

pi@domoticz ~ $ sudo ./test_beacon.py
2016-09-23 11:30:24,859 - root - DEBUG - Ok hci0 interface Up n running !
2016-09-23 11:30:24,861 - root - DEBUG - Connect to bluetooth device 0
2016-09-23 11:34:22,639 - root - DEBUG - New Beacon c0:1d:75:4a:68:80 Detected
2016-09-23 11:34:26,494 - root - DEBUG - Tag c0:1d:75:4a:68:80 is back after 3 sec. (Max 3). RSSI -90. DATA (-128,)
2016-09-23 11:34:45,792 - root - DEBUG - Tag c0:1d:75:4a:68:80 is back after 19 sec. (Max 19). RSSI -89. DATA (-128,)
2016-09-23 11:35:01,236 - root - DEBUG - Tag c0:1d:75:4a:68:80 is back after 15 sec. (Max 19). RSSI -92. DATA (-128,)
2016-09-23 11:35:12,823 - root - DEBUG - Tag c0:1d:75:4a:68:80 is back after 11 sec. (Max 19). RSSI -93. DATA (-128,)

Installer le script

sudo wget https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence-detection-beacon/check_beacon_presence.py
sudo mv check_beacon_presence.py /usr/local/bin/
sudo chmod 755 /usr/local/bin/check_beacon_presence.py

Vous avez bien travaillé : rendez vous bientôt pour la suite de la configuration : https://easydomoticz.com/?p=3442

 

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/
Posted in domoticz.

23 Comments

  1. Bonjour,

    Idée intéressante, mais les liens d’achat de Beacons semblent plutôt vers 15-20€ pièce que 5 €. A 20€ par membre de la famille, ça fait un petit budget..

    Est-ce qu’il existerait des RFID « longue distance » qui seraient détectés lors du passage dans un couloir ?

  2. Sinon, quitte à être dans la dizaine d’€, ce type de bracelet connecté pas cher devrait faire le job:

    http://www.geekbuying.com/item/Original-Xiaomi-Miband-1S-2015-Xiaomi-IP67-Bluetooth-4-0-Smartband-Fitness-Bracelet-for-Android4-4-Xiaomi-Redmi-Note-2-Mi4-Mi3—iOS-Phones—Black-357888.html?source=ShareAsale

    Pour ma part, j’ai également implémenté une det de présence sur un PI3 (merci le BT intégré!), via un script python perso faisant également des vérifications au delà de la simple présence à portée d’une MAC bluetooth (comptant m’en servir pour désactiver des scénarios alarme, je me suis dit qu’un truc interrogeant en permanence qq MAC connues sans autre vérif était trop aisément spoofable) notifiant Domoticz.

    Pour l’instant c’est les téléphones mobiles parents qui sont détectés, ca a l’air fiable après qq jours d’essais… Et je suis à la recherche d’une solution pour les enfants, qui n’ont pas de téléphone (malgré leurs demandes répétées!) en raison de leur jeunesse!

    Ca reste en fait moins cher que les solutions à base de lecteur de tag RFID Z-Wave (étant déjà équipé de ce type de modules et du controleur associé), tout en étant avec mon implémentation amha un peu plus sûr (et transparent, sans oubli possible): La plupart des lecteurs RFID utilisent des versions absolument pas sécurisées de tags qui peuvent être dumpées d’un simple passage à proximité puis imitées par beaucoup de smartphones actuels.

    Combiné au fait qu’il n’y a besoin que de spoofer un ID + un tag accroché à un porte clef, on imagine immédiatement à quoi il sert contrairement à une montre connectée (+ de la liberté pour checker d’autres paramètres qu’une MAC).

    Bref, le tag RFID j’ai lâché l’affaire… et BT c’est trop cher vs bracelet connecté. Les deux ayant pour moi le défaut d’être immédiatement vus comme un système de controle d’accès par qqun de mal intentionné.

  3. Bonjour,
    Il semble que le script test_beacon.py ne soit plus disponible en ligne. Si vous l’avez conservé, serait-il possible de le mettre en ligne par ailleurs, ou d’en retranscrire ici le contenu ?
    Merci d’avance

  4. bonjour,

    j’ai essaye de reproduire ce tuto avec mon raspi 3 et un nut 3 mais j’ai pas l’impression qu’il est detecte correctement (je n’ai que 4 devices qui n’ont rien a voir quand je fait lsusb… pourtant via l’interface graphique de rasbpian pixel je trouve bien mon « nut »)

    ps: desole pour le manque d’accents : j’utilise un clavier us…

  5. Bonjour, en lançant le script test_beacon.py , mon pi3 me dit qu’il y a une erreur dans le script ??? est ce que ça fonctionne chez quelqu’un avec un pi3, sachant que pour moi toutes les manip de préparation n’ont pas à être faites puisque le PI3 a le Bluetooth sous blueZ.

    Merci

  6. Je suis également sous Raspi3 avec un NUT mini et j’ai le même problème que « Robert » à savoir après avoir fait « lsusb » 4 devices dont aucun qui se rapporte au Bluetooth (normal puisque aucune cl bluetooth mais un bluetooth intégré au Rasp3.

     

    Idem également que « Phebus06 » j’obtient l’erreur suivante :

    File « test_beacon.py », line 5
    <!DOCTYPE html>
    ^
    SyntaxError: invalid syntax

    après avoir fait « sudo python test_beacon.py »

     

    Si une bonne âme à un tuto détaillé pour la marche à suivre sous Raspi3 …..

  7. Merci Patrice pour la réponse rapide, désolé je ne l’avais pas vu immédiatement.

    En ligne 5 jai :

    # Author: jmleglise

    Je pense qu’il s’agit donc de bon script, pour l’erreur, je ne l’ai plus pour le moment car j’avais mis l’installation en stand-by après avoir refait une installation propre de mon RPI3 suite à des problèmes de perte de connexion Wifi lorsque j’activais la connexion Bluetooth simultanément. Le problème du Wifi / Bluetooth étant semble t’il résolu (il s’agissait apparemment d’une alimentation un peu faible pour alimenter le tout en simultané, OUTPUT à 2A au lieu de 2,5A, j’ai mis une alimentation 5V avec un OUTPUT de 3A et changer ma carte micro SD par une plus compatible et de meilleur facture « Samsung EVO classe 10 »)

    Je vais me re-pencher prochainement plus sérieusement sur l’installation de la détection de présence par NUT en suivant ton excellent TUTO.

  8. Bon là je crois avoir tout essayé :

    Coller le texte du fichier en différents format txt sans balises HTML dans le fichier du RPI3 = Impossible (accès refusé) via FileZilla

    Supprimer le fichier du RPI3= impossible action refusé

    Changer les droits d’accès du fichier = Impossible

    Editer le fichier via un éditeur python pour Windows et le recopier sur le RPI3 = Se recopie toujours avec ajout de balises HTLM

     

  9. Merci Patrice, aucun soucis pour le temps passé à galérer pour moi, au contraire si cela peux en aider d’autres par la suite, merci pour la modification, je testerais cela prochainement car je ne suis plus chez moi durant quelques jours.

  10. Sinon, je pense qu’il y’aura également le même problème avec le fichier « Presence-detection-beacon » car j’ai également des balises HTML dessus exactement comme le fichier « test_beacon.py »
    Laisser un commentaire

  11. Super tuto, je l’avais réalisé il y a quelques mois mais c’est maintenant qu’il prend tout son intérêt. Le fiston a le nut accroché à son jeu de clé et nous avons droit à un mail de départ et d’arrivée à la maison, maman est rassurée ! J’ai dû utiliser le script temporisé du forum pour avoir pour le moment 1 fiabilité à 100% de détection.

  12. Bonjour,

    Concernant le module nut (beacon), est ce qu’il se met en veille au bout d’un certain temps? faut il penser à l’activer (réveiller) avant de rentrer chez soi?

    Merci pour vos retours

  13. Bonjour
    Oui il se met en veille sauf si tu as installé l’appli sur ton smartphone qui te permet de localiser le nut, cela le maintient reveillé

  14. Bonjour,

     

    Super tuto. J’utilise maintenant cette installation au quotidien. Mon système de surveillance prend une photo de la porte d’entrée dès lors que celle-ci s’ouvre et qu’aucun beacon n’est détectée auparavant (autrement dit : c’est un intrusion !).

     

    Par contre petit soucis : a priori dès que le beacon est connectée à un appareil (par exemple un smartphone), il n’est plus détectable par le script…

    C’est dommage car ça veut dire que le beacon est constamment visible par tous et n’importe qui peut le connecter à son smartphone…

    Vous avez une solution pour éviter ça ?

     

    Merci !!

Comments are closed.