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, просмотров 1515

умный дом,


Поиск




Карта сайта
Обратная связь
RSS-канал



Рейтинг@Mail.ru