Node-Red est une boite à outils de programmation graphique qui permet de développer des objets connectés (et beaucoup d’autres choses) avec peu de connaissance en informatique. Node-Red est un projet Open Source soutenu par IBM. C’est un langage idéal pour débuter la programmation et comprendre l’internet des objets.
Tutoriel actualisé le 10 juin 2020
Node-Red est disponible sur Windows, macOS et Linux. Les conseils et les explications de cet article sont également valables pour les autres plateformes.
Installer Node-Red sur Raspbian Buster depuis le Terminal
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 sur la distribution Raspbian. Vous n’avez donc rien à installer pour débuter.
L’installation de Node-RED est ultra simplifiée sur Raspbian. Tout est expliqué en détail ici.
Connectez-vous en SSH au Raspberry Pi et exécutez cette commande
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered
bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
Cette commande lance le script d’installation qui s’occupe de tout !
Running for user pi at /home/pi
This can take 20-30 minutes on a Pi 1 - please wait.
Stop Node-RED ✔
Remove old version of Node-RED ✔
Remove old version of node.js ✔
Install node.js for Armv6 ✔ Node v6.11.0 Npm 3.10.10
Clean npm cache ✔
Install Node-RED core ✔ 0.16.2
Install extra nodes ✔
Install serialport node ✔
Npm rebuild existing nodes ✔
Add menu shortcut ✔
Update systemd script ✔
Update update script ✔
Any errors will be logged to /var/log/nodered-install.log
All done.
You can now start Node-RED with the command node-red-start
or using the icon under Menu / Programming / Node-RED
Then point your browser to localhost:1880 or http://{your_pi_ip-address}:1880
Started Thu 22 Jun 14:42:28 UTC 2017 - Finished Thu 22 Jun 15:00:14 UTC 2017
Le script réalise les opérations suivantes
- Il arrête et désinstalle la version actuelle de Node-RED et Node.js. Cette étape n’est pas anodine si vous avez d’autres projets basés sur Node.js
- Il installe ensuite Node.js pour les OSC Arm V6
- Installe Node-RED et les scripts systemd qui permettent de lancer automatiquement Node-RED au démarrage de Raspbian
Le script d’installation dure environ une trentaine de minutes sur un Raspberry Pi. Toutes les ressources sont compilées directement après le téléchargement. Pour suivre le déroulement de l’installation, ouvrez une seconde connexion SSH et exécutez la commande suivante.
tail -f /var/log/nodered-install.log
Pour interrompre la commande, utilisez la combinaison de touches CTRL+C.
Démarrer automatiquement Node-Red au lancement du Raspberry Pi
C’est rapidement pénible de devoir démarrer manuellement NodeRED. Heureusement, il est possible de lancer automatiquement Node-RED au démarrage de Raspberry Pi OS (ou de n’importe quelle autre distribution linux d’ailleurs) sous la forme d’un deamon (l’équivalent d’un service sur Windows).
Saisissez la commande suivante dans le Terminal pour activer le service au démarrage.
sudo systemctl enable nodered.service
Celle-ci permet de désactiver le démarrage automatique.
sudo systemctl disable nodered.service
Démarrer Node-Red manuellement depuis le bureau Pixel
Node-Red est pré-installé sur la distribution Desktop and recommended software. On y accède depuis 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/ |
Pour utiliser NodeRED depuis n’importe quel autre ordinateur sur votre réseau local, exécuter la commande hostname -I pour connaître l’adresse IP du Raspberry Pi puis ouvrez votre navigateur internet et saisissez dans la barre d’adresse
http://ADRESSE_IP_DU_RASPBERRY_PI:1880/
Et voilà, dans tous les deux cas, vous devriez arriver sur l’écran de Node-Red.
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.
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
Maintenant saisissez la commande suivante dans le Terminal
npm install -g node-red-admin
Installer des nouveaux modules (Node)
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 le module node-red-node-openweathermap (lien vers le node) qui permet de récupérer la météo locale depuis le site openweathermap. Ouvrez le gestionnaire de palette
Cherchez le module node-red-node-openweathermap puis cliquez sur install.
Pour en savoir plus sur le gestionnaire de palette, lisez ce tutoriel détaillé.
En cas de difficulté pour installer un module, arrêtez NR puis exécutez cette commande dans le Terminal.
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 Raspberry 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 systemctl enable nodered.service
Pour interrompre le démarrage automatique, saisissez la commande suivante
sudo systemctl disable nodered.service
Démarrer automatiquement avec PM2 (déconseillé)
Il existe une autre solution pour démarrer automatiquement. Le gestionnaire de processus PM2 pour Nodejs est conseillé. PM2 offre d’autres outils permettant de gérer plus facilement le démarrage, l’arrêt, l’ouverture du journal d’exécution, etc. C’est bien plus souple que d’utiliser les services Linux et systemd. Commencez par installer PM2 avec cette commande :
sudo npm install -g pm2
Si vous ne connaissez pas chemin de Node-RED, exécutez cette commande
which node-red
Sur Linux / Raspbian, il est devrait se trouver dans /usr/bin/node-red.
Pour lancer NodeRED, exécutez cette commande PM2
pm2 start /usr/bin/node-red -- -v
Pour finir, on enregistre la configuration et on active le démarrage automatique. C’est tout.
pm2 save pm2 startup
Quelques commandes PM2 à connaître :
Indiquez l’identifiant ou le nom de l’application. Pour le trouver, exécutez pm2 status .
- pm2 restart ID|NOM : relance NR.
- pm2 stop ID|NOM : arrête NodeRED
- pm2 log ID|NOM : affiche le journal d’exécution en temps réel du programme indiqué. C’est très pratique pour suivre l’exécution de NodeRED.
- pm2 status ID|NOM
- pm2 info ID|NOM : affiche de nombreuses infos utiles (état, chemins, versions…)
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.
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.
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
Cliquez maintenant sur “Click here to authenticate with Twitter”
Vous allez être redirigé vers Twitter. Cliquez sur “Autoriser l’application”
Enfin cliquez sur “Add” pour terminer la connexion avec votre compte Twitter.
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.
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 1 millions de requêtes par mois en ne dépassant pas 60 requêtes par minute, ç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 :
- Coller la clé API
- Indiquer la ville (et le pays) ou les coordonnées GPS du lieu dont on souhaite connaître la météo
- Brancher un node debug pour envoyer la météo récupérée dans la console
Voilà, c’est aussi simple que ça !
[{"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/.node-red/
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.
Et maintenant, quoi faire avec Node-RED ?
Voici d’autres projets et tutoriels pour aller plus loin avec Node-RED. Des projets domotiques, objets connectés, caméra de surveillance…
- Node-RED. Ajouter un widget météo au Dashboard connecté à OpenWeatherMap avec du code HTML / Angular
- Node-RED. Créer un dashboard pour objet connecté. Bouton, liste, interrupteur, slider, formulaire (Partie 1)
- Node-RED. Dashboard pour objet connecté. Jauges, graphiques, notifications, template HTML (Partie 2)
- Intégrer un module ESP32-CAM à un Dashboard Node-RED (firmware modifié)
- Node-RED. Sauvegarde automatique des flows par email, FTP, copie locale
- Débuter avec l’Arduino et Node-RED. Enregistrer et afficher des mesures en JSON depuis le port série
- Routeur MQTT Node-RED vers cloudMQTT, accéder à vos modules Sonoff Tasmota
- Test du détecteur de fumée Xiaomi Mijia Honeywell avec Domoticz, notification d’urgence avec PushOver
- Installer Grafana sur macOS et Raspbian pour Raspberry Pi. Exemple de dashboard pour objet connecté MySensors avec Node-RED et InfluxDB
- Plugin HomeKit pour Node-RED, plus facile à utiliser que Homebridge
Mises à jour
27/06/2017 Correction de la commande systemctl. Merci Jean-Michel !
27/06/2017 Ajout de module depuis le gestionnaire de palette. Démarrage automatique avec PM2
- T-Watch. Code simplifié pour extinction et réveil avec BMA423 ou AXP202 de l’ESP32
- T-Watch. Mise en veille et réveil de l’ESP32 avec accéléromètre BMA423 ou AXP202
- T-Watch. Menu, pages, navigation entre écrans avec TFT_eSPI
- T-Watch. Dessiner des fractales de Mandelbrot ou Julia avec un ESP32
- T-Watch. Afficher des images XBM (TFT_eSPI) et C++ (LVGL). Compatible ESP32, Arduino
l’adress à changée
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered
Merci pour l’info, c’est modifié
Problème Github erreur 404
node-pre-gyp WARN Using request for node-pre-gyp https download
node-pre-gyp WARN Tried to download(404): https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.6/bcrypt_lib-v3.0.6-node-v72-linux-arm-glibc.tar.gz
node-pre-gyp WARN Pre-built binaries not found for bcrypt@3.0.6 and node@12.19.0 (node-v72 ABI, glibc) (falling back to source compile with node-gyp)
make : on entre dans le répertoire « /usr/lib/node_modules/node-red/node_modules/bcrypt/build »
CXX(target) Release/obj.target/bcrypt_lib/src/blowfish.o
CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt.o
CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt_node.o
Bonjour Alain, quel script d’installation avez-vous utilisé et sur quel système êtes-vous ?
Bonjour je suis entrain de faire un Dashboard avec node red et je bloque pour la météo. Je cherche à l’afficher sur le Dashboard. Pourriez-vous m’éclairer?
Je vous remercie d’avance
Bonjour Stobbart, pas facile d’expliquer comment faire dans un commentaire, alors, j’ai rédigé un tutoriel complet que je viens de publier . J’espère que ça répond à votre besoin, si tel n’est pas le cas, n’hésitez pas à me laisser un message dans les commentaires. A bientôt.
Pour la commande autostart de Node-Red c’est plutôt :
sudo systemctl enable nodered.service
au lieu de :
sudo systemctrl enable nodred.service
Merci Jean-Michel ! c’est corrigé
A moitié !
“sudo systemctl enable nodred.service” c’est nodered et non nodred.
Rooo décidément. Merci !