Привет всем,

Довольно давно у меня появилась идея реализовать проект умного дома/квартиры. Поизучав информацию в интернете, я понял, что мой уровень компетенции позволяет вписаться в эту авантюру.

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

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

Мы же пойдем путем ручной установки окружения на “голую” виртуальную машину под Ubuntu Server, работающую в Proxmox.

Характеристики виртуальной машины:

  • CPU: 4 ядра
  • RAM: 8 GB
  • Хранилище: 64 GB (NVMe-пул)

Установка HomeAssistant

Инсталляция HASS на “голый” сервер не является чем-то сложным. Если коротко, сначала мы устанавливаем Python и его зависимости. Затем создаем системного пользователя, под которым инициализируем виртуальное окружение. В это окружение устанавливаем все компоненты приложения через стандартный Python-пакетный менеджер.

Python, и зависимости

Для работы Home Assistant версии - 2025.1.4 требуется Python 3.13. К сожалению, эта версия языка не включена состав стандартных репозиториев.

У нас есть два варианта:

  1. Собрать Python из исходников.
  2. Подключить сторонний репозиторий и установить оттуда.

Мы выберем второй способ.

Сначала обновим систему и установим пакет software-properties-common для управления локальными репозиториями:

sudo apt update
sudo apt upgrade -y 
sudo apt-get install software-properties-common

Далее добавляем репозиторий:

sudo add-apt-repository ppa:deadsnakes/ppa

Установим Python 3.13:

sudo apt update
sudo apt install python3.13 python3.13-full -y

Проверим, что версия установлена корректно:

sudo update-alternatives --install /usr/bin/python3 python3 $(which python3.13) 1

Убеждаемся, что версия корректная:

python3 --version
--
Python 3.13.1

Питоновский пакетный менеджер поставим такой же версии:

python3 -m ensurepip --upgrade
python3 -m pip install --upgrade pip

Основные требуемые пакеты мы установили, теперь поставим python-зависимости нужные для запуска Home Assistant:

sudo apt-get install python3.13-dev python3.13-venv bluez libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff6 libturbojpeg0-dev tzdata ffmpeg liblapack3 liblapack-dev libatlas-base-dev

Пользователь, установка окружения

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

Создаем каталог под домашную директорию системного пользователя. В ней будет распологаться системные файлы HA, базенка и конфигурационные файлы.

sudo mkdir /opt/homeassistant

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

sudo useradd --system -d /opt/homeassistant -c "HomeAssistant system user" homeassistant

Агрументы:

  • --system Создаёт системного пользователя (без возможности входа в систему и без домашнего каталога по умолчанию).
  • -b /opt/homeassistant Базовый каталог для домашней директории,
  • -c "HomeAssistant system user" Комментарий или описание пользователя.

Не забываем поменять владельца/группу на каталог служебного пользователя:

sudo chown homeassistant:homeassistant /opt/homeassistant/

Теперь переключаемся в окружение этого пользователя, и проверям версию питона и домашний каталог:

# Переключаемся на пользователя:
sudo su -l homeassistant 

# Меняем оболочку:
bash

# Проверяем версию питона и домашний каталог:
python3 --version && pwd

Здесь же из под нашего пользователя создаем виртуальное окружение, и аквируем его:

python3 -m venv .
source bin/activate

Внутри виртуального каталога, ставим пакет wheel. После ставим прилу HA:

python3 -m pip install wheel
pip3 install homeassistant==2025.1.4 isal

Установка и сборка может затянуться до 1-3 минут. И если в процессе нечего не сломалось из-за отсуствующих зависимостей, то можем в тестовом формате запустить приложение.

(homeassistant) homeassistant@hass:~$ hass
Unable to find configuration. Creating default one in /opt/homeassistant/.homeassistant

При первом запуске hass создаст в своем домашнем каталоге, директорию .homeassistant под конфигурационные файлы.

Пока приложение запущено в консоли, можем в браузере обратится по адресу - http://<server-ip>:8123 для проверки: smarthome-hass1.png

HomeAssistant первично готов к последующей настройке, но перед этим донастроим еще пару нюансов со стороны сервера.

Проксирование и автозапуск HA

Традиционно управлять запуском/остановкой сервиса будем через systemd-юнит.

Для этого возвращаемся обратно в окружение администратора, и пишем юнит:

sudo vim /etc/systemd/system/hass.service
---
[Unit]
Description=Home Assistant
After=network-online.target

[Service]
Type=simple
User=homeassistant
WorkingDirectory=/opt/homeassistant/.homeassistant
ExecStart=/opt/homeassistant/bin/python3 /opt/homeassistant/bin/hass

[Install]
WantedBy=multi-user.target

Релоудимся и запускаем сервис:

sudo systemctl daemon-reload
sudo systemctl enable --now hass

В дополнение можно проверить статус сервиса: sudo systemctl status hass

Что бы не обращаться на стандартный порт HA, спрячем его за обратным прокси. Для этого сначала ставим - nginx.

sudo apt-get install nginx -y

По окончанию установки пишем конфиг:

sudo vim /etc/nginx/conf.d/hass.conf
---
server {
    listen 80;
    server_name _;

    proxy_buffering off;

    access_log  /var/log/nginx/hass.access.log;
    error_log  /var/log/nginx/hass.error.log;

    location / {
        proxy_redirect http:// https://;
        proxy_pass http://127.0.0.1:8123/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection “upgrade”;
    }
}

В этом описании веб-сервера, мы слушаем 80/tcp порт и проксируем все запросы на сетевой сокет 127.0.0.1:8123. К сожалениб

Стандартную конфигу nginx убираем из публикации:

sudo rm /etc/nginx/sites-enabled/default

Запускаем вебсервер:

sudo systemctl enable --now nginx

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

sudo ufw allow proto tcp to 0.0.0.0/0 port 22
sudo ufw allow proto tcp to 0.0.0.0/0 port 80

# Включаем фаер
sudo ufw enable

Предварительно, на своем микроте я добавил локальную доменную запись для HA. Теперь можем ходить на UI по домену

Онбординг в Home Assistant

По сути это начальный процесс настройки HA после первой установки и запуска системы. Cвоего рода “холодный запуск”, где пользователь выполняет базовую конфигурацию.

В браузере идем в ui, и на странице жмем - Create my smart home: smarthome-hass1.png

На новой страничке создаем пользователя, указываем логин/пароль: smarthome-hass2.png

Далее указываем локацию, нашей умной квартиры: smarthome-hass3.png

Последние страницы настраивают отправку статистики, репортов и аналитики. По умолчанию эти фичи выключены, поэтому нечего не включаем и просто следуем далее завершая инициализацию..

Дебаг логи

В процессе настройки, бывало что не хватало логов для дебага HA.

Включить их можно путем обновления файла - configuration.yaml

Открываем этот файл, и добавляем в конец:

logger:
  default: debug
  logs:
    homeassistant.config: notset

Сохраняемся и перезапускам HA.

Первое устройство

В качестве первой интеграции с сервером HA настроим Zigbee шлюз/координатор. Это устройство будет основой Zigbee-радиосети, объединяющей все компоненты умного дома.

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

Позже выяснилось, что самым простым способом интеграции этого хаба является использование сервиса Tuya Cloud. Однако я скептически отнесся к такому варианту, поскольку в случае отсутствия доступа к интернету половина умного дома просто перестанет работать. 😅

По итогу приобрел Zegbee USB Dongle Plus (Модель: ZBDongle-E) от Sonoff. Судя по шуму в интернете, устройство получилось крайне удачным.

Из достоиств,

  • ✅ - Работа с Home Assistant из коробки по ZHA,
  • ✅ - Есть возможность работы впо Zigbee2MQTT,
  • ✅ - Легко много прошить, для работы по Matter/Thread,
  • ✅ - Поддержка до 200 устройств.
  • ✅ - Дальность связи до 20 dBm,

Визуально комплект такой: smarthome-hass3.png

Стик работает на частоте 2.4 ГГц, и его радиочасть можно улучшить забавным способом — просто прикрутив антенну от старого MikroTik.

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

Подключение к proxmox

Подключившись к proxmox хосту, девайс нужно пробросить во внутрь виртуальной машины, делается это таким образом.. Подключаемся на сервер по ssh, и выполняем листинг всех usb-устройств:

lsusb | grep -i cp21
---
Bus 001 Device 004: ID 10c4:ea60 Silicon Labs CP210x UART Bridge

Из этого вывода нам понадобиться только ID устройства - 10c4:ea60. Идетификатор устройства состоит из двух составлящих это идентификатор вендора - 10c4 и идентификатор продукта - ea60.

Далее из листинга всех виртуальных машин, находим ID сервера с HA.

qm list | grep hass
---
102 hass.home.local      running    8096              64.00 371444   

Теперь просто к виртуальному серверу подключаем usb-устройство, командой:

qm set 102 -usb0 host=10c4:ea60
---
update VM 102: -usb0 host=10c4:ea60

Через UI интерфейс proxmox, добавление устройства выполняется еще проще. smarthome-hass-stick2.png Переходим в раздел - Hardware виртуальной машины, далее жмем на кнопку добавления нового устройства. Из выпадающего меню выбираем - USB Device.

В новом окне выбираем пункт - Use USB Vendor/Device ID, и ниже из списка уже с понятным названием отобразится наш стик. Выбираем его и жмем Add.

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

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

sudo usermod -a -G dialout homeassistant

Так как на новое устройство добавляемся данная группа:

ls /dev/ttyUSB0 -lah
---
crw-rw---- 1 root dialout 188, 0 Jan 31 14:05 /dev/ttyUSB0

Новое устройство в HA

Возвращаемся в web-интерфейс Home Assistant, чтобы добавить новое устройство.

При первом подключении координатора, в разделе уведомлений вам должно поступить сообщение об новом устройстве: smarthome-hass-stick6.png Это хороший знак — значит, HA автоматически обнаружил стик. Если перейти по ссылкам из уведомления, устройство, скорее всего, добавится автоматически.

Если же автоматическое обнаружение не сработало, добавим устройство вручную.

Для того чтобы добавить устройство в ручном формате, переходим в раздел настроек (Settings), и выбираем пункт - Devices & services: smarthome-hass-stick7.png

На новой странице откроется окно с интеграциями, нажимаем на кнопку добавить интеграцию - Add Integration. Откроется поле поиска, вводим в поиск - Zigbee Home Automation или сокращенно ZHA. smarthome-hass-stick8.png Затем выбираем найденную интеграцию..

Вновь откроеться новое окно с интеграцией, в выпадающем списке нужно будет выбрать наш стик: smarthome-hass-stick9.png

После начнется инициализация устроства, после успеха которой будет ждать сообщение: smarthome-hass-stick10.png

Жмем на Finish, устройство подключено.

В этом примере мы настроили интеграцию через ZHA. Это официальное решение, оно простое, быстрое и не требует сложных настроек.

Однако существует альтернативная и не менее популярная интеграция — Zigbee2MQTT. Ее основное преимущество — использование MQTT, что позволяет интегрировать более 3000 моделей Zigbee-устройств в Home Assistant.

Дополнительные возможности Zigbee2MQTT:

  • ✅ Более гибкие настройки.
  • ✅ Возможность перепрошивки устройств.
  • ✅ Детальная настройка параметров работы.

Возможно, в следующей итерации я переведу все на Zigbee2MQTT, если стандартного функционала ZHA окажется недостаточно.