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.
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).
contextStorage
dans le fichier JSONPour 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
}
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 :
name
: Le nom de la configuration que nous souhaitons modifier (dans ce cas, contextStorage
).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"
}
]
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é.
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é.
Pour vous assurer que Node-RED utilise le stockage sur disque :
global.set("test", 123)
)./home/utilisateur/.signalk/red/context/
et assurez-vous que des fichiers sont créés.global.get("test")
.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.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. 🚀