Как запустить сервис по управлению умным домом?
Цель и актуальность
Вокруг нас становится все больше и больше различных устройств и программных сервисов, которые могут быть подключены к сетям и выполнять различные необходимые задачи, но есть одно «но». Оно заключается в том, что обычно эти самые устройства поддерживают корпорации, которые разрабатывают свое ПО для взаимодействия с этими устройствами. То есть нет 1 сервиса, через который мы можем взаимодействовать со всем многообразием устройств и программных сервисов. Эту трудность будем решать в рамках текущей статьи. Наши начальные требования:
open-source код, чтобы корпорации не могли диктовать свои условия или изменять их в одностороннем порядке.
Возможность подключения различных устройств, в том числе возможность самостоятельно написать такие обертки.
Возможность управления через различные устройства, минимум: ПК, смартфон.
docker-compose
Для себя выбрал в качестве сервиса по управлению умным домом Home Assistant (далее HA).
# Создаем файлы и необходимые директории
mkdir {smart_home,smart_home/config_postgres,smart_home/config_codeserver,smart_home/config_homeassistant}
cd smart_home
touch {docker-compose.yml,.env}
Редактируем файл с секретами через nano .env
:
HOMEASSISTANT_PG_PASSWORD=your_password
HOMEASSISTANT_PG_USER=your_user
Редактируем docker-compose.yml
через nano docker-compose.yml
:
services:
db:
image: postgres:13
container_name: homeassistant-postgres
volumes:
- ./config_postgres:/var/lib/postgresql/data
- /etc/localtime:/etc/localtime:ro
env_file: ".env"
ports:
- "8443:8443"
environment:
- POSTGRES_USER=${HOMEASSISTANT_PG_USER}
- POSTGRES_PASSWORD=${HOMEASSISTANT_PG_PASSWORD}
- POSTGRES_DB=homeassistant
restart: unless-stopped
network_mode: host
code-server:
image: lscr.io/linuxserver/code-server:latest
container_name: code-server
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
volumes:
- ./config_codeserver:/config
- ./config_homeassistant:/config_homeassistant
ports:
- "8443:8443"
network_mode: host
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
volumes:
- ./config_homeassistant:/config
- /etc/localtime:/etc/localtime:ro
ports:
- 8123:8123
restart: unless-stopped
privileged: true
depends_on:
- db
- code-server
network_mode: host
Коротко:
db
- база данных для хранения всех объектов необходимых HA.code-server - VSCode server для удобного редактирования конфигов HA.
homeassistant - HA.
Запускаем через docker-compose up -d
.
Настройка сервиса
Для доступа к нашему сервису переходим по адресу http://<your_ip>:8123
. Вводим учетные данные и делаем первоначальные настройки.
Редактируем конфиг HA
Даем необходимые права на изменения файлов:
sudo chown <your_user> -R ./config_homeassistant
Переходим по пути http://<your_ip>:8443/?folder=/config_homeassistant
. Нам нужны файлы:
configuration.yaml
- тут хранится основной конфиг HA.secrets.yaml
- файл для секретов, чтобы к ним обращаться из других*.yaml
.
В configuration.yaml
добавляем:
# DNS proxy
homeassistant:
external_url: !secret external_url
http:
use_x_forwarded_for: true
trusted_proxies:
- !secret trusted_proxy_docker
- !secret trusted_proxy_lan
ip_ban_enabled: true
login_attempts_threshold: 30
# Database
recorder:
db_url: !secret homeassistant_db_url
db_retry_wait: 20 # Wait 10 seconds before retrying
DNS proxy
- для возможности доступа к HA через Nginx Proxy Manager (далее npm). Database
- для подключения HA к нашей базе данных.
В secrets.yaml
вставляем:
# HA
homeassistant_db_url: "postgresql://<your_user>:<your_password>@localhost/homeassistant"
external_url: "https://homeassistant.volokzhanin.duckdns.org"
trusted_proxy_docker: 172.0.0.0/8
trusted_proxy_lan: 192.168.0.0/16
Проверка подключения к базе данных
docker exec -it homeassistant-postgres psql -d homeassistant -U <your_user> -h localhost
Если вы увидели:
psql (13.21 (Debian 13.21-1.pgdg120+1))
Type "help" for help.
Это значит подключение удалось.
Перезапускаем docker-compose
через docker-compose restart
. Для доступа через интернет добавляем в npm proxy hosts.
Так как мы будем иметь доступ через интернет, то рекомендую сразу настроить 2-FA через: Ваш пользователь -> Безопасность -> Модули многофакторной аутентификации -> Включить. Сканируем QR-код и для подтверждения вставляем код. Теперь у нас есть 2-й фактор :)
Для расширения возможностей умного дома устанавливаем HACS:
docker exec -it homeassistant bash
cd /
wget -O - https://get.hacs.xyz | bash -
Должен быть примерно такой вывод:
Connecting to get.hacs.xyz (188.114.98.224:443)
Connecting to raw.githubusercontent.com (185.199.110.133:443)
writing to stdout
- 100% |*****************************************************************************************************************| 4990 0:00:00 ETA
written to stdout
INFO: Trying to find the correct directory...
INFO: Found Home Assistant configuration directory at '//config'
INFO: Creating custom_components directory...
INFO: Changing to the custom_components directory...
INFO: Downloading HACS
Connecting to github.com (140.82.121.3:443)
Connecting to github.com (140.82.121.3:443)
Connecting to objects.githubusercontent.com (185.199.108.133:443)
saving to 'hacs.zip'
hacs.zip 100% |*****************************************************************************************************************| 18.1M 0:00:00 ETA
'hacs.zip' saved
INFO: Creating HACS directory...
INFO: Unpacking HACS...
INFO: Verifying versions
INFO: Current version is 2025.5.2, minimum version is 2024.4.1
INFO: Removing HACS zip file...
INFO: Installation complete.
Перезапускаем сервисы: docker-compose restart
Переходим: Настройки -> Устройства и службы -> Добавить игнтеграцию -> Устанавливаем HACS. Со всем соглашаемся и проходим процедуру регистрации (нужен аккаунт в GitHub). После этого видим слева на панели кнопку для запуска установок из HACS или GitHub.
Установка минимума интеграций
Устанавливаем Proxmox VE для мониторинга состояния Proxmox. Для авторизации необходимо получить токен на стороне Proxmox, его получение я описал в этой статье.
Устанавливаем SQL. И добавляем запрос:
SELECT (pg_database_size('homeassistant')/1024/1024) as db_size;
в интеграцию.
В результате должны получить примерно такой результат.
Настройка смартфона
Я использую ядро Linux, поэтому настройки у меня для Android. Через F-Droidустанавливаем Home Assistant
ИТОГ
Все начальные требования мы закрыли и имеем «комбайн» для работы с умным домом. В дальнейших статьях будем настраивать наш умный дом и подключать все больше и больше дополнительных возможностей.
Ссылки: