Um sistema andon digital transforma a clássica cordinha ou lâmpada em um pedido de ajuda rastreado e com escalonamento, que chega à pessoa certa e deixa um registro de quão rápido a linha recebeu apoio. Este artigo projeta um sistema assim sobre MQTT: como operadores e máquinas abrem chamados, como os estados dos chamados são modelados com retained messages, como funciona o escalonamento por tempo e como as violações de tempo de resposta viram alertas e KPIs.
O que um andon precisa fazer
O princípio lean por trás do andon é simples: quando surge um problema, pare e peça ajuda imediatamente, e torne o pedido visível para que a ajuda venha rápido. Um andon de papel e lâmpada cuida da parte visível. Um sistema andon digital acrescenta o que as lâmpadas não conseguem:
- Encaminhamento: um chamado de material vai para a logística, um chamado de qualidade para o engenheiro de qualidade, uma falha de máquina para a manutenção.
- Escalonamento: se ninguém reconhecer o chamado em um tempo definido, ele vai para o próximo nível, como o líder de equipe e depois o gerente de turno.
- Medição: tempo até o reconhecimento e tempo até a resolução por tipo de chamado, estação e turno.
- Visibilidade em todo lugar: painéis de linha, tablets dos supervisores, a oficina de manutenção e celulares mostram os mesmos chamados abertos.
Tipos de chamado e ciclo de vida
Comece com uma lista curta de tipos de chamado que correspondam às suas funções de apoio:
| Tipo de chamado | Aberto por | Responsável | Primeiro escalonamento típico |
|---|---|---|---|
| Material | Operador | Logística / abastecedor | Líder de logística |
| Manutenção | Operador ou falha de máquina | Técnico de manutenção | Supervisor de manutenção |
| Qualidade | Operador ou estação de inspeção | Técnico de qualidade | Engenheiro de qualidade |
| Ajuda / líder de equipe | Operador | Líder de equipe | Gerente de turno |
| Segurança | Operador | Gerente de turno | Gerência da planta |
Cada chamado passa pelo mesmo ciclo de vida: aberto (chamado feito), reconhecido (alguém está a caminho), resolvido (problema corrigido, linha rodando), com um estado opcional cancelado para chamados feitos por engano. O nível de escalonamento aumenta enquanto um chamado permanece aberto ou reconhecido por tempo demais.
Projetando o sistema andon digital sobre MQTT
O MQTT combina bem com o andon porque cada participante é um client leve: botões, gateways de máquina, painéis, celulares e o serviço de escalonamento. O broker distribui cada mudança a todos que precisam dela. Se o conceito é novo para você, comece por o que um broker MQTT faz.
Estrutura de topics
connectmq/plant1/assembly/line1/st-30/andon/material retained: current call state for this type
connectmq/plant1/assembly/line1/st-30/andon/maintenance retained
connectmq/plant1/assembly/line1/st-30/andon/events not retained: every transition
connectmq/plant1/assembly/line1/andon/summary retained: open calls on the line
Um topic retido por estação e tipo de chamado significa que um painel ligado no meio do turno mostra imediatamente todos os chamados abertos. Um payload vazio ou resolved significa que não há chamado ativo.
Payload do chamado
{
"id": "st30-mat-1760600000",
"type": "material",
"state": "open",
"level": 0,
"opened": 1760600000,
"acknowledged": null,
"resolved": null,
"by": "operator-panel-st30",
"note": "Screws M4x10"
}
Timestamps para cada transição tornam trivial o cálculo posterior dos tempos de resposta, e level diz aos painéis como colorir o chamado.
Abrindo, reconhecendo e resolvendo chamados
As fontes de chamados publicam o estado retido. Os botões do operador podem ser placas ESP32 com grandes botões iluminados, uma tela de IHM ou um aplicativo web em tablet; as máquinas abrem chamados de manutenção automaticamente a partir dos estados de falha do monitoramento de status de máquinas. Os exemplos abaixo simulam as três etapas a partir de um terminal no servidor MQTT público, que serve para testes e protótipos, não para dados de produção:
T=connectmq/demo/andon-6h4v/line1/st-30/andon/material
OPENED=$(date +%s)
# O operador abre um chamado
mosquitto_pub -h broker.connectmq.com -p 1883 -i andon-op-$RANDOM -q 1 -r -t $T \
-m "{\"id\":\"st30-mat-1\",\"type\":\"material\",\"state\":\"open\",\"level\":0,\"opened\":$OPENED}"
# O abastecedor reconhece
mosquitto_pub -h broker.connectmq.com -p 1883 -i andon-ack-$RANDOM -q 1 -r -t $T \
-m "{\"id\":\"st30-mat-1\",\"type\":\"material\",\"state\":\"acknowledged\",\"level\":0,\"opened\":$OPENED,\"acknowledged\":$(date +%s)}"
# Chamado resolvido
mosquitto_pub -h broker.connectmq.com -p 1883 -i andon-res-$RANDOM -q 1 -r -t $T \
-m "{\"id\":\"st30-mat-1\",\"type\":\"material\",\"state\":\"resolved\",\"opened\":$OPENED,\"resolved\":$(date +%s)}"
Um aplicativo real de quem atende lê o chamado retido, atualiza os campos e republica o objeto completo. Como o topic é por estação e tipo, chamados simultâneos de tipos diferentes nunca se sobrescrevem.
O serviço de escalonamento
O escalonamento é um pequeno serviço que assina todos os topics de andon, acompanha os chamados abertos, aumenta o nível quando os limites de tempo passam e publica a duração em aberto para que os alertas possam disparar. Aqui está ele com MQTT.js e MQTT 5:
// andon-escalation.mjs - npm install mqtt
import mqtt from "mqtt";
const prefix = "connectmq/demo/andon-6h4v/line1";
const limits = { // segundos até o próximo nível, por tipo de chamado
material: [180, 600, 1200],
maintenance: [300, 900, 1800],
quality: [300, 900],
help: [120, 600],
safety: [0, 60],
};
const client = mqtt.connect("mqtts://broker.connectmq.com:8883", {
clientId: "andon-esc-6h4v",
protocolVersion: 5,
});
const calls = new Map(); // topic -> objeto do chamado
client.on("connect", () => client.subscribe(`${prefix}/+/andon/+`, { qos: 1 }));
client.on("message", (topic, buf) => {
if (topic.endsWith("/events")) return;
const text = buf.toString();
if (!text) { calls.delete(topic); return; }
const call = JSON.parse(text);
if (call.state === "resolved" || call.state === "cancelled") {
if (!calls.delete(topic)) return; // ignora resoluções retidas antigas
const station = topic.split("/").at(-3);
client.publish(topic.replace(/[^/]+$/, "events"), JSON.stringify({ ...call, station }), { qos: 1 });
} else {
calls.set(topic, call);
}
publishSummary();
});
function publishSummary() {
const open = [...calls.entries()].map(([t, c]) => ({
station: t.split("/").at(-3), type: c.type, state: c.state, level: c.level ?? 0,
open_s: Math.round(Date.now() / 1000 - c.opened),
}));
const maxOpen = open.reduce((m, c) => Math.max(m, c.open_s), 0);
client.publish(`${prefix}/andon/summary`,
JSON.stringify({ ts: Math.round(Date.now() / 1000), open_calls: open.length, max_open_s: maxOpen, calls: open }),
{ qos: 1, retain: true });
}
setInterval(() => {
const now = Date.now() / 1000;
for (const [topic, call] of calls) {
const steps = limits[call.type] ?? [300];
const age = now - call.opened;
const level = steps.filter((s) => age >= s).length;
if (level > (call.level ?? 0)) {
call.level = level;
client.publish(topic, JSON.stringify(call), { qos: 1, retain: true });
console.log(`escalated ${call.type} at ${topic} to level ${level}`);
}
}
publishSummary();
}, 10_000);
O serviço republica o chamado retido com um level mais alto, para que todos os painéis mudem de cor ao mesmo tempo, e publica um resumo retido da linha com max_open_s, a idade do chamado aberto mais antigo. Os chamados resolvidos são copiados para o topic events, onde um historiador os coleta para relatórios. Quando chega uma mensagem de resolução, o serviço para de acompanhar o chamado para que o resumo volte ao normal, e ele ignora resoluções retidas antigas recebidas após uma reinicialização.
Execute-o perto da linha ou na nuvem; ele só precisa de acesso de rede ao broker. Para redundância, duas instâncias podem dividir o trabalho usando shared subscriptions do MQTT 5, disponíveis nos planos Serverless pago e superiores da ConnectMQ.
Alertas de tempo de resposta
O topic de resumo facilita a detecção de violações de tempo de resposta sem mais código. No portal da ConnectMQ, crie uma regra de alerta por limite no campo max_open_s de .../andon/summary, por exemplo "maior que 900", e cada violação vai para o log de alertas com seu horário e valor. Os supervisores podem revisar o log no fim de cada turno. Para enviar notificações para celulares, chat ou uma sirene, conecte o Node-RED ou outro pequeno assinante ao broker e encaminhe os eventos; o guia de alertas por limite com MQTT mostra esse padrão.
Painéis
Os painéis andon são simplesmente assinantes. Um navegador em uma tela fixada na parede se conecta via WebSocket seguro (wss://broker.connectmq.com:8084/mqtt), assina os topics de andon da linha e o resumo e desenha as estações como blocos: verde sem chamado, amarelo para chamado aberto, laranja para reconhecido, vermelho quando escalonado. Como todos os estados são retidos, um painel que reinicia recupera o quadro completo em um segundo. Os mesmos dados podem ser um painel de um dashboard de monitoramento de linha de produção mais amplo.
KPIs de andon que vale a pena acompanhar
| KPI | Cálculo | Uso |
|---|---|---|
| Chamados por turno por tipo | Contagem de eventos resolvidos | Revela problemas crônicos de material ou qualidade |
| Tempo médio até o reconhecimento | reconhecido menos aberto | Mede a disponibilidade do apoio |
| Tempo médio até a resolução | resolvido menos aberto | Mede o impacto na linha |
| Taxa de escalonamento | Chamados que chegam ao nível 1 ou acima divididos por todos os chamados | Mostra se os limites e o quadro de pessoal condizem com a realidade |
| Estações com mais tempo de andon | Soma do tempo em aberto por estação | Direciona o trabalho de melhoria |
Vincule os eventos de andon aos códigos de motivo de parada para que o tempo em que uma estação esperou material seja classificado de forma consistente nas perdas de disponibilidade.
Checklist de implantação
- Combine tipos de chamado, responsáveis e tempos de escalonamento com produção, logística, manutenção e qualidade.
- Faça um piloto em uma linha com botões simples e um painel.
- Facilite o reconhecimento: um único toque no celular ou um botão no local de quem atende.
- Revise os KPIs semanalmente e ajuste os tempos de escalonamento para metas realistas.
- Expanda para outras linhas com a mesma estrutura de topics; painéis e serviços funcionam sem alterações.
Infraestrutura para um andon em toda a planta
Um andon que fica mudo corrói a confiança rapidamente, então o broker precisa estar disponível em todos os turnos. Um broker MQTT gerenciado tira a manutenção de servidores do caminho, e um broker MQTT na nuvem permite que os supervisores recebam chamados em dispositivos móveis fora da rede da planta sem abrir portas no firewall. Para o contexto mais amplo, veja o guia de manufatura inteligente.
Construa seu andon na ConnectMQ
A ConnectMQ oferece MQTT 5 sobre TLS e WebSocket seguro, retained messages, explorador de topics ao vivo, regras de alerta por limite com log de alertas e uma visão de dispositivos ISA-95. Crie um broker Serverless gratuito, sem cartão de crédito, e faça o piloto do seu sistema andon digital em uma linha ainda esta semana.
Perguntas frequentes
O que é um sistema andon digital?
É uma versão eletrônica do andon lean que permite que operadores e máquinas abram pedidos de ajuda, encaminha-os aos responsáveis certos, escala-os quando não são atendidos e registra os tempos de resposta e de resolução.
Por que usar MQTT para andon?
O MQTT entrega mudanças de estado instantaneamente a cada painel, celular e serviço, funciona tanto com botões de baixo consumo quanto com navegadores, e as retained messages permitem que qualquer tela recupere os chamados abertos atuais logo após ligar.
Como funciona o escalonamento sem um motor de regras no broker?
Um pequeno serviço assina os topics de chamados, compara a idade de cada chamado com os limites de escalonamento e republica os chamados com um nível mais alto. Os alertas por limite da ConnectMQ registram então as violações do limite geral de tempo de resposta.
Os chamados andon podem ser abertos automaticamente pelas máquinas?
Sim. Um gateway de borda que monitora falhas de máquina pode publicar um chamado de manutenção no topic de andon da estação quando uma máquina para, usando o mesmo payload de um chamado manual.



