Статья

Установка Home Assistant + mosquitto + zigbee2mqtt в Docker

Вводная

Ранее не писал статьи, делал только для себя гайды/шпаргалки, что бы не забыть. Так что это мой первый опыт. Предупреждаю сразу, внизу будет много Shell команд, настроек и т.п.

Для чего это все нужно? Хотя бы для того, что стоит один раз все настроить и в дальнейшем разворачивать все сервисы парой команд за несколько минут на любом устройстве. Это уже многого стоит - нашего времени! =)

Docker и docker-compose

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

sudo apt-get update sudo apt-get upgrade -y

Устанавливаем нужные Docker пакеты:

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common

Добавляем официальный ключ GPG Docker:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Добавляем официальный репозиторий Docker (в моем случае raspberry pi, это armhf):

armhf:

echo "deb [arch=armhf] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

x86_64/amd64:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

arm64:

echo "deb [arch=arm64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

Обновим индексы репозиториев и установим Docker:

sudo apt-get update sudo apt-get install -y docker-ce

Далее установим python3, пакетный менеджер pip, обновим pip и установим docker-compose:

sudo apt-get install -y python3 python3-pip sudo pip3 install --upgrade pip sudo pip3 install docker-compose

Так же вы можете посмотреть подробную инструкцию по установке docker, для вашего устройства и архитектуры на официальной странице документации Docker на сайте https://docs.docker.com/install/.

Установка Portainer

Для удобства использования и управления контейнерами Docker, я рекомендую использовать веб-морду portainer

Что бы установить Portainer, выполним следующую команду в консоли:

sudo docker run --restart always --name portainer -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer:1.19.2

Открываем в браузере http://YOU_IP:9000/ и попадаем в нашу установленную админку Portainer

Portainer. Развертывание при помощи docker-compose

В дальнейшем все действия будем выполнять от нашего пользователя pi (1000:1000), вашем случае может быть другой. Добавим нашего пользователя в группу docker, и авторизовываемся заново:

sudo usermod -a -G docker pi && su pi

Создадим папку /home/pi/smarthome и в нем файл docker-compose.yml и папку portainer для данных сервиса Portainer:

mkdir /home/pi/smarthome touch /home/pi/smarthome/docker-compose.yml

Добавим в файл docker-compose.yml следующее:

version: '3.3' services: portainer: container_name: portainer image: portainer/portainer:1.19.2 restart: always ports: - 9000:9000 volumes: -./portainer:/data - /var/run/docker.sock:/var/run/docker.sock

Останавливаем и удаляем контейнер portainer, далее перенесем его данные в созданную папку /home/pi/smarthome/portainer и меняем владельца с root на нашего пользователя:

docker stop portainer docker rm portainer sudo mv /var/lib/docker/volumes/portainer_data/_data /home/pi/smarthome/ sudo chown -R pi:pi /home/pi/smarthome/ mv /home/pi/smarthome/_data /home/pi/smarthome/portainer docker volume rm portainer_data

Поднимаем контейнер portainer и запускаем его в фоне при помощи docker-compose:

cd /home/pi/smarthome/ docker-compose up -d

Mosquitto

Создадим необходимые для работы брокера папки и файлы:

mkdir /home/pi/smarthome/mosquitto mkdir /home/pi/smarthome/mosquitto/config mkdir /home/pi/smarthome/mosquitto/data mkdir /home/pi/smarthome/mosquitto/log touch /home/pi/smarthome/mosquitto/config/mosquitto.conf touch /home/pi/smarthome/mosquitto/config/passwd

Добавляем сервис Mosquitto в docker-compose.yml в конец файла:

eclipse-mosquitto: container_name: mosquitto image: eclipse-mosquitto:latest restart: always volumes: -./mosquitto/config:/mosquitto/config -./mosquitto/data:/mosquitto/data -./mosquitto/log:/mosquitto/log ports: - 1883:1883 user: '1000:1000'

Создаем контейнер:

cd /home/pi/smarthome/ docker-compose up -d

Создаем mqtt пользователя:

docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/passwd user

вводим пароль и подтверждаем его

Файл конфигурации /home/pi/smarthome/mosquitto/config/mosquitto.conf:

persistence true persistence_location /mosquitto/data allow_anonymous false log_dest file /mosquitto/log/mosquitto.log password_file /mosquitto/config/passwd

Перезапустим наш сервис mosquitto:

docker restart mosquitto

На этом этапе mosquitto установлен и настроен.

zigbee2mqtt

Создадим папку для работы нашего zigbee2mqtt моста:

mkdir /home/pi/smarthome/zigbee2mqtt

Добавляем сервис zigbee2mqtt в docker-compose.yml в конец файла:

zigbee2mqtt: container_name: zigbee2mqtt image: koenkk/zigbee2mqtt:arm32v6 # arm32 (raspberry pi) #image: koenkk/zigbee2mqtt:latest # x86_64/amd64 restart: always volumes: -./zigbee2mqtt:/app/data devices: - /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0014D9E292-if00:/dev/ttyACM0 user: '1000:20'

Заметьте что id пользователя 1000, а id группы 20, это нужно, для того что бы пользователь в контейнере смог использовать группу dialout.

Нам нужно прокинуть наш usb-стик из хоста в контейнер, в моем случае это: 

/dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0014D9E292-if00

Где он находиться у вас, узнать можно выполнив команду в консоли:

ls /dev/ttyACM*

У меня несколько устройств в системе, и что бы не заблудиться в них, я указал по уникальному идентификатору устройства:

ls /dev/serial/by-id/usb-*

А так же для использования usb-стика нашим пользователем pi, нужно его добавить в группу dialout. Выполним команду в консоле:

sudo usermod -a -G dialout pi

Запускаем контейнер c zigbee2mqtt:

cd /home/pi/smarthome/ docker-compose up -d

После развертывания нашего контейнера, в папке /home/pi/smarthome/zigbee2mqtt будут находиться конфигурационные файлы zigbee2mqtt.

ls -lia /home/pi/smarthome/zigbee2mqtt

Настроим файл конфигураций /home/pi/smarthome/zigbee2mqtt/configuration.yaml, добавим в него настройки подключение к mqtt брокеру:

# Home Assistant integration (MQTT discovery) homeassistant: true # allow new devices to join permit_join: true # MQTT settings mqtt: # MQTT base topic for zigbee2mqtt MQTT messages base_topic: zigbee2mqtt # MQTT server URL server: 'mqtt://192.168.2.163' # MQTT server authentication, uncomment if required: user: user password: qwerty # Serial settings serial: # Location of CC2531 USB sniffer port: /dev/ttyACM0

Заметьте, я указал IP-адрес хоста 192.168.2.163, то есть IP-адрес малины в нашей локальной сети.

Перезапустим контейнер zigbee2mqtt:

docker restart zigbee2mqtt

Home Assistant - вариант №1 ("легко")

Официальный образ Home Assistant. Плюс данного способа в том, что все очень просто разворачивает. Выполнил команду, и все скачалось и запустилось. Минус в том, что данный образ жирноват и кушает много места на диске, целых 1ГБ на образе для arm32 и 2.2ГБ для x86_64/amd64!

Найти образ (image) Home Assistant именно для вашего устройства и архитектуры, можно на официальной странице https://hub.docker.com/u/homeassistant.

И так приступим, добавим в наш docker-compose.yml следующие строки для нашего контейнера:

homeassistant: container_name: homeassistant image: homeassistant/raspberrypi3-homeassistant # arm32 #image: homeassistant/home-assistant # x86_64/amd64 volumes: -./homeassistant/config:/config - /etc/localtime:/etc/localtime:ro restart: always network_mode: host user: '1000:1000'

Создадим папку, где будут находиться конфигурационные файлы HA:

mkdir /home/pi/smarthome/homeassistant mkdir /home/pi/smarthome/homeassistant/config

Соберем контейнер:

cd /home/pi/smarthome/ docker-compose up -d

Готово, создаем учетную запись и добавляем в конфигурационный файл /home/pi/smarthome/homeassistant/config/configuration.yaml настройки подключения mqtt брокера:

#https://www.home-assistant.io/components/mqtt/ mqtt: broker: 192.168.2.163 port: 1883 username: user password: qwerty client_id: homeassistant birth_message: topic: 'hass/status' payload: 'online' qos: 1 retain: true will_message: topic: 'hass/status' payload: 'offline' qos: 1 retain: true

 И перезапускаем Home Assistant.

Home Assistant - вариант №2 (оптимизация)

Суть всей оптимизации в том, что мы будем устанавливать только необходимые компоненты которые будем использовать в нашем Home Assistant. Во втором варианте мы будем собирать наш контейнер на основе образа alpine (5MB), фильтровать зависимости Home Assistant, их весьма много, да же я бы сказал очень много. Тем самым размер нашего образа весьма похудеет.

И так приступим, создадим файл Dockerfile, в котором будем описывать сборку нашего образа:

touch /home/pi/smarthome/homeassistant/Dockerfile

Содержимое /home/pi/smarthome/homeassistant/Dockerfile:

FROM alpine:3.8 LABEL maintainer="tweaker3 <tweaker3@ya.ru>" LABEL Description="Home Assistant" # Часовой пояс ARG TIMEZONE=Europe/Moscow # ID пользваотеля на хост машине, узнать в консоле: echo $(id -u) ARG UID=1000 # ID группы пользователя на хост машине, узнать в консоле: echo $(id -g) ARG GID=1000 # Версия Home Assistant (что бы обновить, нужно менять) ARG VERSION=0.83.3 # Список python пакетов/зависимостей ХА, которые нам необходимы ARG PLUGINS="frontend|sqlalchemy|xmltodict|netdisco|distro|aiohttp_cors|paho-mqtt" ADD "https://raw.githubusercontent.com/home-assistant/home-assistant/$/requirements_all.txt" /tmp RUN apk add --no-cache python3 libffi-dev libressl-dev eudev-dev libstdc && \ addgroup -g $ hass && \ adduser -h /config -D -G hass -s /bin/sh -u $ hass && \ addgroup hass dialout && \ pip3 install --upgrade --no-cache-dir pip && \ apk add --no-cache --virtual=build-dependencies build-base linux-headers python3-dev tzdata && \ cp "/usr/share/zoneinfo/$" /etc/localtime && echo "$" > /etc/timezone && \ sed '/^$/q' /tmp/requirements_all.txt > /tmp/requirements_core.txt && \ sed '1,/^$/d' /tmp/requirements_all.txt > /tmp/requirements_plugins.txt && \ egrep -e "$" /tmp/requirements_plugins.txt | grep -v '#' > /tmp/requirements_plugins_filtered.txt && \ pip3 install --no-cache-dir -r /tmp/requirements_core.txt && \ pip3 install --no-cache-dir -r /tmp/requirements_plugins_filtered.txt && \ pip3 install --no-cache-dir homeassistant=="$" && \ # For telegram pip3 install --no-cache-dir netifaces PySocks && \ apk del build-dependencies && \ rm -rf /tmp/* /var/tmp/* /var/cache/apk/* USER hass ENTRYPOINT ["hass", "--open-ui", "--config=/config"]

Поправим наш сервис homeassistant в файле docker-compose.yml:

homeassistant: container_name: homeassistant build:./homeassistant #image: homeassistant/raspberrypi3-homeassistant # arm32 #image: homeassistant/home-assistant # x86_64/amd64 volumes: -./homeassistant/config:/config - /etc/localtime:/etc/localtime:ro restart: always network_mode: host

Удаляем прошлый контейнер и образ, и собираем новый:

cd /home/pi/smarthome/ docker stop homeassistant docker rm homeassistant docker rmi homeassistant/raspberrypi3-homeassistant:latest docker-compose build docker-compose up -d

Ждем завершение сборки.

Как нам узнать какой пакет нужно устанавливать? Очень просто, например я использую трекинг по nmap. 

Добавляем конфигурации в Home Assistant, перезагружаем его, и идем смотреть логи:

device_tracker: - platform: nmap_tracker hosts: 192.168.2.190 home_interval: 10

В логи сыплются ошибки что не найден nmap, открываем ссылку https://raw.githubusercontent.com/home-assistant/home-assistant/0.83.3/requirements_all.txt и ищем там пакет отвечающий за работу nmap:

# homeassistant.components.device_tracker.nmap_tracker python-nmap==0.6.1

Добавляем имя пакета в наш Dockerfile, а так же укажем nmap в список устанавливаемого софта для образа alpine:

ARG PLUGINS="frontend|sqlalchemy|xmltodict|netdisco|distro|aiohttp_cors|paho-mqtt|python-nmap"

RUN apk add --no-cache python3 libffi-dev libressl-dev eudev-dev libstdc nmap && \

Сохраняем Dockerfile, собираем образ и пересоздаем контейнер:

docker-compose build docker-compose up -d

Я дома =)

Немного Portainer:

Обновление

Для того, что бы обновить наши сервисы до последних версий, нужно выполнить в консоли:

cd /home/pi/smarthome docker-compose pull docker-compose build docker-compose up -d

Итог

Второй вариант, весьма нетривиален, и новичку покажется не прост в настройке, но при помощи его можно не плохо так сократить размер образа HA. Если вам это не нужно, и у вас достаточно места на диске, рекомендую использовать первый вариант развертывания Home Assistant в Docker. 

Структура каталогов и файлов:

-- smarthome |-- docker-compose.yml |-- homeassistant | |-- config | `-- Dockerfile |-- mosquitto | |-- config | | |-- mosquitto.conf | | `-- passwd | |-- data | `-- log |-- portainer `-- zigbee2mqtt

docker-compose.yml

version: '3.3' services: portainer: container_name: portainer image: portainer/portainer:1.19.2 restart: always ports: - 9000:9000 volumes: -./portainer:/data - /var/run/docker.sock:/var/run/docker.sock eclipse-mosquitto: container_name: mosquitto image: eclipse-mosquitto:latest restart: always volumes: -./mosquitto/config:/mosquitto/config -./mosquitto/data:/mosquitto/data -./mosquitto/log:/mosquitto/log ports: - 1883:1883 user: '1000:1000' zigbee2mqtt: container_name: zigbee2mqtt image: koenkk/zigbee2mqtt:arm32v6 # arm32 (raspberry pi) #image: koenkk/zigbee2mqtt:latest # x86_64/amd64 restart: always volumes: -./zigbee2mqtt:/app/data devices: - /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0014BDEB9C-if00:/dev/ttyACM0 user: '1000:20' homeassistant: container_name: homeassistant #build:./homeassistant image: homeassistant/raspberrypi3-homeassistant # arm32 #image: homeassistant/home-assistant # x86_64/amd64 volumes: -./homeassistant/config:/config - /etc/localtime:/etc/localtime:ro restart: always network_mode: host user: '1000:1000'


Эээ...вижу работа проделана большая. Вот только мои знания не позволяют понять, в чём отличие установки Home Assistant описанной в статье от простой установки, как в статьях Охотника.

И что это за Докер такой, может вводной информации не хватает?

Докер... Ну если простыми словами, это такая штука, которая изолирует ваш ХА, со всеми его конфигами и софтовыми зависимостями в контейнер, который в дальнейшем можно развернуть буквально за секунды, на любой машине, где установлен докер.

Подробнее в https://ru.wikipedia.org/wiki/Docker">википедии

вот если бы еще было описано как локально установленный ffmpeg использовать внутри докерного НА, это было бы вообще все что нужно для щастья.

да и так статья ОГОНЬ ! Автору респект ! Разжевал для меня докер. Спасибо !

Спасибо! Хм.. ffmpeg уже есть в контейнере (вариант №1), и нет необходимости управлять им на хосте.

А в том то и дело, что встроенный в НА ffmpeg кривой и тупит. А вот собранный по статье здесь на портале "правильный" вариант, хотелось бы из хоста просунуть в докер контейнер НА. А вот как это сделать правильно ?

Я вчера завел камеры в докерном ffmpeg, работает лучше чем в венве питоновском. Ни затупок ничего такого не наблюдаю. Но это на десктопе а не на малине.

Отличный материал и великолепный старт ))) Классное начало и ждём продолжения, и удачи в конкурсе ;)

Спасибо! Собственно по докеру, заметил, многие спрашивать стали в чате, так и появился этот гайд =)

Очень надеялся что эта статья наконец поможет мне установить докер, но увы...

Ставлю на Raspberry Pi Zero W чистый Raspbian Stretch Lite, иду по вашей инструкции и на шаге 

sudo apt-get install -y docker-ce

вижу ошибки: https://pastebin.com/wCphp1JX">https://pastebin.com/wCphp1JX

Job for docker.service canceled.


docker.service couldn't start.

Почему так и что можно сделать?

Судя по логам проблема с фреймворком DKMS, попробуйте перезапустить малину, и выполнить:


sudo apt-get install -f 


если не поможет, напишите мне в телеграмм


UPD:
Была проблема на raspberry pi zero w. Погуглил проблема массовая.


Помогает:


sudo apt-get install docker-ce=18.06.1~ce~3-0~raspbian
sudo apt-mark hold docker-ce=18.06.1~ce~3-0~raspbian

Что бы добавить в автозапуск создайте файл:

sudo nano /etc/systemd/system/docker-compose-app.service

И внесите в него следующее:



[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/pi/smarthome
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

Так там и так автозапуск имеется. За это отвечает:


restart: always

Так там и так автозапуск имеется. За это отвечает:

restart: always

все поставил. вроде работает. при попытке подключить нативные HomeKit устройства выдает ошибку Не удалось вызвать службу configurator/configure.





2018-12-30 00:32:23 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection.1849337712] Error handling message: {'type': 'call_service', 'domain': 'configurator', 'service': 'configure', 'service_data': {'configure_id': '1846182032-4', 'fields': {'code': '377-99-980'}}, 'id': 20},



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


возникает вопрос как подключиться к консоли НА что б разобраться с ошибкой??


docker exec -it homeassistant bash

Thanks!!!

Good work!!!

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 {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}',

Ждал , значения висят , например температуре, на 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 {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}',
Как в контейнере выполнить какую-либо команду? Например на docker -v получаю:

bash: docker: command not found

Не могу подключиться по ssh из контейнера получаю:

No user exists for uid 1000


из-за этого не могу заставить работать компонент asuswrt

Артем, спасибо, отличная статья. У меня возник вот такой вопрос: 

После сборки мне понадобилась утилита lm_sensors. Если я добавлю ее в список устанавливаемого софта и пересоберу образ homeassistant, останутся все мои настройки, add-ons, lovelace и пр.?

Отлично! Спасибо за труд! Устанавливал на комп с Ubuntu 18.04, встретил ряд проблем:

  1. При использовании "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 ни у кого проблем не было?


https://github.com/raspberrypi/linux/issues/3021">dpkg: error processing package aufs-dkms (--configure):
installed aufs-dkms package post-installation script subprocess returned error exit status 10


https://github.com/raspberrypi/linux/issues/3021">https://github.com/raspberrypi...

Ошибки aufs-dkms, но докер без него встал и работает. Поправил строчку  

echo "deb [arch=armhf] https://download.docker.com/linux/raspbian">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.


https://github.com/home-assistant/docker/issues/104">Описание


Спасибо за статью! Все встало с небольшими изменениями, так как время прошло. Вот что понадобилось мне для 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, на то это и докер)) Поменял только пользователя на рута.

Кто сталкивался с таким? У меня есть доступ к контейнеру только с машины, на которой он установлен, а в сети нет, будто порт закрыт.

А никто не сталкивался  с таким? failed to register layer: error creating overlay mount to /var/lib/docker/overlay2/d682bcae29f461051094d603f37d60481603163aa2442896028197de5fa072a2/merged: too many levels of symbolic links

при выполнении  bash installer.sh --machine raspberrypi4

 Можете еще дополнить как HACS контейнере доставить
https://hacs.xyz/docs/installation/installation/">https://hacs.xyz/docs/installa...

Тут всё достаточно просто:

  1. Идем на https://github.com/hacs/integration/releases">github, качаем файл hacs.zip, распаковываем содержимое архива в папку с названием hacs.
  2. На сервере HA создаём каталог:  mkdir /home/pi/smarthome/homeassistant/config/custom_components
  3. Теперь папку hacs нужно перебросить со своего ПК на сервер HA. Качаем https://winscp.net/eng/download.php">WinSCP, создаём новое подключение SFTP к серверу, в моём случае это Малинка. Если есть желание, можно поднять самбу) 
  4. Закидываем папку hacs в каталог custom_components

  5. Перезапускаем сервер, это можно сделать из самого HA. Конфигурация->Настройки->Сервер->Перезапустить.
  6. В списке интеграций появится HACS.

Начал своё знакомство с HA с этой статьи, решил ставить именно в докере так как давно искал повод пощупать его, довольно популярная штука в мире IT. Ставил на Raspberry Pi 3 Model B.

Статья написана очень подробно, по сути вся установка может свестись к копированию shell команд в командную строку. Можно подумать о том, чтобы собрать всё в bash скрипт, тогда установка вообще будет сведена к запуску одного файла. К статье есть несколько замечаний: 

  • Т.к. ранее дело с HA не имел, мне было не известно, что при запуске контейнера с homeAssistant он по умолчанию висит на порте 8123. Тут огромное спасибо пользователю Prm, за его комментарий!)
  • С конфигом который указан в статье homeAssistant отказывался запускаться, в логи сыпались ошибки о нехватке прав. У меня это решилось добавлением строки в конфиг privileged: true. Параметр user я удалил.
  • При установке zigbee2mqtt, было бы не плохо в самом начале написать, что без USB стика в этом смысла никакого нет. Стик я кстати заказал, как приедет продолжу эксперименты.
  • При установке, portainer пришлось убрать из команды версию, об этом писали уже в комментариях, как и о том, что лучше бы подключать репозиторий для raspbian а не для debian.

Вернуться назад

Устройства


Texas Instruments

USB Stick CC2531

(13 отзывов)

Raspberry Pi

Raspberry Pi 4

(15 отзывов)

Вернуться назад