Prise en main de NodeRED

✎ Travail n° 1 C’est quoi NodeRED ?

🎯 Travail à faire :

Prendre connaissance du document Présentation générale

💻 Travail n° 2 Installation

On vous demande d’installer NodeRED sur Windows.

🎯 Travail à faire :

Procéder à l’nstallation de NodeRED en suivant les étapes ci-dessous :

La procédure est détaillée dans l’article Running on Windows link du site officiel de NodeRED.

  1. Installer Node.js (avec son gestionnaire de paquets npm)

    Ceci peut se faire de différentes façons mais la méthode la plus simple est de le faire depuis l’installateur au format MSI (→ Microsoft System Installer) disponible sur le NAS du labo (→ \\Diskstation\install\node.js) ou, à défaut, dans la section Downloads du site officiel de Node.js link.

    Dans les versions proposées, toujours préférer la version “LTS” (→ Long Time Support) qui, comme son nom l’indique, propose un support à long terme : c’est une version stable.

    • Télécharger localement l’installateur

    • Suivre l’assistant d’installation

  2. Saisir la commande qui suit depuis un terminal afin d’installer le paquet node-red depuis le gestionnaire de paquets de Node.js (→ npm).

    npm install -g --unsafe-perm node-red (1)
    1 Installe globalement (→ option -g) le paquet node-red
  3. Exécuter NodeRED en tapant la commande node-red depuis un terminal :

    C:\Users\ragnar>node-red (1)
    2 Oct 15:24:40 - [info]
    
    Welcome to Node-RED
    ===================
    
    2 Oct 15:24:40 - [info] Node-RED version: v3.0.2 (2)
    2 Oct 15:24:40 - [info] Node.js  version: v14.18.1 (3)
    [...]
    2 Oct 15:24:44 - [info] Server now running at http://127.0.0.1:1880/ (4)
    [...]
    1 On lance l’application NodeRED
    2 le “log” de l’application indique la version de NodeRED
    3 le “log” de l’application indique la version de Node.js sur laquelle s’exécute NodeRED
    4 le “log” de l’application indique l’url sur laquelle il faut se rendre avec un navigateur pour afficher l’interface de NodeRED
node red ihm

L'espace de travail est la zone dans laquelle le ou les flux (→ flows) constituant l’application à développer prennent place. Les flux sont constitués de nœuds (→ nodes) que l’on glisse depuis la palette puis qu’on relie entre eux. Le comportement des nœuds est dicté soit par des options disponibles lorsque l’on double-clique dessus soit par du code Javascript

La Palette liste les nœuds qu’il est possible de glisser/déposer sur l’espace de travail. Certains sont disponibles par défaut mais il est possible d’en installer d’autres.

La Barre latérale contient des panneaux qui fournissent des outils/informations utiles (informations/aide sur les nœuds, affichage de messages de deboggage lors de l’exécution de l’application, …​)

💻 Travail n° 3 Premier flux NodeRED

Le site de NodeRED propose un tutoriel de prise en main de l’outil. Il consiste à créer un 1er flux qui se contente d’afficher la date de son exécution.

🎯 Travail à faire :

  1. Suivre le tutoriel Creating your first flow link.

    Le résultat attendu doit ressembler à ce qui suit :

    first flow
  2. Qu’indique le point bleu qui s’affiche sur un ou plusieurs nœuds ? Quelle action faut-il alors entreprendre avant d’exécuter le flux ?

  3. Que représente selon vous le msg.payload qui apparaît dans les options de chaque nœud ou le code Javascript qu’on vous demandé de saisir dans le nœud de fonction ?

💻 Travail n° 4 Interface Web

On vous propose maintenant de coder pas-à-pas dans NodeRED un flux qui dispose d’une interface web pour interagir avec lui.

Cette interface web sera constituée :

  • d’une jauge circulaire

  • d’un slider qui permettra de faire varier le curseur de la jauge circulaire

  • d’une courbe qui affichera l’évolution des valeurs affichées sur la jauge circulaire

circular gauge
Exemple de résultat attendu

🕮 Apport de connaissances :

Un module additionnel de NodeRED — nommé node-red-dashboard — propose une série de nœuds qui, une fois ajoutés à la palette de NodeRED, permettent de créer facilement une interface web de supervision. Celle-ci pourra être utilisée pour suivre en temps réel l’évolution de données diverses (températures, cours du bitcoin, …​) sous différentes formes (jauges, courbes, histogrammes)

node red dashboard demo
Exemple d’interface web réalisée avec node-red-dashboard

🎯 Travail à faire :

  1. Ajouter le module node-red-dashboard à NodeRED par l’intermédiaire du gestionnaire de palette

    nr dashboard install

    Une nouvelle palette de nœuds est alors disponible

    nr dashboard palette
  2. Faire glisser les nœuds “Slider” et “Gauge” sur l’espace de travail et les relier entre eux

    Pour que ces composants graphiques soient bien disposés sur l’interface Web, il faut les intégrer dans un onglet (→ Tab) et dans un groupe (→ Group). En effet, l’interface Web est composée d’un ou plusieurs onglets et chacun d’eux est constitué de zones/groupes dans lesquels sont disposés les composants graphiques.

  3. Configurer les 2 nœuds pour les disposer dans un onglet nommé “Accueil” au sein d’un groupe nommé “Groupe n°1”. Exemple pour le nœud “Slider” :

  4. Déployer le flux avec le bouton Deploy puis accéder à l’interface web en se rendant à l’url http://127.0.0.1:1880/ui/ dans un nouvel onglet du navigateur internet

  5. Actionner le curseur et constater l’effet sur la jauge circulaire

  6. Parcourir les options des 2 nœuds pour faire en sorte que :

    • l’étendue des valeurs délivrées par le curseur aille de 0 à 100

    • le secteur actif de la jauge circulaire s’affiche en jaune lorsque la valeur du curseur est comprise dans l’intervalle [0, 25], en vert lorsqu’elle est comprise dans l’intervalle ]25, 75] et en rouge lorsqu’elle est comprise dans l’intervalle ]75, 100]

  7. Faire glisser le nœud “Chart” (→ Courbe) sur l’espace de travail et le relier, comme le nœud “Gauge”, à la sortie du nœud “Slider”

  8. Déployer le flux et se rendre sur l’interface Web pour constater les actions du slider sur la jauge circulaire et la courbe.

  9. Modifier les options du nœud “Chart” pour n’afficher les variations du curseur que durant les 5 dernières minutes et pour que son titre soit “Variations du curseur”

  10. Faire constater le travail à l’enseignant

💻 Travail n° 5 Contrôle de la qualité d’air

On désire à présent construire une interface web qui affiche le bulletin de qualité d’air de la date courante pour l’Isle sur la Sorgue (code INSEE de la commune : 84054).

L’objectif de ce travail est de parvenir à une interface web dont un aperçu est donné ci-dessous :

atmosud ui

🕮 Apport de connaissances :

Le bulletin de qualité d’air de l’Isle sur la Sorgue est publié quotidiennement sur le site internet de l’association AtmoSud link.

atmosud web site

L’indice ATMO qualifie l’état de l’air selon 6 classes :

  1. Bon

  2. Moyen

  3. Dégradé

  4. Mauvais

  5. Très mauvais

  6. Extrêmement mauvais

Il est calculé quotidiennement, à partir de concentrations de 5 polluants réglementés, aux effets sanitaires avérés :

  • les particules fines dont le diamètre est inférieur à 10 micromètres (→ PM10),

  • les particules fines dont le diamètre est inférieur à 2.5 micromètres (→ PM2.5),

  • le dioxyde d’azote (NO2),

  • l’ozone (O3),

  • le dioxyde de soufre (SO2).

L’indice ATMO correspond alors au plus dégradé des sous-indices calculés pour chacun de ces 5 polluants.

Voir Comprendre les indices pour qualifier l’air link pour plus de précisions sur les valeurs des indices publiés.

En plus du site internet, l’indice ATMO ainsi que les sous-indices associés aux 5 polluants sont accessibles à travers ce qu’on appelle une API Web.

Une API Web est un service web qui permet de récupérer des informations “brutes” à partir d’une URL. Cette URL spécifie non seulement le chemin de la ressource mettant à disposition les informations mais précise aussi ce qu’on souhaite vraiment récupérer (valeurs, format, étendue…​)

  • le dernier bulletin journalier (→ https://api.atmosud.org/iqa2021/commune/bulletin/journalier/derniers)

  • …​ pour la ville de Marseille (→ insee=13055)

  • …​ au format csv(→ format=csv, coma separated values ou valeurs séparées par des virgules)

  • …​ indiquant les indices de dioxyde d’azote et d’ozone (→ indice=no2,o3)

  • …​ sous la forme de couleur et de qualificatif (→ format_indice=couleur,qualificatif).

date_diffusion,date_echeance,echeance,code_insee,nom_commune,lon,lat,majoritaire,no2_couleur,no2_qualificatif,o3_couleur,o3_qualificatif
2022-10-02,2022-10-04,2,13055,MARSEILLE (13),5.44099652485599,43.294823038496,"['no2', 'o3']",#50CCAA,Moyen,#50CCAA,Moyen
2022-10-02,2022-10-03,1,13055,MARSEILLE (13),5.44099652485599,43.294823038496,"['no2', 'o3']",#50CCAA,Moyen,#50CCAA,Moyen
2022-10-02,2022-10-02,0,13055,MARSEILLE (13),5.44099652485599,43.294823038496,"['no2', 'o3']",#50CCAA,Moyen,#50CCAA,Moyen
2022-10-02,2022-10-01,-1,13055,MARSEILLE (13),5.44099652485599,43.294823038496,"['no2', 'o3']",#50CCAA,Moyen,#50CCAA,Moyen

Vous pouvez remarquer que la structure de l’URL est de la forme : <protocole>://<domaine>/<chemin>?<requête>

avec :

  • <protocole>https

  • <domaine>api.atmosud.org

  • <chemin>iqa2021/commune/bulletin/journalier/derniers

  • <requête>format_indice=couleur,qualificatif&indice=no2,o3&format=csv&insee=13055

    La requête est elle-même constituée de paires <champ>=<valeur> séparés par des caractères ‘&’

🎯 Travail à faire :

  1. En vous aidant des informations du site Nouvel Indice de la Qualité de l’Air (IQA) link, établir l’URL qui permet de récupérer le dernier bulletin pour l’Isle sur la Sorgue, au format JSON, avec tous les indices sous forme de valeur (→ 1, 2, …​) et de qualificatif (→ “bon”, “moyen”…​). Tester depuis le navigateur.

    Consulter l’article Wikipedia JavaScript Object Notation pour une présentation du format JSON.

    Exemple de résultat attendu
    {
      "date_diffusion": "2022-10-02",
      "indices": [
        {
          "commune": "L' ISLE-SUR-LA-SORGUE (84)",
          "code_insee": "84054",
          "valeurs": [
            {
              "date_echeance": "2022-10-04",
              "echeance": 2,
              "majoritaire": [
                "o3"
              ],
              "indice": {
                "valeur": 2,
                "qualificatif": "Moyen"
              },
              "no2": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "o3": {
                "valeur": 2,
                "qualificatif": "Moyen"
              },
              "pm10": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "pm2.5": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "so2": {
                "valeur": 1,
                "qualificatif": "Bon"
              }
            },
            {
              "date_echeance": "2022-10-03",
              "echeance": 1,
              "majoritaire": [
                "o3"
              ],
              "indice": {
                "valeur": 2,
                "qualificatif": "Moyen"
              },
              "no2": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "o3": {
                "valeur": 2,
                "qualificatif": "Moyen"
              },
              "pm10": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "pm2.5": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "so2": {
                "valeur": 1,
                "qualificatif": "Bon"
              }
            },
            {
              "date_echeance": "2022-10-02",
              "echeance": 0,
              "majoritaire": [
                "o3"
              ],
              "indice": {
                "valeur": 2,
                "qualificatif": "Moyen"
              },
              "no2": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "o3": {
                "valeur": 2,
                "qualificatif": "Moyen"
              },
              "pm10": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "pm2.5": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "so2": {
                "valeur": 1,
                "qualificatif": "Bon"
              }
            },
            {
              "date_echeance": "2022-10-01",
              "echeance": -1,
              "majoritaire": [
                "o3"
              ],
              "indice": {
                "valeur": 2,
                "qualificatif": "Moyen"
              },
              "no2": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "o3": {
                "valeur": 2,
                "qualificatif": "Moyen"
              },
              "pm10": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "pm2.5": {
                "valeur": 1,
                "qualificatif": "Bon"
              },
              "so2": {
                "valeur": 1,
                "qualificatif": "Bon"
              }
            }
          ]
        }
      ]
    }
  2. Dans NodeRED, créer un flux disposant reliant, dans l’ordre, les nœuds “Inject”, “http request” et “Debug”

  3. Configurer les nœuds pour que l’activation du flux en cliquant sur le nœud “Inject” déclenche une requête HTTP sur l’URL déterminée à la question précédente et affiche son résultat dans le nœud “Debug”

    atmosud flow 01
    Figure 1. Résultat attendu
  4. Compléter le flux NodeRED pour qu’il soit conforme à celui représenté ci-dessous :

    atmosud flow 02

    Les nœuds “set msg.payload” correspondent au nœud la palette standard nommé “Change”.

    Le nœud “Date” est le nœud “Text” de la palette “dashboard”

    Les nœuds “NO2”, “O3” et “PM2.5” sont les jauges circulaires de la palette “dashboard”

  5. Configurer les nœuds “Change” de façon à ce qu’ils délivrent en sortie l’information à afficher dans leurs jauges circulaires respectives.

    Pour l’indice NO2, on récupère l’expression permettant d’accéder à sa valeur depuis le panneau de “Debug” (→ icône >_) :

    copy path

    Puis on l’inscrit dans les propriétés du nœud “Change” associé :

    change node rule
  6. Configurer les nœuds des jauges circulaires pour qu’elles affichent dans le groupe “Isle sur la Sorgue” de l’onglet “Qualité d’air” de l’interface Web, l’indice de chacun des polluants avec un secteur dont la couleur dépendra de la valeur (“Bon” → vert, “Moyen” → jaune, au delà → rouge)

  7. Compléter le flux pour indiquer l’indice ATMO c’est-à-dire l’indice correspondant au plus dégradé des sous-indices calculés pour chacun de ces 5 polluants.

    L’indice ATMO est déjà fourni dans les données renvoyées par l’API WEB ⇒ Vous devez seulement le localiser et non le calculer.

  8. Configurer le nœud “Text”/“Date” pour qu’il affiche la date du jour

    Consulter l’aide de ce nœud — accessible depuis la barre latérale — pour savoir comment fixer la valeur du texte à la date du jour.

    L’extrait suivant peut s’avérer utile :

    “The label can also be set by a message property by setting the field to the name of the property, for example {{msg.topic}}.”

  9. En s’aidant du flux NodeRED flow-customize-gauge json (🕮 Source : How to add sectors in a gauge? - Dashboard - Node-RED Forum link) personnaliser les jauges de votre interface web pour qu’elles disposent de 6 secteurs (3 à l’origine) afin de pouvoir afficher les 6 valeurs d’indice de polluant possibles avec 6 couleurs différentes.

    Pour importer le flux NodeRED fourni, aller dans le menu   Import

🞄  🞄  🞄