Embedded

Установка и настройка Mosquitto MQTT-брокера

Введение

Mosquitto — один из самых популярных, легковесных и бесплатных MQTT-брокеров с открытым исходным кодом, подходящий и для локального тестирования на машине разработки, и для постоянной работы на маленьком сервере (включая тот же Raspberry Pi). В статье разберём базовую установку, настройку и проверку работы брокера перед переходом к написанию прошивки и Qt-кода в последующих статьях.

Концепция

Mosquitto работает как фоновая служба, слушающая сетевое соединение (по умолчанию порт 1883 для незащищённого соединения, 8883 — для защищённого через TLS, разбираемого в статье 318) — все клиенты (устройства и приложения) подключаются именно к этому порту брокера. Для базового тестирования Mosquitto предоставляет собственные простые консольные утилиты mosquitto_pub/mosquitto_sub, позволяющие опубликовать тестовое сообщение или подписаться на топик прямо из терминала, без необходимости писать какой-либо код — это удобно для самой первой проверки, что брокер действительно работает корректно, прежде чем переходить к интеграции с реальной прошивкой и Qt-приложением.

Пример кода: Установка и настройка Mosquitto MQTT-брокера

# Установка Mosquitto на Ubuntu/Debian
sudo apt update
sudo apt install mosquitto mosquitto-clients

# Проверка, что служба брокера запущена и работает
sudo systemctl status mosquitto
# /etc/mosquitto/mosquitto.conf — минимальная конфигурация для локальной разработки
# (НЕ для production — здесь разрешены анонимные подключения без пароля)

listener 1883
allow_anonymous true
# Базовая проверка работы брокера через две параллельные команды:

# Терминал 1 — подписка на тестовый топик, ожидание сообщений
mosquitto_sub -h localhost -t "test/topic" -v

# Терминал 2 — публикация тестового сообщения в тот же топик
mosquitto_pub -h localhost -t "test/topic" -m "Привет, MQTT!"

# Если всё настроено корректно, в первом терминале сразу появится:
# test/topic Привет, MQTT!
# Более практичная проверка с подстановочным символом, имитирующая реальный IoT-сценарий
mosquitto_sub -h localhost -t "home/+/temperature" -v

# Публикация в разные "комнаты" — оба сообщения должны быть получены подписчиком выше
mosquitto_pub -h localhost -t "home/livingroom/temperature" -m "23.5"
mosquitto_pub -h localhost -t "home/kitchen/temperature" -m "21.0"

Пояснения к коду

Минимальная конфигурация mosquitto.conf с allow_anonymous true — заведомо небезопасная настройка, разрешающая подключение любому клиенту без какой-либо аутентификации, что приемлемо только для изолированной, доверенной локальной сети на этапе разработки и обучения; production-настройка с аутентификацией и TLS разбирается отдельно в статье 318. После изменения конфигурационного файла служба должна быть перезапущена (sudo systemctl restart mosquitto) для применения новых настроек.

Двухтерминальная проверка через mosquitto_pub/mosquitto_sub — стандартный, минимальный способ убедиться, что брокер действительно функционирует и доставляет сообщения, прежде чем переходить к более сложной интеграции с кодом ESP32 или Qt — если эта простая проверка не работает (подписчик не получает опубликованное сообщение), проблема точно находится на уровне настройки самого брокера или сети, а не в коде прошивки или приложения, что существенно сужает область диагностики при возникновении проблем на более позднем этапе.

Подводные камни

  • Использование allow_anonymous true без дальнейшего ограничения доступа за пределами полностью изолированной, доверенной сети — любой, кто может достичь сетевого порта брокера (1883), сможет публиковать и подписываться на любые топики без каких-либо ограничений, включая потенциально критичные команды управления устройствами; для любого сценария, выходящего за рамки чисто локального тестирования на изолированной машине разработки, эта настройка должна быть заменена на аутентификацию (статья 318).
  • Брандмауэр операционной системы, блокирующий порт 1883 по умолчанию, особенно при попытке подключиться к брокеру с другого устройства в локальной сети (а не с той же машины, где запущен брокер) — если mosquitto_sub/mosquitto_pub с localhost работают, но устройства из сети не могут подключиться, первое, что стоит проверить — открыт ли соответствующий порт в брандмауэре машины, на которой запущен брокер.
  • Забытый перезапуск службы Mosquitto после изменения конфигурационного файла — изменения в mosquitto.conf, не подкреплённые перезапуском службы, просто не вступают в силу, и устройство продолжает работать со старой конфигурацией, что может создать ложное впечатление, что изменение настроек «не сработало», хотя реальная причина — простое отсутствие перезапуска.
  • Запуск Mosquitto на машине разработки без понимания, что для постоянной, продакшен-эксплуатации потребуется более надёжное окружение (постоянно включённый сервер или маленький одноплатный компьютер вроде Raspberry Pi, а не личный ноутбук разработчика, выключаемый на ночь) — для реального, постоянно работающего проекта мониторинга стоит сразу продумать, где физически и насколько надёжно будет работать брокер в долгосрочной перспективе, а не оставлять его привязанным к временно включённой машине разработки.