Noeud function : stocker et partager des données avec context ou context.global

Discussions autour de la programmation d'objets connectés avec Node-RED. Guides et astuces de programmation
Avatar de l’utilisateur
admin
Site Admin
Messages : 23
Inscription : Mar Juil 04, 2017 4:04 pm

Noeud function : stocker et partager des données avec context ou context.global

Message par admin » Jeu Juil 13, 2017 7:00 am

Il est possible de stocker des variables dans le contexte de Node-RED. Le contexte est disponible dans le noeud function qui permet de coder en javascript classique. On pourra par exemple s'en servir par exemple dans les cas suivants :
  • Pour stocker des réglages et les recharger automatiquement au démarrage de Node-RED
  • Pour comparer la variation de deux valeurs entre deux exécution du noeud. Utilise pour mesurer le temps écoulé entre deux exécution
  • Pour échanger des données entre tous les noeuds. Dans ce cas, on ajoutera le mot clé global
Pour déclarer un variable de contexte, on utilise le formalisme suivant. Ici on créé une variable locale time qui contient la date et l'heure.

Code : Tout sélectionner

context.time = new Date().getTime();
Si on veut partager cette variable entre tous les noeuds de type function, il suffit d'ajouter le mot clé global comme ceci

Code : Tout sélectionner

context.global.time = new Date().getTime();
Le contenu du contexte est automatiquement enregistré et rechargé à chaque déploiement du flow et au démarrage de Node-RED.
Maintenant pour utiliser une variable, aucune function n'est nécessaire. On appel la variable de contexte comme une autre variable. Ici on va comparer le temps écoulé entre deux exécutions de la fonction

Code : Tout sélectionner

var currentTime = new Date().getTime();		// Récupère la date et l'heure actuelle
var lastTime = context.time;  				// Récupère la date et l'heure du dernier passage
// Plus d'une seconde (1000ms) entre deux exécutions 
if (currentTime - lastTime > 1000 ) {
  node.log("Une seconde écoulée");  // On affiche un message dans le log d'exécution
  contexte.time = currentTime;           // On met à jour l'heure de passage pour la prochaine fois
}
Pour aller plus loin, la documentation officielle de Node-RED

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 0 invité