Dans l’article précédent https://easydomoticz.com/?p=3408 nous avions vu toute la partie préalable de la mise en place de détection de présence.
Voyons ici comment mettre en place la détection dans Domoticz.
Configurer le script
(Lisez les commentaires dans le script check_beacon_presence)
On peut adapter le niveau de log pour les tests et pour l’utilisation quotidienne en commentant/décommettant les lignes logLevel :
– Pour tester activez .DEBUG , le log de /var/log/check_beacon_presence.log est alors très bavard.
logLevel=logging.DEBUG #logLevel=logging.CRITICAL #logOutFilename='/var/log/check_beacon_presence.log'
– Ensuite passez en .CRITICAL en commentant la première ligne
#logLevel=logging.DEBUG logLevel=logging.CRITICAL logOutFilename='/var/log/check_beacon_presence.log'
Domoticz et les variables
Rendez vous dans Domoticz et ajoutez une variable texte par beacon à gérer.
Je vous conseille d’acheter des beacons de couleur différente pour chaque membre de la famille puis de nommer vos variables soit par couleur ou par prénom du possesseur, ou un mix des deux si vous avez deux fois la même couleur.
Par exemple
Adaptation du script
Ouvrez le script
sudo nano /usr/local/bin/check_beacon_presence.py
Adaptez la partie URL_DOMOTICZ si vous ne travaillez pas en localhost ou avec le port par défaut
URL_DOMOTICZ = 'http://localhost:8080/json.htm?type=command¶m=updateuservariable&idx=PARAM_IDX&vname=PARAM_NAME&vtype=2&vvalue=PARAM_CMD'
Descendez dans la partie des beacons et configurez les vôtres sous la forme suivante dans TAG_DATA : [Nom_de_la_variable_domoticz,MacAddress,Timeout,0,idx,mode]
- Nom_de_la_variable_domoticz: C’est le nom EXACT de la variable texte de Domoticz, attention aux majuscules/minuscules !
- macAddress : la Mac adress de ce beacon.
- Timeout est le temps qu’il faut pour que le beacon soit considéré en AWAY (parti). Si le beacon émets toutes les 3 à 8 secondes , un bon timeout est 15 seconds. Pour définir cela utilisez les valeurs données par test_beacon.py voir plus haut).
- – 0 : pas touche.
- l’idx Domoticz de cette variable texte, c’est le nombre en face du nom de la variable.
- mode : SWITCH_MODE = une mise a jour unique lorsque le statut change / REPEAT_MODE = mise à jour continuelle de l’état toutes les 3 secondes
TAG_DATA = [ ["Orange","Fb:14:78:38:18:5e",15,0,9,REPEAT_MODE], ["Vert_Papa","ff:ff:60:00:22:ae",15,0,7,REPEAT_MODE] ]
Second Test : Lançons le script à la main et voyons.
sudo python /usr/local/bin/check_beacon_presence.py
A l’écran des information s’affichent , le log se remplit à :
sudo more /var/log/check_beacon_presence.log
sudo python /usr/local/bin/check_beacon_presence.py 2016-09-23 12:33:26,274 - root - DEBUG - Ok hci0 interface Up n running ! 2016-09-23 12:33:26,276 - root - DEBUG - Connect to bluetooth device 0 2016-09-23 12:33:31,282 - root - DEBUG - Tag Tag_Orange not seen since 20 sec => update absence 2016-09-23 12:33:31,284 - root - DEBUG - Tag Tag_Green not seen since 20 sec => update absence 2016-09-23 12:33:31,356 - requests.packages.urllib3.connectionpool - INFO - Starting new HTTP connection (1): localhost 2016-09-23 12:33:31,362 - requests.packages.urllib3.connectionpool - INFO - Starting new HTTP connection (1): localhost 2016-09-23 12:33:31,389 - requests.packages.urllib3.connectionpool - DEBUG - "GET /json.htm?type=command¶m=updateuservariable&idx=7&vname=Tag_Green&vtype=2&vvalue=AWAY HTTP/1.1" 200 58 2016-09-23 12:33:31,394 - root - DEBUG - <Thread(Thread-3, started daemon 1970148464)> -> <Response [200]> 2016-09-23 12:33:31,401 - requests.packages.urllib3.connectionpool - DEBUG - "GET /json.htm?type=command¶m=updateuservariable&idx=6&vname=Tag_Orange&vtype=2&vvalue=AWAY HTTP/1.1" 200 58 2016-09-23 12:33:31,405 - root - DEBUG - <Thread(Thread-2, started daemon 1978537072)> -> <Response [200]>
Vérifiez que vos variables texte sont mises à jour correctement en regardant leur contenu (AWAY ou HOME) et la date de mise à jour en fonction de ce que vous voyez passer à l’écran.
Repassez le debug à critical quand tout fonctionne et activons tout cela automatiquement en tant que service.
Installation du service
sudo wget https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence%20detection%20%28beacon%29/check_beacon_presence sudo mv check_beacon_presence /etc/init.d/ sudo chmod 755 /etc/init.d/check_beacon_presence
Troisième test
Lancez le service manuellement :
sudo /etc/init.d/check_beacon_presence start
Vérifiez qu’il fonctionne par :
sudo /etc/init.d/check_beacon_presence status
On peut y utiliser les commandes : start, stop, restart, status
Si le service est bien lancé activons le au boot du Raspberry
Démarrage du service automatique
sudo update-rc.d check_beacon_presence defaults
Pour le supprimer du démarrage du Raspberry :
sudo update-rc.d -f check_beacon_presence remove
Test final (avec le démarrage automatique activé)
sudo reboot ps -ef | grep python
Vous devez voir un « check_beacon_presence.py » quelque part
Utilisation dans Domoticz
Vous avez vu que ce sont des uservariables texte qui passent de AWAY à HOME, vous pouvez donc utiliser tous les moyens offerts par Domoticz pour exploiter cela à votre convenance (Lua, Blocky, API JSON…)
Exemple Lua
script_variable_autoArmAlarm.lua
--Variable scripts receive 7 tables from Domoticz: -- otherdevices, otherdevices_lastupdate, otherdevices_svalues, otherdevices_idx, uservariables, uservariables_lastupdate and uservariablechanged commandArray = {} beaconHome=0 for variableName, variableValue in pairs(uservariables) do if string.sub(variableName,1,3)=="Tag" and variableValue ~= "AWAY" then beaconHome=beaconHome+1 end end if otherdevices['Alarm'] == 'On' and beaconHome>=1 then -- switch Off Alarm because 1 beacon come back Home table.insert (commandArray, { ['Alarm'] ='Off' } ) elseif otherdevices['Alarm'] == 'Off' and beaconHome==0 then -- switch On Alarm because all beacon are away table.insert (commandArray, { ['Alarm'] ='On' } ) end return commandArray
D’autres exemples : https://www.domoticz.com/forum/viewtopic.php?f=28&t=10640&start=100#p86310
Blocky
https://www.domoticz.com/forum/viewtopic.php?f=28&t=10640&start=140#p86725
Références
Le topic du forum :https://www.domoticz.com/forum/viewtopic.php?f=28&t=10640
Une page de référence pour les beacons ble : https://www.beaconzone.co.uk/allbeacons
https://wiki.tizen.org/wiki/Bluetooth
https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/pybluez/source-archive.zip => pybluez\examples\advanced\inquiry-with-rssi.py
Mémo d’autres commandes
Reset de l’adapttateur bluetooth (hci0 dans cet exemple) :
sudo hciconfig hci0 down sudo hciconfig hci0 up
Trouver une MacAdress d’un beacon avec hcitool
pi@raspberrypi ~ $ whereis hcitool hcitool: /usr/local/bin/hcitool pi@raspberrypi ~ $ sudo hcitool lescan LE Scan ... FB:14:78:38:18:5E nut FB:14:78:38:18:5E (unknown)
Voila vous pouvez maintenant détecter les arrivées/départs de tous les membres de la famille, faites en bon usage.
Bonjour
Merci pour ce super tuto.
J’ai un petit pb avec la mise en place du service.
pi@raspberrypi:~ $ sudo /etc/init.d/check_beacon_presence start
[….] Starting check_beacon_presence (via systemctl): check_beacon_presence.serviceFailed to start check_beacon_presence.service: Unit check_beacon_presence.service failed to load: No such file or directory.
failed!
Avez-vous une idée ?
Merci de votre aide.
Bonsoir
Une idée ?
Oui
Regardes la dernière ligne , elle dit « no such file » donc pas de fichier
A mon avis tu as raté au moins ca du tuto
sudo wget https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence%20detection%20%28beacon%29/check_beacon_presence
sudo mv check_beacon_presence /etc/init.d/
sudo chmod 755 /etc/init.d/check_beacon_presence
Essaye et dis nous si c’est OK
Merci pour votre réponse.
J’ai bien fait cette étape du tuto
pi@raspberrypi:~ $ sudo /etc/init.d/check_beacon_presence
Usage: /etc/init.d/check_beacon_presence {start|stop|restart|force-reload|status}
Je pensai que cela pouvais venir du fichier check_beacon_presence.py.
Mais il est bien dans le repertoire /usr/local/bin/
le fait qu’il dise
est plutot bon signe
fais
pour voir
Bonjour Patrice
Merci pour ce fabuleux tuto .
J’ai bien suivie les étapes une à une jusqu’au moment ou, problème :
le fichier est bien présent, les droits accordés mais comme notre ami « sjteddy » impossible de le lancer.
Merci de toute aide apporté.
Cordialement.
Je me répond : ;-))
Un simple reboot m’a permis de lancer le fameux « check_beacon ».
Encore un énorme MERCI à Patrice pour ce superbe partage.
Et une pierre de plus a Domoticz
Bonjour,
Merci pour ce super tuto que j’ai réussi à mettre en place mais mon nut 2 ne reste pas « éveillé », je dois appuyer longtemps sur le bouton de celui-ci pour le réveiller et là il est vu par mon PI 3, avez-vous rencontrer le problème ?
Merci par avance
Sylvain
Bonjour,
un grand merci pour ce tuto, qui devrait me faciliter la vie.
Par contre j’ai le même soucis que Sylvain, mon nut 2 est visible uniquement lorsque j’appuie sur le bouton d’appairage, et cela durant 1 minute pile.
Ai je raté une étape !?
Merci d’avance pour votre aide, j’y suis presque mais pas encore.
Bonsoir
Je ne pense pas que tu ai raté qq chose, en ce qui me concerne le nut reste actif tout le temps.
Est ce que c’est parce que je les ai reliés à mon/nos smartphone aussi via l’appli nut avec les jeux de clé de chacun/chacune ?
Bonjour,
merci pour ta réponse patrice, je viens d’appairer mon nut à mon smartphone, apparemment il répond présent à mon raspi depuis déjà 5 minutes, il semblerait que cela marche.
Reste à voir combien de temps, et ce qu’il se passe si mon smartphone s’éloigne du nut.
En tout cas merci pour ta réponse. Affaire à suivre…
J’ai trouvé, pour ceux qui ont fait la même erreur que moi.
j’avais la première ligne du script vide, et en 2ème ligne #! /bin/sh
Suffit juste de supprimer la 1ère ligne vide et d’avoir le #! /bin/sh à la place.
tout simplement…
Bonjour à tous et merci pour ce tuto,
J’ai réussi toutes les étapes avec un NUT mini (qui est vraiment petit soit dit en passant 😉
Je reste bloqué sur le démarrage automatique du service.
Le démarrage manuel fonctionne correctement :
pi@raspberrypi:~$ sudo /etc/init.d/check_beacon_presence start
[ ok ] Starting check_beacon_presence (via systemctl): check_beacon_presence.service.
Tout ce passe bien lorsque je saisi
sudo update-rc.d check_beacon_presence defaults
Mais après le reboot, le service n’est pas listé dans ps et le status est « étrange »…
pi@raspberrypi:~$ sudo /etc/init.d/check_beacon_presence status
● check_beacon_presence.service - LSB: This daemon manages the bluetooth low energy device detector : check_beacon_presence.py
Loaded: loaded (/etc/init.d/check_beacon_presence)
Active: active (exited) since Sat 2017-01-14 13:37:05 CET; 1min 16s ago
Process: 317 ExecStart=/etc/init.d/check_beacon_presence start (code=exited, status=0/SUCCESS)
Jan 14 13:37:05 raspberrypi systemd[1]: Started LSB: This daemon manages the bluetooth low energy device detector : check_beacon_presence.py.
Jan 14 13:37:07 raspberrypi sudo[509]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/local/bin/hciconfig hci0 down
Jan 14 13:37:07 raspberrypi sudo[509]: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan 14 13:37:07 raspberrypi sudo[509]: pam_unix(sudo:session): session closed for user root
Jan 14 13:37:07 raspberrypi sudo[526]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/local/bin/hciconfig hci0 up
Jan 14 13:37:07 raspberrypi sudo[526]: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan 14 13:37:07 raspberrypi sudo[526]: pam_unix(sudo:session): session closed for user root
Jan 14 13:37:07 raspberrypi sudo[541]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/local/bin/hciconfig
Jan 14 13:37:07 raspberrypi sudo[541]: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan 14 13:37:07 raspberrypi sudo[541]: pam_unix(sudo:session): session closed for user root
Bonjour, merci pour ce tuto.
J’ai un soucis lorsque j’arrive au second test, je tape la commande « sudo python /usr/local/bin/check_beacon_presence.py »
Dans la console j’ai se méssage qui tourne en boucle
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 126, in request_thread
logging.critical(‘ %s Request Failed %s – %s’ % (threading.current_thread(), e, url) )
TypeError: __str__ returned non-string (type Error)
Avez vous une idée?
Merci
Bonjour
Mauvais macadress probablement
Bonjour,
Merci pour ce super tuto par contre je me demande comment connaître le niveau de batterie du NUT ?
Merci par avance.
Sylvain
Super tuto, très bien expliqué, merci !
La mise en place se fait rapidement.
Je me permets juste une petite correction au sujet du script de mise à jour des variables d’environnement : il semblerait que la nouvelle version mette à jour là variable avec le RSSI quand le beacon est détecté (au lieu de mettre la variable à « HOME »). Ça devrait notamment permettre d’exploiter là puissance du signal (et donc la distance) du beacon !
A+
Merci beaucoup pour ce tutoriel.
Pour info, les scripts ont déménagé ici :
https://github.com/jmleglise/mylittle-domoticz/tree/master/Presence-detection-beacon
(et ne sont plus sur https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence%20detection%20%28beacon%29 )
Bonjour et merci pour ce tuto.
Mais en fait je galère un peu…
Voici l’erreur que j’obtiens !!! (j’ai un Pi3)
pi@raspberrypi:~$ sudo python /usr/local/bin/check_beacon_presence.py
Traceback (most recent call last):
File « /usr/local/bin/check_beacon_presence.py », line 77, in
import bluetooth._bluetooth as bluez
ImportError: No module named bluetooth._bluetooth
Merci d’avance pour le retour
Bruno
Bonjour,
Le script ne trouve pas de module bluetooth._bluetooth
il faut voir dans les scripts check_beacon_presence.py de jmleglise ou il cherche ses modules
Bonjour,
Après avoir suivi le tuto avec attention et sans rien oublié, je me retrouve avec une erreur en démarrant le service
/etc/init.d/check_beacon_presence: 7: /etc/init.d/check_beacon_presence: Syntax error: newline unexpected
Avez vous la solution ??
Merci d’avance
Bonjour
Oui ,
Probablement tu a modifié le script sous Windows et donc changé les caracteres de fin de ligne de Linux
Tu installe dos2unix et tu refais convertir tes fichiers par cet outil
Bonjour,
J’ai suivi le tuto et après avoir téléchargé le fichier (sudo wget https://raw.githubusercontent.com/jmleglise/mylittle-domoticz/master/Presence-detection-beacon/check_beacon_presence)
J’ai mis comme demandé celui-ci dans le repertoire init.d
J’ai fait le chmod 755
Mais quand je lance l’exécutable j’ai cette erreur :
sudo /etc/init.d/check_beacon_presence start
[….] Starting check_beacon_presence (via systemctl): check_beacon_presence.serviceFailed to start check_beacon_presence.service: Unit check_beacon_presence.service failed to load: No such file or directory.
Quelqu’un peut-il m’aider ?
A bientôt !
Bonjour,
J’ai suivi le tuto mais quand je lance check_beacon_presence en teste j’ai cette erreur :
sudo /etc/init.d/check_beacon_presence start
[….] Starting check_beacon_presence (via systemctl): check_beacon_presence.serviceJob for check_beacon_presence.service failed. See ‘systemctl status check_beacon_presence.service’ and ‘journalctl -xn’ for details.
failed!
Quelqu’un peut-il m’aider ?
A bientôt
Bonjour
A mon avis tu as du rater la parie « Installation du service » et en particulier
Relance tout ça et dis nous si c’est Ok pour toi
Bonjour,
J’ai mis à jour mon système il y a un moment sur la base de ce tuto (très bien expliqué, merci !).
Par contre, la localisation de mon appartement fait que l’on doit le contourner avant d’y rentrer. Du coup, la détection passe du statut « activé » à « désactivé » puis encore à « activé », le tout en environ 15 secondes.
Auriez-vous une idée sur la façon de contourner ce problème ?
Merci !
Bonjour
J’ai bien du soucis ma config raspbian strech n’accepte pas ma commande :
pi@domoticz:~ $ sudo /etc/init.d/check_beacon_presence start
[….] Starting check_beacon_presence (via systemctl): check_beacon_presence.serviceFailed to start check_beacon_presence.service: Unit check_beacon_presence.service is not loaded properly: Invalid argument.
See system logs and ‘systemctl status check_beacon_presence.service’ for details.
failed!
Et dans systemctl status:
pi@domoticz:~ $ systemctl status check_beacon_presence.service
● check_beacon_presence.service
Loaded: error (Reason: Invalid argument)
Active: inactive (dead)
juil. 09 17:40:29 domoticz systemd[1]: [/lib/systemd/system/check_beacon_presence.service:10] Unknown section ‘Installer’. Ignoring.
juil. 09 17:40:29 domoticz systemd[1]: check_beacon_presence.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.
juil. 09 17:40:29 domoticz systemd[1]: [/lib/systemd/system/check_beacon_presence.service:1] Unknown section ‘Unité’. Ignoring.
juil. 09 17:40:29 domoticz systemd[1]: [/lib/systemd/system/check_beacon_presence.service:5] Unknown section ‘Un service’. Ignoring.
juil. 09 17:40:29 domoticz systemd[1]: [/lib/systemd/system/check_beacon_presence.service:10] Unknown section ‘Installer’. Ignoring.
juil. 09 17:40:29 domoticz systemd[1]: check_beacon_presence.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.
juil. 09 17:43:07 domoticz systemd[1]: [/lib/systemd/system/check_beacon_presence.service:1] Unknown section ‘Unité’. Ignoring.
juil. 09 17:43:07 domoticz systemd[1]: [/lib/systemd/system/check_beacon_presence.service:5] Unknown section ‘Un service’. Ignoring.
juil. 09 17:43:07 domoticz systemd[1]: [/lib/systemd/system/check_beacon_presence.service:10] Unknown section ‘Installer’. Ignoring.
juil. 09 17:43:07 domoticz systemd[1]: check_beacon_presence.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.
Pourquoi ?
Merci
Bonjour
C’est l’installation du service depuis le github qui à foiré, reprends à ce niveau
Bon courage