1. Origen: Tuberías en el Desierto
A finales de los 90, IBM necesitaba monitorizar oleoductos en zonas remotas a través de conexiones satelitales lentísimas, carísimas y que se cortaban constantemente. Los protocolos tradicionales como HTTP o Modbus eran demasiado "pesados" (enviaban demasiadas cabeceras inútiles). Para solucionar esto, inventaron MQTT (Message Queuing Telemetry Transport).
Hoy en día, MQTT es el protocolo rey del Internet de las Cosas (IoT) y la Industria 4.0 debido a su extrema ligereza. Su cabecera mínima es de tan solo 2 bytes, lo que lo hace ideal para dispositivos con poca batería y redes inestables.
2. Cambio de Paradigma: Adiós al Polling, Hola Pub/Sub
En protocolos clásicos (Modbus, HTTP), el cliente tiene que preguntar sin parar: "¿Ha cambiado la temperatura? ¿Ha cambiado la temperatura?" (Polling). Esto satura la red. MQTT rompe con esto utilizando una arquitectura de Publicación y Suscripción (Pub/Sub) basada en un intermediario central llamado Broker.
- El Broker: Es el servidor central (ej. Eclipse Mosquitto). Ningún sensor habla directamente con el SCADA. Todos hablan con el Broker.
- Publishers (Publicadores): Los sensores o PLCs. Cuando cambia la temperatura, el sensor "publica" (envía) el nuevo dato al Broker y se olvida.
- Subscribers (Suscriptores): Los sistemas SCADA, ERPs o BBDD. Se "suscriben" al Broker para recibir datos específicos. Cuando el Broker recibe un dato de un publicador, se lo empuja (Push) inmediatamente a todos los suscriptores interesados.
3. El Enrutamiento: Temas (Topics)
¿Cómo sabe el Broker a quién enviar la información? Utilizando Topics (Temas). Un Topic no es más que una cadena de texto jerárquica, separada por barras (como las carpetas de tu ordenador).
Por ejemplo, un PLC publica un dato en el Topic: fabrica/linea1/hornoA/temperatura.
El poder de los Topics radica en el uso de "Wildcards" (comodines) para la suscripción:
- El comodín '+' (Un nivel): Si el SCADA se suscribe a
fabrica/linea1/+/temperatura, recibirá la temperatura del hornoA, del hornoB y de cualquier otra máquina en la linea1, pero no de la linea2. - El comodín '#' (Multinivel): Si el ERP se suscribe a
fabrica/linea1/#, recibirá absolutamente todo el tráfico (temperaturas, alarmas, velocidades) que cuelgue de esa línea.
4. Calidad de Servicio (QoS) y Última Voluntad (LWT)
Como MQTT nació para redes inestables, un técnico de UF1794 dispone de tres niveles de QoS (Quality of Service) para garantizar la entrega de datos:
- QoS 0 (At most once): El publicador envía el mensaje una vez y no espera confirmación. (Rápido, pero puede perderse).
- QoS 1 (At least once): El publicador envía el mensaje y espera un "Acuse de recibo" (PUBACK) del Broker. Si no llega, lo reenvía. Garantiza la entrega, pero podría llegar duplicado.
- QoS 2 (Exactly once): Usa un "apretón de manos" de 4 pasos para garantizar que el mensaje llega de forma segura y sin duplicados. (Más lento, ideal para comandos financieros).
LWT (Last Will and Testament): Es una genialidad para el diagnóstico. Cuando un sensor se conecta al Broker, le deja un "testamento" (ej. "Sensor Desconectado"). Si el sensor pierde la cobertura de red o se apaga bruscamente, el Broker publicará inmediatamente ese testamento a todos los suscriptores, permitiendo al SCADA mostrar una alarma de "Pérdida de Comunicación" al instante.
Fuente: Elaboración propia / Licencia: CC BY-NC 4.0.
📝 Evaluación Técnica: Domina el IIoT con MQTT
1. ¿Qué ventaja principal ofrece la arquitectura "Publicación/Suscripción" (Pub/Sub) de MQTT frente a los protocolos tradicionales de "Polling" (pregunta-respuesta) como Modbus TCP?
2. Un analista de datos quiere recibir en su ordenador todas las alarmas de los motores de todas las líneas de producción de la fábrica. Si los PLCs publican en topics con esta estructura: fabrica/lineaX/motorY/estado, ¿A qué topic debería suscribirse usando un "Wildcard" (comodín)?
3. Se necesita enviar la "Cuenta de Piezas Totales Diarias" desde la fábrica a la nube del ERP para facturar. Si un paquete se pierde, la facturación será incorrecta. Si se duplica, se facturará el doble. ¿Qué Nivel de Calidad de Servicio (QoS) de MQTT es obligatorio usar aquí?
🤖 Ejercicio Práctico 8: Cliente Publicador MQTT (Python)
Objetivo: Crear un dispositivo IoT virtual (Publisher) que se conecte a un Broker y envíe telemetría estructurada usando Topics.
Copia el siguiente *prompt* y pégalo en un modelo de IA (como ChatGPT, Gemini o Claude).