http://am-diary.ru/ustanovka-mosquitto-brokera-mqtt-na-orange-pi-zero-s-...
В основе современных проектов умного дома и интернета вещей все чаще используется протокол MQTT (Message Queuing Telemetry Transport), имеющий на сегодня несколько вариантов реализации сервера, так называемого брокера. Из всех вариантов я решил остановить свой выбор на MQTT брокере Mosquitto, устанавливать его будем на Orange Pi Zero с Armbian UBUNTU Xenial 16.04.2
Все о чём пойдет речь ниже написано по мотивам статьи Виктора Бруцкого и Александра Суслова размещенной в сообществе разработчиков esp8266.ru: https://esp8266.ru/orange-pi-mosquitto-websockets. Описанный им процесс установки MQTT брокера отличается тем, что Mosquitto компилируется из исходного кода, а не устанавливается из реппозитария, и отличается поддержкой WebSockets для управления устройствами через IoT Manager и прочие приложения требующие WebSockets.
Сразу отвечу на очевидный вопрос: «Для чего нужен собственный MQTT брокер когда уже есть несколько бесплатных облачных сервисов?». В первую очередь Mosquitto MQTT брокер нужен для тестирования проектов в локальной сети, а так же неограниченная возможность изучать и экспериментировать. Начнём!
Установку Mosquitto MQTT брокер на Ubuntu 16.04.2 будем производить используя недавно приобретенную для подобных экспериментов плату Orange Pi Zero.
В прошлой публикации на Orange Pi была установлена ОС Armbian (UBUNTU Xenial 16.04.2), система не настраивалась и на сегодня осталась в первозданном виде, поэтому перед установкой MQTT брокера выполним несколько стандартных процедур. Для работы с устройством будем пользоваться SSH-клиентом PUTTY.
1 Войдем в систему и обновим кэш репозитариев:
затем обновим пакеты
sudo apt upgrade
2 Для удобства работы с файлами установим Midnight Commander:
3 До устанавливаем необходимые библиотеки и утилиты:
sudo apt -y install libssl-dev cmake libc-ares-dev uuid-dev daemon
4 Запускаем Midnight Commander (sudo mc) и переходим в домашний каталог (можно ввести команду cd ~ из консоли). Создадим папку с любым именем, например vrem и зайдем в нее.
Загрузим последнюю версию libwebsockets (на момент написания этой статьи это версия 2.0.2):
и распакуем её
tar zxf libwebsockets-2.0.2.tar.gz
cd libwebsockets-2.0.2/cmake
5 Соберём из исходников и инсталлируем libwebsockets:
cmake ..
sudo make install
Процесс занимает около 5-10 минут. По готовности создадим необходимые связи и сформируем кэш динамических библиотек с помощью утилиты ldconfig:
sudo ldconfig
6 Возвращаемся обратно в папку vrem и приступим к установке Mosquitto (актуальная версия на момент написания статьи 1.4.10):
7 Вносим правки в файл config.mk (ищем строку WITH_WEBSOCKETS:=no заменяем на WITH_WEBSOCKETS:=yes) или делаем это командой в консоли, а затем собираем пакет:
sed -i — ‘s/WITH_WEBSOCKETS:=no/WITH_WEBSOCKETS:=yes/g’ config.mk
make
sudo make install
Процесс сборки на моем железе занял около 7-8 минут.
8 Создадим для Mosquitto конфигурационный файл и добавим пользователя под которым будет запускаться наш MQTT брокер:
sudo cp mosquitto.conf /etc/mosquitto
echo «listener 1883» >> /etc/mosquitto/mosquitto.conf
echo «listener 9001» >> /etc/mosquitto/mosquitto.conf
echo «protocol websockets» >> /etc/mosquitto/mosquitto.conf
sudo useradd -r -m -d /var/lib/mosquitto -s /usr/sbin/nologin -g nogroup mosquitto
Командами echo мы добавим несколько строк в конфигурационный файл mosquitto.conf. У меня не получилось добавить строки через консоль и я сделал это вручную в редакторе nano, поместив строки listener 1883 в раздел Default listener, а listener 9001 и protocol websockets в Extra listeners, эти разделы в Mosquitto условные, отличаются только комментариями и мы будем использовать такой вариант только для удобства.
9 Создадим скрипт для автозапуска Mosquitto. Для меня удобнее сделать это в Midnight Commander (sudo mc), идем в каталог /etc/init.d и создаем (Shift+F4) новый файл, скопируем в него следующие строки:
#!/bin/bash#/etc/init.d/mosquittocase «$1» instart)echo «Starting mosquitto»/usr/local/sbin/mosquitto -d -c /etc/mosquitto/mosquitto.conf\ >> /var/log/mosquitto/mosquitto.log \ 2>> /var/log/mosquitto/mosquitto.error;;stop)echo «Stopping mosquitto»killall mosquitto;;*)echo «Usage: /etc/init.d/mosquitto start|stop»exit 1;;esac
exit 0
Сохраним файл с именем mosquitto
Устанавливаем атрибут исполняемого файла для нашего скрипта автозапуска и создаём каталог для хранения логов:
sudo chmod +x /etc/init.d/mosquitto
sudo mkdir -p /var/log/mosquitto
9 Включаем скрипт mosquitto в автозагрузку и запускаем его:
sudo update-rc.d mosquitto defaults
sudo /etc/init.d/mosquitto start
При этом update-rc.d скорее всего ругнется на синтаксис нашего файла, который не соответствует некоторым правилам оформления содержимого скриптов автозапуска Ubuntu, но на работе это не должно отразиться.
10 Для чистоты эксперимента перезагружаемся:
sudo reboot
11 Дождавшись загрузки ОС, вновь подключаемся к плате через PUTTY и проверяем работу MQTT брокера Mosquitto командой:
sudo ps acx | grep mosquitto
В случае успеха видим следующее:
Если что то пошло не так, идем смотреть логи в /var/log/mosquitto, если там пусто, тогда настройте подробный лог командой log_type в файле /etc/mosquitto/mosquitto.conf.
В моём случае конфигурация исправно работает, что проверено через MQTT SPY и мобильное приложение для Android.
Получившийся MQTT брокер слушает подключения на стандартном порту 1883 и MQTT over WebSockets на порту 9001. Для доступа к нашему Mosquitto не только из локальной сети, «прокидываем» на роутере порт 9001 во внешний мир.
Добавить комментарий