Промышленная автоматизация и IoT
ELX-MQTT Broker
Полноценный MQTT-брокер с живой веб-панелью
MQTT 3.1.1 и 5.0, написанные с нуля, без сторонних библиотек протокола. Один файл, внутри которого уже лежат панель, хранилище и TLS: поставили — работает.
Обе версии протокола, целиком
MQTT 3.1.1 и 5.0 написаны по спецификации: все свойства пакетов, псевдонимы топиков, разделяемые подписки, идентификаторы подписок, No Local, Retain Handling, Will Delay, Message Expiry, коды причин и пакет AUTH.
Панель, в которой видно трафик
Скорость сообщений, полоса, подключённые клиенты, живые топики и лента событий — потоком по WebSocket, без перезагрузки страницы. Устройство, которое сходит с ума, видно, а не вычисляется.
Права на уровне топиков
Правило — это фильтр, вид доступа и вердикт «разрешить» или «запретить», причём по умолчанию запрещено всё. Одна строка с подстановкой $u запирает клиента в его собственной ветке дерева.
Мосты к другим брокерам
Двусторонняя пересылка топиков на уровне сервера: направление, префиксы, TLS, защита от петель и переподключение. Чтобы соединить две установки, не нужен скрипт посередине.
Отложенная публикация и ограничители
Публикация в $delayed/60/topic доходит через минуту и переживает перезапуск. Ведро токенов на соединение и правила по топикам прореживают болтливый датчик вместо того, чтобы отключать его.
Всё через REST
Что умеет панель, то умеет и токен: заводить устройства, выдавать права, читать статистику. Для систем мониторинга есть токены только на чтение.
Скриншоты
Что это
ELX-MQTT Broker — сервер сообщений протокола MQTT, на котором говорит большинство датчиков, контроллеров и систем умного дома. Устройства публикуют сообщения в топики, другие устройства на эти топики подписываются, а брокер сидит посередине, решает, кому с кем можно разговаривать, и следит, чтобы по дороге ничего не потерялось.
Протокол здесь не обёртка вокруг чужой библиотеки. Обе версии написаны прямо по спецификации, поэтому неудобные её части — разделяемые подписки, срок жизни сообщения, отложенное завещание, управление потоком — ведут себя так, как написано в спецификации, а не так, как это вышло у зависимости.
Что он умеет
| Область | Что есть |
|---|---|
| Протокол | MQTT 3.1.1 и 5.0, QoS 0/1/2, сохранённые сообщения, завещание, постоянные сессии, очереди для отключившихся |
| Транспорты | Обычный TCP, TLS, MQTT поверх WebSocket и защищённого WebSocket |
| Панель | Живые графики, список клиентов, дерево топиков, лента событий, форма публикации, настройки — на семи языках |
| Права доступа | ACL по топикам, запрет по умолчанию, подстановка имени пользователя, раздельные чтение и запись |
| Учётные записи | Встроенный список, MariaDB или MySQL, SQLite, CSV, JWT, внешняя служба HTTP |
| Маршрутизация | Правила переписывания топиков, автоматические подписки, мосты между брокерами |
| Ограничение трафика | Ведро токенов на соединение, ограничения и отбрасывание по шаблонам топиков |
| Расписание | Отложенная публикация через $delayed, совместимая с EMQX, видимая и отменяемая |
| Интеграция | REST API с токенами, токены только для чтения, эндпоинты статистики |
| Хранение | Сохранённые сообщения, сессии, очереди и отложенные сообщения в SQLite |
Как запустить
На Linux пакет заводит службу systemd и запускает её. На Windows исполняемый файл работает как есть — запустите его и откройте панель.
sudo dpkg -i elxmqttbroker_*.deb
sudo systemctl status elxmqttbroker
# панель: http://<сервер>:8567 MQTT: 1883, TLS: 8883
elxmqttbroker.exe
# панель: http://127.0.0.1:8567
# вход по умолчанию: admin / admin — смените при первом входе
Коротко о главном
- Протокол
- MQTT 3.1.1 и MQTT 5.0
- Операционные системы
- Debian, Ubuntu, Windows 10 и 11
- Архитектуры
- amd64, arm64, armhf
- Написан на
- Go, без CGO
- Хранилище
- SQLite, один файл
- Языки панели
- Семь
- Порты по умолчанию
- 1883, 8883, 8567
- Внешние зависимости
- Нет
Частые вопросы
Сколько клиентов он выдержит?
Будут ли работать мои клиенты MQTT?
Можно ли перейти с Mosquitto или EMQX?
$delayed из EMQX.