Привет всем,
Довольно давно у меня появилась идея реализовать проект умного дома/квартиры. Поизучав информацию в интернете, я понял, что мой уровень компетенции позволяет вписаться в эту авантюру.
В этой главе заложим фундамент умного дома и настроим 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. К сожалению, эта версия языка не включена состав стандартных репозиториев.
У нас есть два варианта:
- Собрать Python из исходников.
- Подключить сторонний репозиторий и установить оттуда.
Мы выберем второй способ.
Сначала обновим систему и установим пакет 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
для проверки:
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:
На новой страничке создаем пользователя, указываем логин/пароль:
Далее указываем локацию, нашей умной квартиры:
Последние страницы настраивают отправку статистики, репортов и аналитики. По умолчанию эти фичи выключены, поэтому нечего не включаем и просто следуем далее завершая инициализацию..
Дебаг логи
В процессе настройки, бывало что не хватало логов для дебага 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,
Визуально комплект такой:
Стик работает на частоте 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, добавление устройства выполняется еще проще.
Переходим в раздел - 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, чтобы добавить новое устройство.
При первом подключении координатора, в разделе уведомлений вам должно поступить сообщение об новом устройстве:
Это хороший знак — значит, HA автоматически обнаружил стик. Если перейти по ссылкам из уведомления, устройство, скорее всего, добавится автоматически.
Если же автоматическое обнаружение не сработало, добавим устройство вручную.
Для того чтобы добавить устройство в ручном формате, переходим в раздел настроек (Settings), и выбираем пункт - Devices & services:
На новой странице откроется окно с интеграциями, нажимаем на кнопку добавить интеграцию - Add Integration
. Откроется поле поиска, вводим в поиск - Zigbee Home Automation или сокращенно ZHA.
Затем выбираем найденную интеграцию..
Вновь откроеться новое окно с интеграцией, в выпадающем списке нужно будет выбрать наш стик:
После начнется инициализация устроства, после успеха которой будет ждать сообщение:
Жмем на Finish, устройство подключено.
В этом примере мы настроили интеграцию через ZHA. Это официальное решение, оно простое, быстрое и не требует сложных настроек.
Однако существует альтернативная и не менее популярная интеграция — Zigbee2MQTT. Ее основное преимущество — использование MQTT, что позволяет интегрировать более 3000 моделей Zigbee-устройств в Home Assistant.
Дополнительные возможности Zigbee2MQTT:
- ✅ Более гибкие настройки.
- ✅ Возможность перепрошивки устройств.
- ✅ Детальная настройка параметров работы.
Возможно, в следующей итерации я переведу все на Zigbee2MQTT, если стандартного функционала ZHA окажется недостаточно.