Ir al contenido

← Todas las funcionalidades

Mezclado industrial (HMI táctil)TouchBerry PiMQTTHTTPHMI / Dashboard

LEDs de estado por MQTT para una HMI táctil de máquina

La HMI más rápida de leer para un operario es un LED: verde es marcha, rojo es paro. Este ejemplo construye un dashboard táctil de Node-RED en una TouchBerry Pi donde un LED de "materiales listos" sigue un topic MQTT publicado por la línea, un widget de texto traduce los estados numéricos de la máquina, y un botón de marcha forzada publica órdenes de vuelta al broker. Está tomado de un despliegue real en una línea de mezclado industrial, donde el panel sustituyó a un cuadro de pilotos físicos.

Del payload MQTT al LED en una línea

Los PLC rara vez publican booleanos limpios — esta línea publica las cadenas "1" y "0". Un pequeño nodo function (msg.payload = msg.payload == "1") las convierte para el widget ui-led, que muestra verde para true y rojo para false. Un segundo suscriptor mapea los códigos numéricos de estado a texto legible como MIXING o ALARM, para que el operario nunca vea números en bruto.

El botón de forzado publica de vuelta

El dashboard no es de solo lectura: un botón "Forzar mezclado" publica una pequeña orden JSON (action, user, timestamp) al broker, donde el controlador de la línea la recoge y arranca el ciclo. El nodo function que protege el botón reutiliza la comprobación de sesión de administrador del flujo de autenticación, de modo que solo un supervisor con sesión iniciada puede forzar un ciclo — y la propia orden publicada documenta quién lo hizo y cuándo.

Muestra también el estado del broker

Un LED congelado es peor que ningún LED, porque miente con aplomo. Un nodo status vigila los nodos MQTT y gobierna un indicador "MQTT" adicional en la misma página: si la conexión con el broker se cae, el operario sabe al instante que las luces verdes pueden estar obsoletas. Con QoS 1 y mensajes retenidos en cada topic de estado, el panel repuebla los valores correctos en cuanto vuelve la conexión.

Un fragmento de la implementación

Tal cual del ejemplo desplegado en el TouchBerry Pi — cópialo libremente:

msg.payload = msg.payload == "1";     // "1" -> true (green), anything else -> false (red)
msg.topic = "Basic";                   // grouping inside the dashboard
return msg;


// ============================================================
// function 2: statusToText
// ------------------------------------------------------------
// Translates the machine's numeric status code into text the
// operator can read on the ui-text node.
// ============================================================
const STATUSES = {
    "0": "STOPPED",
    "1": "WAITING FOR MATERIALS",
    "2": "MIXING",
    "3": "UNLOADING",
    "9": "ALARM"
};
msg.payload = STATUSES[String(msg.payload)] || "UNKNOWN";
return msg;


// ============================================================
// function 3: forceCommand
// ------------------------------------------------------------
// The "Force mixing" button must only act if there is an active
// administrator session (see the authentication sheet) and it
// leaves a trace of who forced the cycle.
// ============================================================
const last    = global.get("lastAdminLoginDate");

El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.

Preguntas frecuentes

¿Qué dashboard uso para una HMI táctil en Node-RED?

Dashboard 2.0 (@flowfuse/node-red-dashboard) es la opción mantenida, con ui-led, ui-button y soporte multipágina que encaja bien con pantallas de HMI.

¿Puede la propia TouchBerry Pi ejecutar el broker MQTT?

Sí. Mosquitto corre sin problemas junto a Node-RED en el mismo equipo, lo que mantiene el panel funcionando aunque se caiga la red de planta.

¿Cómo evito estados de LED obsoletos tras un reinicio?

Publica los topics de estado con el flag retained, para que cada nuevo suscriptor — incluido el dashboard tras un reinicio — reciba de inmediato el último valor conocido.

Funcionalidades relacionadas