The Things Network et Node Red
Dans le précédent article, nous avons mis en œuvre un objet connecté au travers du réseau IOT The Things Network. Nous avons utilisé Cayenne my devices pour la construction du Front End. Je vous propose dans cet article de le construire à l'aide de Node Red. L'objet connecté sera le capteur de température et d'humidité construit autours d'une carte THE THINGS UNO et d'un DHT11 vu dans le précédent article.
Introduction
La communication entre un objet connecté (device) et le client final passe par plusieurs intermédiaires comme illustré dans le synoptique ci-dessus. Ce qui nous intéresse ici, c'est la liaison entre le serveur de The Things Network et le serveur d'application sur lequel tourne Node Red. Entre ces deux serveurs, les données sont échangées selon le protocole MQTT, nous allons donc simplement commencer par utiliser un node mqtt in
de Node Red.
Dans les posts précédents consacrés à Node Red, j'avais utilisé une Raspberry Pi sur laquelle Node Red était déjà installé. Bien que cela soit tout à fait possible ici, je vais utiliser un PC classique sur lequel l'OS installé est Ubuntu.
Installation de Node Red
- Mettre à jour la liste des paquets :
- Consulter le dépôt des sources de nodejs pour connaitre la dernière version : https://github.com/nodesource/distributions
- Ajouter le dépôts de la dernière version à liste des dépôts
L'installation se termine avec le message suivant :
## Run `sudo apt-get install -y nodejs` to install Node.js 10.x and npm
- Installer nodejs et npm
- Installer Node Red
- Exécuter Node Red
Utilisation du node mqtt in
- Saisir le flow suivant :
- Configurer le node
mqtt in
: La consultation de la documentation de l'API de The Things Network permet de trouver les éléments suivants nécessaires à la configuration du node :- Host:
<Region>.thethings.network
, where<Region>
is last part of the handler you registered your application to, e.g.eu
. - Port:
1883
- Username:
Application ID
- Password:
Application Access Key
- Host:
- Topic:
<AppID>/devices/<DevID>/up
Double-cliquer sur le node mqtt in
pour faire apparaitre la boite de dialogue de configuration.
- Configurer les paramètres du serveur conformément à la documentation de l'API de TTN puis cliquer sur Update
- Configurer le Topic conformément à la documentation de l'API de TTN et cliquer sur Done
- Déployer le flow et observer les traces Debug :
La charge utile du message reçu contient une chaine de caractères dans laquelle se trouvent les informations qui nous intéresse. Il n'y a plus qu'a les extraire et les mettre en forme comme on le souhaite, par exemple en utilisant les nodes Gauge ou Chart de la palette Dashboard. On pourra aussi tester les valeurs et envoyer des notifications en cas de dépassement de seuils, ....
Utilisation de nodes spécialisés ttn
L'utilisation direct de MQTT nous conduit à récupérer beaucoup d'informations dans lesquelles il va falloir extraire celle qui nous intéresse. L'utilisation des nodes node-red-contrib-ttn
spécialisés va nous faciliter le travail.
Installation des nodes node-red-contrib-ttn
Il est normalement possible d'installer ces nodes directement à partir du gestionnaire de palette de Node Red :
On peut également l'installer à partir d'un terminal :
L'installation terminée, on dispose de 3 nouveaux nodes dans la palette :
Premier flow
- Saisir le flow ci-dessous :
- Double cliquer sur le node
ttn uplink
pour le configurer :
- Déployer le flow et observer les trace Debug :
On peut constater cette fois ci que la charge utile du message reçu est un objet qui contient comme attributs les mesures convoitées. C'est bien plus simple à exploiter !
Construction du Front End
Nous allons ici utiliser les nodes de la palette dashboard pour construire un front end qui prendra la forme d'une page web.
- Saisir le flow ci-dessous :
- Les fonctions
getTemperature()
etgetHumidity()
ont pour rôle de fournir un payload adapté au nodes du dashboard :
- Configurer les nodes
Chart
etGauge
et les propriétés du dashboard pour obtenir une page web comme ci-dessous :
- Pour ceux qui sont pressés d'essayer, copiez le code ci-dessous puis dans le menu de Node Red, cliquez sur Import puis Clipboard et enfin collez le code
[{"id":"c43e8dc.73dcf7","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"1e7da0e8.30369f","type":"ttn uplink","z":"c43e8dc.73dcf7","name":"","app":"95cde770.5f7138","dev_id":"temp-hum-sensor-1","field":"","x":348.5,"y":225,"wires":[["131246a.6c3af39","c39b0fb8.937f18","9aae08c4.7c7738"]]},{"id":"131246a.6c3af39","type":"function","z":"c43e8dc.73dcf7","name":"getTemperature","func":"var temp = {}\ntemp.payload = msg.payload.temperature_1;\nreturn temp;","outputs":1,"noerr":0,"x":634.5,"y":292,"wires":[["e86e93fa.69828","82bbc75b.ed42b"]]},{"id":"c39b0fb8.937f18","type":"function","z":"c43e8dc.73dcf7","name":"getHumidity","func":"var hum = {}\nhum.payload = msg.payload.relative_humidity_2;\nreturn hum;","outputs":1,"noerr":0,"x":625,"y":374,"wires":[["da233c52.06efa","ff10fccd.59c49"]]},{"id":"e86e93fa.69828","type":"ui_gauge","z":"c43e8dc.73dcf7","name":"","group":"5c730cd.42bd3f4","order":1,"width":"12","height":"6","gtype":"gage","title":"Température","label":"°C","format":"{{value}}","min":0,"max":"50","colors":["#00b5b5","#e6e600","#ca3838"],"seg1":"","seg2":"","x":850.5,"y":292,"wires":[]},{"id":"da233c52.06efa","type":"ui_gauge","z":"c43e8dc.73dcf7","name":"","group":"5c730cd.42bd3f4","order":2,"width":"12","height":"6","gtype":"gage","title":"Humidité Relative","label":"%","format":"{{value}}","min":0,"max":"100","colors":["#ebf01f","#11e600","#0c2e9e"],"seg1":"","seg2":"","x":872.5,"y":374,"wires":[]},{"id":"9aae08c4.7c7738","type":"debug","z":"c43e8dc.73dcf7","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":624.5,"y":224,"wires":[]},{"id":"ff10fccd.59c49","type":"ui_chart","z":"c43e8dc.73dcf7","name":"","group":"5c730cd.42bd3f4","order":4,"width":"12","height":"8","label":"Evolution de l'humidité relative (%)","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Connexion en cours ...","dot":false,"ymin":"0","ymax":"100","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":929.5,"y":442,"wires":[[],[]]},{"id":"82bbc75b.ed42b","type":"ui_chart","z":"c43e8dc.73dcf7","name":"","group":"5c730cd.42bd3f4","order":3,"width":"12","height":"8","label":"Evolution de la température (°C)","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"Connexion en cours ...","dot":false,"ymin":"0","ymax":"50","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":919.5,"y":235,"wires":[[],[]]},{"id":"95cde770.5f7138","type":"ttn app","z":"","appId":"gestion-clim-lab-c12","accessKey":"ttn-account-v2.GzYy6dxbgfWGUqkef_7JZ6YQjjlNLdCejB4bGS58BZM","discovery":"discovery.thethingsnetwork.org:1900"},{"id":"5c730cd.42bd3f4","type":"ui_group","z":"","name":"Salle C12","tab":"4f029f82.2f8428","disp":true,"width":"24","collapse":false},{"id":"4f029f82.2f8428","type":"ui_tab","z":"","name":"Paramètres climatiques","icon":"dashboard"}]
|
Trackbacks are disabled.