Установка Home Assistant + mosquitto + zigbee2mqtt в Docker
Вводная
Ранее не писал статьи, делал только для себя гайды/шпаргалки, что бы не забыть. Так что это мой первый опыт. Предупреждаю сразу, внизу будет много Shell команд, настроек и т.п.
Для чего это все нужно? Хотя бы для того, что стоит один раз все настроить и в дальнейшем разворачивать все сервисы парой команд за несколько минут на любом устройстве. Это уже многого стоит — нашего времени! =)
Docker и docker-compose
Обновляем индексы репозиториев и устанавливаем все доступные обновления:
Установка Portainer
Для удобства использования и управления контейнерами Docker, я рекомендую использовать веб-морду portainer.
Вводим логин и пароль, и создаем пользователя.
Далее указываем, что Docker у нас установлен локально, и жмем кнопку connect
Portainer. Развертывание при помощи docker-compose
В дальнейшем все действия будем выполнять от нашего пользователя pi (1000:1000), вашем случае может быть другой. Добавим нашего пользователя в группу docker, и авторизовываемся заново:
Mosquitto
Создадим необходимые для работы брокера папки и файлы:
zigbee2mqtt
Создадим папку для работы нашего zigbee2mqtt моста:
Нам нужно прокинуть наш usb-стик из хоста в контейнер, в моем случае это:
Где он находиться у вас, узнать можно выполнив команду в консоли:
Сервис запущен, нужно только настроить подключение к ранее подготовленному mosquitto.
Перезапустим контейнер zigbee2mqtt:
Как вы можете заметить, все завелось, zigbee2mqtt успешно подключился к mqtt брокеру.
Home Assistant — вариант №1 («легко»)
Найти образ (image) Home Assistant именно для вашего устройства и архитектуры, можно на официальной странице https://hub.docker.com/u/homeassistant.
Home Assistant — вариант №2 (оптимизация)
Как нам узнать какой пакет нужно устанавливать? Очень просто, например я использую трекинг по nmap.
Добавляем конфигурации в Home Assistant, перезагружаем его, и идем смотреть логи:
Обновление
Для того, что бы обновить наши сервисы до последних версий, нужно выполнить в консоли:
Все новости мира умных домов — t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram — @SprutAI
Эээ. вижу работа проделана большая. Вот только мои знания не позволяют понять, в чём отличие установки Home Assistant описанной в статье от простой установки, как в статьях Охотника.
И что это за Докер такой, может вводной информации не хватает?
Докер. Ну если простыми словами, это такая штука, которая изолирует ваш ХА, со всеми его конфигами и софтовыми зависимостями в контейнер, который в дальнейшем можно развернуть буквально за секунды, на любой машине, где установлен докер.
вот если бы еще было описано как локально установленный ffmpeg использовать внутри докерного НА, это было бы вообще все что нужно для щастья.
да и так статья ОГОНЬ ! Автору респект ! Разжевал для меня докер. Спасибо !
Спасибо! Хм.. ffmpeg уже есть в контейнере (вариант №1), и нет необходимости управлять им на хосте.
А в том то и дело, что встроенный в НА ffmpeg кривой и тупит. А вот собранный по статье здесь на портале «правильный» вариант, хотелось бы из хоста просунуть в докер контейнер НА. А вот как это сделать правильно ?
Я вчера завел камеры в докерном ffmpeg, работает лучше чем в венве питоновском. Ни затупок ничего такого не наблюдаю. Но это на десктопе а не на малине.
Отличный материал и великолепный старт ))) Классное начало и ждём продолжения, и удачи в конкурсе 😉
Спасибо! Собственно по докеру, заметил, многие спрашивать стали в чате, так и появился этот гайд =)
Очень надеялся что эта статья наконец поможет мне установить докер, но увы.
Ставлю на Raspberry Pi Zero W чистый Raspbian Stretch Lite, иду по вашей инструкции и на шаге
Job for docker.service canceled.
docker.service couldn’t start.
Почему так и что можно сделать?
Судя по логам проблема с фреймворком DKMS, попробуйте перезапустить малину, и выполнить:
sudo apt-get install -f
если не поможет, напишите мне в телеграмм
UPD:
Была проблема на raspberry pi zero w. Погуглил проблема массовая.
Что бы добавить в автозапуск создайте файл:
sudo nano /etc/systemd/system/docker-compose-app.service
И внесите в него следующее:
Так там и так автозапуск имеется. За это отвечает:
все поставил. вроде работает. при попытке подключить нативные HomeKit устройства выдает ошибку Не удалось вызвать службу configurator/configure.
Traceback (most recent call last):, await func(hass, connection, msg),
File «/usr/local/lib/python3.6/site-packages/homeassistant/components/websocket_api/decorators.py», line 16, in _handle_async_response,
File «/usr/local/lib/python3.6/site-packages/homeassistant/components/websocket_api/commands.py», line 148, in handle_call_service, connection.context(msg))
File «/usr/local/lib/python3.6/site-packages/homeassistant/core.py», line 1121, in async_call, self._execute_service(handler, service_call)),
File «/usr/local/lib/python3.6/site-packages/homeassistant/core.py», line 1143, in _execute_service, await handler.func(service_call)
File «/usr/local/lib/python3.6/site-packages/homeassistant/components/configurator.py», line 221, in async_handle_service_call, call.data.get(ATTR_FIELDS, <>)),
File «/usr/local/lib/python3.6/concurrent/futures/thread.py», line 56, in run, result = self.fn(*self.args, **self.kwargs), pairing_id),
File «/usr/local/lib/python3.6/site-packages/homeassistant/components/homekit_controller/__init__.py», line 192, in device_config_callback,
File «/usr/local/lib/python3.6/site-packages/homekit/protocol.py», line 94, in perform_pair_setup, resp = connection.getresponse(),
File «/usr/local/lib/python3.6/http/client.py», line 1331, in getresponse, response.begin()
File «/usr/local/lib/python3.6/http/client.py», line 297, in begin, version, status, reason = self._read_status(),
File «/usr/local/lib/python3.6/http/client.py», line 258, in _read_status, line = str(self.fp.readline(_MAXLINE + 1), «iso-8859-1»),
File «/usr/local/lib/python3.6/socket.py», line 586, in readinto, return self._sock.recv_into(b),
socket.timeout: timed out
возникает вопрос как подключиться к консоли НА что б разобраться с ошибкой??
Best regards from Spain.
Добрый вечер.
А начал с вашей установки , довольно таки доступно для начинающего.
Столкнулся со следующей проблемой : при отключении RPi от питания (shudown прежде), и подключении снова , датчик темп/влаж/давл от Xiaomi , как будто отваливается. В Home Assistant видно последнее значение до выключения. После удержания кнопки сопряжения на датчике 3 сек , он сам подключается назад.
Как избежать отваливание сенсора ?
Есть вероятность что нужно подождать какое то время, или подышать на датчик. Он не сразу обновляет данные.
Если отвал конкретный датчика на постоянку, то нужно копать в сторону сети зигбии, смотреть логи и тд. Может сеть теряется, может еще что то.
Ждал , значения висят , например температуре, на 19.12С на протяжении часа и не меняется.
- zigbee2mqtt:info 2019-1-29 17:28:49 Logging to directory: ‘/app/data/log/2019-01-29.17-28-49’,
- zigbee2mqtt:debug 2019-1-29 17:28:49 Removing old log directory ‘/app/data/log/2019-01-26.02-35-28’,
- zigbee2mqtt:debug 2019-1-29 17:28:51 Using zigbee-shepherd with settings: ‘<"net":<"panId":6754,"channelList":[11]>,»dbPath»:»/app/data/database.db»,»sp»:
- <"baudRate":115200,"rtscts":true>>’,
- zigbee2mqtt:debug 2019-1-29 17:28:51 Loaded state from file /app/data/state.json, zigbee2mqtt:info 2019-1-29 17:28:51 Starting zigbee2mqtt version 1.0.1 (commit #84593a5),
- zigbee2mqtt:info 2019-1-29 17:28:51 Starting zigbee-shepherd,
- zigbee2mqtt:info 2019-1-29 17:28:54 Error while starting zigbee-shepherd, attemping to fix. (takes 60 seconds),
- zigbee2mqtt:info 2019-1-29 17:29:54 Starting zigbee-shepherd,
- zigbee2mqtt:info 2019-1-29 17:29:56 zigbee-shepherd started,
- zigbee2mqtt:info 2019-1-29 17:29:56 Coordinator firmware version: ‘20181024’,
- zigbee2mqtt:debug 2019-1-29 17:29:56 zigbee-shepherd info: <"enabled":true,"net":
- <"state":"Coordinator","channel":11,"panId":"0x1a62","extPanId":"0xdddddddddddddddd","ieeeAddr":"0x00124b0018ed29ca","nwkAddr":0>,»firmware»:<"transportrev":2,"product":0,"version":"2.6.3","revision":20181024>,»startTime»:1548782996,»joinTimeLeft»:0>,
- zigbee2mqtt:info 2019-1-29 17:29:56 Currently 1 devices are joined:,
- zigbee2mqtt:info 2019-1-29 17:29:56 0x00158d0002c8ede0 (0x00158d0002c8ede0): WSDCGQ11LM — Xiaomi Aqara temperature, humidity and pressure sensor (EndDevice),
- zigbee2mqtt:warn 2019-1-29 17:29:56 `permit_join` set to `true` in configuration.yaml., zigbee2mqtt:warn 2019-1-29 17:29:56 Allowing new devices to join.,
- zigbee2mqtt:warn 2019-1-29 17:29:56 Set `permit_join` to `false` once you joined all devices.,
- zigbee2mqtt:info 2019-1-29 17:29:56 Zigbee: allowing new devices to join.,
- zigbee2mqtt:info 2019-1-29 17:29:56 Connecting to MQTT server at mqtt://192.168.1.16:1883,
- zigbee2mqtt:info 2019-1-29 17:29:56 zigbee-shepherd ready,
- zigbee2mqtt:info 2019-1-29 17:29:57 Connected to MQTT server,
- zigbee2mqtt:info 2019-1-29 17:29:57 MQTT publish: topic ‘zigbee2mqtt/bridge/state’, payload ‘online’,
- zigbee2mqtt:info 2019-1-29 17:29:57 MQTT publish: topic ‘zigbee2mqtt/0x00158d0002c8ede0’, payload
- ‘<"temperature":18.79,"linkquality":113,"humidity":64.65,"pressure":993,"battery":99,"voltage":3005>‘,
- zigbee2mqtt:info 2019-1-29 17:29:57 MQTT publish: topic ‘homeassistant/sensor/0x00158d0002c8ede0/temperature/config’, payload
- ‘<"unit_of_measurement":"°C","device_class":"temperature","value_template":"<< value_json.temperature >>»,»json_attributes»:[«linkquality»,»battery»,»voltage»],»state_topic»:»zigbee2mqtt/0x00158d0002c8ede0″,»availability_topic»:»zigbee2mqtt/bridge/state»,»name»:»0x00158d0002c8ede0_temperature»,»unique_id»:»0x00158d0002c8ede0_temperature_zigbee2mqtt»,»device»:<"identifiers":"zigbee2mqtt_0x00158d0002c8ede0","name":"0x00158d0002c8ede0","sw_version":"Zigbee2mqtt 1.0.1","model":"Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)","manufacturer":"Xiaomi">>’,
- zigbee2mqtt:info 2019-1-29 17:29:57 MQTT publish: topic ‘homeassistant/sensor/0x00158d0002c8ede0/humidity/config’, payload
- ‘<"unit_of_measurement":"%","device_class":"humidity","value_template":"<< value_json.humidity >>»,»json_attributes»:[«linkquality»,»battery»,»voltage»],»state_topic»:»zigbee2mqtt/0x00158d0002c8ede0″,»availability_topic»:»zigbee2mqtt/bridge/state»,»name»:»0x00158d0002c8ede0_humidity»,»unique_id»:»0x00158d0002c8ede0_humidity_zigbee2mqtt»,»device»:<"identifiers":"zigbee2mqtt_0x00158d0002c8ede0","name":"0x00158d0002c8ede0","sw_version":"Zigbee2mqtt 1.0.1","model":"Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)","manufacturer":"Xiaomi">>’,
- zigbee2mqtt:info 2019-1-29 17:29:57 MQTT publish: topic ‘homeassistant/sensor/0x00158d0002c8ede0/pressure/config’, payload
- ‘<"unit_of_measurement":"hPa","device_class":"pressure","value_template":"<< value_json.pressure >>»,»json_attributes»:[«linkquality»,»battery»,»voltage»],»state_topic»:»zigbee2mqtt/0x00158d0002c8ede0″,»availability_topic»:»zigbee2mqtt/bridge/state»,»name»:»0x00158d0002c8ede0_pressure»,»unique_id»:»0x00158d0002c8ede0_pressure_zigbee2mqtt»,»device»:<"identifiers":"zigbee2mqtt_0x00158d0002c8ede0","name":"0x00158d0002c8ede0","sw_version":"Zigbee2mqtt 1.0.1","model":"Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)","manufacturer":"Xiaomi">>’, zigbee2mqtt:debug 2019-1-29 17:29:57 Received MQTT message on ‘hass/status’ with data ‘online’, zigbee2mqtt:debug 2019-1-29 17:29:57 Mounted the cieApp (epId
),
- ‘<"unit_of_measurement":"hPa","device_class":"pressure","value_template":"<< value_json.pressure >>»,»json_attributes»:[«linkquality»,»battery»,»voltage»],»state_topic»:»zigbee2mqtt/0x00158d0002c8ede0″,»availability_topic»:»zigbee2mqtt/bridge/state»,»name»:»0x00158d0002c8ede0_pressure»,»unique_id»:»0x00158d0002c8ede0_pressure_zigbee2mqtt»,»device»:<"identifiers":"zigbee2mqtt_0x00158d0002c8ede0","name":"0x00158d0002c8ede0","sw_version":"Zigbee2mqtt 1.0.1","model":"Aqara temperature, humidity and pressure sensor (WSDCGQ11LM)","manufacturer":"Xiaomi">>’, zigbee2mqtt:debug 2019-1-29 17:29:57 Received MQTT message on ‘hass/status’ with data ‘online’, zigbee2mqtt:debug 2019-1-29 17:29:57 Mounted the cieApp (epId
- zigbee2mqtt:info 2019-1-29 17:30:17 MQTT publish: topic ‘zigbee2mqtt/0x00158d0002c8ede0’, payload
- ‘<"temperature":18.79,"linkquality":113,"humidity":64.65,"pressure":993,"battery":99,"voltage":3005>‘,
bash: docker: command not found
Не могу подключиться по ssh из контейнера получаю:
No user exists for uid 1000
из-за этого не могу заставить работать компонент asuswrt
Артем, спасибо, отличная статья. У меня возник вот такой вопрос:
После сборки мне понадобилась утилита lm_sensors. Если я добавлю ее в список устанавливаемого софта и пересоберу образ homeassistant, останутся все мои настройки, add-ons, lovelace и пр.?
Отлично! Спасибо за труд! Устанавливал на комп с Ubuntu 18.04, встретил ряд проблем:
- При использовании «image: koenkk/zigbee2mqtt:latest # x86_64/amd64» zigbee2mqtt не работает, ругается. Заменил на «image: koenkk/zigbee2mqtt # x86_64/amd64» — заработало
При установке homeassistant есть непонятный момент, возможно, кому-то поможет:
> Готово, создаем учетную запись и добавляем в конфигурационный файл
Для создания учетной записи необходимо в браузере открыть URL http://localhost:8123. Это необходимо проделать перед добавлением конфигурационного файла.
Всем привет. Спасибо вам за статью. Помогите пожалуйста разобраться: устанавливаю по второму варианту и все работает, но при обнавлении HA он не хочет запускаться. Обновляю так: в dockerfile прописываю версию 0.99.0 и alpine 3.10, затем в онсоли pull, build и up. Все происходит через ssh на raspberry pi 3 b+, raspbian
c aufs-dkms ни у кого проблем не было?
dpkg: error processing package aufs-dkms (—configure): installed aufs-dkms package post-installation script subprocess returned error exit status 10
Ошибки aufs-dkms, но докер без него встал и работает. Поправил строчку
echo «deb [arch=armhf] https://download.docker.com/li. $(lsb_release -cs) stable» | sudo tee /etc/apt/sources.list.d/docker.list
вместо debian написал raspbian
и убрал упоминания о версии при установке портернера
Спасибо за доходчивое объяснение. До сих пор актуально. Устанавливал на Pi4. Все шло гладко , но с поправками для Pi4
Для установки docker-compose через pip3 потребовалось доставить в систему пакет libffi-dev. Думаю стоит добавить всписок пакетов для docker
Запуск контейнера HomeAssistant поддерживается только от имени root.
Спасибо за статью! Все встало с небольшими изменениями, так как время прошло. Вот что понадобилось мне для raspberry pi 4, raspberry pi OS lite:
1) для установки docker-compose нужна зависимость libffi-dev
2) portainer:stable(или latest)
3) zigbee2mqtt уже не нуждается в отдельном теге для архитектуры, нужная входит в основной тег stable. Под latest не запустилось — сообщения приходили но в has не прокидывались
4) строчка user в конфиге докер контейнера homeassistant(легкая установка) не нужна — с ней контейнер не встает
5) настройки mqtt брокера не нужны. теперь он настраивается как интеграция прямо в Home Assistant
Да, времени прошло уже нормально. Нужно найти времени, обновить статью, много чего поменялось =)
Но, как ни странно, у меня до сих пор все запускается с данными параметрами в docker-compose.yml, на то это и докер)) Поменял только пользователя на рута.
Кто сталкивался с таким? У меня есть доступ к контейнеру только с машины, на которой он установлен, а в сети нет, будто порт закрыт.