Skip to Content
IntegraçõesMQTT e Sparkplug BMQTT

MQTT

MQTT é o transporte mais comum entre o chão de fábrica e o mundo corporativo: um broker no meio, publicadores de um lado, assinantes do outro. O CMS fala os dois papéis, e sobre a mesma conexão também fala Sparkplug B — a especificação que padroniza o que o MQTT deixa em aberto.

ColetaEntrega
MQTT puroMQTT_TOPIC_SUBSCRIBER — assina um tópicoMQTT_PUBLISH — publica num tópico
Sparkplug BSPARKPLUG_SUBSCRIBER — assina um recorte do namespaceSPARKPLUG_CMD — envia NCMD / DCMD

Conexão

Cadastre um MQTT Broker em Conexões Externas:

CampoObservação
Protocolomqtt, mqtts, ws ou wss — WebSocket resolve broker atrás de proxy corporativo
Host e portaPadrão 1883 (ou 8883 com TLS)
Usuário e senhaOpcionais, conforme o broker
TLSLiga a conexão cifrada
Prefixo do Client IDEntra no início do identificador de cada conexão
Sparkplug BMarca que este broker carrega um namespace spBv1.0

Use Testar conexão antes de criar a Coleta: um broker que recusa a credencial falha aqui, com a mensagem do broker, em vez de falhar em silêncio depois.

O prefixo do Client ID existe por uma razão prática: brokers desconectam clientes com IDs iguais. O CMS monta o Client ID como {prefixo}-{id da coleta}-{timestamp}, o que garante unicidade mesmo com várias Coletas no mesmo broker e com reconexões seguidas.

Marcar Sparkplug B na conexão é uma característica do broker, não de cada Coleta: ligado, as telas de Coleta e Entrega passam a oferecer os tipos Sparkplug.

Coleta — MQTT_TOPIC_SUBSCRIBER

O CMS assina um tópico e reage a cada publicação. Não há agendamento: é orientado a evento, como o SAP IDoc e o trigger OPC UA.

CampoPapel
TópicoO filtro de assinatura. Aceita curingas do MQTT: + (um nível) e # (o resto)
QoS0, 1 ou 2, conforme a garantia que o broker oferece

Cada mensagem publicada vira uma mensagem no CMS, com o payload cru, encaminhada para as interfaces de destino configuradas.

Detalhes que evitam surpresa

  • A conexão é por Coleta. Duas Coletas no mesmo broker abrem duas conexões, com Client IDs distintos. Isso mantém uma independente da outra: reconfigurar uma não derruba a outra.
  • Reconexão automática a cada 5 segundos, com keepalive de 15 segundos. O estado (conectado / reconectando / desconectado) aparece na tela da Coleta.
  • Bytes nulos são removidos do payload antes de gravar. Payload MQTT é binário, e um byte NUL no meio faria o banco recusar o registro inteiro.
  • Erro de Negócio é avaliado no recebimento, sobre o texto em claro, antes de qualquer criptografia de payload. Uma regra de saída que case aqui marca a mensagem como Erro Negócio já na chegada.

Configure o alerta Conexão Perdida (CONEXAO_MQTT_PERDIDA) para toda Coleta MQTT. Uma assinatura caída é silenciosa: não gera erro, apenas para de chegar mensagem — o modo de falha mais difícil de perceber. Ver Alertas.

Escolher o tópico

O curinga é tentador e tem custo. fabrica/# traz tudo, inclusive o que você não quer, e cada publicação vira uma mensagem gravada. Prefira o recorte mais estreito que resolva o caso, e use o Transformador para descartar o que não interessa só quando o filtro de tópico não der conta.

Quando a origem publica várias grandezas em tópicos irmãos (.../temp, .../pressao), + no nível certo costuma ser melhor que #: o tópico de origem chega ao Transformador em contexto.topico, e é por ele que o script sabe qual grandeza está tratando.

Entrega — MQTT_PUBLISH

Publica o payload num tópico do broker. Útil para devolver resultado ao chão de fábrica, alimentar um supervisório ou outro consumidor da planta.

CampoPapel
TópicoAceita {{alias}} resolvido contra o payload — inclusive caminho aninhado ({{equipamento.id}})
QoS0 (no máximo uma vez) ou 1 (pelo menos uma vez)

O tópico dinâmico é o que permite uma única Entrega publicar em sensores/{{idSensor}}/comando, com o destino saindo do próprio conteúdo da mensagem.

Declare os aliases usados no tópico como Payload de Entrada da Entrega. Marcados como obrigatórios, uma mensagem sem o campo é recusada com mensagem clara — em vez de publicar num tópico com undefined no meio.

Testar sem broker de produção

O repositório traz um broker Mosquitto no docker-compose.test.yml, o ambiente de teste:

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

Ele serve tanto para MQTT puro quanto para Sparkplug B — que traz também um simulador de edge node.

Sparkplug B

Se o outro lado fala Sparkplug (Ignition, HiveMQ Edge, Kepware, Cirrus Link, Opto 22), a página a seguir cobre o namespace, o ciclo de vida BIRTH/DEATH, a descoberta de métricas e os comandos.