Accueil / Objets Connectés / Node-RED / Node-Red : découverte sur Raspberry Pi 3 (ou 2)

Node-Red : découverte sur Raspberry Pi 3 (ou 2)

Node-Red est un langage de programmation graphique pour développer des objets connectés (et beaucoup d’autres choses). Node-Red est un projet Open Source (et gratuit) soutenu par IBM. C’est un langage idéal pour débuter la programmation. Pour rédiger cet article, j’ai utilisé un Raspberry Pi 3 avec la distribution Raspbian. Node-Red est disponible sur Windows, Mac OS et Linux. Les conseils et les explications de cet article sont également valables pour les autres plateformes.

Pour ceux qui découvrent le Raspberry Pi 3, vous pouvez lire cet article dans lequel je présente la 3ème génération du Raspberry ainsi que quelques astuces pour notamment configurer le Bluetooth.

Avant de commencer par Node-Red

Avant de réaliser notre premier programme, nous allons commencer par découvrir son fonctionnement et ajouter quelques plugins utiles. Node-Red est maintenant inclus par défaut dans Raspbian, vous n’avez rien à installer pour débuter.

Démarrer Node-Red

Pour démarrer Node-Red sur Raspberry dans Menu -> Programmation

Vous pouvez également démarrer depuis le Terminal avec la commande

sudo node-red-start

 

Si vous découvrez le Pi (et peut être Linux par la même occasion), en cliquant sur l’icône de Node-Red vous avez du être déçu de voir apparaître que des lignes de texte dans la fenêtre du Terminal. C’est tout à fait normal, son utilisation va entièrement se faire dans un navigateur internet. Vous avez simplement démarré un serveur web accessible depuis n’importe quel ordinateur (ou tablette !!) relié à votre réseau local.

Maintenant que Node-Red est démarré, nous allons récupérer l’adresse ip de celui-ci. Elle se trouve à la 2nd lignes.

Si vous voulez programmer directement sur votre Pi, ouvrez le navigateur internet et saisissez

http://localhost:1880/

ou

http://127.0.0.1:1880/

Par contre si vous voulez utiliser Node-Red depuis un autre ordinateur ou tablette sur votre réseau, ouvrez votre navigateur et saisissez dans la barre d’adresse

http://ADRESSE_IP_DE_VOTRE_PI:1880/

Et voilà, dans tous les deux cas, vous devriez arriver sur l’écran de Node-Red.

node-red start demarrage naviguateur

Découverte de l’environnement de programmation

Voici un petit aperçu de l’environnement de développement proposé

Sur la gauche de l’écran se trouvent toutes les fonctions disponibles. Au centre se trouve la zone de programmation. Le panneau de droite regroupe un onglet info regroupant des informations contextuelles (exemple correspondant à la fonction sélectionnée…) et un onglet debug qui renvoie les messages d’erreurs ainsi que les messages de la fonction debug qui se trouve dans les outils output.

A chaque fois que vous voulez déployer votre programme, appuyez sur le bouton Deploy rouge qui se trouve dans le coin supérieur droit.

Le menu situé à côté du bouton Deploy contient quelques outils supplémentaires :

  • View : Permet d’afficher/masquer la grille qui peut aussi être magnétique (snap to grid)
  • Import : Permet d’importer des nodes. C’est avec cette option que vous pouvez ajouter à votre flow des nodes récupérés sur internet ou sur http://flows.nodered.org/
  • Export : Vous pouvez exporter vers le presse papier (une chaine de texte au format JSON) ou dans un fichier dont vous devrez donner un nom. Vous trouverez ce fichier dans le répertoire ./home/pi/.node-red/lib/flows
  • Flows : Vous pourrez ajouter un nouveau flow (Add), renommer (Rename), supprimer (Delete) le flow en cours

Utiliser Node-Red sur une tablette

Il est tout à fait possible de développer sur une tablette reliée au réseau local sur lequel est démarré le serveur Node-Red. La seule différence notoire est la manipulation des blocs dans la zone de programmation. Le clavier et la souris ont été remplacés par un menu contextuel que l’on fera apparaître par un appui long dans la zone de programmation ou sur le bloc à modifier. Il permet de réaliser les opérations copier/couper/coller, effacer/modifier l’objet et annuler la dernière modification.

node-red tablette ipad galaxy tab android
Sur tablette, faire un appui long sur l’objet ou la zone de programmation pour faire apparaître le menu.

Installer (ou mettre à jour) npm

Avant d’aller plus loin, voyons comment ajouter des packages (appelés flow).

Commençons par ajouter un nouvel onglet au Terminal ou ouvrez un nouveau Terminal et saisissez la commande suivante qui va par arrêter NodeRed.

sudo node-red-stop

Node-Red utilise le gestionnaire de package npm de nodejs (le moteur javascript de Node-Red). Voici les étapes à suivre pour l’installer.

On commence par mettre à jour le système

sudo apt-get update

puis on installe npm

sudo apt-get install npm

Enfin on met à jour npm

sudo npm i npm -g

Installation de node-red-admin

Le premier module que je vous propose d’installer est node-red-admin. Comme son nom l’indique il ajoute quelques fonctions utiles :

  • List pour lister les nodes installés
  • Enable ou disable pour activer / désactiver un node.
  • Search pour chercher un node sur un mot clé. Par exemple sudo node-red-admin search weather va vous retourner 4 nodes permettant de vous connecter à des services de météo en ligne (Forecast.io, openweathermap, underground et yr.no).
  • install pour installer un Node
  • remove pour désinstaller un Node
  • info pour afficher les informations sur un Node en particulier

Pour installer node-red-admin, allez dans le répertoire de node-red.

cd ./home/pi/.node-red

Pour ceux qui découvrent Linux, le point devant le répertoire signifie que c’est un répertoire caché. Il n’est pas affiché dans le gestionnaire de fichier.

Maintenant saisissez la commande suivante dans le Terminal

npm install -g node-red-admin

Installer de nouveaux plugins (Nodes)

La communauté Node-Red développe de très nombreux plugins (environ 480 nodes actuellement) dans tous les domaines : objets connectés (ZWave, Sonos..), services en ligne (météo, twitter…), bases de données… Tous les nodes sont listés ici.

Pour cet article nous allons installer :

node-red-node-openweathermap (lien vers le node). Il permet de récupérer la météo locale depuis le site openweathermap.

npm install node-red-node-openweathermap

 

Plein de flows pour découvrir Node-Red

Si vous découvrez Node-Red ou que vous avez déjà un projet en tête, commencez par aller faire un petit tour du côté des flows déposés sur le site fows.nodered.org. Il y en a déjà plus de 250 dans tous les domaines (cochez flows en dessous du champ de recherche pour les filtrer).

Démarrer automatiquement Node-Red au démarrage du Raspeberry Pi

Votre programme est prêt et vous voudriez qu’il se lance automatiquement au démarrage de votre Raspberry Pi. C’est tout à fait possible, saisissez la commande suivante dans le Terminal.

sudo systemctrl enable nodred.service

Pour interrompre le démarrage automatique, saisissez la commande suivante

sudo systemctrl disable nodred.service

Premier programme avec Node-Red : faire clignoter une Led

Pour débuter, nous allons simplement faire clignoter une Led reliée sur le GPIO4 du Raspberry Pi. Pour cela nous allons utiliser la fonction inject qui envoi une pulsation chaque seconde (au choix). A chaque pulsation, on utilise la fonction « Inverse Etat Led » pour allumer ou éteindre la Led.

node-red blink led example clignote led

Copiez puis Importez directement ce code (Menu -> Import -> Clipboard) dans votre un flow.

[{"id":"3ff9c2cd.ef914e","type":"function","z":"16966388.6f0e2c","name":"Inverse état Led","func":"\ncontext.state = context.state || 0;\n\n(context.state == 0) ? context.state = 1 : context.state = 0;\nmsg.payload = context.state;\n\nreturn msg;","outputs":1,"noerr":0,"x":340,"y":320,"wires":[["b91a94fa.ec1e48","59b95cea.56d4f4"]]},{"id":"b91a94fa.ec1e48","type":"debug","z":"16966388.6f0e2c","name":"","active":true,"x":570,"y":360,"wires":[]},{"id":"9b2414e2.c584c8","type":"inject","z":"16966388.6f0e2c","name":"chaque seconde","topic":"","payload":"","payloadType":"date","repeat":"1","crontab":"","once":false,"x":149,"y":320.0000009536743,"wires":[["3ff9c2cd.ef914e"]]},{"id":"59b95cea.56d4f4","type":"rpi-gpio out","z":"16966388.6f0e2c","name":"Led sur GPIO4","pin":"16","set":false,"out":"out","x":580,"y":280,"wires":[]}]

Faire clignoter une Led à chaque Tweet sur un mot clé

Allons un peu plus loin maintenant. Nous allons faire clignoter une Led à chaque fois qu’un Tweet est publié sur le mot clé #arduino sur votre compte.

node-red blink led tweet filter

Commençons par ajouter un node twitter (prenez celui avec l’oiseau à gauche). Faites un double clic pour ouvrir le panneau de configuration et cliquez sur le crayon

1 node-red twitter add credential

Cliquez maintenant sur « Click here to authenticate with Twitter »

2 node-red twitter authenticate with twitter

Vous allez être redirigé vers Twitter. Cliquez sur « Autoriser l’application »3 node-red twitter autoriser application

Enfin cliquez sur « Add » pour terminer la connexion avec votre compte Twitter.

4 node-red twitter twitter id

A partir de maintenant, vous pouvez récupérer ou poster des Tweets. Pour cet article, ce qui nous intéresse c’est de filtrer les Tweets postés sur le mot clé #arduino. Choisissez « all public tweets » en face de Search et saisissez #arduino dans le champ for. Vous pouvez ajouter plusieurs mots clés en les séparant par un virgule mais également des personnes (symbole @).

A chaque fois qu’un Tweet est détecté, nous allons faire 3 choses :

  • Afficher le Tweet dans la console de debug
  • Déclencher le clignotement de la Led branchée sur le GPIO4
  • Incrémenter un compteur et afficher celui dans la console de debug.

node-red tweet search filtrer filtrer tweet

Voici le code de cet exemple qu’il vous suffit de copier puis importer dans un flow.

[{"id":"d40bbabd.933568","type":"debug","z":"7acbed96.061554","name":"Tweet reçu","active":true,"console":"false","complete":"payload","x":390,"y":160,"wires":[]},{"id":"ff741292.77408","type":"twitter in","z":"7acbed96.061554","twitter":"","tags":"#arduino","user":"false","name":"Filtre les tweets sur #Arduino","topic":"tweets","x":140,"y":220,"wires":[["d40bbabd.933568","d06dda9f.451c58","ba64a3f8.03aea"]]},{"id":"881cc7d6.ea3578","type":"rpi-gpio out","z":"7acbed96.061554","name":"Led sur GPIO4","pin":"16","set":false,"out":"out","x":600,"y":220,"wires":[]},{"id":"d06dda9f.451c58","type":"trigger","z":"7acbed96.061554","op1":"1","op2":"0","op1type":"val","op2type":"val","duration":"750","extend":false,"units":"ms","reset":"","name":"Fait clignoter la led ","x":410,"y":220,"wires":[["881cc7d6.ea3578"]]},{"id":"ba64a3f8.03aea","type":"function","z":"7acbed96.061554","name":"Compteur de Tweet","func":"\ncontext.state = context.state || 0;\n\ncontext.state ++;\nmsg.payload = context.state;\n\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":280,"wires":[["600494ad.09533c"]]},{"id":"600494ad.09533c","type":"debug","z":"7acbed96.061554","name":"Compteur","active":true,"console":"false","complete":"payload","x":580,"y":280,"wires":[]}]

Récupérer la météo locale sur OpenWeatherMap

Pour récupérer la météo locale, nous allons utiliser le node openweathermap qui permet de récupérer la météo via l’API d’OpenWeatherMap. Pour pouvoir l’utiliser, vous devez récupérer une clé API qui est gratuite pour un usage personnel (lien vers la page d’accueil d’OpenWeatherMap). Vous pourrez faire 50000 requêtes par jour ou 600 toutes les 10 minutes, ça devrait suffire pour faire quelques essais !.

Pour récupérer une clé, créez un compte (gratuit) puis allez dans l’onglet setup de My Home.

Ajoutez un node openweathermap (celui du bas) dans un flow. Faites un double clic puis :

  • Collez votre clé API
  • Indiquez la ville (et le pays) ou les coordonnées GPS du lieu dont vous souhaitez connaître la météo
  • Branchez un node debug pour envoyer la météo récupérée dans la console

node-red openweathermap

Voilà, c’est aussi simple que ça !

node-red openweathermap météo

[{"id":"6fa26a7b.c92204","type":"openweathermap in","z":"77ff7e2d.d10ff","name":"Météo à Paris","lon":"","lat":"","city":"Paris","country":"France","x":270,"y":100,"wires":[["ec5c6880.844ee8"]]},{"id":"ec5c6880.844ee8","type":"debug","z":"77ff7e2d.d10ff","name":"","active":true,"console":"false","complete":"false","x":450,"y":100,"wires":[]}]

Que faire si Node-Red ne fonctionne plus

Même si Node-Red est déjà une solution très aboutie, il reste encore des outils à développer. Il n’y a aucun outil disponible (ni depuis l’interface du navigateur, ni en ligne de commande) pour gérer les flows (à ma connaissance du moins). Si Node-Red refuse de démarrer, cela peut se produire par exemple si vous avez une erreur dans un flow, vous devrez intervenir « à la main » sur le fichier flows_raspberrypi.json.

Ce fichier se trouve dans le répertoire /home/pi/.nodered/

Le plus difficile est d’éditer ce fichier JSON. Dans un éditeur de texte, vous allez avoir une seule ligne de texte. Pas évident avec l’éditeur de texte nano qui ne renvoie pas à la ligne automatiquement. Le mieux est d’utiliser l’éditeur de texte de Raspbian leafpad à la place de nano.

sudo leafpad flows_raspberrypi.json

Dans le menu Options, cochez l’option « Retour à la ligne automatique ». Après avoir corrigé le problème, faites « Enregistrez sous » sans vous soucier de l’avertissement.

Vous pouvez aussi tout simplement effacer le fichier à l’aide de la commande

rm flows_raspberrypi.json

Un nouveau fichier sera créé au prochain démarrage.

Liens utiles :