Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

[TUTO] Scanner Bluetooth (BLE ou non)

Réservé à l'utilisation et la programmation de scripts dans JEEDOM
Répondre
Avatar de l’utilisateur
diving91
Timide
Messages : 372
Inscription : 08 mars 2015, 18:29
Localisation : Essonne (91)
Contact :

[TUTO] Scanner Bluetooth (BLE ou non)

Message par diving91 » 12 mars 2017, 18:26

Hello,

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

diving91
Dernière édition par diving91 le 29 avr. 2017, 02:31, édité 1 fois.
Diving91,
RPI2 + SSD 30MB - RfxTrx433E - Store Somfy - Led Milight - MySensors Gateway ESP8266 - Noeuds ESP Easy
Ma Station Météo sous Jeedom

DjSony971
Timide
Messages : 6
Inscription : 12 nov. 2016, 14:29

Re: [TUTO] Scanner Bluetooth

Message par DjSony971 » 15 mars 2017, 10:56

Salut @diving91,

Super dev, Merci.

J'ai testé sur mon pi3 avec le bluetooth intégré et mon Iphone. J'ai du faire une petite modification sur ton script pour que ça passe ça passe sur pi3. J'ai supprimer le test sur la liste des périphériques usb.

Par contre je ne comprend pas pourquoi tu utilises la commande scan au lieu de l2ping sachant que tu as les adresses mac des périphériques recherchés.

En plus, en faisant des tests chez moi je me suis rendu compte qu'avec la commande scan je devais avoir le téléphone à moins d'un mètres du pi3 pour qu'il soit détecté alors que le l2ping me permet de faire une détection jusqu'à 10m.

Rony

DjSony971
Timide
Messages : 6
Inscription : 12 nov. 2016, 14:29

Re: [TUTO] Scanner Bluetooth

Message par DjSony971 » 15 mars 2017, 10:56

Salut @diving91,

Super dev, Merci.

J'ai testé sur mon pi3 avec le bluetooth intégré et mon Iphone. J'ai du faire une petite modification sur ton script pour que ça passe ça passe sur pi3. J'ai supprimer le test sur la liste des périphériques usb.

Par contre je ne comprend pas pourquoi tu utilises la commande scan au lieu de l2ping sachant que tu as les adresses mac des périphériques recherchés.

En plus, en faisant des tests chez moi je me suis rendu compte qu'avec la commande scan je devais avoir le téléphone à moins d'un mètres du pi3 pour qu'il soit détecté alors que le l2ping me permet de faire une détection jusqu'à 10m.

Rony

Avatar de l’utilisateur
diving91
Timide
Messages : 372
Inscription : 08 mars 2015, 18:29
Localisation : Essonne (91)
Contact :

Re: [TUTO] Scanner Bluetooth

Message par diving91 » 15 mars 2017, 23:23

Bonsoir,

Je n'ai pas de PI3 pour tester - Pourrais tu partager tes modifs pour PI3?
sinon entre l2ping et scan, il y a plusieurs méthodes possibles avec des avantages et inconvénients:

chez moi avec un dongle Orico sur RPI2, la portée est très bonne (largement plus de 10m, y compris entre 2 étages d'un pavillon). Je ne constate aucune différence de ce côté entre scan et l2ping.

Je pense que scan (ou lescan) est moins consommateur en CPU/mémoire qu'un ping - mais je n'ai pas fait de mesure

l2ping envoi une requête L2CAP qui offre l'avantage que ça fonctionne aussi sur un device qui n'est pas en mode détectable. Pour l'instant je fais mes essais avec un Samsung S5 mais c'est en attendant d'avoir mes iTags (https://goo.gl/KoQUb3) Ce sont des devices bluetooth LE avec de l'advertisement - donc pas de soucis d'avoir son device détectable .... ce qui a mes yeux diminue l'avantage du l2ping

par ailleurs (j'ai lu, je n'en suis donc pas sûr) qu'un l2ping demande au device s'il veux s'appairer ... consommateur et inutile dans mon cas d'usage.

une alternative interessante par contre:
au lieu d'un hcitool -i hci0 scan serait hcitool -i hci0 name device_bdaddr (la mac address du device)
cette fonction réponds avec le nom du device si elle le trouve - et rien si elle ne le trouve pas.

le code source donne une idée de ce qui est derrière ces commandes https://git.kernel.org/pub/scm/bluetoot ... 942bd316e6

line 521: hcitool scan - ca fait un inquiry , device-open, read-remote-name, et d'autre trucs
line 801: hcitool name - ca semble bien plus léger avec hci get route, device-open, read remote name

il faudrait expérimenter les deux méthodes - mais je pense que c'est plus léger dans tous les cas qu'un l2ping.
L'avantage "unique" (a confirmer ?) d'un l2ping est de détecter les devices types smartphone qui ne s'annoncent pas - c'est surement ton cas avec iPhone.

Par contre, je n'explique pas pourquoi ta distance de détection entre les 2 méthodes varie autant. je ne n'observe pas cela du tout avec mon RPI2 et dongle Orico

diving
Diving91,
RPI2 + SSD 30MB - RfxTrx433E - Store Somfy - Led Milight - MySensors Gateway ESP8266 - Noeuds ESP Easy
Ma Station Météo sous Jeedom

DjSony971
Timide
Messages : 6
Inscription : 12 nov. 2016, 14:29

Re: [TUTO] Scanner Bluetooth

Message par DjSony971 » 16 mars 2017, 16:42

Merci, pour cette réponse très complète ;) .

Je vais utilisé la commande name qui semble mieux fonctionner dans mon cas. Effectivement la commande l2ping fait une tentative de connexion en bluetooth avec rejet automatique.

Je rejoins ton avis sur le fait que mon problème viens probablement de l’implémentation du bluetooth sur iPhone. Malheureusement, je n'ai que des produits Apple pour faire le test chez moi.

Code : Tout sélectionner

root@jeedom:~/Bluetooth-scanner# hcitool -i hci0 scan
Scanning ...
root@jeedom:~/Bluetooth-scanner# hcitool -i hci0 name 90:60:F1:3B:**:**
iPhone de Rony
Pour l'adaptation de ton script sur py3, j'ai juste mis en commentaire les lignes pour tester la présence d'un contrôleur bluetooth usb ( puisqu'il n'est pas en usb sur le py3)

Code : Tout sélectionner

+               //exec("sudo lsusb | grep Bluetooth",$r);
+               //if (empty($r)) {die("ERROR, no bluetooth adapter found: You need to install an adapter\n");}

Avatar de l’utilisateur
diving91
Timide
Messages : 372
Inscription : 08 mars 2015, 18:29
Localisation : Essonne (91)
Contact :

Re: [TUTO] Scanner Bluetooth

Message par diving91 » 17 mars 2017, 00:18

ok, je ferai une modif pour detecter si PI2 ou PI3 de facon automatique
Diving91,
RPI2 + SSD 30MB - RfxTrx433E - Store Somfy - Led Milight - MySensors Gateway ESP8266 - Noeuds ESP Easy
Ma Station Météo sous Jeedom

Avatar de l’utilisateur
diving91
Timide
Messages : 372
Inscription : 08 mars 2015, 18:29
Localisation : Essonne (91)
Contact :

Re: [TUTO] Scanner Bluetooth

Message par diving91 » 18 mars 2017, 23:15

Je viens de déposer une nouvelle version a côté de l'ancienne:
- Doit fonctionner sur RPI 3 et PI zero W
- Scan avec hcitool -i adapter name BTaddr (au lieu de hcitool -i adapter scan)
- Les iTags ne fonctionnent pas correctement - ils s’éteignent dès qu'ils sont hors de portée de l'antenne (donc inutilisable pour faire de la détection de présence) - Cette nouvelle version est donc restreinte a des téléphones

https://github.com/diving91/Bluetooth-s ... daemon.php

je ferai des tests avec des mini nut pour adapter à nouveau le script a des devices de ce type (Bluetooth LE)
Diving91,
RPI2 + SSD 30MB - RfxTrx433E - Store Somfy - Led Milight - MySensors Gateway ESP8266 - Noeuds ESP Easy
Ma Station Météo sous Jeedom

Avatar de l’utilisateur
mbuffat69
Timide
Messages : 389
Inscription : 02 févr. 2016, 21:25
Localisation : Lyon

Re: [TUTO] Scanner Bluetooth

Message par mbuffat69 » 19 mars 2017, 23:09

Bonsoir @diving91

je viens d'installer et tester ta derniere version sur orange PI avec jeedom.
J'ai détecté un problème dans BTdaemon.php (et dans BLEdaemon.php)
lors du test de la connexion bluetooth
En effet la commande hciconfig hci0 renvoie
UP RUNNING PSCAN
et non
UP RUNNING
J'ai donc du modifier le script php BTdaemon.php lors du test comme ci-dessous

Code : Tout sélectionner

....
if (@trim($r[2]) != "UP RUNNING PSCAN") {die("ERROR $r[2] : $adapter adapter not running, use: sudo hciconfig $adapter up\n");}
...
après cela cela fonctionne sans problème sous orange pi
Système DIY 2 PI3 avec SSD (voir mon profil pour le détail)

Avatar de l’utilisateur
diving91
Timide
Messages : 372
Inscription : 08 mars 2015, 18:29
Localisation : Essonne (91)
Contact :

Re: [TUTO] Scanner Bluetooth

Message par diving91 » 21 mars 2017, 23:43

Bonsoir,

Merci.
C'est corrigé dans BTdaemon.php sur le github https://goo.gl/8r4RGM

diving91
Diving91,
RPI2 + SSD 30MB - RfxTrx433E - Store Somfy - Led Milight - MySensors Gateway ESP8266 - Noeuds ESP Easy
Ma Station Météo sous Jeedom

Avatar de l’utilisateur
mbuffat69
Timide
Messages : 389
Inscription : 02 févr. 2016, 21:25
Localisation : Lyon

Re: [TUTO] Scanner Bluetooth

Message par mbuffat69 » 26 mars 2017, 22:02

Bonsoir
j'utilise le pluging pour une détection de présence avec mon téléphone (samsung note 4).
Cela fonctionne correctement, mais je me suis aperçu que le plugin détectait de temps en temps une absence
(alors que le téléphone était dans la maison), et moins d'une minute après détectait a nouveau une présence.
Il semble que le téléphone ne réponde pas de temps en temps à une requête hcitool !
Pour pallier ce problème j'ai introduit un compteur dans BTdaemon.php pour ne déclarer le téléphone
déconnecter qu'au bout de maxcount (ici 3) requêtes hcitool.
Voila la modification du code ci-dessous, pour ceux qui ont le même problème que moi

Code : Tout sélectionner


....
        private $_maxcount = 3;         // max count before device is set inactive
...

					$x = exec("sudo $this->_hcitool -i $this->_adapter name $key");
                                        if (empty($x) and $device['state'] == true) {
                                            $this->log("count:".$device['count']."\n");
                                            $this->_tags[$key]['count']--;
                                            if ($device['count'] <= 0) {
						  $this->callJedoomUrl($device['off']);
						  $this->_tags[$key]['state'] = false;
						  $this->dbg("Inactive Tag found: $key\n");
                                                  $this->log("$key inactive\n");
                                                  $this->_tags[$key]['count']=$this->_maxcount; 
                                            }
...
...
		foreach ($config['TAGS'] as $tag) {
			$tagData = explode(",",$tag);
			$this->_tags[$tagData[0]] = array("on" => $tagData[1], "off" => $tagData[2],"state" => false, "count"=> 3);
....
Système DIY 2 PI3 avec SSD (voir mon profil pour le détail)

Avatar de l’utilisateur
diving91
Timide
Messages : 372
Inscription : 08 mars 2015, 18:29
Localisation : Essonne (91)
Contact :

Re: [TUTO] Scanner Bluetooth

Message par diving91 » 02 avr. 2017, 19:24

Bonjour,

Merci pour cette modif. J'ai aussi parfois quelques trous dans la détection du device.

Je viens de pousser une modification sur le github pour BTdaemon.php
Au lieu de mettre un compteur comme dans ta proposition, j'ai mis un timeout en secondes (2minutes par défaut dans le fichier)
-> variable $_timeOut

L'avantage est de pouvoir mettre des temps plus long (ex 5minutes) et aussi pour être indépendant du temps du scan hcitool.
Autre avantage, cela ne surcharge pas l'array $_tags avec une entrée supplémentaire

Info: je pense avoir une piste pour faire cohabiter à la fois des smartphones et des tags de type mini nut (Bluetooth LE)
J'en ai un en commande, une fois le code OK, je le pousserai sur le github

diving
Diving91,
RPI2 + SSD 30MB - RfxTrx433E - Store Somfy - Led Milight - MySensors Gateway ESP8266 - Noeuds ESP Easy
Ma Station Météo sous Jeedom

Avatar de l’utilisateur
mbuffat69
Timide
Messages : 389
Inscription : 02 févr. 2016, 21:25
Localisation : Lyon

Re: [TUTO] Scanner Bluetooth

Message par mbuffat69 » 04 avr. 2017, 12:39

Bonjour
je viens de tester ta dernière version et effectivement ta solution fonctionne et est plus propre !-)
Je suis aussi intéressé par la cohabitation ble téléphone
Merci
Système DIY 2 PI3 avec SSD (voir mon profil pour le détail)

Avatar de l’utilisateur
diving91
Timide
Messages : 372
Inscription : 08 mars 2015, 18:29
Localisation : Essonne (91)
Contact :

Re: [TUTO] Scanner Bluetooth

Message par diving91 » 06 avr. 2017, 13:58

Petite modification (amélioration) sur le github pour éviter la répétition des commandes On vers jeedom dans la période transitoire du device qui sort de la portée de l'antenne Bluetooth

ligne 94:

Code : Tout sélectionner

-					else if (!empty($x) and $device['state'] != 1) {
a remplacer par

Code : Tout sélectionner

+					else if (!empty($x) and $device['state'] == 0) {
Diving91,
RPI2 + SSD 30MB - RfxTrx433E - Store Somfy - Led Milight - MySensors Gateway ESP8266 - Noeuds ESP Easy
Ma Station Météo sous Jeedom

Avatar de l’utilisateur
mbuffat69
Timide
Messages : 389
Inscription : 02 févr. 2016, 21:25
Localisation : Lyon

Re: [TUTO] Scanner Bluetooth

Message par mbuffat69 » 06 avr. 2017, 17:04

Une suggestion

mettre par defaut l'etat du device à 1 (present) au lieu de 0, ce qui permet au démarrage une mise ajour du widget jeedom.
Sinon il faut attendre la détection du device pour la mise jour du widget

Encore merci pour le script
Système DIY 2 PI3 avec SSD (voir mon profil pour le détail)

Avatar de l’utilisateur
diving91
Timide
Messages : 372
Inscription : 08 mars 2015, 18:29
Localisation : Essonne (91)
Contact :

Re: [TUTO] Scanner Bluetooth

Message par diving91 » 29 avr. 2017, 01:13

mbuffat69 a écrit :Une suggestion

mettre par defaut l'etat du device à 1 (present) au lieu de 0, ce qui permet au démarrage une mise ajour du widget jeedom.
Sinon il faut attendre la détection du device pour la mise jour du widget

Encore merci pour le script
La détection du device se fait dans les 10secondes max - je ne suis pas sûr de l’intérêt donc.
Par contre l'avantage d'avoir l’état par défaut à absent est de vérifier rapidement que le daemon tourne correctement
Diving91,
RPI2 + SSD 30MB - RfxTrx433E - Store Somfy - Led Milight - MySensors Gateway ESP8266 - Noeuds ESP Easy
Ma Station Météo sous Jeedom

Avatar de l’utilisateur
diving91
Timide
Messages : 372
Inscription : 08 mars 2015, 18:29
Localisation : Essonne (91)
Contact :

Re: [TUTO] Scanner Bluetooth

Message par diving91 » 29 avr. 2017, 01:23

Après une longue attente avant de recevoir mon Nut Mini, je viens de pousser une mise a jour fonctionnelle pour des tag BLE.
Cela fonctionne bien avec des Nut mini.
Ça ne fonctionne pas avec des iTag - non pas du fait du script mais lié au fait que ces tags s’éteignent quand ils sont non connectés et ne font pas d'advertisement quand ils sont connectés. C'est inutilisable pour détecter de la présence.

Pour les Nut mini, il faut vérifier à l'usage la durée de vie de la batterie en advertisement permanent sans qu'il soient connectés.

J'ai du augmenter le timeout avant de les considérer comme 'absent' car ils ont tendance a ne plus envoyer d'advertisement de temps en temps.

Il faut refaire la config du fichier BT.ini (à la main ou avec php BTdaemon.php conf) pour prendre en compte le BLE.
à la main il faut ajouter ,0 (non BLE) ou ,1 (BLE) à la fin de la ligne de chaque tags.

C'est fonctionnel chez moi - si vous pouviez tester sur d'autres config, ce serait cool.

diving
Diving91,
RPI2 + SSD 30MB - RfxTrx433E - Store Somfy - Led Milight - MySensors Gateway ESP8266 - Noeuds ESP Easy
Ma Station Météo sous Jeedom

RylicR
Timide
Messages : 14
Inscription : 28 avr. 2017, 20:23

Re: [TUTO] Scanner Bluetooth (BLE ou non)

Message par RylicR » 30 avr. 2017, 15:54

Bonjour,

Désolé de cette question qui parait certainement bête, mais je ne sais pas comment installer un script GitHub sur Jeedom? Il faut passer par Jeedom ou directement sur le Pi3 en SSH?

Merci,
Cyril.
PI3 + Xiaomi Gateway + 5 Xiaomi Switch + 3 Xiaomi Détecteur + 7 Yeelight + 2 Xiaomi Temperature + 2 Xiaomi Ouverture + 1 Qubino ZMNHJD1

Avatar de l’utilisateur
diving91
Timide
Messages : 372
Inscription : 08 mars 2015, 18:29
Localisation : Essonne (91)
Contact :

Re: [TUTO] Scanner Bluetooth (BLE ou non)

Message par diving91 » 30 avr. 2017, 16:58

RylicR a écrit :Bonjour,

Désolé de cette question qui parait certainement bête, mais je ne sais pas comment installer un script GitHub sur Jeedom? Il faut passer par Jeedom ou directement sur le Pi3 en SSH?

Merci,
Cyril.
Oui avec git /ssh c'est plus simple.
si tu n'as pas git, en ssh il faut faire un wget https://github.com/diving91/Bluetooth-s ... master.zip
qu'il faut ensuite unzipper (apt-get install unzip).
puis en ssh tu lances php BTdaemon.php
Diving91,
RPI2 + SSD 30MB - RfxTrx433E - Store Somfy - Led Milight - MySensors Gateway ESP8266 - Noeuds ESP Easy
Ma Station Météo sous Jeedom

RylicR
Timide
Messages : 14
Inscription : 28 avr. 2017, 20:23

Re: [TUTO] Scanner Bluetooth (BLE ou non)

Message par RylicR » 30 avr. 2017, 17:10

Merci, j'ai réussi en bidouillant un peu haha. J'ai fini le script de configuration, maintenant je cherche comment retrouver la commande "présent" et "absent" dans Jeedom ;)
PI3 + Xiaomi Gateway + 5 Xiaomi Switch + 3 Xiaomi Détecteur + 7 Yeelight + 2 Xiaomi Temperature + 2 Xiaomi Ouverture + 1 Qubino ZMNHJD1

RylicR
Timide
Messages : 14
Inscription : 28 avr. 2017, 20:23

Re: [TUTO] Scanner Bluetooth (BLE ou non)

Message par RylicR » 30 avr. 2017, 17:27

J'ai un problème après la configuration du script, je reçois des lignes "Set scan parameters failed: Input/output error
grep: erreur d'écriture: Relais brisé (pipe)", d'ou vient le problème?
PI3 + Xiaomi Gateway + 5 Xiaomi Switch + 3 Xiaomi Détecteur + 7 Yeelight + 2 Xiaomi Temperature + 2 Xiaomi Ouverture + 1 Qubino ZMNHJD1

Répondre

Revenir vers « [Plugin officiel] Scripts »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 0 invité