Найти тему
Smart home Russia

Рабочая инструкция по установка MQTT в Docker [Превращаем Android ТВ-приставку в центр умного дома]

С удивлением обнаружил, что у меня на канале есть инструкция по установки MQTT, которая не сработала в случае с приставкой. Казалось бы, операция не очень сложная, можно и куда-то подсмотреть, но тут тоже были нюансы. Исправим ситуацию.

Translation to English is here. Также основной канал в telegram.

Самое забавное, что, когда я решил двигаться дальше, то я решил сделать все по своей же инструкции и у меня ничего не получилось. Ну, думаю, сейчас нагуглю в интернете что-нибудь. И знаете что? - если выполнять эти инструкции, то результат у меня был также нулевой ☺. Забавно и то, что в этих инструкциях встречаются как плохое изложение, так и явные ляпы, что удивительно. Понятное дело, что это все просто опечатки, но инструкции все же проверять нужно. Последнее, что меня поразило - много прочтений и нет комментариев, как будто все отмучились, но никак не постарались улучшить материал - грустно. Возможно там есть и идеальные инструкции, но мы же знаем, что все ходят по первым ссылкам. А дело все вот в чем, 03-12-2020 вышла новая версия Mosquitto 2.0.0. Создатели подкрутили безопасность и теперь подключиться к серверу из вне стало невозможно на стандартной конфигурации. Естественно все инструкции были написаны до этого нововведения и сегодня автоматом стали неактуальными. Тут есть уточнение, если бы я не пробовал подключаться к серверу с другого компьютера - то проблему бы и не заметил. т.к. нововведение затрагивает только сторонние подключения, а подключения внутри сервера продолжали работать. Картина выглядит забавно, вы настраиваете ZigBee2MQTT, MQTT и Home Assistant, все работает, а подключится с другого компьютера нельзя. Естественно, люди лезли настраивать различные Firewall и все такое прочие, но результат был нулевой. Обновим инструкцию и расскажу новое.

Прежде всего надо сказать, что у каждого действия должна быть цель. Если, создавая локальный умный дом вы планируете использовать только home assistant и брендовые устройства, которые свободно продаются в магазинах и интернет-площадках, то статьи ниже должно хватить:

Теперь, что касается тех, кто хочет чего-то большего, использовать DIY устройства или вообще отказаться от Home Assistant - нам ниже. ↓

Небольшое отступление. Я не имею ничего против способа выше, он невероятно простой и должен устраивать почти всех. Даже меня он устраивал бы лет 5 назад. Со временем я начал погружаться в автоматизацию так глубоко, что это спровоцировало создание устройств, которые никогда не изобретут другие производители. Тут есть хорошая цитата: "Если вы придумываете что-то, чего еще нет на рынке, то либо это инновация, либо это просто нафиг никому не нужно". Я хочу верить, что в первый вариант, но осознаю, что работаю в основном со вторым. Это тоже не плохо, но разговор не о том. Когда вы создаете или покупаете устройство, которое никогда не будет массовым, то рассчитывать в то, что оно появится в официальной поддержке Home Assistant не приходится. Кстати, о самом HA - на нем тоже свет клином не сошелся. Есть много других классных систем автоматизации, каждая имеет свои плюсы и минусы. Если вы готовы погрузится в новый мир автоматизации и перейти на следующий уровень, то использовать "коробочные решения" станет не вариант.

Когда я писал статью ниже ↓, это по которой у меня же самого ничего не получилось, то получил комментарий, "а зачем, ведь можно установить его как интеграцию в HA" и это был правильный вопрос, но ответ я уже озвучил выше, использовать или нет HA — это только наш выбор, например я 2 года пользовался Domoticz и мне в нем все нравилось.

Кстати, никто не мешает вам использовать несколько систем умного дома одновременно. Благодаря тому что MQTT довольно распространенная вещь, то именно он у меня по сути является центром умного дома. Это с ним взаимодействуют все приложения, и я сейчас работаю над тем, чтобы умный дом стал менее зависимым от Home Assistant и более автономным. Напишу я про это позже, запчасти уже заказаны☺.

Все дальнейшие действия я начиная с этапа, когда Home Assistant установлен и работает в Docker

1. Все по старому, логинюсь в ssh.

2. Обновляюсь, пока тоже все суперстандартно
apt-get update
apt-get upgrade -y

-2

3. Подготовим папки для MQTT:
mkdir /home/smarthome/mosquitto
mkdir /home/smarthome/mosquitto/config
mkdir /home/smarthome/mosquitto/data
mkdir /home/smarthome/mosquitto/log

Папка config строго обязательна, data и log по желанию.

Создадим необходимые файлы
touch /home/smarthome/mosquitto/config/mosquitto.conf
touch /home/smarthome/mosquitto/config/password.conf

Стоит пояснить, что это за такие необходимые файлы: 1. Файл конфигурации, его точно нужно выносить из контейнера, т.к. в нем мы пропишем настройки. 2. Файл с паролями, его можно и не выносить. Мне как-то без разницы, где он хранится, но почему-то так делают в большинстве инструкций, допустим...

4. Откроем файл конфигурации, это который home/smarthome/mosquitto/config/mosquitto.conf, что создали выше. Для этого можно использовать разные варианты, а я использую редактор nano. Для простоты навигации я использую mc, который вызывается командой mc. Если у вас его нет, то ставится он одной командой, далее по F4 можно отредактировать любой файл, очень удобно.
Я отвлекся, введем в файл следующее содержимое
persistence true
allow_anonymous false
listener 1883
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log
password_file /mosquitto/config/password.conf

Давайте теперь обсудим, что это значит. Первая строка запрещает анонимные подключения. Вторая строка — это то самое обновление. Мы говорим, что через порт 1883 можно подключаться сторонним клиентам. Третья строка указывает на адрес для постоянного хранения базы данных. Четвертая строка, подобно предыдущей, показывает на место хранения файла логов. Последняя строка показывает на место хранения файла с паролями. Пароли хранятся в зашифрованном виде.

-4

Теперь соберем контейнер
docker run --restart=always --name mosquitto -d -p 1883:1883 -v /home/smarthome/mosquitto/config:/mosquitto/config -v /home/smarthome/mosquitto/data:/mosquitto/data -v /home/smarthome/mosquitto/log:/mosquitto/log eclipse-mosquitto

Команда очень простая, указываем политику перезагрузки, имя контейнера, папки, которые прокидываются из контейнера в локальное хранилище и название образа контейнера. Дату и логи прокидываем по желанию, без них тоже все будет работать, а логи можно будет посмотреть прямо в portainer.

5. Вводим команду:
docker exec -it mosquitto mosquitto_passwd -b /mosquitto/config/password.conf smarthomerussia smarthomerussia

-6

Данная команда создает пару логин/пароль. В данном случае логин и пароль совпадают: smarthomerussia

6. Перезапустим наш контейнер:
docker restart mosquitto

-7

Теперь можно проверять, что все работает.

Таким образом я обновил инструкцию по установки MQTT сервера в Docker с учетом сегодняшних реалий. Старую также можно использовать для автономных сборок. Надеюсь, все понятно и ясно.

Подпишитесь, чтобы не пропускать следующий контент.
Нажмите лайк, если интересно, так я пойму какие публикации больше нужны моей публике.
Также публикации можно найти на других площадках: Instagram, telegram (RU, EN, DE), Medium, LiveJournal, YouTube.

Мой блог является некоммерческим, поэтому позитивный комментарий, лайк или репост поможет публикациям выходить чаще ☺.