Inovia Blog

L’actualité des technologies innovantes

La détection de présence avec un Raspberry Pi 3 et Node-RED

Par Kadda SAHNINE

Publié le | 17 avril 2016 |

Node-RED


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 :

Node-RED flow


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.
    Node-RED TCP

  • 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
    Node-RED switch

  • noeud Arrivé : traite l’évènement émis lorsqu’un périphérique est proche du foyer
    Node-RED debug node

  • noeud Sorti : traite l’évènement émis lorsqu’un périphérique quitte le foyer
Abonnez vous !
  • RSS
  • Yahoo
  • Netvibes

Suivez l'auteur sur Twitter !
  • Suivre sur Twitter

A propos de l'auteur

Kadda SAHNINE
Architecte technique Java EE
#JavaEE #Linux #vim addict #OpenSoftware #OpenHardware
Voir le profil de Kadda Sahnine sur LinkedIn

Flux RSS

Rechercher

Administration