El plugin de Node-RED para Signal-K permite ejecutar flujos de automatización dentro del sistema de navegación, pero por defecto, el almacenamiento de contexto solo se mantiene en memoria. Si queremos que los datos persistan en el tiempo, debemos configurar contextStorage
para usar el sistema de archivos.
A diferencia de una instalación estándar de Node-RED, el plugin de Signal-K no lee settings.js
, sino que su configuración se encuentra en el archivo:
/home/usuario/.signalk/plugin-config-data/signalk-node-red.json
(Reemplaza usuario
por tu nombre de usuario en Linux)
contextStorage
en el archivo JSONPara habilitar el almacenamiento en disco, abre el archivo signalk-node-red.json
y agrega la siguiente configuración en la sección settings
:
{
"configuration": {
"logging": "trace",
"settings": [
{
"name": "contextStorage",
"value": "{\"default\":{\"module\":\"localfilesystem\",\"config\":{\"dir\":\"/home/usuario/.signalk/red/context/\", \"flushInterval\":180000}}}"
}
]
},
"enabled": true
}
settings
En el archivo de configuración de Signal-K, la sección settings
es un array de objetos, donde cada objeto define un ajuste específico para Node-RED. Cada objeto debe tener dos claves:
name
: El nombre de la configuración que queremos modificar (en este caso, contextStorage
).value
: El valor de la configuración, que debe escribirse como una cadena de texto (string
). Si el valor es un objeto JSON, hay que escapar las comillas ("
) para que sea interpretado correctamente dentro de un string.Ejemplo de estructura válida:
"settings": [
{
"name": "contextStorage",
"value": "{\"default\":{\"module\":\"localfilesystem\",\"config\":{\"dir\":\"/ruta/de/almacenamiento/\", \"flushInterval\":60000}}}"
},
{
"name": "otraConfiguracion",
"value": "true"
}
]
flushInterval
Si bien flushInterval
puede ser útil para controlar la frecuencia de escritura de los datos en disco, se ha observado que al añadir esta configuración (por ejemplo, con un intervalo de 3 minutos o 180000 ms), pueden ocurrir resultados erráticos en el comportamiento de la persistencia de las variables globales o de flujo en Node-RED. En algunos casos, esto puede impedir que los datos se guarden correctamente o que se actualicen de manera adecuada tras un reinicio.
Para evitar estos problemas, se recomienda eliminar o no usar el parámetro flushInterval
, como se muestra en el siguiente ejemplo:
"settings": [
{
"name": "contextStorage",
"value": "{\"default\":{\"module\":\"localfilesystem\",\"config\":{\"dir\":\"/home/usuario/.signalk/red/context/\"}}}"
}
]
De esta manera, los datos se almacenarán de manera inmediata sin la necesidad de esperar el intervalo configurado.
Una vez editado y guardado el archivo, reinicia Signal-K para aplicar la configuración:
sudo systemctl restart signalk
Luego, revisa los logs para confirmar que no haya errores:
journalctl -u signalk -n 50 --no-pager
Si todo está bien, Node-RED comenzará a almacenar el contexto en disco en la carpeta definida.
Para asegurarnos de que Node-RED está usando el almacenamiento en disco:
global.set("test", 123)
)./home/usuario/.signalk/red/context/
y verifica que se crean archivos.global.get("test")
.Unknown context store 'file' specified. Using default store.
, revisa que el JSON esté bien formateado y que value
sea un string válido con "
escapado correctamente.Con esta configuración, los datos del contexto de Node-RED dentro de Signal-K ahora serán persistentes, lo que mejora la fiabilidad del sistema. 🚀