Dans ma quête de réalisation d’une base me permettant de connecter l’ensemble de mes futurs objets connectés, je suis parvenu à une solution flexible et très pratique. On va parler ici de deux services que je vais utiliser sur Raspberry Pi : Mosquitto et Node-RED. Ces deux applications nous permettrons de rediriger les flux de données venant de nos objets connectés afin de les archiver et/ou traiter. Voyons ça ensemble…
Table des matières
Devenons architecte de nos données avec Node-Red
Derrière ce très beau titre (#seLanceDesFleurs !), se cache une réelle interrogation. Comment maintenir un système permettant d’interroger n’importe quel objet connecté, peu importe son moyen de communication ? La réponse à cela se nomme Node-RED. Installé par défaut dans les dernières distributions Raspbian sur Raspberry Pi, Node-RED est un logiciel capable de réaliser des flux de données. En effet, lorsqu’une information arrive sur le Raspberry Pi, que ce soit via les ports GPIO, un programme en Python, le port série, le port USB, le Cloud, les réseaux sociaux ou un paquet transmis en Ethernet ou WiFi… Node-RED sera en mesure de capter cette information !
Le petit + sympa avec Node-RED, c’est son interface web graphique. On représente les flux de données par des nœuds et des liens. Les nœuds définissent les opérations à effectuer. En règle générale, il y a 4 type d’opérations : fonction, input, output, input/output. Les liens relient les nœuds entre eux. C’est ce qui nous permet de construire nos différents flux de données.
Une fois l’information acquise, on peut la décortiquer, via de nombreuses fonctions présentes dans le moteur Node-RED. Prenons l’exemple d’un capteur envoyant une requête http à notre Raspberry Pi, avec comme variables temperature, humidite et pression. Une fois la requête reçue, on aura prévu de découper cette information afin d’obtenir la valeur des 3 variables séparément. Ensuite, on peut stocker ces 3 valeurs dans 3 bases de données différentes (soyons fous ^^).
Pour les plus grands maniaques d’entre nous, on peut aller encore plus loin ! Dès que les 3 données sont archivées, chaque base de données notifie Node-RED que l’opération s’est bien passé. Si toute l’opération s’est bien déroulée, on envoie un acquittement à notre capteur et ce dernier peut se mettre en veille. En cas de non acquittement, le capteur pourrait réitérer l’opération plusieurs fois, avant de signaler à Node-RED qu’il y a un problème. Ce dernier pourra directement notifier le développeur par mail. Magique non ?
En bref, les possibilités avec Node-RED sont quasi-infinies. D’autant plus que Node-RED propose une bibliothèque de nœuds et de flux de données prêt à l’emploi à télécharger. A l’heure où j’écris ces lignes, leur bibliothèque en ligne compte 1189 nœuds à télécharger. On y retrouve de nombreux nœuds permettant une connexion aux bases de données (Graphite, InfluxDB, SQL…), faire des requêtes Web (multi-http, https…), réaliser des commandes SSH et lire des protocoles domestiques (Z-wave, MySensors, Amazon Alexa, Google Home…) ou industriels (ModBus, Siemens, Watson IOT…).
Et Mosquitto dans tout ça ?
Ah… On se croirait presque en terrasse sur les côtes Espagnol ! *rêve* Et d’un coup… Mosquito ! Mosquito ! Mosquito !
Malheureusement, ici je parle bien de Mosquitto avec 2 « T » comme MQTT ! Et derrière cet acronyme signifiant « MQ Telemetry Transport » se cache un protocole de messagerie basé sur le protocole TCP/IP !
Euh… Hein ? Qu’est-ce que MQTT ?
Bon, ok… Vous voyez Facebook Messenger ? Les développeurs de la très célèbre firme californienne se sont directement inspirés du protocole MQTT pour réaliser leur interface. C’est un système plutôt simple en fait. Il y a 4 mots à savoir pour comprendre MQTT :
– Publisher : C’est celui qui publie un message sur un Topic.
– Topic : C’est un genre de « forum » où les Publisher peuvent publier des messages. Un topic peut être crée par un Publisher ou un Subscriber.
– Subscriber : C’est quelqu’un qui est abonné au Topic et qui reçoit les messages.
– Broker MQTT : C’est le serveur qui centralise l’ensemble des Topics.
Il est possible d’être Publisher et Subscriber en même temps (c’est même très souvent le cas !).
Pour nos objets connectés, le gros avantage de MQTT par rapport à une trame HTTP, c’est que le protocole consomme moins de ressources. Il y a moins d’instructions à réaliser par notre microcontrôleur pour envoyer une trame avec MQTT au lieu de HTTP. Le message met donc moins de temps à être envoyé et consomme moins d’énergie. C’est classe donc.
En plus de cet avantage, il existe une librairie Arduino toute faite qui intègre MQTT à votre programme. C’est hyper classe donc.
Et en prime de tout ça, MQTT est intégré nativement à Node-RED.
Tu le vois le lien ? Tu ressens la puissance du truc ?
Mais… mais… on en vient quand à Mosquitto ?
Oui, oui ! Euh… Bah Mosquitto, c’est « le truc du milieu » ou « la Terre du Milieu« . Plus sérieusement, il s’agit de notre serveur MQTT (appelé Broker MQTT), qui a l’avantage d’être libre et Open-Source. Il en existe plusieurs, souvent payants. On en retrouve également directement sur le Cloud (Amazon, IBM…). Le public visé sur les solutions payantes est clairement un public professionnel pour des projets nécessitants de nombreuses requêtes par secondes à travers le monde. Ce n’est pas (encore) notre cas ! 😀
Mosquitto est le serveur qui va héberger nos Topics, inscrire nos Subscribers et être attentif à nos Publishers. 🙂
Installons tout ça sur Raspberry Pi (Stretch) !
J’ai réalisé l’installation de Mosquitto et Node-RED sur Raspberry Pi 3 avec le dernier OS Raspbian en date : Raspbian du 07/09/2017 (basé sur Debian 9 : Stretch). J’ai préalablement monté un point WiFi sur le Raspberry Pi à l’aide de RaspAP. La plupart des tutos que vous trouverez sur le net sont basés sur Rasbian Wheezy ou Jessie. Pour ma part, j’ai tout fait sur la dernière version : Stretch. Avant toute nouvelle installation, faites un sudo apt-get update et un sudo apt-get upgrade dans le Terminal de votre Raspberry Pi afin d’avoir toutes vos librairies à jour.
[thrive_lead_lock id=’2777′]
Merci d’avoir rejoins la newsletter ! N’hésitez pas à vérifiez votre boîte mail !
Mosquitto, celui qui a posé problème sous Stretch
J’ai eu quelques soucis à l’installation de Mosquitto sous Raspbian Stretch. J’ai cependant réussi à l’installer en réalisant quelques étapes intermédiaires : installations de certaines librairies avant les autres, compilation manuelle de Mosquitto… Suivez toutes les étapes et tout ira bien :-).
On va tout d’abord récupérer Mosquitto sur le Repository des développeurs (ces opérations serviront également pour les mises à jour de Mosquitto). Pour cela on a besoin de la clé de décryptage du Repository :
Une fois que vous en êtes arrivés là, essayez de faire un sudo apt-get install mosquitto. Personnellement, ça n’a pas fonctionné chez moi, à causes de librairies incompatibles. Foutaises ! Je télécharge directement les sources. Va pour la compilation et l’installation à la main !
Voilà ! Mosquitto est installé ! On va maintenant le configurer. Pour se faire, on va ajouter ces lignes au fichier de configuration qui se trouve ici : sudo nano /usr/local/etc/mosquitto/mosquitto.conf
Pour le tester, rien de plus simple, ouvrez un premier terminal et lancez le serveur Mosquitto avec la commande : mosquitto.
Ouvrez un second terminal et souscrivez à un abonnement sur le Topic : Test.
Ensuite, ouvrez un troisième terminal et publiez un message sur le topic Test :
Revenez sur le second terminal, le message du terminal 3 (Publisher) devrait être reçu sur le terminal 2 (Subscriber) :
Notre Broker MQTT fonctionne à merveille ! 🙂
Passons à Node-RED maintenant
Pour Node-RED, aucun problème sous Stretch ! Si vous avez la version Lite de Raspbian ou si vous voulez mettre à jour Node-RED, rien de plus simple que d’installer le paquet via apt-get ! Je vous recommande aussi d’installer le paquet « npm » qui vous permettra d’installer des plugins et nœuds supplémentaires pour Node-RED !
Voici quelques commandes utiles pour démarrer ou stopper Node-RED :
Pour accéder à l’interface graphique de Node-RED, ouvrez un navigateur web (soit sur votre réseau local, ou directement sur le Raspberry Pi). Et tapez <IP de votre RPI>:1880. Vous accéderez à l’interface de Node-RED.
L’installation s’est bien terminé :-).
Faire appel à Mosquitto dans Node-RED
Pour se faire, rien de plus simple. Glissez-déposez le nœud MQTT en Inpout ou Output et renseignez le Topic auquel vous souscrivez (Input) où vous publierez (Output). Ci-dessous, je vous ai mis un exemple d’un abonnement à Temp, qui est un Topic où j’envoie des données via une sonde de température. Cette donnée est traitée avant d’être enregistrée en base de données sous la variable « temperature » attribuée à l’objet « sensor ».
Afin de tester rapidement votre flux de donnée, vous pouvez aussi utiliser le terminal pour publier des messages sur le Topic MQTT. Il y a également des nœuds « debug » dans Node-RED permettant de suivre l’information. Si vous voulez tester sur votre réseau local, de nombreux clients MQTT existent sous IOS et Android. C’est comme ça que j’ai testé mon Topic « Temp » !
Dans le prochain article, on reliera un flux de données MQTT vers une base de données InfluxDB qui nous servira à afficher les données dans Grafana. 🙂
N’hésitez pas à commenter cette article, je serai ravi de vous expliquer plus en détail chaque rouage MQTT et Node-RED :-).
[/thrive_lead_lock]
Ben.
C’est cool tu parts exactement dans le sens dont on avait parlé avant ton départ ! Ça me fera ça de moins à faire !
Très beau choix Grafana/InfluxDB 😉 N’joy !!!