Nodered
Nodered
Nodered
- Node-Red
Sommaire
1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Objectif de l’activité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Node-red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.1. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4. interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5. Réalisation de l’applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1
1. Introduction
Les objets connectés ou l’Internet des Objets ( IoT : Internet of Things ) sont des termes très utilisés
de nos jours même si bien des personnes ont encore du mal les définir.
Au sens large, un objet connecté est un objet communicant. Ils sont à la fois des émetteurs, des
capteurs d’informations qui émettent, mais également qui peuvent interagir avec d’autres
machines (M2M) comme des serveurs ou d’autres objets connectés. Les données générées par ces
objets sont capitalisées dans des centres de données (data centers) et de nouveaux usages de cette
donnée apparaissent autour de la santé, du sport, des produits financiers par exemple.
Les objets connectés connaissent une croissance exponentielle. Des estimations indiquent qu’ils
seraient près de 15 milliards en circulation dans le monde actuel. Ils pourraient être plus de 50
milliards d’ici 2020.
Pour connecter les objets, les technologies actuelles peuvent être utilisées (RFID, Wi-Fi, GSM,
Bluetooth, Z-Wave, ZigBee, …) mais de nouveaux réseaux se développent au niveau mondial. Ils
doivent permettre d’envoyer (mais aussi recevoir dans certains cas) des très petits messages sur
des longues portées sans passer par des systèmes coûteux de réseaux mobile et en consommant
peu d’énergie.
Au cours de ce TP, vous allez mettre en oeuvre node-red, pour acquérir les données d’un objet
connecté au travers du réseau The Things Network, via le protocole MQTT, et réaliser un serveur
d’application dont le front-end consistera en un site web appelé dashboard.
2
2. Objectif de l’activité
• Installer node-red.
3. Node-red
Node-red est un outil puissant pour construire des applications de l'Internet des Objets en
mettant l’accent sur la simplification de la programmation qui se fait grâce à des blocs de code
prédéfinis, appelés nodes pour effectuer des tâches. Il utilise une approche de programmation
visuelle qui permet aux développeurs de connecter les blocs de code ensemble.
Les noeuds connectés, généralement une combinaison de noeuds d’entrée, de noeuds de traitement
et de noeuds de sortie, lorsqu’ils sont câblés ensemble, constituent un flow.
Node-red est construit sur Node.js, tirant pleinement parti de son modèle non bloquant piloté par
les événements. Cela le rend idéal pour fonctionner en périphérie du réseau sur un serveur
d’application qui peut être un matériel à faible coût tel que le Raspberry Pi ou un serveur dans le
cloud.
3
3.1. Installation
Consultez le guide de démarrage de node-red pour procéder à l’installation qui correspond à votre
cas.
https://nodered.org/docs/getting-started/
Nous utiliserons ici node-red localement sur notre ordinateur. L’installation consiste donc à
installer préalablement node.js :
• Installation de `node.js`
• Installation de node-red
4
4. interface
On accède à l’interface de développement par un navigateur en utlisant l’URL : http://127.0.0.1:1880
comme l’indique node-red dans le terminal :
On y accède également depuis n’importe quel poste du réseau pour peu que le pare-feu soit
correctement configuré.
5
4.1. Ajout d’une catégorie de nodes à la palette
La palette de nodes d’origine est déjà bien fournie mais il manque au moins une catégorie
essentielle qui va permettre de réaliser l’interface web. Elle se nomme Dashboard.
Dans le menu, cliquez sur Manage Palette puis recherchez la catégorie de nodes à installer. Une
nouvelle catégorie est ensuite disponible :
6
Figure 8. Ajout de la catégorie Dashboard à la Palette
• Certains nodes peuvent avoir plusieurs sorties. Dans ce cas, le node retourne un tableau d’objets
JSON dont le premier élément sort par la première sortie, le deuxième par le seconde, …
• un Slider
• une Gauge.
Pour modifier la configuration par défaut des nodes, il suffit de double-cliquer dessus.
Pour que ces composants soient bien disposés sur la page web, il faut les mettre dans un Tab, puis
dans un Groupe :
7
• Créer un groupe (ici : "Le groupe") et faite de même pour le Tab (ici : "Test").
• Cliquez ensuite sur le bouton Done, puis déployer le flow en cliquant sur le bouton Deploy.
8
• Pour conserver un historique des valeurs affichées, on peut utiliser un node Chart :
Figure 11. Ajout d’un node Chart pour obtenir un graph de l’historique
Nous allons maintenant rajouter une information textuelle en bas du groupe. Cette information
contiendra par exemple la valeur du slider, la date et l’heure de modification.
• Ajoutez un node Text qui permet d’ajouter un label et le contenu d’un message (value).
Label="Valeur = "
Value Format="{{msg.payload}}"
Ce n’est pas suffisant dans notre cas ! Nous devrons ajouter une fonction pour
fabriquer notre message.
9
Le node Function permet d’effectuer n’importe quel traitement sur le flux entrant
pour fabriquer un ou plusieurs flux sortants. Le langage utilisé est du JavaScript :
return msg;
A noter : Les messages transmis dans les flux d’entrée et de sortie des nodes sont
des objets. C’est l’attribut payload, soit "charge utile" en français qui contient
l’information à transmettre. Pour observer cette charge utile de message vous
pouvez utiliser un node Debug.
5. Réalisation de l’applications
Nous avons un objet connecté qui transmet à interval régulier la température et l’humidité relative
qu’il mesure aux serveurs de The Things Network. Ces derniers diffusent ces données via le
protocole MQTT aux applications qui y souscrivent. Nous allons donc réaliser un flow qui connecte
ces serveurs afin d’obtenir les mesures et les afficher dans un dashboard.
10
5.1. souscription MQTT
• Saisissez le flow suivant :
• Username: Application ID
• Topic: <AppID>/devices/<DevID>/up
• Double-cliquez sur le node mqtt in pour faire apparaitre la boite de dialogue de configuration.
11
Figure 14. Configuration du node mqtt in pour la connexion aux serveurs TTN
12
Figure 15. Configuration du node mqtt in pour souscrire à un topic
13
Il est normalement possible de sélectionner les informations souscrites via le topic.
Par exemple, pour ne recevoir que la température, on peut souscrire au topic :
Cependant, TTN met en garde quand l’utilisation des filtres vers les champs de
données :
Warning: not every cluster publishes uplink fields to individual topics. See
status.thethings.network for details.
14
• Ajouter un` node Function` avec le code :
msg.payload = JSON.parse(msg.payload);
return msg;
Remarque : Le node json fait également très bien l’affaire ! .Node convert-json
image::images/convert-json.png[align="center"]
◦ la température : getTemp()
15
Code la fonction getTemp()
16
5.3. Production du Dashboard
Pour le dashboard, nous allons utiliser deux jauges (nodes gauges) et deux nodes chart pour tracer
l’évolution des grandeurs mesurées. Nous utiliserons également un node text pour afficher la date
et l’heure et de la mesure.
17
6. Enregistrement des données
Il est possible d’enregistrer les données dans un fichier texte ou dans une base de données. Il
suffit d’utiliser le node approprié.
18
Remarque : Les nom des colonnes sont les noms des propriétés de l’objet entrant
que l’on désire ajouter au csv.
• Ajoutez maintenant un node file pour enregistrer les lignes csv dans un fichier.
• A vous de jouer. A partir de la sortie du node toJSON, traitez les données pour ne fournir au node
csv que l’horodatage, la température et l’humidité relative et les enregistrer dans un fichier csv.
19
6.2. Base de données MySQL
Un node de gestion du classique SGBD MySQL est disponible.
• Glissez le node mysql sur le flow et configurez le pour se connecter à la base de données
Cela sous-entend que nous ayons MySQL installé et démarré avec une base de
données accessible.
https://dev.mysql.com/downloads/mysql/#downloads
La requête sql est injectée au node mysql sous la forme d’un objet. C’est une chaine
de caractères qui constitue la propriété topic de l’objet.
20
• Ajoutez une fonction entre le node getTemp et le node mysql. Saisissez le code ci-dessous qui sous-
entend qu’il existe une table dht11_1 et le champ temp dans ma base de données.
• Observez dans MySQL l’insertion des données (dans le terminal ou avec phpmyadmin).
21
6.3. Base de données InfluxDB
InfluxDB est une base de données de séries chronologiques. Elle est optimisée
pour le stockage et la récupération rapide et à haute disponibilité de données de
séries temporelles dans des domaines comme les capteurs de l’Internet des
Objets.
InfluxDB utilise le port 8086 par défaut. Pour configurer le node influxdb, il suffit
d’indiquer l’adresse du serveur et le port.
• Ecrivez une fonction toInfluxDB() qui fournira en sortie un objet json contenant les noms des
champs et les valeurs à enregistrer :
msg.payload = [{
"humidity" : msg.payload
}];
return msg;
22
• Déployez et observez dans la console de InfluxDB l’insertion des données.
23
7. Allez plus loin…
S’il vous reste du temps vous pouvez essayer de mettre en oeuvre une notification automatique à
partir de node-red….
Remarque : Si vous utlisez votre compte google, il doit être configuré pour
accorder l’accès aux applications moins sécurisées https://myaccount.google.com/
lesssecureapps
24