В данной статье мы затронем установку Home Assistant с некоторыми аддонами как на поддерживаемые, так и на не поддерживаемые официально системы (32 бит).

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

В данной статье мы поговорим о том, как создать умный дом на платформе Home Assistant. Home Assistant - это бесплатная и открытая система управления домашними устройствами, которая позволяет интегрировать различные устройства и сервисы для автоматизации и управления жизнью в доме.

Преимущества Home Assistant перед системами умных домов других производителей (Xiaomi,Tuya, и др.) заключается в возможности использовать устройства разных производителей с разными типами подключения (WiFi, MQTT, Zigbee, Bluetooth) без привязки к экосистеме определенного производителя.

Пример интерфейса Homeassistant
Пример интерфейса Homeassistant

Нам потребуется компьютер или ноутбук с 512+ Мб ОЗУ

Если ваш компьютер или ноутбук имеет 64-битный процессор, установка Home Assistant значительно упрощается, так как подробная инструкция доступна на официальном сайте.

Однако, если у вас есть устройство с 32-битным процессором и архитектурой i386, то установка аддонов для работы с внешними датчиками может быть сложной из-за отсутствия официальной поддержки. Однако, не отчаивайтесь, поскольку в этой статье мы рассмотрим способы установки на такие устройства. (Важно отметить, что эти методы также могут быть применены на 64-битных системах, но они сложнее официальных в реализации).

1. Установка системы

Для сервера умного дома подойдет практически любой дистрибутив Linux, но рекомендуется Debian. В данной статье буду использовать сам Debian.

Начнем с установки. Этот процесс одинаков практически для любой системы.

  1. Скачайте последнюю версию ISO.
    Я выбрал образ "Small", так как он включает большинство файлов в образ, что требует меньше загрузки в процессе установки.

  2. Скачайте Balena Etcher, инструмент для записи ISO-образов на USB-накопитель. Если вы работаете в системе linux, вместо этого можно использовать dd.

  3. Подключите загруженный USB-накопитель к системе и загрузитесь с USB.

  4. Следуйте процессу установки.
    Большая часть процесса - это следование настройкам по умолчанию и просто нажатие кнопки Continue.

    Не забудьте ввести учетные данные для пользователя root и пользователя, не являющегося администратором.

    Если вы планируете использовать компьютер только для умного дома, убедитесь, что вы не устанавливаете графический интерфейс пользователя (GUI), и обязательно установите SSH-сервер.

  5. После завершения установки войдите в систему по SSH, либо напрямую с пк, используя учетные данные обычного пользователя (не рут).

2. Установка Docker и Docker Compose

Несмотря на то, что Docker и Docker engine официально не поддерживают 32-битные системы, его можно установить, воспользовавшись данным репозиторием на GitLab:

wget https://gitlab.com/docker-32bit/debian/raw/i386/build-image.sh
sudo bash build-image.sh

Docker Compose можно установить командой:

sudo apt install docker-compose

3. (опционально) Установка Portainer

Portainer может пригодиться для более удобного управления будущими Docker-контейнерами.

Для установки Portainer создадим конфигурационный файл docker-compose.yaml:

cd /opt
sudo nano docker-compose.yaml

Не забудьте обновить часовой пояс в конфигурации ниже.

Кроме того, я храню весь свой конфиг Docker и тома в этой папке. Это облегчает резервное копирование. Эти тома будут хранить данные из образа Docker локально, чтобы данные не терялись при пересборке контейнера (например, при обновлении) /opt

Здесь мы передаем файл, содержащий наши локальные настройки времени, чтобы Portainer знал, который сейчас час (для временных меток журнала), а также сокет, управляющий Docker, чтобы Portainer мог выполнять действия в Docker.

version: '3.0'

services:
  portainer:
    container_name: portainer
    image: bigbugcc/portainer-ce
    restart: unless-stopped
    ports:
      - "9000:9000/tcp"
      - "9443:9443/tcp"
    environment:
      - TZ=Asia/Novosibirsk
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/portainer/data:/data

Разрешения

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

sudo chown root:docker docker-compose.yaml
sudo chmod g+w docker-compose.yaml

Проверьте конфигурацию

Хотите убедиться, что вы не допустили ошибок в конфигурации? Выполните следующую команду, и Docker выведет вам то, что будет запущено, а также все ошибки в вашем конфиге и предупреждения.

docker-compose -f docker-compose.yaml config

Запуск

docker-compose up -d

Запускаем, и Docker загрузит последний образ Portainer и все настроит. После этого мы сможем открыть веб-интерфейс Portainer, перейдя по адресу (вы получите предупреждение о самоподписанном сертификате) или (нешифрованное соединение).

https://<ip компьютера>:9443

http://<ip компьютера>:9000

Веб-интерфейс Portainer
Веб-интерфейс Portainer

При первом посещении этого портала он попросит нас создать учетную запись пользователя.

4. Установка Home Assistant

Если вы пропустили предыдущий пункт, то потребуется первоначальная настройка Docker Compose для работы:

cd /opt 
sudo nano docker-compose.yaml

Далее записываем конфигурацию контейнера в файл(не забываем указать свой часовой пояс для правильного показа времени в интерфейсе и логах):

version: '3.0'

services:
  [...]
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    restart: unless-stopped
    environment:
      - TZ=Asia/Novosibirsk
    volumes:
      - /opt/homeassistant/config:/config
      - /etc/localtime:/etc/localtime:ro
    privileged: true
    network_mode: host

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

cd /opt
sudo mkdir -p homeassistant/config
docker-compose up -d

Теперь Docker извлечет образ Home Assistant и все настроит.

Скачивание и установка Homeassistant
Скачивание и установка Homeassistant

Настройка Home Assistant

Теперь, когда контейнер запущен и работает, нам нужно настроить сам экземпляр Home Assistant.

Откройте браузер и перейдите по адресу http://<ip компьютера>:8123

Начальная настройка Home Assistant

Окно приветствия Home Assistant
Окно приветствия Home Assistant

Выберите имя пользователя и пароль для вашей учетной записи Home Assistant. Эта учетная запись также будет "администратором".

Далее пройдите через настройку вашей домашней зоны. В процессе настройки Home Assistant даже покажет вам устройства, которые он уже обнаружил и которые вы можете интегрировать с самого начала.

После завершения настройки вы окажетесь на информационной панели Home Assistant. Если вы настроили какие-либо устройства на предыдущем этапе, они будут отображаться на главном экране.

Пустой главный экран Home Assistant
Пустой главный экран Home Assistant

Управление Portainer из Home Assistant

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

Для этого мы воспользуемся панелью iframe. Эта интеграция добавит Portainer в боковую панель Home Assistant.

cd /opt/homeassistant/config
sudo nano configuration.yaml

Чтобы добавить iframe для Portainer, добавьте следующий код в файл configuration.yaml:

panel_iframe:
  portainer:
    title: Portainer
    url: "https://192.168.10.106:9443"
    icon: mdi:docker
    require_admin: true

5. Установка брокера Mosquitto для работы MQTT и Zigbee устройств

В этой части мы добавим наше первое дополнение. Брокер Mosquitto MQTT позволит нам соединяться с широким спектром устройств, и я настоятельно рекомендую его к установке.

Обновим конфигурацию docker-compose.yaml:

services:
  [...]
  homeassistant:
    [...]
    depends_on:
      - mosquitto

  mosquitto:
    container_name: mosquitto
    image: eclipse-mosquitto
    restart: unless-stopped
    ports:
      - "1883:1883/tcp"
    environment:
      - TZ=Asia/Novosibirsk
    volumes:
      - /opt/mosquitto/config:/mosquitto/config
      - /opt/mosquitto/data:/mosquitto/data
      - /opt/mosquitto/log:/mosquitto/log
    stdin_open: true
    tty: true

Мы добавили строки stdin_open и tty, чтобы впоследствии мы могли подключиться к терминалу контейнера для выполнения некоторых команд.

Обратите внимание, что мы также добавили зависимость от контейнера mosquitto для нашего контейнера Home Assistant. Таким образом, наш брокер будет в сети до запуска Home Assistant, и мы можем быть уверены, что наше соединение не прервется.

Файл конфигурации mosquitto.conf

Когда мы запустим контейнер Mosquitto с помощью docker-compose up -d, в журналах появятся ошибки о невозможности открыть файл конфигурации /mosquitto/config/mosquitto.conf. Чтобы исправить это, мы можем загрузить файл конфигурации по умолчанию и сохранить его во вновь созданном каталоге config:

cd /opt/mosquitto/config/
sudo wget https://raw.githubusercontent.com/eclipse/mosquitto/master/mosquitto.conf

Однако мы сделаем несколько изменений. Вы можете добавить следующие строки в конец конфигурационного файла, так как по умолчанию все настройки закомментированы (настройки по умолчанию).

sudo nano mosquitto.conf
# Добавьте следующие строки в конец

# Listen on port 1883 on all IPv4 interfaces
listener 1883
socket_domain ipv4
# save the in-memory database to disk
persistence true
persistence_location /mosquitto/data/
# Log to stderr and logfile
log_dest stderr
log_dest file /mosquitto/log/mosquitto.log
# Require authentication
allow_anonymous false
password_file /mosquitto/config/mqttuser

Пользователи Mosquitto

Далее мы создадим пользователя в Home Assistant для соединения с брокером.

В идеале мы позже создадим нового пользователя для каждого устройства (семейства). Например, одна учетная запись для устройств Shelly, одна для Zigbee2MQTT и т.д.

Выполните следующую команду для создания пользователя с именем homeassistant. Обратите внимание, что параметр -c создаст новый файл паролей и перезапишет все существующие файлы. Поэтому отбросьте этот параметр, если вы хотите создать вторую учетную запись.

docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/mqttuser homeassistant

Если теперь вы проверите содержимое только что созданного файла mqttuser, вы найдете свое имя пользователя и хэшированный пароль:

cat /opt/mosquitto/config/mqttuser
homeassistant:$7$101$q7VtJJ/E*******7$1I******************************************b/G**************************************A==

Теперь мы можем перезапустить контейнер Mosquitto, чтобы он загрузил наши изменения:

sudo docker-compose restart mosquitto

Логи должны показать, что контейнер Mosquitto запущен:

sudo cat /opt/mosquitto/log/mosquitto.log
1662413136: mosquitto version 2.0.15 starting
1662413136: Config loaded from /mosquitto/config/mosquitto.conf.
1662413136: Opening ipv4 listen socket on port 1883.
1662413136: mosquitto version 2.0.15 running

Настройка MQTT в Home Assistant

Теперь мы можем подключить Home Assistant к нашему брокеру MQTT, чтобы он мог начать подписываться на темы и отправлять сообщения. Поскольку пока нет других подключенных MQTT клиентов, Home Assistant пока не будет добавлять новые устройства.

Добавление интеграции MQTT
Добавление интеграции MQTT

Мы добавляем новую интеграцию MQTT в Home Assistant и вводим учетные данные, которые мы установили минуту назад для аутентификации.

Добавление данных пользователя MQTT
Добавление данных пользователя MQTT

Логи контейнера MQTT подтверждают успешное подключение Home Assistant:

sudo cat /opt/mosquitto/log/mosquitto.log
1662413136: mosquitto version 2.0.15 running
1662414198: New connection from 192.168.10.106:43153 on port 1883.
1662414198: New client connected from 192.168.10.106:43153 as 4atvQWWEyf2XpG3yy0kgOW (p1, c1, k60, u'homeassistant').
1662414198: Client 4atvQWWEyf2XpG3yy0kgOW disconnected.
1662414198: New connection from 192.168.10.106:39605 on port 1883.
1662414198: New client connected from 192.168.10.106:39605 as 5gNbahjfE5DulEufquYcaa (p2, c1, k60, u'homeassistant').
Интеграция MQTT запущена
Интеграция MQTT запущена

6. Установка Zigbee2MQTT для подключения датчиков и других устройств умного дома по протоколу Zigbee

Для этого потребуется приобрести отдельный Zigbee-координатор, который подключается к компьютеру по USB. Я использовал этот в своей системе.

Найти координатор Zigbee

В конфигурации Docker compose нам нужно будет назначить координатор Zigbee, который будет подключен через USB, к контейнеру Docker.

Подключите ваш координатор Zigbee (например, Conbee II, Sonof Zigbee 3.0 Plus, ...) к вашей машине. Затем выполните следующую команду, чтобы получить уникальный путь к устройству.

ls -l /dev/serial/by-id/
usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_eexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx52-if00-port0 -> ../../ttyUSB0

Позже мы будем использовать этот уникальный путь by-id в нашей конфигурации вместо типичного /dev/ttyUSB0, потому что всегда есть риск, что устройство получит новый TTY после перезагрузки, особенно при подключении других устройств.

Docker-compose

Мы расширяем наш docker-compose.yaml конфигурацией для контейнера Zigbee2MQTT.

services:
  [...]

  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt
    restart: unless-stopped
    ports:
      - "8099:8099/tcp"
    environment:
      - TZ=Asia/Novosibirsk
    volumes:
      - /opt/zigbee2mqtt/data:/app/data
      - /run/udev:/run/udev:ro
    devices:
      - /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_eexxxxxxxxxxxxxxxxxxxxxxxxxxxx52-if00-port0:/dev/ttyACM0

Обратите внимание, что я изменил отображение портов для этого контейнера. Порт 8080 уже используется администратором, поэтому я изменил порт внешнего интерфейса Zigbee2MQTT на 8099 (см. ниже) и указал его в конфигурации Docker.

Мы не будем пока запускать наш контейнер, так как сначала нам нужно настроить нашу конфигурацию.

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

Когда мы настраивали MQTT-брокер Mosquitto, я говорил, что предпочитаю создавать MQTT-пользователя для каждого сервиса. Поэтому давайте создадим пользователя для нашего контейнера Z2M.

docker exec -it mosquitto mosquitto_passwd /mosquitto/config/mqttuser z2m_mqtt
Password:          # Enter a password
Reenter password:  # Repeat the password

cat mosquitto/config/mqttuser
[...]
z2m_mqtt:$7$101$1xcB1yrF********$O$XR******************2/N************************************************************g==

Конфиг Zigbee2MQTT

Чтобы получить копию стандартного конфига, запустите sudo wget https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/data/configuration.yaml в папке, где будет храниться конфиг (/opt/zigbee2mqtt/data). Затем откройте и отредактируйте его с помощью sudo nano /opt/zigbee2mqtt/data/configuration.yaml.

Мы укажем Z2M подключиться к нашему MQTT-брокеру, использовать синтаксис, который понимает Home Assistant для обнаружения устройств, настроить веб-сервер и позволить Z2M сгенерировать некоторые ключи, используемые для настройки сети Zigbee.

# Adapter settings
serial:
  port: /dev/ttyACM0

# MQTT
mqtt:
  base_topic: zigbee2mqtt
  server: '!secret server'
  user: '!secret user'
  password: '!secret password'
  client_id: zigbee

# Zigbee network
permit_join: false # Do not allow random devices to connect automatically

# Webserver
frontend:
  port: 8099 # Custom port
  url: 'http://<ip.of.our.box>:8099' # Update IP here

# Devices and groups
# Extract config to separate files
devices: devices.yaml
groups: groups.yaml

# Home Assistant integration
homeassistant: true

Если вы проверите журналы через Portainer или docker-compose logs zigbee2mqtt, вы увидите, что наш контейнер прекрасно запустился:

Using '/app/data' as data directory
Zigbee2MQTT:info  2022-10-04 12:09:47: Logging to console and directory: '/app/data/log/2022-10-04.12-09-47' filename: log.txt
Zigbee2MQTT:info  2022-10-04 12:09:47: Starting Zigbee2MQTT version 1.28.0 (commit #03ba647)
Zigbee2MQTT:info  2022-10-04 12:09:47: Starting zigbee-herdsman (0.14.62)
Zigbee2MQTT:info  2022-10-04 12:09:48: zigbee-herdsman started (resumed)
Zigbee2MQTT:info  2022-10-04 12:09:48: Coordinator firmware version: '{"meta":{"maintrel":1,"majorrel":2,"minorrel":7,"product":1,"revision":20220219,"transportrev":2},"type":"zStack3x0"}'
Zigbee2MQTT:info  2022-10-04 12:09:48: Currently 0 devices are joined:
Zigbee2MQTT:info  2022-10-04 12:09:48: Zigbee: disabling joining new devices.
Zigbee2MQTT:info  2022-10-04 12:09:48: Connecting to MQTT server at mqtt://<ip.of.our.box>:1883
Zigbee2MQTT:info  2022-10-04 12:09:48: Connected to MQTT server
Zigbee2MQTT:info  2022-10-04 12:09:48: MQTT publish: topic 'zigbee2mqtt/bridge/state', payload '{"state":"online"}'
Zigbee2MQTT:info  2022-10-04 12:09:48: Started frontend on port 0.0.0.0:8099
Zigbee2MQTT:info  2022-10-04 12:09:48: MQTT publish: topic 'zigbee2mqtt/bridge/state', payload '{"state":"online"}'

Добавим Z2M на боковую панель Home Assistant:

Процесс аналогичен с добавлением Portainer:

panel_iframe:
  portainer:
  [...]
  zigbee2mqtt:
    title: Zigbee2MQTT
    icon: mdi:zigbee
    url: http://192.168.10.106:8099
    require_admin: true

После перезапуска Home Assistant (docker-compose restart homeassistant) получим примерно следующее:

Главная панель Zigbee2MQTT без устройств
Главная панель Zigbee2MQTT без устройств
Нажатием на кнопку Permit join можно разрешить сопряжение Zigbee устройств
Нажатием на кнопку Permit join можно разрешить сопряжение Zigbee устройств

В данном видеоролике подробно и наглядно показано как пользоваться Zigbee2MQTT. Если вы в первый раз работаете с ним, рекомендую к просмотру.

Конец

Спасибо за внимание, есть еще немало дополнений, которые можно добавить, поэтому статья будет дополняться.

Если возникнут вопросы или предложения - пишите в комментарии, рад любой активности.

Комментарии (20)


  1. xxxphilinxxx
    24.04.2023 08:21

    Следует отметить, что установка докер-контейнером, в отличие от виртуалки или установки прямо на железо, накладывает некоторые ограничения https://www.home-assistant.io/installation/#compare-installation-methods


    1. k0te1k4 Автор
      24.04.2023 08:21
      +2

      В своем гайде я как раз показываю как можно частично(не все аддоны вообще могут стартануть на 32 бит) обойти ограничение на установку аддонов и пользоваться ими на 32-битных системах, где нет официальной поддержки.

      Вместо supervisor для обновлений можно установить пакет watchtower, который будет следить за контейнерами и обновлять по вашему желанию или автоматически.


  1. Jury_78
    24.04.2023 08:21

    Если ПК только для Home Assistant зачем контейнер?


    1. k0te1k4 Автор
      24.04.2023 08:21
      +1

      Можно и без контейнера, но так просто удобнее настраивать и отлаживать работу отдельных пакетов, а также добавлять их.

      Также через watchtower можно настроить автоматическое или полуавтоматическое обновление контейнеров.

      Если ноутбук/пк имеет 64-битный процессор и будет использоваться исключительно для умного дома, можно установить hass os(операционку, сделанную для homeassistant).


  1. Francyz
    24.04.2023 08:21

    А что по размещению на каком нить rasberi Pi и аналогах? Чтобы не держать полноценный ПК вечно включенным 24/7 ради умного дома.


    1. PTM
      24.04.2023 08:21

      я б тоже посмотрел


    1. k0te1k4 Автор
      24.04.2023 08:21
      +2

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


      1. k0te1k4 Автор
        24.04.2023 08:21
        +2

        По этой ссылке можно посмотреть официальный метод установки Home Assistant на Raspberry Pi 3, 4

        Также по ссылке метод установки для более старых малинок и некоторых других систем


      1. Francyz
        24.04.2023 08:21

        Ну если есть время то на последнюю актуальную самую. Тока планирую приобретать как раз под эти цели. Хочется поиграться с умным домом.


        1. k0te1k4 Автор
          24.04.2023 08:21
          +1

          Тогда как раз хорошим вариантом будет установить уже готовую систему по гайду с первой ссылки, получите максимум возможностей платформы (Home Assistant).
          Если хочется иметь полный доступ к системе, а не только Hass с супервайзером, то можно установить аддон ssh из магазина дополнений.


        1. DaemonGloom
          24.04.2023 08:21
          +2

          Учитывая цены на последние Raspberry — проще купить мини-комп на Intel за те же деньги примерно. Работать будет лучше.


          1. k0te1k4 Автор
            24.04.2023 08:21

            Согласен, хорошая идея. Даже на дешевеньких мини пк все будет просто летать.
            Еще дешевле будет найти какой-нибудь старенький ноут, который уже ни на что не годится и сделать из него сервер. Я себе вообще поставил Hass на ноут 2000-х годов и единственная проблема - esphome не может нормально прошить контроллер.

            В стоковой малинке кроме стоимости вижу проблему в sd-карте, может неожиданно отлететь вместе со всеми настройками.


            1. ArkadiyShuvaev
              24.04.2023 08:21

              У меня тоже есть ноут из 2000, 32 бита.

              До вашей статьи вообще даже представить не мог, что на него можно установить НА :)

              esphome не может нормально прошить контроллер

              Не приведёте, пожалуйста, пример, как именно это ограничивает обычного пользователя? Не хочется кучу времени потратить на установку на старый ноут, чтобы понять, что что-то не работает.


              1. riky
                24.04.2023 08:21
                +1

                Esphome может быть нужен для самодельных датчиков на esp8266 или esp32, если планируете делать все на заводских датчиках, то оно и не пригодится. На есп можно делать какие то редкие датчики, например СО2. Также можно их прошить первый раз с компа, а потом обновлять по воздуху.


              1. k0te1k4 Автор
                24.04.2023 08:21
                +1

                Согласен с комментарием@riky. Даже если вы захотите сделать свой собственный датчик на платформе esp8266 или esp32, то можно будет прошить его на другом пк и потом спокойно пользоваться по назначению. Уже готовлю статью с информацией о том, как это можно сделать без особых проблем.


        1. egribanov
          24.04.2023 08:21

          Мини пк не дешевле малины будет?


    1. Wendor
      24.04.2023 08:21

      У меня +/- тоже самое на малинке поднято.


  1. RuDenis
    24.04.2023 08:21

    Как раз 3я малинка приказала долго жить. При этом дома крутится минипк, на котором крутится plex и прочее. Доступ извне осуществлен через traefik. Когда ставишь zigbee2mqtt через магазин аддонов в home assistant - вкладка на боковой панели работает норм. Но в связи с переездом на docker, при добавлении в configuration.yaml строк panel_iframe доступ к странице zigbee2mqtt отсутствует. По всей видимиости из-за того, что в поле url указывается локальный адрес. К тому же в локалке http, а через traefik идет https и в результате имею:

    Может кого-нибудь сталкивался, есть идеи как это обойти? Внутри локальной сети работает нормально.


    1. k0te1k4 Автор
      24.04.2023 08:21

      Попробуйте в конфиге изменить настройку на https://локальный адрес:порт