Skip to content

Temario general ​

Módulo de Node-RED de la asignatura Sistemas Industriales: 7 sesiones de 4 horas, una por semana.

El hilo conductor es el invernadero del laboratorio. Cada sesión añade una pieza a un sistema de monitorización que al final del módulo recoge los datos de los sensores, los guarda, los muestra en un panel, avisa cuando algo va mal y permite consultarlos a un asistente de IA.

Punto de partida ​

Qué se da por sabido:

  • Programar con soltura en JavaScript o Python. Dentro de Node-RED se escribe JavaScript, en los nodos function.
  • Comunicarse por MQTT con los sensores del invernadero desde un programa Python. Lo hiciste en las prácticas anteriores.
  • Manejar JSON, HTTP y la línea de comandos a nivel básico.
  • Tener Docker Desktop instalado y funcionando en el portátil (incluye Docker Compose y el motor de contenedores Linux). Compruébalo antes de la sesión 1 con docker compose version y docker run --rm hello-world.

Qué aporta este módulo:

  • Programación basada en flujos (flow-based programming) con Node-RED.
  • Pasar de "un script que lee un topic" a un sistema que integra sensores, APIs externas, base de datos, panel de operador, alarmas e IA.
  • Conceptos propios de sistemas industriales: telemetría, series temporales, HMI, alarmas con histéresis y robustez ante fallos de dispositivos.

El invernadero ​

El módulo se trabaja sobre un invernadero con sensores y actuadores conectados por MQTT. En el laboratorio existe un invernadero real con estos dispositivos, y el entorno del curso incluye un simulador que lo reproduce: publica los mismos topics y con el mismo formato que sus ESP32, y responde a los comandos como sus Shelly. Todo el módulo se hace con el simulador; tus flujos sirven igual con los dispositivos físicos (ver Trabajar con el invernadero real).

Magnitudes disponibles:

DispositivoMagnitudUso en el sistema
DHT11 y DHT22Temperatura (ºC) y humedad ambiente (%)Clima interior del invernadero
HC-SR04Distancia (cm)Por ejemplo, nivel del depósito de agua
TDS MeterSólidos disueltos (ppm)Calidad del agua de riego
HX711Peso (g)Por ejemplo, reserva de agua o sustrato
Sensor capacitivoHumedad del suelo (%)Necesidad de riego
2× Shelly Plug SRelé on/off, potencia (W)Actuadores: bomba de riego, ventilación o iluminación

Los ESP32 no se programan en este módulo

Los ESP32 (o el simulador) ya publican sus datos. Todo el trabajo se hace en Node-RED.

Entorno de trabajo ​

Node-RED se ejecuta en tu PC con docker-compose. El entorno se descarga como entorno-docker.zip; cuando una sesión lo amplíe, te pedirá descargarlo de nuevo. El entorno se entrega en la sesión 1 y crece hasta la sesión 7. En la sesión 1 instalarás además Node-RED de forma nativa, para entender cómo funciona por dentro; a partir de ahí se trabaja siempre con Docker.

ServicioFunciónSe usa desde
node-redMotor de flujos, con Dashboard 2.0 preinstaladoSesión 1
simuladorPublica por MQTT los mismos topics y payloads que los ESP32 del invernaderoSesión 1
mosquittoBroker local donde publica el simuladorSesión 1
influxdbBase de datos de series temporalesSesión 5

Node-RED se conecta al mosquitto local, donde publica el simulador. Funciona en cualquier sitio, también en el laboratorio, y tiene salida a Internet, que necesitarás para las APIs externas, Telegram y el asistente de IA. Para conectarte a los dispositivos físicos solo cambia el .env: lo explica Trabajar con el invernadero real.

Arquitectura del sistema ​

Arquitectura del sistema: el simulador, en Docker, hace de los ESP32 y los Shelly del invernadero y publica en el broker Mosquitto local; el Node-RED de tu PC se conecta a ese broker y añade en cada sesión una pieza: lógica de control, APIs externas, integración MQTT, panel de operador, histórico en InfluxDB, alarmas por Telegram y asistente de IA

Cada bloque de Node-RED es la pieza que construyes en esa sesión. A la derecha, los servicios con los que se comunica.

Planificación de sesiones ​

#SesiónPieza del sistemaEntregable
1Fundamentos de Node-RED y flujos de controlLógica de procesadoFlujo con lógica condicional sobre datos de sensores
2Integración con APIs externasDatos de contexto externosFlujo que combina una API externa con los datos del invernadero
3MQTT e IoT en la red del invernaderoCapa de comunicacionesIntegración por MQTT de todos los sensores, con reacción a sus mensajes
4Paneles de monitorizaciónInterfaz de operador (HMI)Panel de monitorización en tiempo real
5Persistencia de datosHistóricoHistórico consultable y gráfica de tendencia
6Eventos y notificacionesAlarmasSistema de alertas que notifica ante una condición definida
7Agentes de IA y cierreAsistente e integración finalSistema integrado con asistente de IA

Estructura típica de una sesión de 4 horas:

BloqueDuración aprox.
Conceptos clave, siempre ligados a la práctica del día30–45 min
Práctica guiada paso a paso2 h – 2 h 30 min
Trabajo autónomo sobre el entregable y recogida de evidencias para el informe1 h – 1 h 30 min

Cada sesión incluye además un bloque breve de Node-RED como plataforma: funciones del entorno que se usan en la práctica de ese día.

Contenido por sesión ​

Sesión 1 — Fundamentos de Node-RED y flujos de control ​

Objetivos

  • Instalar Node-RED de forma nativa con npm y levantar después el entorno del curso con docker compose up.
  • Explicar el modelo de programación basada en flujos y la estructura del objeto msg.
  • Construir flujos con los nodos core inject, debug, function, change y switch.
  • Programar lógica de control sobre lecturas de sensores, simuladas o del invernadero.

Contenidos

  • Qué es Node-RED y dónde encaja en la integración IT/OT y el edge computing.
  • Instalación nativa: Node.js, npm, el comando node-red y su directorio de usuario. Paso al entorno Docker del curso.
  • Editor, paleta, deploy y pestañas.
  • El mensaje msg: payload, topic y propiedades propias.
  • Transformación de datos con change y function, y enrutado con switch.
  • Primera fuente de datos real: un mqtt in que recibe un sensor del invernadero, lo mismo que hacía tu script Python. En la sesión 3 se profundiza en MQTT.

Node-RED como plataforma: ficheros de una instalación (settings.js, flows.json, credenciales, paleta); contexto de nodo, de flujo y global; organización con nombres y comentarios; importar y exportar flujos.

Entregable: flujo que clasifica las lecturas de humedad del suelo y temperatura como normal, aviso o crítico según umbrales configurables y decide si "regar" o "ventilar".

Sesión 2 — Integración con APIs externas ​

Objetivos

  • Consumir APIs REST con http request y procesar respuestas JSON.
  • Combinar datos externos (previsión meteorológica) con los datos del invernadero en una decisión de control.
  • Gestionar errores de red, timeouts y respuestas inesperadas.
  • Exponer el estado del invernadero como API propia con http in/http response.

Contenidos

  • Anatomía de una llamada REST: método, URL, parámetros, cabeceras y códigos de estado.
  • API meteorológica sin clave (por ejemplo, Open-Meteo): temperatura exterior, humedad exterior y evapotranspiración.
  • Consulta periódica con inject, parsing y extracción de los campos útiles.
  • Endpoint propio, por ejemplo GET /api/invernadero/estado, consultable desde tus programas Python o el navegador.

Node-RED como plataforma: gestión de errores con catch, status y complete; variables de entorno para URLs y parámetros; link in/link out y grupos.

Entregable: flujo que consulta la previsión meteorológica y la combina con los datos del invernadero, por ejemplo para ventilar solo si fuera hace más fresco que dentro. Además, un endpoint REST que devuelve el estado actual.

Sesión 3 — MQTT e IoT en la red del invernadero ​

Objetivos

  • Conectar Node-RED al broker del invernadero y suscribirse a todos sus sensores.
  • Usar wildcards (+, #) para procesar familias de topics con un solo flujo.
  • Normalizar los payloads de los distintos sensores a un modelo de datos común.
  • Aplicar QoS, mensajes retained y LWT, y detectar sensores que dejan de publicar.

Contenidos

  • De Python a Node-RED: qué cambia al integrar varios sensores en un mismo sistema.
  • Jerarquía de topics del invernadero y suscripciones con wildcards.
  • Modelo de datos común del sistema: sensor, magnitud, valor, unidad, ts.
  • QoS 0, 1 y 2, retained y Last Will and Testament.
  • Publicación desde Node-RED: estados, consignas y comandos.
  • Detección de sensores caídos (watchdog) cuando un ESP32 deja de publicar.

Node-RED como plataforma: nodos de configuración (broker compartido entre flujos) y subflujos para tratar todos los sensores con la misma lógica.

Entregable: sistema que integra por MQTT todos los sensores del invernadero en el modelo de datos común, detecta cuándo un sensor deja de publicar o un ESP32 es inalcanzable, y riega automáticamente enviando comandos a la bomba con confirmación de su estado.

Sesión 4 — Paneles de monitorización ​

Objetivos

  • Construir un panel con Dashboard 2.0 usando gauges, gráficas, textos de estado y controles.
  • Aplicar criterios de diseño HMI: jerarquía visual, colores de estado y agrupación por zona o magnitud.
  • Modificar umbrales y consignas desde el panel.

Contenidos

  • Estructura de Dashboard 2.0: páginas, grupos y layouts.
  • Widgets de visualización y de control, y cómo alimentarlos desde el flujo.
  • Principios básicos de interfaces de operador en entornos industriales.
  • Umbrales editables desde el panel que realimentan la lógica de la sesión 1.

Node-RED como plataforma: Dashboard 2.0 frente a Dashboard 1.0 (obsoleto), temas, y cómo se sirve el panel desde el mismo Node-RED.

Entregable: panel en tiempo real del invernadero con el estado del sistema, clima, riego y agua, actuadores con estado confirmado, tendencias y consignas editables y validadas. Los datos de un sensor averiado deben distinguirse de los actuales.

Sesión 5 — Persistencia de datos ​

Objetivos

  • Explicar por qué las series temporales requieren una base de datos específica.
  • Escribir lecturas en InfluxDB desde Node-RED con measurements, tags y fields bien elegidos.
  • Consultar históricos con filtros de tiempo y agregaciones.
  • Mostrar gráficas de tendencia en el panel a partir del histórico.

Contenidos

  • Modelo de datos de InfluxDB y su relación con el modelo común de la sesión 3.
  • Escritura: individual frente a por lotes, y frecuencia de muestreo.
  • Consultas: rango temporal, media, máximo, mínimo y downsampling.
  • Alternativa SQL: cuándo tiene sentido y qué cambia.

Node-RED como plataforma: filter (RBE) para guardar solo cambios, join/batch para agrupar escrituras y limitación de frecuencia con delay.

Entregable: histórico consultable de las magnitudes del invernadero y una gráfica de tendencia en el panel con rango temporal seleccionable.

Sesión 6 — Eventos y notificaciones ​

Objetivos

  • Diferenciar eventos de estados y modelar alarmas con condición, histéresis, reconocimiento y cierre.
  • Evitar tormentas de alertas con temporizadores re-disparables y limitación de frecuencia.
  • Enviar notificaciones por Telegram ante eventos del invernadero.
  • Explorar el envío por WhatsApp y sus limitaciones.

Contenidos

  • Detección de flancos, histéresis y antirrebote con el nodo trigger.
  • Alarmas típicas del invernadero: depósito bajo, suelo seco, temperatura extrema y sensor caído.
  • Bot de Telegram: creación con @BotFather, obtención del chatId y envío de mensajes. Comandos básicos para consultar el estado desde el móvil.
  • WhatsApp: opciones disponibles (API oficial de Meta, pasarelas de terceros) y por qué es más complejo que Telegram.

Node-RED como plataforma: credenciales y secretos (tokens fuera de los flujos exportados), settings.js con adminAuth y credentialSecret.

Entregable: sistema de alertas que notifica por Telegram ante al menos una condición definida, con histéresis o antirrebote para no repetir avisos.

Sesión 7 — Agentes de IA y cierre ​

Objetivos

  • Invocar un LLM desde un flujo de Node-RED para interpretar los datos del invernadero.
  • Implementar function calling simple para que un agente consulte el estado o el histórico del sistema.
  • Integrar y verificar todas las piezas del sistema.

Contenidos

  • Qué es un sistema agéntico: modelo, herramientas y bucle de decisión.
  • Llamada a un LLM vía API desde Node-RED: prompt, contexto y respuesta estructurada.
  • Function calling: exponer 1–2 herramientas, como leer_estado o consultar_historico, que el agente puede invocar.
  • Casos de uso: resumen diario del invernadero, explicación de una alarma, asistente accesible desde el bot de Telegram.
  • Límites y riesgos: el agente propone, el sistema de control decide. Validación de acciones.

Node-RED como plataforma: modo Projects (control de versiones con git), gestión de la paleta y despliegue.

Entregable: sistema integrado del invernadero con un asistente de IA que responde consultas sobre su estado. Entrega del informe y presentación del sistema.

Evaluación ​

La evaluación se hace mediante un informe de las sesiones, que se entrega al final del módulo, y una presentación breve del sistema. No hay examen.

Para cada sesión, el informe recoge:

ApartadoContenido
ObjetivosQué se pretendía conseguir en la sesión
DesarrolloQué has construido y cómo, con las decisiones de diseño
EvidenciasCapturas del flujo y del panel, salida de debug y flow exportado (.json)
Problemas y solucionesQué falló y cómo lo resolviste
ConclusionesQué has aprendido y qué mejorarías

El informe termina con un capítulo del sistema integrado: arquitectura final, cómo encajan las piezas y una demostración de funcionamiento.

En la presentación se muestra el sistema funcionando sobre el invernadero y se explican las decisiones de diseño principales.

Recoge las evidencias durante la sesión

El informe se entrega al final, pero se escribe cada semana. Cada página de sesión indica qué evidencias debes guardar. Hacer las capturas y exportar el flujo al terminar cada práctica cuesta mucho menos que reconstruirlo en la semana 7.

Bibliografía y recursos ​

Documentación oficial

Artículos y guías de apoyo