Configurar el Context Storage en el plugin de Node-RED dentro de Signal-K

Configurar el Context Storage en el plugin de Node-RED dentro de Signal-K

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.

1 Ubicación del archivo de configuración

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)

2 Configuración de contextStorage en el archivo JSON

Para 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
}

Cómo escribir correctamente el array 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:

  1. name: El nombre de la configuración que queremos modificar (en este caso, contextStorage).
  2. 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"
  }
]

Nota importante sobre el uso de 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.

3 Reiniciar Signal-K para aplicar cambios

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.

Verificar que funciona correctamente

Para asegurarnos de que Node-RED está usando el almacenamiento en disco:

  1. Ejecuta un flujo con variables de contexto (global.set("test", 123)).
  2. Revisa la carpeta /home/usuario/.signalk/red/context/ y verifica que se crean archivos.
  3. Reinicia Signal-K y comprueba que la variable aún existe con global.get("test").

Notas adicionales

  • Si encuentras el error 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.
  • El almacenamiento en memoria sigue activo por defecto, pero los datos persistentes se guardarán en la carpeta especificada.

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. 🚀

Entrada Anterior Siguiente Entrada