Установка MQTT-брокера Mosquitto на Raspberry Pi
В этом руководстве показано, как установить брокер Mosquitto для MQTT-коммуникации на плату Raspberry Pi.
Вы также можете запустить MQTT-брокер Mosquitto в облаке. Запуск MQTT-брокера Mosquitto в облаке позволяет подключать несколько плат ESP32/ESP8266 и других IoT-устройств откуда угодно, используя различные сети, при условии наличия подключения к Интернету. Ознакомьтесь с руководством ниже:
Что такое MQTT-брокер?
MQTT расшифровывается как M essage Q ueuing T elemetry T ransport. MQTT — это простой протокол обмена сообщениями, разработанный для устройств с ограниченными ресурсами и низкой пропускной способностью. Поэтому это идеальное решение для обмена данными между несколькими IoT-устройствами.
MQTT-коммуникация работает по принципу публикации и подписки. Устройства публикуют сообщения на определённую тему (topic). Все устройства, подписанные на эту тему, получают сообщение.
MQTT-брокер отвечает за приём всех сообщений, фильтрацию сообщений, определение того, кто в них заинтересован, а затем за публикацию сообщения всем подписанным клиентам.
Существует несколько брокеров, которые вы можете использовать. В проектах домашней автоматизации мы используем брокер Mosquitto, установленный на Raspberry Pi.
Вы также можете установить брокер Mosquitto на свой ПК (что не так удобно, как использование платы Raspberry Pi, потому что вам придётся держать компьютер включённым всё время, чтобы поддерживать MQTT-соединение между вашими устройствами).
Для более подробного объяснения MQTT-коммуникации ознакомьтесь с этой статьёй: Что такое MQTT и как он работает
Предварительные требования
Прежде чем продолжить работу с этим руководством:
Вы должны быть знакомы с платой Raspberry Pi — прочитайте «Начало работы с Raspberry Pi»;
У вас должна быть установлена Raspberry Pi OS на вашем Raspberry Pi — Установка Raspberry Pi OS, настройка Wi-Fi, включение и подключение по SSH;
Вам также понадобится следующее оборудование:
Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все детали для ваших проектов по лучшей цене!
Установка брокера Mosquitto на Raspberry Pi OS
После подготовки платы Raspberry Pi с Raspberry Pi OS вы можете продолжить работу с этим руководством.
Давайте установим брокер Mosquitto.
1) Откройте новое окно терминала Raspberry Pi. Если вы работаете с Raspberry Pi без монитора (headless), ознакомьтесь с этим руководством, чтобы узнать, как установить SSH-соединение между вашим компьютером и 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 или выше.
Будет выведено следующее сообщение: «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
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
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
Теперь у вас включена аутентификация с именем пользователя и паролем. Помните, что каждый раз, когда вы хотите связаться с брокером, вам нужно будет предоставить имя пользователя и пароль.
Добавление пользователей / Смена пароля
Чтобы добавить больше пользователей в существующий файл паролей или изменить пароль для существующего пользователя, уберите аргумент -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 — 192.168.1.144. Сохраните IP-адрес вашего Raspberry Pi, потому что он понадобится вам в будущих проектах.
Тестирование брокера Mosquitto и MQTT-клиента
После установки брокера Mosquitto вам следует протестировать вашу установку. Вы можете следовать следующему руководству:
Заключение
MQTT-брокер необходим, если вы хотите использовать протокол MQTT в IoT-проектах. MQTT-брокер принимает все MQTT-сообщения и пересылает их всем подписанным клиентам. В этом руководстве вы узнали, как установить брокер Mosquitto на Raspberry Pi.