Bon et bien après pas loin de deux jours de tests avec mes trois types d'équipements BT et BLE (des Nut Mini, des G-Tag et des smartphones), je peux dire que ça fonctionne du feu de Dieu
J'ai mis le timeout à 30 secondes (au lieu de 240 d'origine) et malgré tout, je n'ai pas de décrochages de la présence, hormis sur mes téléphones mais c'est normal car on les balade beaucoup dans la maison et en plus je pense que leur mise en veille coupe le BT par moment.
Merci beaucoup pour ce script
Je pense que tu devrais en faire un plugin officiel pour la gestion de la présence dans Jeedom
Il ne manque qu'un chose mais à mon avis il ne faut pas l'inclure pour ne pas l'alourdir (et le faire planter !) : la gestion de la batterie des équipements. Pour ma part, j'ai laissé mes beacons G-Tag paramétrés sous le plugin BLEA et n'ai affiché que leur niveau de batterie dans un simple virtuel, ça fait parfaitement le job car ça peut décrocher plusieurs minutes ou jours, on s'en fiche, le niveau de batterie ne changera pas énormément dans l'intervalle.
J'ai noté ce qu'il m'a fallu faire pour l'installer et le paramétrer, je recopie tout ça ici (avec ton descriptif au début et ta capture de virtuel) au cas où ça pourrait en aider d'autres.
Et si ça peut te servir en tout ou partie pour faire une doc ou un tuto, pas de soucis, c'est avec grand plaisir
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Code : Tout sélectionner
###############
# Description #
###############
URL du forum : https://www.jeedom.com/forum/viewtopic.php?f=31&t=25492
A ce jour il existe bien sûr le plugin BLEA, mais pour ceux (comme moi) qui n'ont pas l'utilité de la totalité de ce que fait le plugin et qui se contentent de scanner la présence d'une personne ou d'un objet via Bluetooth (et qui veulent aussi comprendre un peu comment cela fonctionne), voici un script pour Raspberry PI:
https://github.com/diving91/Bluetooth-scanner
Il a l'avantage de pouvoir tourner sur le même Hardware que Jeedom ou bien sur un autres Hardware (Raspbeyy Pi) qui possède un adaptateur Bluetooth. Dans les deux cas, le script communique avec Jeedom par son API http.
Le script vous guide au démarrage pour configurer les devices a scanner. (soit des devices de type Smartphone, soit des devices BT-LE de type itag)
Ensuite, tout est affaire de widgets et de scenario pour piloter des automatismes en fonction de la présence ou non des devices qui sont scannées.
#############
# Prérequis #
#############
Installer les packages Python Bluez si pas déjà fait :
apt-get install python-bluez
############################
# Téléchargement du script #
############################
Téléchargement manuel : https://github.com/diving91/Bluetooth-scanner
URL pour commande GIT : https://github.com/diving91/Bluetooth-scanner.git
URL pour téléchargement archive : https://github.com/diving91/Bluetooth-scanner/archive/master.zip
Télécharger le script soit via le plugin "script" de Jeedom, soit via commandes SSH.
En ssh il faut faire (nom du dossier à adapter suivant son choix) :
mkdir /etc/bluetooth-scanner
cd /etc/bluetooth-scanner
wget https://github.com/diving91/Bluetooth-scanner/archive/master.zip
Puis le dézipper :
apt-get install unzip # au cas où UNZIP n'est pas installé sur la machine
unzip master.zip -j -x *.jpg *.png # pour ne pas dézipper les sous-dossiers d'images
#######################
# Virtuel dans Jeedom #
#######################
Pour chaque device (nut ou autre), il faut créer 2 commandes actions (on et off) et 1 commande info (binaire).
Seule la commande info est à afficher, les commandes actions ne servent qu'a mémoriser l'état du device.
Dans la configuration du script il faut renseigner les ID des commandes actions (on et off) -> 451 et 452 dans l'exemple ci-dessous :
[VOIR PHOTO VIRTUEL.JPG]
Pour le choix du visuel, il faut utiliser le plugin widget (il y en a plein sur le market), sinon voir des exemples de commande on/off sur le forum.
#########################
# Paramétrage du script #
#########################
1) Configuration initiale :
---------------------------
Pour créer la config initiale, lancer la commande :
php BTdaemon.php conf
ATTENTION : si un fichier BT.ini existe et que vous annulez la conf en cours, il sera vidé ! De la même manière, pour ajouter des périphériques à surveiller, éditez manuellement le fichier ini via nano ou tout autre éditeur :
nano BT.ini
Voici par exemple ce qu'il faut répondre aux questions de configuration :
[root@RPI-DOMO] [/etc/bluetooth-scanner] $php BTdaemon.php conf
Configuring Bluetooth Daemon
Select hci adapter (0,1,2,...): 1 # 0 si module BT interne, 1 ou plus si clé USB externe
Select Jeedom IP (x.y.z.w): 192.168.x.xxx # L'adresse IP du Jeedom qui recevra les infos
Select Jeedom API key: dsfgdsgdsfgdsfgdfgdsfgsdfg # Clé API de Jeedom pour commandes via HTTP[S]
Select iTag BT MAC: AB:CD:EF:12:34:56 # L'adresse MAC Bluetooth d'un équipement
Select Jeedom cmd id ON (0,1,2,...): 2239 # L'ID de la commande "ON" du virtuel créé dans Jeedom
Select Jeedom cmd id OFF (0,1,2,...): 2240 # L'ID de la commande "OFF" du virtuel créé dans Jeedom
Select Device Type (BT/BLE): BLE
Enter another iTag ? (yes/no):
2) Réglage du timeout de présence :
-----------------------------------
Par défaut, un équipement passe en "absent" au bout de 240 secondes (soit 4 minutes). Pour régler ce délai, il faut modifier le fichier BTdaemon.php et modifier la valeur suivante :
private $_timeOut = 30; (en secondes)
3) Lancement automatique au boot :
----------------------------------
Editer le fichier des programmations :
nano /etc/crontab
et lui ajouter une ligne du style :
@reboot php /etc/Bluetooth-scanner/BTdaemon.php start &
Nota : l'esperluette finale sert à lancer la ligne en arrière-plan, comme ça les autres traitements n'attendent pas sa fin pour être lancés.
Autre solution : créer un service qui lancera le script automatiquement et monitorer ce service via l'outil MONIT (cf TUTO de check des antennes BLEA).
Nota : pour vérifier si le processus est bien lancé, on peut utiliser la commande :
ps aux|grep "php BTDaemon.php"
(on voit alors en principe la ligne du démon, ainsi que la ligne de commande qu'on vient de taper)
#############################
# Si erreurs avec le script #
#############################
1) En cas d'erreur à propos de fichier de config "ERROR No config file, use: php BTdaemon.php conf", il faut créer manuellement le fichier BT.ini avec ce genre de contenu :
[adapter]
; Mettre "hci0" pour le Bluetooth interne du R.PI, "hci1" pour celui via clé USB, etc.
hci = hci0
[Jeedom IP]
; IP de Jeedom
ip = 192.168.x.xxx
[Jeedom Key]
key = ##CLE_API_DE_JEEDOM##
[TAGS]
; Nota : les lignes de périphériques sont du style « 1 = AB:CD:EF:12:34:56,ID_COMMANDE_ON,ID_COMMANDE_OFF,BLE_BINARY »
; "BLE_BINARY" = 1 si le périphérique est BLE, sinon 0 si Bluetooth simple.
; "ID_COMMANDE_ON" = le numéro (ID) de la commande "présent" du virtuel créé dans Jeedom.
; "ID_COMMANDE_OFF" = le numéro (ID) de la commande "absent" du virtuel créé dans Jeedom.
; 1 Périphérique BLE :
1 = AB:CD:EF:12:34:56,2239,2240,1
; 2 Périphérique BT :
2 = 12:34:56:AB:CD:EF,2243,2244,0
; 3 Périphérique BLE :
3 = AA:BB:CC:DD:EE:FF,2743,2744,1
; etc.
[logs]
log = 0