[Tuto] Gestion de Beacon - ultime systeme de détection de présence

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Gestion de Beacon - ultime systeme de détection de présence

Message par lost »

deennoo a écrit : Un tuto pour scanner le bt des tel ?
Ca doit pas changer vs les tags. Une MAC BT est une MAC BT et du moment que côté PI c'est du BT4.0 mini. A moins d'une incompatibilité BT/BLE qui pose pb à faire les deux en même temps (j'espère que non!?).

C'est un script python maison, inspiré de ce qui s'est fait ailleurs, assez générique et configuré par un fichier yml... lancé en service.

C'est surtout au niveau de la périodicité des detection BT qu'il y a eu un peu de boulot/essais, afin d'être réactif sur un retour (moins de 20s), de ne pas trop vider les batteries d'un tél présent (on passe à un check toutes les 10mn, avec 3 retry immédiats et si aucun ne réussit l'état passe à dehors avec un check à périodicité 20s)... et d'être fiable (retry, pas descendre sous 20s car sinon le BT du PI3 semble devenir capricieux s'il y a plusieurs tel à scanner). Certains paramètres (nb de retry) pouvant être configurés par tel/MAC afin de s'adapter à des modèles un peu capricieux.
lamouette
Messages : 150
Inscription : 07 déc. 2016, 16:10

Re: Gestion de Beacon - ultime systeme de détection de présence

Message par lamouette »

Hello

Pas encore de Beacon de mon côté et j'essaie avec la carte BT interne au PI3 de détecter un téléphone.

Voici ce que j'obtiens :

Code : Tout sélectionner

sudo python /usr/local/bin/check_beacon_presence.py
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/local/bin/check_beacon_presence.py", line 126, in request_thread
    logging.critical(' %s Request Failed %s - %s' % (threading.current_thread(), e, url) )
TypeError: __str__ returned non-string (type Error)
Une idée ?
xavierlp
Messages : 220
Inscription : 01 nov. 2016, 15:28

Re: Gestion de Beacon - ultime systeme de détection de présence

Message par xavierlp »

jml a écrit :Sur le wiki, vous verrez les matériels compatibles.
Le rpi3 est Bluetooth 4.1 donc oui, il y a toutes les chances que cela fonctionne.

J'ai fait le système avec un rpi2 et un d'ongle à 3€ et un Beacon à 8€.

La Distance varie de 5m à 12m (avec mon matériel).
À 5m on choppe le signal toutes les 3sec. Très fiable.
À 12m c'est bcp plus variable. Disons un signal entre 3s et 20s pour etre sur de l'avoir.

Le timeout est configurable dans le script.

Merci @jml pour ce super tuto§ Tout fonctionne et remplace l'utilisation des téléphones qui était hasardeuse.

Je remarque que les variables sont mis à jour toutes les 3 secondes. Y a t il un moyen de configurer ce délai ou est ce une contrainte du BT?

Merci
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Gestion de Beacon - ultime systeme de détection de présence

Message par lost »

jml a écrit :Sur le wiki, vous verrez les matériels compatibles.
Je pense que je vais profiter des soldes pour acheter ce tag:
http://www.ticatag.com/produit/soldes-t ... itie-prix/

En décembre, j'avais contacté le fabricant pour leur demander s'ils comptaient ouvrir leur API pour des utilisations possibles hors de leur écosystème telles que la domotique et ils m'avaient dit que leur produit n'utilisait rien de propriétaire et que ce serait fait prochainement car je n'étais pas seul à en faire la demande.

Et visiblement, ils ont tenu parole:
http://www.ticatag.com/developers/

Renvoie désormais à ceci, qui concerne leurs différents modèles:
https://developers.ticatag.com/beacon/

Comme on peut le voir, les actions du bouton sont également documentées ce qui peut apporter un plus. Le dernier modèle, qui reste un peu cher, permet même d'en déclencher 3 mais ce n'est pas indispensable à mon utilisation.

On peut faire sonner le tag pour donner un feedback de coupure de l'alarme, monitorer le niveau de la pile pour éviter les surprises... et même visiblement adapter le niveau de puissance Tx du tag en fonction de ses besoins... voir connaitre la température de son porte-clef! :lol:
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Gestion de Beacon - ultime systeme de détection de présence

Message par lost »

lost a écrit : On peut faire sonner le tag pour donner un feedback de coupure de l'alarme, monitorer le niveau de la pile pour éviter les surprises... et même visiblement adapter le niveau de puissance Tx du tag en fonction de ses besoins... voir connaitre la température de son porte-clef! :lol:
Par contre, ces actions ne semblent accessibles que dans un mode BT LE "connecté" qui semble aller au delà des fonctionnalités de simple broadcast régulier d'UUID.

Ce mode permettrait en plus 3 actions bouton qqsoit le modèle (appui, double appui, appui long).

Qqun sait-il à quoi correspond ce mode connecté? En prime, j'aimerais savoir s'il permet d'éviter un problème majeur pour un système de contrôle d'accès. En effet, le spoofing d'un beacon utilisé en mode broadcast de base c'est 2 lignes de commande:
https://en.wikipedia.org/wiki/IBeacon#Technical_details

Alors si un mode connecté nécessitant un appairage préalable (comme avec le BT classique, avec alors une crypto assurant un minimum de sécurité sur l'identification du matériel) existe, j'aimerais bien que qqun d'un peu calé sur le sujet me l'explique?
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: Gestion de Beacon - ultime systeme de détection de présence

Message par Phebus06 »

Bonjour,
J'essai de suivre le tuto au mieux que je peux, et c'est pas facile quand on est débutant, mais j'ai un problème quand je lance sudo python /usr/local/bin/check_beacon_presence.py il me revient des erreurs :

Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/local/bin/check_beacon_presence.py", line 127, in request_thread
logging.critical(' %s Request Failed %s - %s' % (threading.current_thread(), e, url) )
TypeError: __str__ returned non-string (type Error)

Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/local/bin/check_beacon_presence.py", line 127, in request_thread
logging.critical(' %s Request Failed %s - %s' % (threading.current_thread(), e, url) )
TypeError: __str__ returned non-string (type Error)

Exception in thread Thread-4:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/local/bin/check_beacon_presence.py", line 127, in request_thread
logging.critical(' %s Request Failed %s - %s' % (threading.current_thread(), e, url) )
TypeError: __str__ returned non-string (type Error)


Quelqu'un pourrait il me dire ce qui ne va pas ???

Je vous en remercie par avance
Fredok
Messages : 90
Inscription : 12 août 2016, 15:04

Re: Gestion de Beacon - ultime systeme de détection de présence

Message par Fredok »

Bonjour à vous,
juste pour vous dire que les modèles
https://fr.aliexpress.com/item/Wireless ... 0.0.UpnvYN
fonctionne très bien.
Opi
RFXCOM
RFLINK 433 & 315
Mysensors
Wifi & Mqtt
EspEasy - Tasmota
Zigate+
schwinny
Messages : 123
Inscription : 23 mars 2017, 21:41

Re: Gestion de Beacon - ultime systeme de détection de présence

Message par schwinny »

Bonjour.

J'ai suivi le tutoriel a la lettre et j'ai l'impression que cela fonctionne.


j'ai mis deux variables dans domoticz:
Capture d’écran 2017-05-09 à 21.15.11.png
Capture d’écran 2017-05-09 à 21.15.11.png (68.41 Kio) Consulté 12106 fois
et j'ai l'impression que le script tourne bien.

Code : Tout sélectionner

schwinny@domoticz:~$ sudo systemctl status check_beacon_presence.service -l
● check_beacon_presence.service - check_beacon_presence Service
   Loaded: loaded (/lib/systemd/system/check_beacon_presence.service; enabled; vendor preset: enabled)
   Active: active (running) since mar. 2017-05-09 23:05:32 CEST; 1h 58min left
 Main PID: 1276 (check_beacon_pr)
    Tasks: 2
   Memory: 21.0M
      CPU: 485ms
   CGroup: /system.slice/check_beacon_presence.service
           └─1276 /usr/bin/python /usr/local/bin/check_beacon_presence.py

mai 09 23:05:32 domoticz systemd[1]: Started check_beacon_presence Service.
mai 09 23:05:35 domoticz sudo[1294]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/local/bin/hciconfig hci0 down
mai 09 23:05:35 domoticz sudo[1294]: pam_unix(sudo:session): session opened for user root by (uid=0)
mai 09 23:05:35 domoticz sudo[1294]: pam_unix(sudo:session): session closed for user root
mai 09 23:05:35 domoticz sudo[1297]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/local/bin/hciconfig hci0 up
mai 09 23:05:35 domoticz sudo[1297]: pam_unix(sudo:session): session opened for user root by (uid=0)
mai 09 23:05:35 domoticz sudo[1300]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/local/bin/hciconfig
mai 09 23:05:35 domoticz sudo[1300]: pam_unix(sudo:session): session opened for user root by (uid=0)
mai 09 23:05:35 domoticz sudo[1300]: pam_unix(sudo:session): session closed for user root
schwinny@domoticz:~$ ps -ef | grep python
root      1276     1  0 21:05 ?        00:00:00 /usr/bin/python /usr/local/bin/check_beacon_presence.py
schwinny  1383  1231  0 21:09 pts/0    00:00:00 grep --color=auto python

cependant, je n'ai aps encore reçu mes tags... j'ai mis a la mac de mon tel mais je n'ai pas de changement d'état de la supervariable. normal ?

J'aimerais avoir en favoris 2 switch qui e base sur ses supervariable afin d'activer suivant un état une troisième switch, pouvez vous me dire comment faire ?
b0b56
Messages : 3
Inscription : 01 juin 2016, 20:38

Re: Gestion de Beacon - ultime systeme de détection de présence

Message par b0b56 »

Fredok a écrit :Bonjour à vous,
juste pour vous dire que les modèles
https://fr.aliexpress.com/item/Wireless ... 0.0.UpnvYN
fonctionne très bien.
J'ai acheté les mêmes modèles.
Les miens s'éteignent automatiquement au bout de 10mn (environ).
Quelqu'un aurait une solution ?
Merci
alext72
Messages : 5
Inscription : 01 juin 2017, 15:57

Re: Gestion de Beacon - ultime systeme de détection de présence

Message par alext72 »

Bonjour,

Je viens de me lancer dans l'aventure Domoticz, et une des premières application que je voulait tester est la detection de beacon.
Ca me permettrait d'eviter d'attendre le sms des enfants qui sont rentrés de l'école et qu'ils oublient régulièrement d'envoyer ^^.

J'ai un Pi 3 du coup sans dongle Blutooth et 3 beacon Nut 2.

Je n'ai jamais reussi a voir le 1er beacon avec le script test_beacon.py
Du coup j'ai récupéré l'adresse MAC via Bluetooth Finder, une app Android et j'ai modifié check_beacon_presence.py avec le nom de ma variable et l'adresse du NUT.

Quand je lance check_beacon_presence.py j'obtient moi aussi :

Code : Tout sélectionner

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/etc/init.d/check_beacon_presence.py", line 126, in request_thread
    logging.critical(' %s Request Failed %s - %s' % (threading.current_thread(), e, url) )
TypeError: __str__ returned non-string (type Error)
Du coup je suis obligé de faire ^C pour quitter le script et récuperer la main

si je verifie le fichier de log /var/log/check_beacon_presence.log
quand j'appuie sur le bouton du nut2 et le fait bipper j'ai :

Code : Tout sélectionner

 root - DEBUG - Tag NUT1 Detected e7:ed:5d:5e:d0:f1 - R
SSI (-87,) - DATA unknown (-16,)

Si je relance quelques minutes plus tard j'ai :

Code : Tout sélectionner

 root - DEBUG - Ok hci0 interface Up n running !
2017-06-01 16:06:50,084 - root - DEBUG - Connect to bluetooth device 0
2017-06-01 16:06:55,086 - root - WARNING - Tag NUT1 not seen since 35 sec => upd
ate absence
2017-06-01 16:06:55,123 - urllib3.connectionpool - INFO - Starting new HTTPS con
nection (1): 192.168.1.99
Du coup j'ai plusieurs questions :
- est ce que quelqu'un a déja testé avec ce matos (Pi3 sans dongle et Nut2)
- A quoi correspond les erreurs quand je lance check_beacon_presence.py
- Est ce que je peux lancer le script en tant que service si il génère ses erreurs.
- Si quelqu'un a déjà utilisé le nut 2, faut il obligatoirement appuyer sur le bouton pour etre détecté ?

Voilà, merci d'avance pour vos réponses
Répondre