Orange Pi — сердце вашего Умного дома за 10$ или ставим MQTT брокер mosquitto с поддержкой WebSockets
Желание управлять всем в своем доме или квартире есть у многих наших читателей и часть из них уже преуспела в этом деле, но эта статья больше для тех, кто не успел закупиться по нормальному курсу и теперь кусает локти. Я расскажу как можно недорого поставить брокер mosquitto буквально «рядом с вашим роутером» с поддержкой WebSockets для управления вашими устройствами из ioT менеджера.
При текущем курсе рубля покупать Raspberry Pi за 35$ для своего умного дома сейчас, наверное не самая лучшая идея, особенно, когда есть достойная альтернатива: Orange Pi, стоимость которой гораздо более демократична. Купить одну из моделей Orange Pi можно прямо у производителя в народном интернет-магазине Aliexpress. Я не буду останавливаться на характеристиках апельсинки — такой информации достаточно много и вы без труда ее найдете. Я себе взял «среднюю» версию с 1Гб оперативки — это Orange Pi PC за 15$ (18.61$ с учетом доставки в РФ), но все описанное в этой статье будет прекрасно работать как на младшей сестре Orange Pi One за 9,99$ (с доставкой в РФ — 13.55$ ), так и на монстре Orange Pi Plus 2 за 49$ (52.78$ с доставкой в РФ) с 2-мя гигами оперативки, встроенной EMMC 8Гб флеш памятью, гигабитной сетью и контроллером SATA на борту.
Тем, кто решится на покупку, могу посоветовать обратить внимание на то, что в отличии от RaspberryPi, Orange PI требуется 5-ти вольтовый 2-х амперный блок питания с «особым разъемом» (апельсинку нельзя запитать от micro USB), так что либо придется заказать один из комплектов с блоком питания, или найти подходящий разъем в своих закромах или поискать в магазинах (моя OrangePi PC не сильно прожорливая: в ненагруженном состоянии потребляет около 340 миллиампер, однако не запустилась при попытке использовать дешевую китайскую USB зарядку с проводами небольшого сечения).
Также можно взять недорогой комплект с кабелем питания и корпусом или подобрать что-то похожее дома — точно подходит и блок питания и разъем от Sony PSP. Еще не забудьте заранее позаботиться о microSD флешке (от 4Гб, но лучше 8Гб и класс не ниже 10) и закажите радиаторы на камень и память или вентилятор в корпус. В случае, если вы хотите установить свой контроллер Умного Дома не рядом с вашим домашним маршрутизатором, то имеет смысл заранее позаботится о WiFi USB адаптере.
Первый запуск и первоначальная настройка описана во множестве статей (почти все, что написано для Raspberry Pi, будет работать и на Orange Pi). Вкратце скажу, что имидж флешки берём здесь, выбираем для своей модели Raspbian (ну или другой, на свой вкус). Заливаем его на флэшку, после запуска нужно залогиниться с клавиатуры и запустить
raspi-config
В меню нужно расширить файловую систему на всю флешку (Expand Filesystem) и включить SSH для удаленного доступа (Advanced Options — SSH — Enable). Далее можно настроить сеть и т.п. Кстати, настройка сети не потребуется, если вы подключили Orange Pi к своему роутеру обычным сетевым кабелем — просто посмотрите IP адрес, который присвоился вашей апельсинке для удаленного подключения к ней в дальнейшем:
ifconfig eth0
Перезагружаемся
reboot
и заходим уже удаленно со своего компьютера. Я предпочитаю использовать putty.
Заходим в систему и первым делом обновляем кэш репозитариев для установки пакетов:
apt-get update
Далее, для упрощения файловых операций типа создания каталогов, перехода по папкам и легкого редактирования файлов поставим Midnight Commander:
apt-get install mc
Я предпочитаю пользоваться встроенным в mc редактором, для этого запускаю mc иду в настройки F9 — Options — Configuration, ставлю галочку напротив Use internal edit, жму Ok и сохраняю настройки F9 — Options — Save Setup. Далее можно скрыть панели mc комбинацией клавиш CTRL+O и работать как обычно, в командной строке. Для перехода по каталогам и редактирования файлов нажмите CTRL+O опять для отображения панелей mc.
Итак, это была подготовка, а теперь начинается именно то, что относится непосредственно к теме этой статьи — ставим MQTT брокер mosquitto из исходников с поддержкой WebSockets.
Инсталлируем необходимые библиотеки и утилиты:
apt-get -y install libssl-dev cmake libc-ares-dev uuid-dev daemon
Запускаем наш mc и переходим в домашний каталог (или из консоли вводим команду cd ~). Здесь создаем папку с произвольным именем, например src и переходим в нее. Загружаем и распаковываем последнюю версию libwebsockets (на момент написания этой статьи это версия 1.7.5)
wget http://git.libwebsockets.org/cgi-bin/cgit/libwebsockets/snapshot/libwebsockets-1.7.5.tar.gz
tar zxf libwebsockets-1.7.5.tar.gz
cd libwebsockets-1.7.5/cmake
собираем и инсталлируем ее:
cmake ..
make install
Сборка и установка займет пару минут. Далее запустим утилиту ldconfig, которая создаст необходимые связи и сформирует кэш динамических библиотек:
ldconfig
Перейдем на пару уровней выше, обратно в нашу папку src и займемся непосредственно самим mosquitto (актуальная версия на момент написания статьи 1.4.8)
cd ../..
wget http://mosquitto.org/files/source/mosquitto-1.4.8.tar.gz
tar zxf mosquitto-1.4.8.tar.gz
cd mosquitto-1.4.8
Вручную в редакторе правим файл config.mk (ищем строку WITH_WEBSOCKETS:=no и заменяем ее на WITH_WEBSOCKETS:=yes) или делаем это элегантно одной командой в консоли, как настоящие линуксоиды и собираем:
sed -i -- 's/WITH_WEBSOCKETS:=no/WITH_WEBSOCKETS:=yes/g' config.mk
make
make install
Тут можете попить кофе — процесс сборки займет несколько минут. По окончании процесса вы увидите ничем не примечательную картину
На это еще не все, теперь нужно сделать для mosquitto конфигурационный файл и создать пользователя под которым будет запущен брокер
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
useradd -r -m -d /var/lib/mosquitto -s /usr/sbin/nologin -g nogroup mosquitto
Обратите внимание, что командами echo мы добавляем необходимые строки в конец конфигурационного файла. Тоже самое, но более осмысленно можно сделать вручную в редакторе, поместив строку listener 1883 в раздел Default listener, а listener 9001 и protocol websockets в Extra listeners, но это вовсе не обязательно, т.к. эти разделы в mosquitto условные, различаются лишь комментариями и нужны только нам для удобства.
Далее мы создаем скрипт автозапуска mosquitto. Для этого жмем CTRL+O для отображения mc, идем в каталог /etc/init.d и там создаем через Shift+F4 новый файл, вставляем туда следующие строки
#!/bin/bash
#/etc/init.d/mosquitto
case "$1" in
start)
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
Жмем F2 для сохранения, вводим имя файла mosquitto и выходим из редактора по F10. Вместо создания скрипта запуска в редакторе вы можете скачать этот файл с нашего сайта командой:
wget http://esp8266.ru/usefull/mosquitto
Осталось еще немного — мы уже на финишной прямой — установим атрибут исполняемого файла скрипту и создадим каталог для логов:
chmod +x /etc/init.d/mosquitto
mkdir -p /var/log/mosquitto
Включаем скрипт в автозагрузку и запускаем:
update-rc.d mosquitto defaults
/etc/init.d/mosquitto start
Последний штрих — убедимся, что mosquitto запустился и работает, а не вылетел с ошибкой сразу после запуска:
ps acx | grep mosquitto
Если все ок, то вы увидите следующее:
Если нет — смотрите логи в /var/log/mosquitto, если там пусто, настройте более подробный лог командами log_type в /etc/mosquitto/mosquitto.conf
В результате, наш брокер слушает MQTT подключения на стандартном порту 1883 и MQTT over WebSockets на порту 9001, т.е. в настройках IoT Manager вы теперь можете прописать IP адрес вашей апельсинки и порт 9001 (SSL выключен). Чтобы ваш mosquitto был виден приложению не только из вашей локальной сети, но и из интернет осталось только прокинуть на роутере порт 9001 во внешний мир (побеспокойтесь о безопасности и создайте пользователей, как описано в этой статье) или настройте mqtt bridge на какой-нибудь облачный MQTT сервис, но тогда в приложении подключайтесь уже к этому сервису.
Виктор Бруцкий, независимый IoT евангелист, 4refr0nt@gmail.com
Источник
09.10.2017 в 01:52, Просмотров: 16755