Automatización industrial e IoT
ELX-MQTT Broker
Un broker MQTT completo con una interfaz web viva
MQTT 3.1.1 y 5.0 escritos desde cero, sin bibliotecas de protocolo ajenas. Un único archivo que ya lleva consigo la interfaz, el almacenamiento y el TLS: se instala y funciona.
Las dos versiones del protocolo, completas
MQTT 3.1.1 y 5.0 escritos siguiendo la especificación: todas las propiedades de los paquetes, los alias de temas, las suscripciones compartidas, los identificadores de suscripción, No Local, Retain Handling, Will Delay, Message Expiry, los códigos de motivo y el paquete AUTH.
Una interfaz que muestra el tráfico
Ritmo de mensajes, ancho de banda, clientes conectados, temas activos y un flujo de sucesos — transmitidos por WebSocket, sin recargar la página. Un dispositivo que se desmadra se ve, en lugar de deducirse.
Permisos por tema
Una regla es un filtro, un tipo de acceso y un veredicto — permitir o denegar —, y todo lo que no está escrito queda denegado. Una sola línea con el comodín $u encierra a un cliente en su propia rama del árbol.
Puentes hacia otros brokers
Reenvío de temas en ambos sentidos a nivel de servidor: dirección, prefijos, TLS, protección contra bucles y reconexión automática. Unir dos instalaciones no exige ningún guion en medio.
Publicación diferida y limitadores
Publicar en $delayed/60/tema llega un minuto después y sobrevive a un reinicio. Un cubo de fichas por conexión y reglas por tema aclaran un sensor charlatán en lugar de desconectarlo.
Todo por REST
Lo que sabe hacer la interfaz lo sabe hacer también un testigo: crear dispositivos, conceder permisos, leer estadísticas. Para los sistemas de supervisión hay testigos de solo lectura.
Capturas
Qué es
ELX-MQTT Broker es un servidor de mensajes para el protocolo MQTT, el que hablan la mayoría de sensores, controladores y sistemas domóticos. Los dispositivos publican mensajes en temas, otros dispositivos se suscriben a esos temas, y el broker está en medio: decide quién puede hablar con quién y procura que por el camino no se pierda nada.
Aquí el protocolo no es una envoltura alrededor de la biblioteca de otro. Ambas versiones están escritas directamente a partir de la especificación, y por eso las partes incómodas — suscripciones compartidas, caducidad de mensajes, testamento diferido, control de flujo — se comportan como dice la especificación y no como resultó que las implementara una dependencia.
Qué sabe hacer
| Ámbito | Lo que obtiene |
|---|---|
| Protocolo | MQTT 3.1.1 y 5.0, QoS 0/1/2, mensajes retenidos, testamento, sesiones persistentes, colas para clientes ausentes |
| Transportes | TCP simple, TLS, MQTT sobre WebSocket y sobre WebSocket seguro |
| Interfaz | Gráficos en directo, lista de clientes, árbol de temas, flujo de sucesos, formulario de publicación, ajustes — en siete idiomas |
| Control de acceso | Permisos por tema, denegación por omisión, comodines por usuario, lectura y escritura separadas |
| Credenciales | Lista interna, MariaDB o MySQL, SQLite, CSV, JWT, servicio HTTP externo |
| Encaminamiento | Reglas de reescritura de temas, suscripciones automáticas, puentes entre brokers |
| Regulación del tráfico | Cubo de fichas por conexión, ritmos y descartes por patrón de tema |
| Planificación | Publicación diferida mediante $delayed, compatible con EMQX, visible y cancelable |
| Integración | API REST con testigos, testigos de solo lectura, extremos de estadística |
| Persistencia | Mensajes retenidos, sesiones, colas y mensajes diferidos en SQLite |
Ponerlo en marcha
En Linux el paquete instala un servicio systemd y lo arranca. En Windows el ejecutable funciona tal cual — ejecútelo y abra la interfaz.
sudo dpkg -i elxmqttbroker_*.deb
sudo systemctl status elxmqttbroker
# interfaz: http://<servidor>:8567 MQTT: 1883, TLS: 8883
elxmqttbroker.exe
# interfaz: http://127.0.0.1:8567
# acceso inicial: admin / admin — cámbielo al entrar la primera vez
En pocas palabras
- Protocolo
- MQTT 3.1.1 y MQTT 5.0
- Sistemas operativos
- Debian, Ubuntu, Windows 10 y 11
- Arquitecturas
- amd64, arm64, armhf
- Escrito en
- Go, sin CGO
- Almacenamiento
- SQLite, un solo archivo
- Idiomas de la interfaz
- Siete
- Puertos iniciales
- 1883, 8883, 8567
- Dependencias externas
- Ninguna