Voilà, j’ai trouvé un peu de temps pour avancer en ces temps chargés de projets autour du blog sur la passerelle domotique Bluetooth 4 sous FHEM. L’article d’introduction vous a permis d’appréhender les perspectives d’usages Bluetooth, et je vous propose aujourd’hui de passer à la pratique avec quelques éléments techniques. Sachez qu’un prochain article abordera la partie la plus complexe des dispositifs « Gatt server » et iBeacon. Pour ce jour nous allons nous concentrer sur la connectivité BT4 avec une plateforme Linux.
1 – Pré-requis
Avant de commencer la mise en place de la solution vous devrez réunir les éléments suivant :
- Des connaissances informatique de niveau intermédiaire (Débutant / intermédiaire / Avancé) ;
- Un Raspberry Pi ( mais vous pouvez aussi utiliser d’autres plateforme matériel avec Linux Debian);
- le logiciel Putty (Connexion SSH) ;
- Un dongle IOGear GBU521 – moins de 15€ (à base du chipset Broadcom BCM20702A0) [Liste des adaptateurs « dongle » compatible avec Raspbian];
- Le logiciel FHEM pour la gestion applicative de la pile BLE;
- Un smartphone compatible BT4 (pour moi un iPhone 5S);
- de l’huile de coude et 2 heures de votre temps.
2 – Installation et configuration du Raspberry
Comme d’habitude, voici la procédure permettant l’installation et la configuration de votre Raspberry PI.
Récupérer la dernière image officielle sur le site http://www.raspberrypi.org/downloads (fichier Wheezy Raspbian). Une fois décompressé, on obtient le fichier « *****-wheezy-raspbian.img« . Pour copier l’image officielle sur une carte SD, on peut utiliser l’outil open source Win32 Disk Imager .
Décompresser le fichier télécharger, puis lancer le programme Win32DiskImager :
Dans le fenêtre ci-dessus, effectuer les étapes suivantes :
- Sélectionner le fichier source (dernière image officielle wheezy-raspbian.img) ;
- sélectionner le disque destination (SDcard insérée dans un port SD du PC ou un lecteur externe) ;
- lancer l’écriture en cliquant sur le bouton « Write » ;
- confirmer l’écriture en cliquant sur « Yes ».
L’opération d’écriture est assez longue (plusieurs minutes). A la fin de l’écriture, votre carte SD est prête à être utilisée dans la Raspberry Pi.
Configuration du Raspberry Avant de mettre sous tension la Raspberry Pi, vous devez :
- Insérer la carte SD précédemment générée ;
- Ne pas brancher le Dongle USB
- brancher un câble ethernet relié au réseau de votre domicile (votre box internet par exemple).
- brancher un clavier USB et un écran HDMI (option) ou utiliser une connexion SSH ;
Rappel : La connexion SSH avec Putty A la mise sous tension apparaît l’écran de configuration initiale. Vous pouvez relancer l’utilitaire de configurationn avec la commande :
1 | sudo raspi-config |
Après avoir exécuté l’option 1 pour étendre le système de fichiers à l’intégralité de l’espace disponible (à la prochaine mise sous tension, la partition sera étendue à la taille de votre carte SD), vous pouvez paramétrer les « Locales » avec le menu 4. Vous pouvez aussi vérifier que votre serveur de connexion SSH est activé avec l’option 8 + A4. De la même manière vous pourrez changer le mot de passe de votre session « PI ».
Après toutes ces opérations, le reboot suivant est assez long en raison de l’opération d’extension de la partition (qui n’est faite qu’un seule fois). A la fin du démarrage (boot), il est enfin possible de se loguer avec le login «pi » et le mot de passe « raspberry » (si inchangé).
- Il est aussi judicieux de mettre à jour le système de votre Raspberry avec l’option 8 + A5.
- Vous pouvez aussi mettre à jour le Firmware de votre RPI avec le tutoriel de Korben.
3 – Installation et configuration Bluez
BlueZ est un logiciel qui met en œuvre la technologie sans fil Bluetooth sur le système d’exploitation Linux. Il a été créé au départ par Max Krasnyansky de la société Qualcomm. En 2001, la société décide de le publier sous une licence GNU GPL. BlueZ est ensuite devenu la mise en œuvre Bluetooth de référence pour Linux et a été intégré au noyau Linux. [Source Wikipédia]
Je vous ai préparé un script bash permettant de gagner du temps. Celui-ci installera les paquets utiles, puis il configurera la pile Bluetooth simplement. Une fois le script téléchargé et après l’avoir rendu exécutable, vous n’aurez plus qu’a exécuter le script.
- Connecter votre clé USB BT4.
- Connexion SSH au Raspberry.
- Téléchargement :
1 | wget http://domotique-info.fr/wp-content/uploads/2014/04/domotique-info-bluez-setup.txt -O bluez-setup.sh |
- Rendre exécutable :
1 | sudo chmod +x bluez-setup.sh |
- Une fois le fichier enregistré vous pouvez l’exécuter et suivre le déroulement de l’installation en confirmant par [Enter] à chaque demande :
1 | sudo sh bluez-setup.sh |
- Ensuite exécutez la commande de reboot
1 | sudo reboot |
- Récupérer l’adresse physique Bluetooth de vos smartphones :
Pour un iPhone c’est toujours au même endroit, mais pour Androïd cela peut dépendre de la version, de la branche et de la personnalisation opérateur 🙁 , mais souvent trouvé dans « A propos du téléphone ».
[Réglages][Général][Informations] | [Paramètres][A propos du téléphone][Etat] |
![]() | ![]() |
- Activer Bluetooth sur votre téléphone :
- Jumeler votre passerelle au(x) smartphone(s)
Répéter la commande autant de fois que nécessaire pour jumeler tous vos téléphones. La commande ci-dessous mentionne évidemment une adresse bluetooth que vous devez changer.
1 | sudo l2ping -c 1 D8:96:95:20:9E:0B |
vous devriez avoir une réponse du type :
1 2 3 | Ping: D8:96:95:20:9E:0B from 00:02:72:C8:AE:1F (data size 44) ... 44 bytes from D8:96:95:20:9E:0B id 0 time 339.42ms 1 sent, 1 received, 0% loss |
Vous obtiendrait une demande de jumelage sur les smartphones ressemblant à celle-ci dans le cas d’un iPhone :
4 – Installation et configuration FHEM
De la même manière je vous livre un script permettant d’installer FHEM facilement en version 5.5.
- Connexion SSH au Raspberry.
- Téléchargement :
1 | wget http://domotique-info.fr/wp-content/uploads/2014/04/domotique-info-fhem-setup.txt -O fhem-setup.sh |
- Rendre exécutable :
1 | sudo chmod +x fhem-setup.sh |
- L’exécuter :
1 | sudo sh fhem-setup.sh |
- Ensuite exécutez la commande de reboot :
1 | sudo reboot |
5 – Les usages
5.1 – Présence et Notification PushOver (FHEM)
Je vous propose de mettre en place un dispositif permettant la détection de présence de votre téléphone compatible BT4 avec FHEM pour la partie logiciel. Cette application permet en autres, de configurer la détection de présence de périphériques vus et connectés.
Lancez un session FHEM sur la passerelle (http://<IP-de-la-passerelle>:8083/fhem).
Vous pouvez maintenant ajouter les lignes suivantes au fichier de configuration FHEM :
C’est à partir de la fenêtre ci-dessus qu’il est possible de tout paramétrer dans FHEM. N’oubliez pas d’enregistrer le fichier avec le bouton [Save fhem.cfg].
1 2 3 4 5 6 7 8 9 10 11 12 | #-------------------------------- # Déclaration Pushover pour tester le fonctionnement #-------------------------------- define Notifications Pushover [mettre ici votre clé API Pushover] #-------------------------------- # Gestion de présence smartphone (modifier 00:00:00:00:00:00 par la mac BT de votre téléphone) #-------------------------------- define iPhone5_Bluetooth PRESENCE local-bluetooth 00:00:00:00:00:00 60 60 define SensorTag PRESENCE local-bluetooth 34:B1:F7:D5:14:79 60 60 attr iPhone5_Bluetooth event-on-change-reading state define iPhoneSeb_present_Notify notify iPhone5_Bluetooth:present {fhem("set Notifications msg 'FHEM' 'Présent' '' 0 ''")} define iPhoneSeb_absent_Notify notify iPhone5_Bluetooth:absent {fhem("set Notifications msg 'FHEM' 'Absent' '' 0 ''")} |
![]() |
Maintenant constatez le changement d’état en désactivant et en réactivant le Bluetooth de votre smartphone.
5.2 – Actions sur scénario HC2
Voici comment agir sur un scénario Home Center 2. Adaptez ces commandes FHEM pour correspondre à votre environnement.
La ligne suivante permet d’agir sur le périphérique virtuel TITI lorsque iPhone5_Bluetooth est déterminé absent :
define CMD_RUN_SCENE_TITI notify iPhone5_Bluetooth:absent { system(« curl –user admin:METTRE_MDP_ADMIN \ »http://METTRE_IP_HC2/api/callAction?deviceID=METTRE_ID_SCENE&name=pressButton&arg1=3\ » »)
}
La ligne suivante permet d’agir sur le périphérique virtuel TITI lorsque iPhone5_Bluetooth est déterminé absent :
define CMD_STOP_SCENE_TITI notify iPhone5_Bluetooth:present { system(« curl –user admin:METTRE_MDP_ADMIN \ »http://METTRE_IP_HC2/api/callAction?deviceID=METTRE_ID_SCENE&name=pressButton&arg1=4\ » »)
}
5.3 – Actions sur module virtuel HC2
Voici comment agir sur les boutons d’un périphérique virtuel Home Center 2. Adaptez ces commandes FHEM pour correspondre à votre environnement.
La ligne suivante permet d’agir sur le périphérique virtuel TOTO lorsque iPhone5_Bluetooth est déterminé absent :
define CMD_ACTIVE_VD_TOTO notify iPhone5_Bluetooth:absent { system(« curl –user admin:METTRE_MDP_ADMIN \ »http://METTRE_IP_HC2/api/callAction?deviceID=10&name=pressButton&arg1=1\ » »)
}
La ligne suivante permet d’agir sur le périphérique virtuel TOTO lorsque iPhone5_Bluetooth est déterminé présent :
define CMD_DESACTIVE_VD_TOTO notify iPhone5_Bluetooth:present { system(« curl –user admin:METTRE_MDP_ADMIN \ »http://METTRE_IP_HC2/api/callAction?deviceID=10&name=pressButton&arg1=2\ » »)
}
6 – Conclusion
Comme vous l’aurez encore constaté, les possibilités de la solution FHEM sont énormes, mais nécessite un investissement minimum de sa personne. Les modèles de commandes ci-dessus citées s’appuient sur l’exécutable « curl » qui n’est autre qu’un client web en mode commande. Il est donc tout à fait possible de transposer ce type de commandes à toutes les plateformes domotique acceptant les requêtes HTTP avec ou sans authentification basique. Un prochain article abordera la récupération de données d’un capteurs BT4 avec les « Gatt Services ».
46 Comments
Laurent O.
Comme tu dis ça a vraiment l’air énorme!! Que de possibilités offertes, mise en avant grâce à cet article encore une fois très clair & bien illustré Ne reste plus qu’a tester & mettre en place. Pr ma part je le garde sous le coude qd j’aurai le matos. Merci Seb quel talent ! ^^
Steven Piccand
Encore un tuto à encardé … merci Seb.
Sébastien Joly
@Steven : Merki.
PITP2
Super tuto en effet, crois tu qu’il soit possible d’appairer des bracelets connectés etc pour interagir avec et la HC2 ?
PITP2
Personne n’a essayé ?
Sébastien Joly
Il y a pas de raison que cela ne fonctionne pas si tu connais l’adresse physique BT.
JCB
Bonsoir,
Merci pour ce tuto très intéressant.
Je souhaiterai savoir s’il est possible d’augmenter la rapidité de connexion de l’appareil au système car il faut minimum 1 minute pour que mon téléphone soit reconnu.
Je vous remercie par avance pour votre réponse
Sébastien Joly
@JCB
Je ne suis pas certain de comprendre. Une minute pour que le téléphone NFC soit reconnu ?
Si tel est le cas, je doute d’une compatibilité Mifare de la puce du téléphone.
JCB
Bonjour
Pour être plus clair, j’utilise un iphone 5s et j’utilise le même matériel que celui décrit dans votre tuto. Lorsque j’active le bluetooth, la connexion entre le téléphone et le raspberry n’est pas immédiate. Il faut compter environ 1 à 2 minutes pour que le système détecte sa présence ou non. Je souhaitais savoir si l’on pouvait forcer le raspberry à vérifier la présence d’un téléphone toutes les secondes par exemple. La finalité est de pouvoir contrôler l’ouverture d’un portail lorsque le système détecte la présence du téléphone.
Merci d’avance
Sébastien Joly
C’est expliqué dans la page. Les deux arguments numérique dans la config.
Par contre tous les secondes n’est pas conseillé au risque de tomber la performance du système. 10 secondes est déjà Suffisant.
JCB
Merci pour votre réponse rapide, je débute et je n’avais pas compris l’utilité de ces valeurs
Sébastien Joly
Plus précisément : PRESENCE local-bluetooth [ [ ] ]?
define
Alex
Bonjour et merci pour ce tuto !
Pour gagner en portée (plus de portée= appairage de plus loin = prise en charge de script plus rapide quand j’arrive à ma porte ) , me conseillez vous de partir sur le dongle de votre article, le IOGear GBU521 OU me conseillez vous un autre modèle PLUS puissant ? 🙂
Merci ! bcp
Alex
Peut être le dongle TRENDnet TBW-106UB ( de la liste ), avec du class 1 pour la distance et le gain du LE pour la détection des objets connectés ( Fitbit / chipolo / Tile etcc… ) ??
Sébastien Joly
Bonjour @Alex effectivement, le TRENDnet TBW-106UB doit théoriquement être plus performant en class 1 (100 mW (20 dBm) 100 mètres).
yann
Bonjour,
super article, j’ai essayé de le mettre en œuvre mais je bloque au niveau de l’exécution de la tache sur FHEM, la détection fonctionne mais rien ne ce passe, pourriez vous m’aider, voici maligne de commande :
define galxyS5_Bluetooth PRESENCE local-bluetooth 18:83:31:8E:77:E8 10 60
attr galxyS5_Bluetooth event-on-change-reading state
define GSM_yann notify galxyS5_Bluetooth:present {system(« curl –user admin:admin \ « http://192.168.1.12/api/callAction?deviceID=55&name=turnOff » »)}
merci.
Sébastien Joly
yann
merci pour cette réponse rapide, j’ai changer ma ligne mais cela ne fonctionne toujours pas
Sébastien Joly
@Yann
http://192.168.1.12/api/callAction?deviceID=55&name=turnOff
cette requête dans le navigateur fonctionne ?
Avec curl aussi ?
yann
Bonjour Sébastien,
la requête depuis le navigateur fonctionne, mais je ne sais pas comment tester le commande curl.
Sébastien Joly
en mode commande sur la console SSH
yann
j’ai tenté de me connecter avec Putty mais le lgin/mdp ne fonctionne pas.
Sébastien Joly
? Comment as-tu installé FHEM sans accès SSH ?
yann
désolé je m’y suis mal pris, donc j’ai ouvert une session SSH sur mon rasperberry (en non HC2) j’ai essayé les commandes suivantes :
curl -u admin:admin http://192.168.1.12/api/callAction?deviceID=55&name=turnOn
curl admin:admin@http://192.168.1.12/api/callAction?deviceID=55&name=turnOn
mais aucun résultat.
Sébastien Joly
@Yann, il faut lire ta commande. Copier/coller depuis une page web amène des interprétations html du caractère & [et commercial]. Donc il est plus important de comprendre ce qu’on fait que de copier/coller sans comprendre.

Pour info :
http://www.htmlhelp.com/reference/html40/entities/special.html
Alex
Bonjour, désolé d’être lourdo pour un simple dongle BT a 10€ ….
Toujours dans un soucis de « portée »
Pour de la détection de présence, est il plus important d’avoir un dongle BT »4 » OU BT2 ?
Le BT 4 apporte un + sur un objets connectés mais dans ce cas précis est-ce important?
La liste des adaptateurs « dongle » compatible avec Raspbian indique :
Plugable USB-BT4LE Bluetooth 4.0 USB Adapter : ===> Used to connect to NAP.
magnifique un BT4 en classe 1 , 😀 mais j’ai du mal avec la note « Used to connect to NAP. » est ce la limite d’utilisation ou celle ci fonctionne ?
Merci.
Sébastien Joly
@Alex,
10-15€ d’investissement de dongle me semble pas insurmontable.
Dans le cas présent, BT4 est une valeur ajoutée pour le fonctionnement globale de la solution. Si l’on utilise BT2 avec ces smartphones la batterie de ces derniers va diminuer trop rapidement et du coup c’est la solution qui devient moins pertinente.
Logique non ? Pour la rétrocompatibilité je ne suis pas certain que cela soit générique, mais je ne suis pas arrivé à me connecter sur du BT2 avec mon téléphone BT4.
De plus les perspectives ultérieures nécessiteront le BT4 pour l’économie d’énergie dans les communications Gatt des tags BT4 type Pebblebee.
« Used to connect to NAP » veut dire je crois « Network access point » = Passerelle IP.
Concernant les performances, je pourrais vous dire si la class I fait la différence, lorsque j’aurai reçu mon nouveau Dongle.
Alex
C’est pas la questions des 10-15 € surtout dans le monde de la domotique, c’est surtout d’avoir le BON dongle 🙂
Allé je commande un classe 1 en BT4 🙂
Merci 🙂
Carfnann
@alex
As tu trouvé un BT4 classe 1 compatible avec le raspberry ?
Alex
oui j’utilise le LM506 :
LM506 Bluetooth 4.0 Dual-Mode SMART commandé sur http://fr.farnell.com/
Alex
Besoin d’aide pour mettre a jour Bluez ? une cmd linux ? pour upgrader vers la 5.24 et suivantes ?
Mci
Sébastien Joly
@Alex
Je comprends pas trop l’objectif. J’ai consolidé mon dispositif sur la version 4.99 car cela ne fonctionnait pas pareil avec les versions 5.x.
Donc pourquoi sortir du tuto et du paquet apt-get de la procédure automatique ?
Alex
Sous WindowsPhone j’ai des » vas et vient » de connexion/déconnexion du coup je me demande si les nouvelles versions de Bluez n’apportent pas un « plus » vu le nombre de bugfix etc … entre la Rlz 4.99 et la 5.24. Peut etre un meilleur support de certain protocole liés au BT4…. non ? Ou est-ce une allergie à WindowsPhone ou mon lumia930 :/
La procédure auto est TOP ! , je cherche justement une » update » pour ne pas en sortir :p :p
Sébastien Joly
Ces déconnexions intempestives sont-elles lié à la portée / distance ? Si le téléphone est proche de la passerelle, cela se déconnecte aussi ? Si « non » c’est un problème de portée.
Quel dongle BT4 ?
Alex
Bah non justement, c’est pas la portée, je suis a coté , c’est le dongle : LM506
Sébastien Joly
Franchement je ne pense pas que cela changera grand chose. Mais tu peux aussi faire une install make comme ici :
https://learn.adafruit.com/pibeacon-ibeacon-with-a-raspberry-pi/setting-up-the-pi
ou
http://www.switchdoc.com/2014/08/ibeacon-raspberry-pi-scanner-python/
Alex
merci pour les liens 🙂
Dimitri
J’ai acheté des porte-clefs Ticatag (http://www.ticatag.com/fr/categorie-produit/tibe2/) pour vérifier notre présence et stopper l’enregistrement de mes caméras. Comme les Ticatag sont BT4 LE, le l2ping ne marche pas et il faut utiliser hcitool lescan.
coke
Bonjour, jessaye d’utiliser la methode avec l’API JEEDOM mais je bloque sur un truc tout bete
dans la ligne curl -u a quoi correspond admin:Mdp_admin
c les login de quoi qu’il faut mettre….
Merci d’avance our votre aide, sinon le reste marche nikel
Sébastien Joly
Coke,
C’est la basicAuthentification du HC2.
Mais Jeedom ne gère pas le BT ?
coke
En fait j’utilise un autre raspberry sur le quel g mit le bt + fhem et je voudrais que quand je suis présent fhem exécute une requête http qui passe un virtuel sur jeedom à présent ou absent.. mais comment faire faire à fhem si présent exécute cet requête si absent une autre. . Sa me permettrait de gèrer la présence via bt sur mon jeedom. Qui lui est installer sur un rpi2 merci d’avance
dj_janker
Bonjour Seb ,
Je suivais votre tutoriel et je tout installé ( dans mon Rpi avec Jeedom + Razberry ) comme il indica .
Je me suis installation du serveur FHEM .
Après le redémarrage, essayez d’accéder au navigateur Web : http : ip: 8083 / fhem et faire passer le message : » 404 not found »
Vous savez quel est le problème ?
Je pourrais suggérer une façon de résoudre ce problème?
Merci
Domus
@seb, te semble t il possible d’appairer un Flower Power et d’envoyer une requête régulière pour la mise à jour des données sur le serveur via FHEM ?
zozotte
Bonjour,
je suis le tuto mais au moment de la reconnaissance de mon tel avec la passerelle, je recois une erreur: « sudo: 12ping: command not found »… un idée?
Merci
zozotte
c’est la lettre l et pas le chiffre 1 🙂 résolu