Configurer le stockage de contexte dans le plugin Node-RED dans Signal-K

Configurer le stockage de contexte dans le plugin Node-RED dans Signal-K

Le plugin Node-RED pour Signal-K permet d'exécuter des flux d'automatisation dans le système de navigation, mais par défaut, le stockage de contexte est conservé uniquement en mémoire. Si nous voulons que les données persistent dans le temps, nous devons configurer contextStorage pour utiliser le système de fichiers.

1 Emplacement du fichier de configuration

Contrairement à une installation standard de Node-RED, le plugin Signal-K ne lit pas settings.js, mais sa configuration se trouve dans le fichier suivant :

/home/utilisateur/.signalk/plugin-config-data/signalk-node-red.json

(Remplacez utilisateur par votre nom d'utilisateur Linux).

2 Configuration de contextStorage dans le fichier JSON

Pour activer le stockage sur disque, ouvrez le fichier signalk-node-red.json et ajoutez la configuration suivante dans la section settings :

{
  "configuration": {
    "logging": "trace",
    "settings": [
      {
        "name": "contextStorage",
        "value": "{\"default\":{\"module\":\"localfilesystem\",\"config\":{\"dir\":\"/home/utilisateur/.signalk/red/context/\", \"flushInterval\":180000}}}"
      }
    ]
  },
  "enabled": true
}

Comment écrire correctement le tableau settings

Dans le fichier de configuration de Signal-K, la section settings est un tableau d'objets, où chaque objet définit un paramètre spécifique pour Node-RED. Chaque objet doit contenir deux clés :

  1. name : Le nom de la configuration que nous souhaitons modifier (dans ce cas, contextStorage).
  2. value : La valeur de la configuration, qui doit être écrite sous forme de chaîne de texte (string). Si la valeur est un objet JSON, les guillemets (") doivent être échappés pour qu'ils soient correctement interprétés dans la chaîne.

Exemple de structure valide :

"settings": [
  {
    "name": "contextStorage",
    "value": "{\"default\":{\"module\":\"localfilesystem\",\"config\":{\"dir\":\"/chemin/vers/le/stockage/\", \"flushInterval\":60000}}}"
  },
  {
    "name": "autreConfiguration",
    "value": "true"
  }
]

Remarque importante sur l'utilisation de flushInterval

Bien que flushInterval puisse être utile pour contrôler la fréquence d'écriture des données sur le disque, il a été observé qu'ajouter cette configuration (par exemple, avec un intervalle de 3 minutes ou 180000 ms) peut entraîner un comportement erratique dans la persistance des variables globales ou de flux dans Node-RED. Dans certains cas, cela peut empêcher les données d'être correctement sauvegardées ou mises à jour après un redémarrage.

Pour éviter ces problèmes, il est recommandé de supprimer ou de ne pas utiliser le paramètre flushInterval, comme montré dans l'exemple suivant :

"settings": [
  {
    "name": "contextStorage",
    "value": "{\"default\":{\"module\":\"localfilesystem\",\"config\":{\"dir\":\"/home/utilisateur/.signalk/red/context/\"}}}"
  }
]

De cette manière, les données seront stockées immédiatement sans attendre l'intervalle configuré.

3 Redémarrer Signal-K pour appliquer les changements

Une fois le fichier édité et sauvegardé, redémarrez Signal-K pour appliquer la configuration :

sudo systemctl restart signalk

Ensuite, vérifiez les journaux pour vous assurer qu'il n'y a pas d'erreurs :

journalctl -u signalk -n 50 --no-pager

Si tout est correct, Node-RED commencera à stocker le contexte sur disque dans le dossier spécifié.

Vérifier que cela fonctionne correctement

Pour vous assurer que Node-RED utilise le stockage sur disque :

  1. Exécutez un flux avec des variables de contexte (global.set("test", 123)).
  2. Vérifiez le dossier /home/utilisateur/.signalk/red/context/ et assurez-vous que des fichiers sont créés.
  3. Redémarrez Signal-K et vérifiez que la variable existe toujours avec global.get("test").

Notes supplémentaires

  • Si vous rencontrez l'erreur Stockage de contexte 'file' inconnu spécifié. Utilisation du stockage par défaut., vérifiez que le JSON est bien formaté et que value est une chaîne valide avec des guillemets (") échappés correctement.
  • Le stockage en mémoire reste actif par défaut, mais les données persistantes seront stockées dans le dossier spécifié.

Avec cette configuration, les données de contexte de Node-RED dans Signal-K seront désormais persistantes, améliorant la fiabilité du système. 🚀

Article précédent Article suivant