Recursos

O broker foi feito como ferramenta de trabalho: tudo o que vem a seguir se configura no painel e passa a valer sem reiniciar.

Protocolo

As duas versões ao mesmo tempo

MQTT 3.1.1 e MQTT 5.0 funcionam simultaneamente na mesma porta, e clientes de qualquer uma das versões trocam mensagens livremente. O codec codifica e decodifica todos os 15 tipos de pacote e valida os limites do Variable Byte Integer, propriedades duplicadas e bits reservados.

QoS 0, 1 e 2

Handshakes completos, supressão de duplicatas no QoS 2 e reenvio das trocas inacabadas após uma reconexão. As filas offline das sessões persistentes sobrevivem à reinicialização do broker.

Retain e Last Will

Um armazenamento de mensagens retidas com limpeza por payload vazio, inclusive de ramos inteiros, além de Retain Handling 0/1/2 e Retain As Published. O testamento é enviado em todos os cenários de desconexão, inclusive com o Will Delay Interval da versão 5.

Capacidades da versão 5

Aliases de tópicos nos dois sentidos, Session Expiry, Receive Maximum e controle de fluxo, Maximum Packet Size, identificadores de assinatura, assinaturas compartilhadas via $share, No Local, Message Expiry, Payload Format Indicator com validação UTF-8, Content Type, Response Topic, Correlation Data, User Properties, códigos de motivo em cada pacote, DISCONNECT do servidor e o pacote AUTH.

Tópicos de sistema $SYS

Versão, tempo em atividade e contadores de clientes, mensagens, bytes e erros são publicados como mensagens retidas. O ramo fica fechado por padrão: curingas não alcançam tópicos $, clientes anônimos têm todo o espaço de nomes negado, e um interruptor nas configurações desliga a publicação por completo.

Painel web

Visão geral

Blocos de resumo, saúde da máquina (processador, memória e o disco do diretório de dados), gráficos ao vivo de taxa de mensagens, tráfego e conexões, tópicos ativos, escutas e um fluxo de eventos.

Clientes e tópicos

Uma tabela de sessões com ficha por cliente, além de desconectar e apagar sessões. À parte: as assinaturas ativas com todas as opções do MQTT 5.0 e o conteúdo do armazenamento de retidas.

Tráfego e publicação

Um fluxo ao vivo de mensagens e eventos do broker, com filtro e pausa. Você pode publicar uma mensagem com todas as propriedades da versão 5 direto do painel — muito útil ao depurar dispositivos.

Sete idiomas, dois temas

Russo, inglês, alemão, espanhol, francês, italiano e chinês. Os temas escuro e claro trocam na hora, e a escolha fica guardada como padrão do painel.

Ajuda embutida

Um guia com sumário dentro do próprio painel, traduzido para os sete idiomas — não é preciso caçar documentação em outro lugar.

Acesso e segurança

Dois circuitos independentes

Há um único administrador do painel, definido em config.json, e ele cuida apenas da interface web. Os dispositivos MQTT formam uma lista de contas separada, com senhas e permissões próprias. Criar um usuário MQTT com o nome do administrador é recusado.

ACLs por tópico

Uma regra é um filtro, um modo de acesso (read, write, readwrite) e uma decisão de permitir ou negar. As regras são verificadas de cima para baixo até a primeira correspondência, e tudo é negado por padrão. O curinga $u vira o nome do cliente, de modo que a regra $u/# confina cada dispositivo ao próprio ramo. A ordem se altera arrastando.

Seis fontes de credenciais

A lista interna, MySQL/MariaDB (um esquema no estilo do EMQX), SQLite, CSV com recarga do arquivo, JWT e um serviço HTTP externo. A fonte é trocada no próprio painel: primeiro verificada com o botão Testar, depois aplicada em tempo real.

Resumos, não senhas

As senhas são guardadas como PBKDF2-HMAC-SHA256 com 210 000 iterações e sal aleatório. Tokens de sessão e de API ficam guardados apenas como resumo. As fontes externas entendem plain, sha256, sha512, bcrypt e pbkdf2.

TLS desde o início

Na primeira execução é gerado um certificado autoassinado para que a porta :8883 funcione de imediato. Para produção, informe seu próprio certificado na configuração.

Regras e fluxos

Reescrita de tópicos

O nome de um tópico é substituído em tempo real: ao publicar, ao assinar ou sempre. Um filtro MQTT para uma pré-seleção barata, uma expressão regular e um modelo de destino com os grupos $1…$9. %u e %c estão disponíveis, o prefixo $share é preservado, e o UNSUBSCRIBE passa pela mesma reescrita. O painel traz uma área de testes para experimentar uma regra.

Assinatura automática

Um cliente recebe suas assinaturas logo após a conexão, sem nenhum SUBSCRIBE. Há suporte a %u e %c e a todas as opções da versão 5, e as ACLs são verificadas como de costume: uma regra proibida é ignorada em silêncio, sem derrubar a conexão.

Limites por tópico

Uma regra por padrão de tópico reduz um fluxo a uma taxa ou o descarta por completo. A redução mantém o último valor: um sensor que envia dez vezes por segundo passa a uma mensagem por segundo — a mais recente. A ficha da regra mostra quantas mensagens combinaram, passaram e foram descartadas.

Controle de enxurrada

Um balde de fichas por conexão: mensagens por segundo, rajada, bytes por segundo e rajada de bytes. Exceder não derruba a conexão nem perde mensagens: o broker faz uma pausa antes da próxima leitura do socket, o TCP fecha a janela e o emissor se contém sozinho.

Publicação adiada

O tópico $delayed/{segundos}/{tópico} fica retido no broker até vencer, de forma compatível com o EMQX. O intervalo vai de um segundo a 49 dias, a confirmação chega na hora, e a fila sobrevive a uma reinicialização e aparece no painel com contagem regressiva.

Integração

Ponte entre brokers

O broker se conecta como cliente a outro broker MQTT e encaminha tópicos nos dois sentidos. São configuráveis o endereço, as credenciais, TLS, a versão do protocolo e regras de filtro + direção + QoS + prefixos. Há proteção contra laços, reconexão automática, No Local na versão 5 e contadores no painel.

API REST

Tudo o que o painel faz está disponível com um token bearer: estatísticas, clientes, assinaturas, mensagens retidas, publicação, eventos, usuários, configurações, pontes, regras, mensagens adiadas, importação e exportação. Um token pode ser emitido somente de leitura.

Cadastro de dispositivos pelo seu sistema

POST /api/users cria um dispositivo junto com suas permissões, PATCH muda a senha ou a ACL e DELETE o remove. As mudanças valem na hora: o próprio broker derruba as conexões ativas daquele usuário para que as novas regras passem a valer de imediato.

MQTT sobre WebSocket

O subprotocolo mqtt na mesma porta do painel: clientes de navegador se conectam sem gateway à parte. A RFC 6455 é implementada sobre net/http, sem dependências.

Importar e exportar

Configurações, usuários e regras são exportados em um único arquivo e carregados de volta: mudar para outro servidor não exige repetir nada à mão.

Operação

Um arquivo, nenhuma dependência

Um binário em Go puro ligado estaticamente: sem ambiente de execução, sem libc e sem banco de dados externo. Roda no Debian e no Ubuntu sem preparativos e é compilado para amd64, arm64 e armhf.

Armazenamento SQLite

As mensagens retidas são gravadas assim que mudam, as sessões persistentes são salvas a cada dez segundos e no desligamento, e as mensagens adiadas são gravadas ao entrar na fila. O que expirou é descartado na inicialização, e uma linha state restored vai para o log.

Saúde da máquina

Carga do processador, memória usada e espaço livre no disco de dados, calculados com a biblioteca padrão, sem cgo, em implementações separadas para Linux e Windows. A barra fica âmbar acima de 75 % e vermelha acima de 90 %.

systemd e nginx

Acompanham uma unidade do systemd, uma configuração de nginx e um script de instalação idempotente: o painel escuta apenas em localhost e é publicado via nginx, enquanto as portas MQTT trabalham diretamente.

Selo de compilação

Versão, número de build e data de compilação ficam gravados no binário e aparecem no painel, na seção Sobre e com a opção -version — você sempre sabe exatamente o que está rodando.

Tudo isso, de graça

Não há limites de dispositivos, mensagens ou assinaturas.

Baixar o broker