NodeRED. Programación basada en flujos
La información que se aporta a continuación pretende ser complementaria al guion del proyecto y no es de lectura obligatoria.
Motivación
Node-RED es una herramienta de programación visual de código libre que permite generar flujos de comunicaciones de forma muy intuitiva. Node-RED está desarrollado sobre Node.js, un entorno de ejecución para JavaScript, lo que permite que se pueda trabajar sobre él directamente en el navegador.
A lo largo del desarrollo del proyecto veréis como se crean y configuran en Node-RED las comunicaciones con otras aplicaciones, y esa experiencia os puede resultar muy útil en el futuro ya que Node-RED puede instalarse en multitud de sistemas operativos y hardware. Algunas de las posibilidades son:
- Dispositivos de bajo coste como Arduino, Raspberry Pi o Beagelbone Black.
- Ejecutarse localmente en ordenadores y servidores locales (on-premise). Esto permite una distribución de la capacidad de tratamiento de datos y eventos a través de la red de dispositivos de una empresa.
- Ejecución en la nube (cloud) utilizando plataformas como Azure, desarrollada por Microsoft, que será la que usaréis en el proyecto de la asignatura. Esta opción permite integrar Node-RED con el amplio espectro de servicios gestionados que ofrecen los proveedores de servicios cloud: bases de datos, Big-Data, Machine Learning, etc.
En el siguiente enlace podéis encontrar la página oficial de Node-RED:
Flujos de comunicación o flows
En Node-RED, un flujo de comunicaciones o flow es un archivo .JSON donde se ha programado uno o varios flujos de datos. Estos flujos se crean a partir de arrastrar los nodos que se deseen desde la paleta lateral (destacada en rojo en la siguiente captura) al espacio de trabajo, donde pueden ser conectados entre si y configurados con parámetros y atributos específicos de cada nodo.

La posibilidad de configurar y conectar los nodos es especialmente adecuada para soluciones de Internet-of-Things (IoT), donde la flexibilidad de los flujos de datos y la escalabilidad de los mismos son factores fundamentales para su adaptación a la constante evolución de la técnica.
El método más simple para organizar los flujos de Node-RED es separarlos en varias pestañas dentro del editor, ya que existe la opción de compilar y ejecutar todas las pestañas de forma simultánea.
Nodos o nodes
Existen muchos tipos de nodos, pero todos ellos pueden ser incluidos en una de las siguientes tres categorías según su situación en un flujo de datos:
- Nodos iniciadores de flujo que inician o disparan la ejecución de flujo de proceso (e.g. un nodo Inject).
- Nodos intermedios que realizan acciones con la información que reciben en el flujo de datos y traspasan los datos resultantes a los nodos siguientes (e.g. un nodo function).
- Nodos terminales de flujo que disparan acciones específicas cuando el flujo de datos los alcanza (e.g. un nodo Influx Batch).
La paleta de nodos básica que ofrece Node-RED cuando se instala en su versión más ligera puede ser extendida mediante la instalación de nuevos paquetes en forma de plugins desarrollados por la comunidad.
Además, es posible crear nuevos nodos según las necesidades de cada aplicación. Este proceso es tan sencillo como crear un fichero HTML con un formulario de configuración disponible en la página oficial de Node-RED, y un fichero JS (Java Script) con la lógica del nodo escrita en NodeJS.
Podéis encontrar toda la información referente a la creación de nuevos nodos en la documentación oficial:
https://nodered.org/docs/creating-nodes/
Compatibilidad con protocolos de comunicaciones
Actualmente Node-RED es capaz de gestionar flujos de datos a través de protocolos tan utilizados como:
- Modbus
- TCP/IP
- UDP/IP
- MQTT
- HTTP
- APIs de aplicaciones como Twitter, Facebook, etc.
Por tanto, cualquier aplicación que utilice dichos protocolos es susceptible a ser implementada sobre Node-RED.