IoT industrial

Ignition MQTT: conectar los módulos Transmission y Engine a un broker

Configura los módulos MQTT Transmission y MQTT Engine de Ignition con un broker externo, publica tags como Sparkplug B, consúmelos de vuelta como tags de Ignition y verifica los payloads decodificados en el portal de un broker.

Gateways de Ignition en el borde y en el centro de control intercambiando tags Sparkplug B a través de un broker en la nube, ilustrando Ignition MQTT
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

La integración Ignition MQTT es una de las formas más populares de construir una arquitectura Sparkplug B: un gateway Ignition Edge publica tags, un gateway Ignition central los consume y un broker MQTT se sitúa en medio. En este tutorial configurarás los módulos MQTT Transmission y MQTT Engine con un broker externo en lugar del integrado, publicarás una carpeta de tags como Sparkplug B, verás cómo aparecen como tags en el lado consumidor y verificarás los datos decodificados de forma independiente. Cuenta con tenerlo funcionando en menos de una hora.

Los módulos MQTT de Ignition

Los módulos MQTT para Ignition los desarrolla Cirrus Link y los distribuye Inductive Automation. Aquí importan tres:

Módulo Función Ubicación típica
MQTT Transmission Publica tags de Ignition como Sparkplug B (edge node) Ignition Edge o un gateway de planta
MQTT Engine Se suscribe a Sparkplug B y crea tags de Ignition (primary host) Gateway central o del centro de control
MQTT Distributor Un broker MQTT que se ejecuta dentro de Ignition Opcional; aquí se sustituye por un broker externo

Usar un broker externo en lugar de MQTT Distributor desacopla tu capa de mensajería del ciclo de vida del gateway de Ignition. Los reinicios, actualizaciones y licencias del gateway dejan de tumbar el broker, y los clientes que no son Ignition, como servicios en Python, historiadores u otros sistemas SCADA, se conectan al mismo broker en igualdad de condiciones. Un broker MQTT en la nube resulta especialmente útil cuando las plantas remotas no tienen una ruta de red directa hasta el gateway central.

Requisitos previos

  • Ignition 8.1 o posterior: un gateway para Transmission (el borde) y otro para Engine (el host). En un laboratorio, ambos módulos pueden ejecutarse en el mismo gateway.
  • Los módulos MQTT Transmission y MQTT Engine, instalados mediante Config > System > Modules > Install or Upgrade a Module. Sin licencia funcionan en modo de prueba, que se puede reiniciar.
  • Un broker MQTT. Para el laboratorio, el servidor MQTT público gratuito en broker.connectmq.com (solo para pruebas y prototipos, nunca para datos de producción); para producción, un broker privado con credenciales.
  • Acceso saliente desde ambos gateways al TCP 1883 (pruebas) o al 8883 (TLS).

Paso 1: apuntar MQTT Transmission al broker

  1. En la interfaz web del gateway de Ignition, abre Config > MQTT Transmission > Settings.
  2. En la pestaña Servers, edita el servidor por defecto o crea uno nuevo:
    • Name: connectmq
    • URL: tcp://broker.connectmq.com:1883 para el laboratorio, o ssl://YOUR_BROKER_HOST:8883 para producción
    • Username y Password: vacíos para el servidor público; YOUR_USERNAME y YOUR_PASSWORD para producción
  3. Elimina o desactiva cualquier entrada de servidor que apunte a un MQTT Distributor local, para que Transmission no reparta el tráfico entre brokers.
  4. Guarda. El estado del servidor debería pasar a conectado en pocos segundos.

Para TLS con un certificado de Let's Encrypt, el almacén de confianza de Java incluido con Ignition suele validar la cadena, así que normalmente no necesitas subir ningún archivo de CA. Si tu versión del módulo muestra un campo de client ID y tu broker vincula los client ID a las credenciales, introduce ahí el YOUR_CLIENT_ID emitido; cada conexión de módulo necesita sus propias credenciales y su propio client ID.

Paso 2: crear los tags del borde

MQTT Transmission publica los tags que encuentra bajo una ruta de tags configurada, por defecto la carpeta Edge Nodes del proveedor de tags por defecto. Los niveles de carpeta por debajo se corresponden con identificadores Sparkplug:

[default]Edge Nodes/
  cmqdemo-4kz9/            <- Sparkplug Group ID (unique on the public broker)
    Line1/                 <- Edge Node ID
      Filler/              <- Device ID
        Temperature        (Float, memory or OPC tag)
        Speed              (Int4)
        Running            (Boolean)
        Count              (Int8)

En el servidor público, todos los topics Sparkplug empiezan por spBv1.0, así que elige un Group ID aleatorio como cmqdemo-4kz9 para no colisionar con otros usuarios, y usa tags de memoria o de simulador en lugar de valores de proceso reales: todo lo que se publica ahí lo puede leer cualquiera.

En la pestaña Transmitters, comprueba que el transmisor por defecto usa el proveedor de tags default y la ruta Edge Nodes, y que está configurado el Primary Host ID, por ejemplo IgnitionHost. Con un primary host ID configurado, el edge node espera el mensaje STATE del host antes de publicar y vuelve a publicar los births cuando el host vuelve a estar en línea.

Paso 3: configurar MQTT Engine como primary host

  1. Abre Config > MQTT Engine > Settings.
  2. En la pestaña General, fija Primary Host ID con el mismo valor, IgnitionHost. Engine publicará su mensaje STATE como retained, lo que indica a los edge nodes que hay un host escuchando.
  3. En la pestaña Servers, añade el mismo broker. En producción, usa un juego de credenciales distinto del de Transmission: dos módulos en dos gateways son dos clientes MQTT diferentes.
  4. En la pestaña Namespaces, deja activado el namespace Sparkplug B por defecto.

Guarda y abre el Designer. Bajo el proveedor de tags MQTT Engine encontrarás Edge Nodes/cmqdemo-4kz9/Line1/Filler con los cuatro tags y sus valores. Cambia Temperature en el lado del borde y el tag de Engine lo seguirá al momento.

Paso 4: verificar el tráfico Ignition MQTT de forma independiente

Cuando algo falla, quieres ver la perspectiva del broker, no solo la de Ignition. Los payloads Sparkplug B están codificados en Protobuf, así que un suscriptor en bruto muestra datos binarios, pero los topics por sí solos dicen mucho:

mosquitto_sub -h broker.connectmq.com -p 1883 -i ign-watch-4kz9 \
  -t 'spBv1.0/cmqdemo-4kz9/#' -t 'spBv1.0/STATE/#' -v

Deberías ver, por este orden: el mensaje STATE del host, NBIRTH para Line1, DBIRTH para Filler y después mensajes DDATA cada vez que cambian los valores de los tags. Si ves births repetidos sin datos, el edge node se está reconectando una y otra vez, normalmente por un conflicto de client ID.

Para decodificar payloads en tu propio código, sigue el tutorial decodificar Sparkplug B con Python. En un broker privado de ConnectMQ, el portal lo hace por ti: el explorador de topics en vivo decodifica Sparkplug B en métricas legibles, y el broker puede republicar los datos Sparkplug en topics de estilo ISA-95. Por ejemplo, spBv1.0/factory1/DDATA/line1/cnc1 se republica como connectmq/factory1/production/line1/cnc1/telemetry, de modo que los dashboards y scripts que no hablan Sparkplug pueden suscribirse a topics normales.

El flujo de mensajes Sparkplug de un vistazo

Mensaje Lo publica Propósito Retained
STATE MQTT Engine (primary host) Host conectado o desconectado Sí
NBIRTH / DBIRTH MQTT Transmission Lista completa de métricas con tipos y valores actuales No
NDATA / DDATA MQTT Transmission Solo los valores modificados No
NDEATH El broker, como Last Will del edge node Edge node desconectado No
DDEATH MQTT Transmission Dispositivo desconectado No
NCMD / DCMD MQTT Engine Escrituras y peticiones de rebirth No

Entender esta tabla resuelve la mayoría de los enigmas de Ignition MQTT. Los tags de Engine quedan obsoletos ante un NDEATH, y una petición de rebirth desde Engine lo refresca todo tras un hueco. La guía del payload Sparkplug B explica en profundidad la estructura de las métricas.

Paso a producción

Antes de conectar una planta real:

  1. Usa un broker privado con TLS. Cambia las URL a ssl://...:8883 y usa credenciales emitidas para cada instancia de módulo.
  2. Elige Group ID y Edge Node ID significativos. Se convierten en la columna vertebral de tu namespace; alinéalos con los nombres de plantas y líneas.
  3. Ajusta Transmission. Usa bandas muertas en los tags de Ignition para que DDATA transporte cambios reales, y considera las opciones de store-and-forward de Transmission para enlaces poco fiables.
  4. Contrasta los límites del broker con tu diseño. Sparkplug usa QoS 0 para los datos y QoS 1 para STATE y los mensajes de death, además de STATE retained. Planifica el número de conexiones: cada instancia de módulo en cada gateway es un cliente.
  5. Restringe las escrituras. Engine puede escribir en tags del borde mediante DCMD. Decide si se permite y limita los tags escribibles en el borde.
  6. Monitoriza el host y los bordes. Genera alertas ante NDEATH y cuando STATE pase a offline, no solo ante valores de proceso.

Si prefieres no gestionar brokers en cada centro de control, ConnectMQ como broker MQTT gestionado se encarga por ti de los certificados, las actualizaciones y la protección contra avalanchas de mensajes. Para las cuestiones de diseño SCADA más amplias, consulta MQTT en sistemas SCADA y la guía de IoT industrial con MQTT.

Solución de problemas

  • El servidor aparece desconectado. Esquema de URL incorrecto (tcp:// frente a ssl://), firewall en el puerto o credenciales incorrectas.
  • El borde está conectado pero no hay births. Primary Host ID configurado en Transmission, pero Engine no está conectado o usa otro ID, así que el borde espera el STATE.
  • Los births se repiten cada pocos segundos. Dos clientes comparten client ID, o dos instancias de Transmission publican los mismos Group ID y Edge Node ID.
  • Los tags de Engine muestran calidad mala. El borde envió un NDEATH o el host solicitó un rebirth que nunca llegó. Revisa los logs del gateway del borde.
  • No aparece nada en el servidor público. Comprueba que tu prueba encaja en los límites del servidor público: 10 mensajes por segundo por cliente y 64 KB por mensaje.

Conecta Ignition a ConnectMQ

Dale a tus gateways de Ignition un broker compartido y siempre disponible que decodifica Sparkplug B por ti. Crea un broker Serverless gratuito en app.connectmq.com, sin tarjeta de crédito, pega la URL y las credenciales en MQTT Transmission y Engine, y observa cómo aparecen tus tags en el explorador de topics. ¿Prefieres experimentar primero? El servidor MQTT público gratuito en broker.connectmq.com funciona con la configuración de laboratorio anterior.

Preguntas frecuentes

¿Necesito MQTT Distributor si uso un broker externo?

No. Apunta MQTT Transmission y MQTT Engine al broker externo y desactiva o elimina las entradas de servidor del Distributor.

¿Puede Ignition publicar JSON simple en lugar de Sparkplug B?

MQTT Transmission está construido en torno a Sparkplug B. Para topics JSON personalizados, Cirrus Link ofrece un módulo aparte, o puedes publicar desde scripts del gateway con un cliente MQTT estándar.

¿Por qué mis tags de MQTT Engine quedan obsoletos?

Normalmente porque el edge node se desconectó y se publicó su NDEATH, o porque el host y el borde usan Primary Host ID distintos. Revisa el estado del servidor en ambos lados.

¿Admite el plan gratuito Sparkplug B?

Sí. Sparkplug necesita QoS 0 y 1 y retained messages, que el plan Serverless gratuito admite, dentro de sus límites de conexiones y de tamaño de mensaje.

Artículos relacionados

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.