Article Image
Framboises
read

Comme de nombreux fans, je suis un heureux possesseur d’un Raspberry Pi 3, le dernier né de la fondation Raspberry Pi, intégrant en standard les technologies sans fil WiFi 802.11 b/g/n et Bluetooth Low Energy 4.1. Ce concentré de technologies constitue une plateforme idéale pour une centrale domotique bon marché et un objet d’étude fort intéressant pour quiconque s’intéresse au monde de l’Internet des Objets (IoT).

Depuis longtemps déjà, j’avais le projet de réécrire le code de ma solution domotique “maison” avec Node-RED, un fantastique outil permettant d’élaborer des scénarios d’intégration complexes combinant des objets physiques (capteurs, micro-contrôleurs, transceivers, etc.) et des services en ligne.

Dans cet article, j’exposerai une solution de détection de présence (et d’absence) via Bluetooth fonctionnant aussi bien avec un smartphone ou un tracker Bluetooth bon marché glissé dans un cartable par exemple. Les cas d’utilisation sont très nombreux. Citons par exemple :

  • la réception d’un itinéraire conseillé en transports en commun en sortant de chez soi
  • l’envoi d’une notification lorsque ses enfants sont bien rentrés à la maison
  • le verrouillage/déverrouillage d’une alarme
  • le pilotage d’une prise radio-commandée

Node-RED a vu le jour sous les hospices d’IBM Emerging Technologies Group à des fins de prototypage rapide de solutions IoT. Le code source a été publié en licence libre fin 2013. Il offre un modèle de développement normalisé, orienté message, et une interface graphique permettant de décrire un flux de traitements.

Il existe une extension Node-RED fournissant un support Bluetooth (basée sur le module nodeJS noble) mais je n’ai pas trouvé le résultat satisfaisant, l’extension étant beaucoup trop expérimentale.

J’ai opté pour le développement en Python d’un service de découverte de périphériques Bluetooth, publiant vers Node-RED les événements d’absence ou de présence dans un socket TCP (Node-RED propose en standard un module d’écoute TCP). Cette solution fonctionne très bien. Le code source est disponible sur mon dépôt Github.

Mise en oeuvre

Node-RED est disponible par défaut sur les dernières versions de Raspbian Jessie ou installable via le gestionnaire de paquets APT :

sudo apt-get update
sudo apt-get install nodered

Procéder ensuite aux étapes suivantes :

  • installer les dépendances :
sudo apt-get install bluetooth python-yaml python-bluetooth
  • recopier la configuration et les flux Node-RED mis en oeuvre dans le cadre de l’article :
wget -P ~/.node-red https://github.com/ksahnine/rpi-home-automation/blob/master/.node-red/settings.js
wget -P ~/.node-red https://github.com/ksahnine/rpi-home-automation/blob/master/.node-red/flows.json

Attention : les 2 commandes ci-dessus remplacent votre configuration et vos flux Node-RED ! Faites l’opération manuellement si vous partez d’une configuration existante.

  • installer l’application de détection de périphériques :
git clone https://github.com/ksahnine/rpi-home-automation.git
  • configurer le fichier rpi-home-automation/ble2tcp/devices.yml
  • démarrer Node-RED puis le programme de détection de périphériques Bluetooth :
node-red
python rpi-home-automation/ble2tcp/ble2node-red.py -c rpi-home-automation/ble2tcp/devices.yml

L’interface Node-RED est accessible par défaut sur le port 1880 du Raspberry Pi (ex: http://rumah.local:1880/)

Comment ça marche ?

Les périphériques à surveiller sont définis dans un fichiers de configuration (devices.yml) au format YAML :

Un scan est effectué périodiquement toutes les 4 secondes.

Note : l’adresse Bluetooth d’un périphérique peut être récupérée via la commande hcitool scan sous Debian après avoir installé le paquet bluetooth (sudo apt-get install bluetooth).

Lorsque l’état d’un périphérique change (présence ou absence), un évènement est publié au format JSON dans un socket TCP :

L’événement est ensuite lu en entrée du flux de traitement Node-RED :

Il est constitué de l’enchaînement de noeuds suivants :

  • noeud BLE to Node TCP scanner : implémente un listener TCP écoutant les événements de présence ou d’absence des périphériques surveillés.
  • noeud json : transforme l’événement en objet JSON
  • noeud Présence ? : switch orientant le traitement en fonction de la présence ou de l’absence d’un périphérique
  • noeud Arrivé : traite l’événement émis lorsqu’un périphérique est proche du foyer
  • noeud Parti : traite l’événement émis lorsqu’un périphérique quitte le foyer
Blog Logo

Kadda SAHNINE


Publié le

Image

Inovia Blog

Excursions technologiques, par Kadda SAHNINE

Accueil