Lección 8. Registrar datos del PLC en SQLite
#8 Uso de la base de datos SQLite con Node-RED
Introducción
SQLite es una librería de lenguaje basada en C que implementa un motor de base de datos SQL. Es pequeño, rápido, autónomo, de alta fiabilidad y con todas las funciones. Además, se basa en el código abierto y es la base de datos más utilizada en el mundo.
En este capítulo centraremos nuestros esfuerzos en explicar cómo implementar una base de datos usando SQLite con NodeRED.

Instalación
Escribe en tu terminal:
# Requiere Node.js 20 o 22 LTS (npm incluido)
# También desde el editor: Menú > Manage palette > Install
cd ~/.node-red
npm install node-red-node-sqlite
Una vez que tengamos la librería instalada en nuestro NodeRED podremos utilizar sus bloques en él. Otra herramienta útil que recomendamos utilizar es DB Browser for SQLite. Existen distribuciones para los SO más populares.
Ejemplo
Antes de empezar con el ejemplo es importante comprobar cómo funciona SQLite. Si es la primera vez que usas SQLite, echa un vistazo a su página web.
Antes de introducir datos en la base de datos debemos crearla. Para crear una base de datos sólo tenemos que ejecutar este código:
CREATE TABLE IF NOT EXISTS log(time INT PRIMARY KEY, value INT)
Para ejecutar este código debemos añadir el bloque principal de SQLite a nuestro flujo de trabajo. Tendremos que editar el bloque y crear la base de datos. Pinchando, dentro del bloque, en el botón de edición junto al nombre de la base de datos crearemos un nuevo archivo donde se ubicará nuestra base de datos. En nuestro caso hemos creado el archivo Chapter8_SQLite.db.
Además, añadiendo un timestamp y editando el Topic con el código anterior crearemos una base de datos dentro del archivo.
Echa un vistazo a las siguientes imágenes para comprender mejor este procedimiento:



Ahora podemos pulsar en deploy y después de eso pulsar en Create DB Table. Ejecutaremos el código SQLite a través del bloque y nuestra base de datos se creará correctamente.
Una vez que hemos creado la base de datos es el momento de introducir nuestros primeros caracteres y leerlos. Imaginemos que tenemos un PLC registrador de datos que está enviando a nuestra aplicación Node-RED el valor analógico de algún sensor, y nuestro proyecto es conocer sus valores en el tiempo. Entonces tenemos que crear una base de datos donde el tiempo y los valores deben estar en la misma fila de nuestra base de datos.
Para ello hemos creado, como ejemplo, una interfaz de usuario con un slider, un botón y un texto. El slider simula el valor analógico externo, el texto muestra el último valor de nuestra base de datos y el botón actualiza el último valor que se muestra en el texto.
¿Cómo hacerlo? Es muy sencillo.
En primer lugar, añade el slider y configúralo como quieras. Es importante marcar la opción de salida "only on release" (solo al soltar); si no, guardaremos un valor en la base de datos con cada cambio. Una vez configurado el slider, debemos añadir una función entre el slider y el bloque SQLite.
Sobre esta función colocaremos el siguiente código siguiendo las bases de SQLite:
return {
"topic": "INSERT INTO log (time, value) VALUES ( " + Date.now() +", "+ msg.payload +")"
}
Este fragmento de código se envía al bloque SQLite cada vez que cambiamos el valor del slider. Así insertamos un valor y una marca de tiempo en nuestra tabla.
A continuación se muestran algunas imágenes de este proceso:



El último paso es mostrar el último valor de nuestra base de datos. Usamos el mismo método, solo que con un código distinto en el nodo function:
var time = msg.payload
var newMsg = {
"topic": "SELECT * FROM log ORDER BY time DESC LIMIT 1"
}
return newMsg;
A continuación se muestra la configuración de cada bloque por si hay alguna duda:



Por último, añade tus parámetros personalizados en el diseño.
Espero que este capítulo te haya ayudado a conocer una nueva característica de Node-RED y que ahora seas capaz de implementar bases de datos en tu proyecto.
A continuación se muestra nuestro diseño de ejemplo:

No se permite comentar en este curso.