A integração Ignition MQTT é uma das formas mais populares de montar uma arquitetura Sparkplug B: um gateway Ignition Edge publica tags, um gateway Ignition central as consome e um broker MQTT fica no meio. Neste tutorial você vai configurar os módulos MQTT Transmission e MQTT Engine com um broker externo em vez do embutido, publicar uma pasta de tags em Sparkplug B, vê-las aparecer como tags no lado consumidor e verificar os dados decodificados de forma independente. Conte com tudo funcionando em menos de uma hora.
Os módulos MQTT do Ignition
Os módulos MQTT para o Ignition são desenvolvidos pela Cirrus Link e distribuídos pela Inductive Automation. Três importam aqui:
| Módulo | Função | Local típico |
|---|---|---|
| MQTT Transmission | Publica tags do Ignition em Sparkplug B (edge node) | Ignition Edge ou um gateway de site |
| MQTT Engine | Assina Sparkplug B e cria tags no Ignition (primary host) | Gateway central ou do centro de controle |
| MQTT Distributor | Um broker MQTT rodando dentro do Ignition | Opcional; aqui substituído por um broker externo |
Usar um broker externo em vez do MQTT Distributor desacopla sua camada de mensagens do ciclo de vida do gateway Ignition. Reinicializações, atualizações e licenciamento do gateway deixam de derrubar o broker, e clientes que não são Ignition, como serviços Python, historiadores ou outros sistemas SCADA, conectam-se ao mesmo broker em pé de igualdade. Um broker MQTT na nuvem é especialmente útil quando os sites de borda não têm caminho de rede direto até o gateway central.
Pré-requisitos
- Ignition 8.1 ou mais recente: um gateway para o Transmission (a borda) e outro para o Engine (o host). Em laboratório, os dois módulos podem rodar no mesmo gateway.
- Os módulos MQTT Transmission e MQTT Engine, instalados em Config > System > Modules > Install or Upgrade a Module. Sem licença, rodam em modo de avaliação, que pode ser reiniciado.
- Um broker MQTT. Em laboratório, o servidor MQTT público em broker.connectmq.com, apenas para testes; em produção, um broker privado com credenciais.
- Acesso de saída dos dois gateways à porta TCP 1883 (testes) ou 8883 (TLS).
Passo 1: aponte o MQTT Transmission para o broker
- Na interface web do gateway Ignition, abra Config > MQTT Transmission > Settings.
- Na aba Servers, edite o servidor padrão ou crie um novo:
- Name:
connectmq - URL:
tcp://broker.connectmq.com:1883para o laboratório oussl://YOUR_BROKER_HOST:8883para produção - Username e Password: vazios para o servidor MQTT público;
YOUR_USERNAMEeYOUR_PASSWORDpara produção
- Name:
- Remova ou desabilite qualquer entrada de servidor que aponte para um MQTT Distributor local, para que o Transmission não divida o tráfego entre brokers.
- Salve. O status do servidor deve mudar para conectado em poucos segundos.
Para TLS com certificado Let's Encrypt, o trust store Java que acompanha o Ignition normalmente valida a cadeia, então em geral você não precisa enviar um arquivo de CA. Se a versão do seu módulo expõe um campo de client ID e o seu broker vincula client IDs a credenciais, informe ali o YOUR_CLIENT_ID emitido; cada conexão de módulo precisa de credenciais e client ID próprios.
Passo 2: crie as tags de borda
O MQTT Transmission publica as tags encontradas em um caminho de tags configurado, por padrão a pasta Edge Nodes do tag provider padrão. Os níveis de pasta abaixo dela correspondem aos identificadores Sparkplug:
[default]Edge Nodes/
cmqdemo-4kz9/ <- Sparkplug Group ID (único no broker público)
Line1/ <- Edge Node ID
Filler/ <- Device ID
Temperature (Float, tag de memória ou OPC)
Speed (Int4)
Running (Boolean)
Count (Int8)
No servidor MQTT público, todo topic Sparkplug começa com spBv1.0, então escolha um Group ID aleatório como cmqdemo-4kz9 para não colidir com outros usuários e use tags de memória ou de simulador em vez de valores reais de processo: tudo o que for publicado ali pode ser lido por qualquer pessoa.
Na aba Transmitters, confira se o transmitter padrão usa o tag provider default e o caminho de tags Edge Nodes, e se o Primary Host ID está definido, por exemplo IgnitionHost. Com um primary host ID definido, o edge node espera a mensagem STATE do host antes de publicar e republica os births quando o host volta a ficar online.
Passo 3: configure o MQTT Engine como primary host
- Abra Config > MQTT Engine > Settings.
- Na aba General, defina o Primary Host ID com o mesmo valor,
IgnitionHost. O Engine publicará sua mensagem STATE como retained message, o que informa aos edge nodes que há um host escutando. - Na aba Servers, adicione o mesmo broker. Em produção, use um conjunto de credenciais separado do lado Transmission: dois módulos em dois gateways são dois clientes MQTT distintos.
- Na aba Namespaces, deixe habilitado o namespace Sparkplug B padrão.
Salve e abra o Designer. No tag provider MQTT Engine você encontrará Edge Nodes/cmqdemo-4kz9/Line1/Filler com as quatro tags e seus valores. Altere Temperature no lado da borda e a tag no Engine acompanha em instantes.
Passo 4: verifique o tráfego Ignition MQTT de forma independente
Quando algo dá errado, você quer ver o ponto de vista do broker, não só o do Ignition. Os payloads Sparkplug B são codificados em Protobuf, então um assinante bruto mostra dados binários, mas os topics por si só já dizem muito:
mosquitto_sub -h broker.connectmq.com -p 1883 -i ign-watch-4kz9 \
-t 'spBv1.0/cmqdemo-4kz9/#' -t 'spBv1.0/STATE/#' -v
Você deve ver, nesta ordem: a mensagem STATE do host, o NBIRTH de Line1, o DBIRTH de Filler e depois mensagens DDATA sempre que os valores das tags mudarem. Se aparecerem births repetidos sem dados, o edge node está reconectando sem parar, geralmente por conflito de client ID.
Para decodificar os payloads no seu próprio código, siga o tutorial decodificar Sparkplug B com Python. Em um broker privado do ConnectMQ, o portal faz isso por você: o explorador de topics ao vivo decodifica Sparkplug B em métricas legíveis, e o broker pode republicar dados Sparkplug em topics no estilo ISA-95. Por exemplo, spBv1.0/factory1/DDATA/line1/cnc1 é republicado como connectmq/factory1/production/line1/cnc1/telemetry, para que dashboards e scripts que não falam Sparkplug possam assinar topics simples.
O fluxo de mensagens Sparkplug em resumo
| Mensagem | Publicada por | Finalidade | Retida |
|---|---|---|---|
| STATE | MQTT Engine (primary host) | Host online ou offline | Sim |
| NBIRTH / DBIRTH | MQTT Transmission | Lista completa de métricas com tipos e valores atuais | Não |
| NDATA / DDATA | MQTT Transmission | Apenas valores alterados | Não |
| NDEATH | Broker, como Last Will do edge node | Edge node offline | Não |
| DDEATH | MQTT Transmission | Dispositivo offline | Não |
| NCMD / DCMD | MQTT Engine | Escritas e pedidos de rebirth | Não |
Entender esta tabela resolve a maioria dos quebra-cabeças do Ignition MQTT. As tags no Engine ficam desatualizadas (stale) com um NDEATH, e um pedido de rebirth do Engine atualiza tudo depois de uma lacuna. O guia de payload Sparkplug B explica a estrutura de métricas em profundidade.
Indo para produção
Antes de conectar um site real:
- Use um broker privado com TLS. Troque as URLs para
ssl://...:8883e use credenciais emitidas para cada instância de módulo. - Escolha Group e Edge Node IDs significativos. Eles se tornam a espinha dorsal do seu namespace; alinhe-os aos nomes de site e linha, por exemplo uma planta em Campinas e suas linhas de envase.
- Ajuste o Transmission. Use bandas mortas nas tags do Ignition para que o DDATA carregue mudanças reais e considere as opções de store-and-forward do Transmission para links instáveis.
- Confira os limites do broker em relação ao seu design. O Sparkplug usa QoS 0 para dados e QoS 1 para mensagens STATE e death, além do STATE retido. Planeje a quantidade de conexões: cada instância de módulo em cada gateway é um cliente.
- Restrinja as escritas. O Engine pode escrever em tags de borda via DCMD. Decida se isso é permitido e restrinja as tags graváveis na borda.
- Monitore o host e as bordas. Gere alertas para NDEATH e para STATE offline, não só para variáveis de processo.
Se você prefere não operar brokers em cada centro de controle, o ConnectMQ como broker MQTT gerenciado cuida de certificados, atualizações e proteção contra inundação por você. Para as questões mais amplas de design de SCADA, veja MQTT em sistemas SCADA e o guia de IoT industrial com MQTT.
Solução de problemas
- O servidor aparece desconectado. Esquema de URL errado (
tcp://versusssl://), firewall na porta ou credenciais erradas. - Borda conectada, mas sem births. Primary Host ID definido no Transmission, mas o Engine não está conectado ou usa outro ID, então a borda fica esperando o STATE.
- Births se repetem a cada poucos segundos. Dois clientes compartilham um client ID, ou duas instâncias do Transmission publicam os mesmos Group e Edge Node IDs.
- As tags do Engine mostram qualidade ruim. A borda enviou NDEATH ou o host pediu um rebirth que nunca chegou. Verifique os logs do gateway de borda.
- Nada aparece no servidor MQTT público. Confira se os limites do servidor MQTT público atendem ao seu teste: 10 mensagens por segundo por cliente e 64 KB por mensagem.
Conecte o Ignition ao ConnectMQ
Dê aos seus gateways Ignition um broker MQTT gerenciado, compartilhado e sempre ativo que decodifica Sparkplug B por você. Crie um broker Serverless gratuito em app.connectmq.com, sem cartão de crédito, cole a URL e as credenciais no MQTT Transmission e no Engine e veja suas tags aparecerem no explorador de topics. Prefere experimentar antes? O servidor MQTT público (gratuito) funciona com a configuração de laboratório acima, desde que apenas com dados de teste.
Perguntas frequentes
Preciso do MQTT Distributor se uso um broker externo?
Não. Aponte o MQTT Transmission e o MQTT Engine para o broker externo e desabilite ou remova as entradas de servidor do Distributor.
O Ignition pode publicar JSON simples em vez de Sparkplug B?
O MQTT Transmission é construído em torno do Sparkplug B. Para topics JSON personalizados, a Cirrus Link oferece um módulo separado, ou você pode publicar a partir de scripts do gateway com um cliente MQTT padrão.
Por que minhas tags do MQTT Engine ficam desatualizadas?
Geralmente porque o edge node desconectou e seu NDEATH foi publicado, ou porque o host e a borda usam Primary Host IDs diferentes. Verifique o status do servidor nos dois lados.
O plano gratuito suporta Sparkplug B?
Sim. O Sparkplug precisa de QoS 0 e 1 e de retained messages, que o plano gratuito Serverless suporta, dentro dos seus limites de conexões e de tamanho de mensagem.



