Skip to Content
IntegracionesMQTT y Sparkplug BMQTT

MQTT

MQTT es el transporte más común entre la planta y el mundo corporativo: un broker en el medio, publicadores de un lado, suscriptores del otro. El CMS habla los dos papeles, y sobre la misma conexión también habla Sparkplug B — la especificación que estandariza lo que MQTT deja abierto.

RecolecciónEntrega
MQTT puroMQTT_TOPIC_SUBSCRIBER — se suscribe a un tópicoMQTT_PUBLISH — publica en un tópico
Sparkplug BSPARKPLUG_SUBSCRIBER — se suscribe a un recorte del namespaceSPARKPLUG_CMD — envía NCMD / DCMD

Conexión

Registre un MQTT Broker en Conexiones Externas:

CampoObservación
Protocolomqtt, mqtts, ws o wss — WebSocket resuelve un broker detrás de proxy corporativo
Host y puerto1883 por defecto (u 8883 con TLS)
Usuario y contraseñaOpcionales, según el broker
TLSActiva la conexión cifrada
Prefijo del Client IDEntra al inicio del identificador de cada conexión
Sparkplug BMarca que este broker lleva un namespace spBv1.0

Use Probar conexión antes de crear la Recolección: un broker que rechaza la credencial falla aquí, con el mensaje del broker, en vez de fallar en silencio después.

El prefijo del Client ID existe por una razón práctica: los brokers desconectan clientes con IDs iguales. El CMS arma el Client ID como {prefijo}-{id de la recolección}-{timestamp}, lo que garantiza unicidad incluso con varias Recolecciones en el mismo broker y con reconexiones seguidas.

Marcar Sparkplug B en la conexión es una característica del broker, no de cada Recolección: activado, las pantallas de Recolección y Entrega pasan a ofrecer los tipos Sparkplug.

Recolección — MQTT_TOPIC_SUBSCRIBER

El CMS se suscribe a un tópico y reacciona a cada publicación. No hay programación: es orientado a evento, como el SAP IDoc y el trigger OPC UA.

CampoRol
TópicoEl filtro de suscripción. Acepta comodines de MQTT: + (un nivel) y # (el resto)
QoS0, 1 o 2, según la garantía que ofrezca el broker

Cada mensaje publicado se vuelve un mensaje en el CMS, con el payload crudo, reenviado a las interfaces de destino configuradas.

Detalles que evitan sorpresas

  • La conexión es por Recolección. Dos Recolecciones en el mismo broker abren dos conexiones, con Client IDs distintos. Eso mantiene una independiente de la otra: reconfigurar una no derriba la otra.
  • Reconexión automática cada 5 segundos, con keepalive de 15 segundos. El estado (conectado / reconectando / desconectado) aparece en la pantalla de la Recolección.
  • Los bytes nulos se eliminan del payload antes de grabar. El payload MQTT es binario, y un byte NUL en el medio haría que la base de datos rechace el registro entero.
  • El Error de Negocio se evalúa en la recepción, sobre el texto en claro, antes de cualquier cifrado de payload. Una regla de salida que coincida aquí marca el mensaje como Error Negocio ya en la llegada.

Configure la alerta Conexión Perdida (CONEXAO_MQTT_PERDIDA) para toda Recolección MQTT. Una suscripción caída es silenciosa: no genera error, simplemente dejan de llegar mensajes — el modo de falla más difícil de percibir. Ver Alertas.

Elegir el tópico

El comodín es tentador y tiene costo. fabrica/# trae todo, incluso lo que no se quiere, y cada publicación se vuelve un mensaje grabado. Prefiera el recorte más estrecho que resuelva el caso, y use el Transformador para descartar lo que no interesa solo cuando el filtro de tópico no alcance.

Cuando el origen publica varias magnitudes en tópicos hermanos (.../temp, .../presion), + en el nivel correcto suele ser mejor que #: el tópico de origen llega al Transformador en contexto.topico, y por él el script sabe qué magnitud está tratando.

Entrega — MQTT_PUBLISH

Publica el payload en un tópico del broker. Útil para devolver resultado a la planta, alimentar un supervisorio u otro consumidor de la planta.

CampoRol
TópicoAcepta {{alias}} resuelto contra el payload — incluso ruta anidada ({{equipo.id}})
QoS0 (como máximo una vez) o 1 (al menos una vez)

El tópico dinámico es lo que permite que una única Entrega publique en sensores/{{idSensor}}/comando, con el destino saliendo del propio contenido del mensaje.

Declare los alias usados en el tópico como Payload de Entrada de la Entrega. Marcados como obligatorios, un mensaje sin el campo se rechaza con un mensaje claro — en vez de publicar en un tópico con undefined en el medio.

Probar sin broker de producción

El repositorio trae un broker Mosquitto en el docker-compose.test.yml, el entorno de prueba:

docker compose -f docker-compose.test.yml up -d mosquitto

Sirve tanto para MQTT puro como para Sparkplug B — que trae además un simulador de edge node.

Sparkplug B

Si el otro lado habla Sparkplug (Ignition, HiveMQ Edge, Kepware, Cirrus Link, Opto 22), la página a continuación cubre el namespace, el ciclo de vida BIRTH/DEATH, el descubrimiento de métricas y los comandos.