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ón | Entrega | |
|---|---|---|
| MQTT puro | MQTT_TOPIC_SUBSCRIBER — se suscribe a un tópico | MQTT_PUBLISH — publica en un tópico |
| Sparkplug B | SPARKPLUG_SUBSCRIBER — se suscribe a un recorte del namespace | SPARKPLUG_CMD — envía NCMD / DCMD |
Conexión
Registre un MQTT Broker en Conexiones Externas:
| Campo | Observación |
|---|---|
| Protocolo | mqtt, mqtts, ws o wss — WebSocket resuelve un broker detrás de proxy corporativo |
| Host y puerto | 1883 por defecto (u 8883 con TLS) |
| Usuario y contraseña | Opcionales, según el broker |
| TLS | Activa la conexión cifrada |
| Prefijo del Client ID | Entra al inicio del identificador de cada conexión |
| Sparkplug B | Marca 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.
| Campo | Rol |
|---|---|
| Tópico | El filtro de suscripción. Acepta comodines de MQTT: + (un nivel) y # (el resto) |
| QoS | 0, 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
NULen 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.
| Campo | Rol |
|---|---|
| Tópico | Acepta {{alias}} resuelto contra el payload — incluso ruta anidada ({{equipo.id}}) |
| QoS | 0 (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 mosquittoSirve 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.