mosquitto websockets iotmanager

Orange Pi — сердце вашего Умного дома за 10$ или ставим MQTT брокер mosquitto с поддержкой WebSockets

Желание управлять всем в своем доме или квартире есть у многих наших читателей и часть из них уже преуспела в этом деле, но эта статья больше для тех, кто не успел закупиться по нормальному курсу и теперь кусает локти. Я расскажу как можно недорого поставить брокер mosquitto буквально «рядом с вашим роутером» с поддержкой WebSockets для управления вашими устройствами из IoT Manager.

При текущем курсе рубля покупать 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 (ну или другой, на свой вкус). Заливаем его на флешку, после запуска нужно залогиниться с клавиатуры и запустить 

В меню нужно расширить файловую систему на всю флешку (Expand Filesystem) и включить SSH для удаленного доступа (Advanced Options — SSH — Enable). Далее можно настроить сеть и т.п. Кстати, настройка сети не потребуется, если вы подключили Orange Pi к своему роутеру обычным сетевым кабелем — просто посмотрите IP адрес, который присвоился вашей апельсинке для удаленного подключения к ней в дальнейшем:

mosquitto websockets

Перезагружаемся

и заходим уже удаленно со своего компьютера. Я предпочитаю использовать putty.

Заходим в систему и первым делом обновляем кэш репозитариев для установки пакетов:

Далее, для упрощения файловых операций типа создания каталогов, перехода по папкам и легкого редактирования файлов поставим Midnight Commander:

Я предпочитаю пользоваться встроенным в mc редактором, для этого запускаю mc иду в настройки F9 — Options — Configuration, ставлю галочку напротив Use internal edit, жму Ok и сохраняю настройки F9 — Options — Save Setup. Далее можно скрыть панели mc комбинацией клавиш CTRL+O и работать как обычно, в командной строке. Для перехода по каталогам и редактирования файлов нажмите CTRL+O опять для отображения панелей mc.

Итак, это была подготовка, а теперь начинается именно то, что относится непосредственно к теме этой статьи — ставим MQTT брокер mosquitto из исходников с поддержкой WebSockets.

Инсталлируем необходимые библиотеки и утилиты:

 Запускаем наш mc и переходим в домашний каталог (или из консоли вводим команду cd ~). Здесь создаем папку с произвольным именем, например src и переходим в нее. Загружаем и распаковываем последнюю версию libwebsockets (на момент написания этой статьи это версия 1.7.5)

собираем и инсталлируем ее:

Сборка и установка займет пару минут. Далее запустим утилиту ldconfig, которая создаст необходимые связи и сформирует кэш динамических библиотек:

Перейдем на пару уровней выше, обратно в нашу папку src и займемся непосредственно самим mosquitto (актуальная версия на момент написания статьи 1.4.8)

Вручную в редакторе правим файл config.mk (ищем строку WITH_WEBSOCKETS:=no и заменяем ее на WITH_WEBSOCKETS:=yes) или делаем это элегантно одной командой в консоли, как настоящие линуксоиды и собираем:

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

orange pi mosquitto websockets

На это еще не все, теперь нужно сделать для mosquitto конфигурационный файл и создать пользователя под которым будет запущен брокер

Обратите внимание, что командами echo мы добавляем необходимые строки в конец конфигурационного файла. Тоже самое, но более осмысленно можно сделать вручную в редакторе, поместив строку listener 1883 в раздел Default listener, а listener 9001 и protocol websockets в Extra listeners, но это вовсе не обязательно, т.к. эти разделы в mosquitto условные, различаются лишь комментариями и нужны только нам для удобства.

Далее мы создаем скрипт автозапуска mosquitto. Для этого жмем CTRL+O для отображения mc, идем в каталог /etc/init.d и там создаем через Shift+F4 новый файл, вставляем туда следующие строки

Жмем F2 для сохранения, вводим имя файла mosquitto и выходим из редактора по F10. Вместо создания скрипта запуска в редакторе вы можете скачать этот файл с нашего сайта командой:

Осталось еще немного — мы уже на финишной прямой — установим атрибут исполняемого файла скрипту и создадим каталог для логов:

Включаем скрипт в автозагрузку и запускаем:

Последний штрих — убедимся, что mosquitto запустился и работает, а не вылетел с ошибкой сразу после запуска:

 Если все ок, то вы увидите следующее:

orange pi mosquitto websockets

Если нет — смотрите логи в /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

Отдельная благодарность Александру Суслову за помощь в подготовке статьи.

Обсуждение этой статьи, mosquitto и вообще домашних серверов, на нашем форуме