Docker часть 6: Mosquitto MQTT
Брокер Mosquitto MQTT позволит нам подключаться к широкому спектру устройств. В следующей части мы рассмотрим как подключить Zigbee2MQTT.
Установка Mosquitto MQTT
Как уже стало нашей привычкой, мы начинаем с добавления дополнительной конфигурации в наш файл docker-compose.yaml
version: '3.0'
services:
portainer: # часть 2
[...]
homeassistant: # часть 3
[...]
depends_on:
- mariadb
- mosquitto
mosquitto:
container_name: mosquitto
image: eclipse-mosquitto
restart: unless-stopped
ports:
- "1883:1883/tcp"
environment:
- TZ=Europe/Moscow
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
stdin_open: true
tty: true
Мы добавили строки stdin_open
и tty
, чтобы позже мы могли подключиться к терминалу контейнера для выполнения некоторых команд.
Обратите внимание, что мы также добавили зависимость от контейнера mosquitto для контейнера Home Assistant. Таким образом, наш брокер находится в сети до запуска Home Assistant, и мы можем быть уверены, что наше соединение не прервется.
Конфигурация Mosquttio
Теперь, когда мы запустим контейнер Mosquitto с помощью команды docker compose up-d
, журналы будут заполнены ошибками о том, что Unable to open config file /mosquitto/config/mosquitto.conf
. Чтобы убрать ошибку создадим пустой конфиг файл.
touch nano ./mosquitto/config/mosquitto.conf
Добавление пользователя
Для доступа к MQTT необходим пользователь. Можно конечно включить настройку allow_anonymous true
, но тогда доступ до MQTT будет открыт всем. Возможно это излишняя безопасность так как сервер у нас находится в локальной сети. Но лучше лишний раз себя обезопасить.
Вводим в терминале следующую команду и вводим любой пароль два раза подряд.
docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/mqttuser homeassistant
Заполнение конфигурации
Теперь после генерации пароля можно приступить к заполнению конфига. Если бы мы сделали это раньше, еще при создании, то не смогли бы запустить утилиту mosquitto_passwd
.
# открываем файл
sudo nano ./mosquitto/config/mosquitto.conf
# добавляем следующие строки
persistence true
persistence_location /mosquitto/data/
listener 1883
allow_anonymous false
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
password_file /mosquitto/config/mqttuser
Далее перезагружаем контейнер. Необходимо для подтягивания нового конфига.
docker compose restart mosquitto
Настройка MQTT в Home Assistant
Теперь мы можем подключить Home Assistant к нашему брокеру MQTT, чтобы он мог начать подписываться на топики и отправлять сообщения. Поскольку другие клиенты MQTT еще не подключены, Home Assistant пока не будет добавлять новые устройства.
Переходим в список интегарций ищем MQTT. Вписываем данные для пользователя и подтверждаем соединение.
Теперь можно перейти в лог контейнера и увидеть, что соединение прошло успешно.
Итоговая структура проекта
home-assistant
├── .env
├── docker-compose.yaml
├── fileeditor
├── homeassistant
├── mosquitto
│ └── ...
└── portainer