Установка MQTT-брокера Mosquitto на Raspberry Pi

В этом руководстве показано, как установить брокер Mosquitto для MQTT-коммуникации на плату Raspberry Pi.

Установка MQTT-брокера Mosquitto на Raspberry Pi

Вы также можете запустить MQTT-брокер Mosquitto в облаке. Запуск MQTT-брокера Mosquitto в облаке позволяет подключать несколько плат ESP32/ESP8266 и других IoT-устройств откуда угодно, используя различные сети, при условии наличия подключения к Интернету. Ознакомьтесь с руководством ниже:

Что такое MQTT-брокер?

MQTT расшифровывается как M essage Q ueuing T elemetry T ransport. MQTT — это простой протокол обмена сообщениями, разработанный для устройств с ограниченными ресурсами и низкой пропускной способностью. Поэтому это идеальное решение для обмена данными между несколькими IoT-устройствами.

MQTT-коммуникация работает по принципу публикации и подписки. Устройства публикуют сообщения на определённую тему (topic). Все устройства, подписанные на эту тему, получают сообщение.

MQTT-брокер отвечает за приём всех сообщений, фильтрацию сообщений, определение того, кто в них заинтересован, а затем за публикацию сообщения всем подписанным клиентам.

Схема работы MQTT-брокера

Существует несколько брокеров, которые вы можете использовать. В проектах домашней автоматизации мы используем брокер Mosquitto, установленный на Raspberry Pi.

Логотип Eclipse Mosquitto

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

Для более подробного объяснения MQTT-коммуникации ознакомьтесь с этой статьёй: Что такое MQTT и как он работает

Предварительные требования

Прежде чем продолжить работу с этим руководством:

Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все детали для ваших проектов по лучшей цене!

Установка брокера Mosquitto на Raspberry Pi OS

После подготовки платы Raspberry Pi с Raspberry Pi OS вы можете продолжить работу с этим руководством.

Давайте установим брокер Mosquitto.

1) Откройте новое окно терминала Raspberry Pi. Если вы работаете с Raspberry Pi без монитора (headless), ознакомьтесь с этим руководством, чтобы узнать, как установить SSH-соединение между вашим компьютером и Raspberry Pi.

Окно терминала Raspberry Pi

2) Выполните следующую команду для обновления вашей системы:

sudo apt update && sudo apt upgrade

3) Нажмите Y и Enter. Обновление займёт некоторое время (в моём случае это заняло примерно 10 минут).

4) Чтобы установить брокер Mosquitto и клиенты Mosquitto, введите следующую команду:

sudo apt install -y mosquitto mosquitto-clients

5) Чтобы Mosquitto автоматически запускался при загрузке Raspberry Pi, необходимо выполнить следующую команду (это означает, что брокер Mosquitto будет автоматически запускаться при включении Raspberry Pi):

sudo systemctl enable mosquitto.service

6) Теперь проверьте установку, выполнив следующую команду:

mosquitto -v

Эта команда возвращает версию Mosquitto, которая в данный момент работает на вашем Raspberry Pi. Это будет версия 2.0.21 или выше.

Установка MQTT-брокера Mosquitto на Raspberry Pi и проверка версии

Будет выведено следующее сообщение: «Starting in local only mode. Connections will only be possible from clients running on this machine. Create a configuration file which defines a listener to allow remote access» (Запуск в режиме только локального доступа. Подключения будут возможны только от клиентов, работающих на этой машине. Создайте конфигурационный файл, который определяет слушатель, чтобы разрешить удалённый доступ).

Это означает, что по умолчанию вы не можете связаться с брокером Mosquitto с другого устройства (кроме вашего Raspberry Pi). Это применимо для Mosquitto версии 2. Дополнительную информацию по этой теме можно найти в документации Mosquitto.

«В Mosquitto 2.0 и выше вы должны явно выбрать параметры аутентификации, прежде чем клиенты смогут подключиться. В более ранних версиях по умолчанию клиентам разрешалось подключаться без аутентификации.»

Включение удалённого доступа / аутентификации

Чтобы включить удалённый доступ и иметь возможность взаимодействовать с другими IoT-устройствами, необходимо отредактировать/создать конфигурационный файл.

В этом руководстве мы рассмотрим:

Выберите раздел, который лучше подходит для вашего сценария. Мы также рекомендуем ознакомиться с документацией для получения более подробной информации.

Без аутентификации

1) Выполните следующую команду, чтобы открыть файл mosquitto.conf.

sudo nano /etc/mosquitto/mosquitto.conf

2) Перейдите в конец файла с помощью клавиш со стрелками и вставьте следующие две строки:

listener 1883
allow_anonymous true
Конфигурационный файл Mosquitto для разрешения удалённых подключений и анонимных пользователей

3) Затем нажмите CTRL-X для выхода и сохранения файла. Нажмите Y и Enter.

4) Перезапустите Mosquitto, чтобы изменения вступили в силу.

sudo systemctl restart mosquitto

Аутентификация с логином и паролем

Вы можете добавить аутентификацию по логину/паролю к вашему MQTT-брокеру.

1) Выполните следующую команду, но замените YOUR_USERNAME на имя пользователя, которое вы хотите использовать:

sudo mosquitto_passwd -c /etc/mosquitto/passwd YOUR_USERNAME

Я буду использовать MQTT-пользователя sara, поэтому выполняю команду следующим образом:

sudo mosquitto_passwd -c /etc/mosquitto/passwd sara

При выполнении предыдущей команды с желаемым именем пользователя вам будет предложено ввести пароль. Во время ввода пароля символы отображаться не будут. Введите пароль и запомните комбинацию логин/пароль, она понадобится вам позже в ваших проектах для подключения к брокеру.

Предыдущая команда создаёт файл паролей с именем passwd в директории /etc/mosquitto.

Сделайте файл паролей доступным для чтения и записи программой Mosquitto:

sudo chmod 0700 /etc/mosquitto/passwd

Теперь нам нужно отредактировать конфигурационный файл Mosquitto, чтобы он разрешал аутентификацию только с именем пользователя и паролем, которые мы определили.

2) Выполните следующую команду для редактирования конфигурационного файла:

sudo nano /etc/mosquitto/mosquitto.conf

3) Добавьте следующую строку в начало файла (убедитесь, что она находится в начале файла, иначе это не сработает):

per_listener_settings true

4) Добавьте следующие три строки, чтобы разрешить подключение для аутентифицированных пользователей и указать Mosquitto, где находится файл с именем пользователя/паролем.

allow_anonymous false
listener 1883
password_file /etc/mosquitto/passwd

5) Раскомментируйте следующую строку (удалите символ #):

pid_file /run/mosquitto/mosquitto.pid

Ваш конфигурационный файл будет выглядеть следующим образом (новые строки выделены жирным шрифтом):

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

per_listener_settings true

pid_file /run/mosquitto/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d
allow_anonymous false
listener 1883
password_file /etc/mosquitto/passwd
Конфигурационный файл брокера Mosquitto с аутентификацией по логину и паролю

6) Нажмите CTRL-X, затем Y, и наконец нажмите Enter для выхода и сохранения изменений.

7) Обновите владельца и права доступа пользователя Mosquitto, чтобы он мог читать и получать доступ к файлу паролей. Выполните следующие две команды.

sudo chown mosquitto:mosquitto /etc/mosquitto/passwd
sudo chmod 600 /etc/mosquitto/passwd

8) Перезапустите Mosquitto, чтобы изменения вступили в силу.

sudo systemctl restart mosquitto

9) Подождите несколько секунд. Затем, чтобы проверить, что Mosquitto действительно работает, вы можете выполнить следующую команду:

sudo systemctl status mosquitto
Брокер Mosquitto работает на Raspberry Pi

Теперь у вас включена аутентификация с именем пользователя и паролем. Помните, что каждый раз, когда вы хотите связаться с брокером, вам нужно будет предоставить имя пользователя и пароль.

Добавление пользователей / Смена пароля

Чтобы добавить больше пользователей в существующий файл паролей или изменить пароль для существующего пользователя, уберите аргумент -c:

mosquitto_passwd <password file> <username>

Например, если я хочу изменить пароль для пользователя sara и учитывая, что файл паролей, который мы создали, называется passwd, команда будет следующей:

sudo mosquitto_passwd /etc/mosquitto/passwd sara

IP-адрес Raspberry Pi

Чтобы использовать брокер Mosquitto в дальнейшем в ваших проектах, вам нужно будет знать IP-адрес Raspberry Pi. Чтобы узнать IP-адрес вашего Raspberry Pi, введите следующую команду в окне терминала Pi:

hostname -I
IP-адрес Raspberry Pi

В нашем случае IP-адрес Raspberry Pi — 192.168.1.144. Сохраните IP-адрес вашего Raspberry Pi, потому что он понадобится вам в будущих проектах.

Тестирование брокера Mosquitto и MQTT-клиента

После установки брокера Mosquitto вам следует протестировать вашу установку. Вы можете следовать следующему руководству:

Заключение

MQTT-брокер необходим, если вы хотите использовать протокол MQTT в IoT-проектах. MQTT-брокер принимает все MQTT-сообщения и пересылает их всем подписанным клиентам. В этом руководстве вы узнали, как установить брокер Mosquitto на Raspberry Pi.