Как запустить сервис по управлению умным домом?

Цель и актуальность

Вокруг нас становится все больше и больше различных устройств и программных сервисов, которые могут быть подключены к сетям и выполнять различные необходимые задачи, но есть одно «но». Оно заключается в том, что обычно эти самые устройства поддерживают корпорации, которые разрабатывают свое ПО для взаимодействия с этими устройствами. То есть нет 1 сервиса, через который мы можем взаимодействовать со всем многообразием устройств и программных сервисов. Эту трудность будем решать в рамках текущей статьи. Наши начальные требования:

  1. open-source код, чтобы корпорации не могли диктовать свои условия или изменять их в одностороннем порядке.

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

  3. Возможность управления через различные устройства, минимум: ПК, смартфон.

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

Коротко:

  1. db - база данных для хранения всех объектов необходимых HA.

  2. code-server - VSCode server для удобного редактирования конфигов HA.

  3. 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. Нам нужны файлы:

  1. configuration.yaml - тут хранится основной конфиг HA.

  2. 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.

Установка минимума интеграций

  1. Устанавливаем Proxmox VE для мониторинга состояния Proxmox. Для авторизации необходимо получить токен на стороне Proxmox, его получение я описал в этой статье.

  2. Устанавливаем SQL. И добавляем запрос:

SELECT (pg_database_size('homeassistant')/1024/1024) as db_size;

в интеграцию.

sql.png В результате должны получить примерно такой результат. server.png

Настройка смартфона

Я использую ядро Linux, поэтому настройки у меня для Android. Через F-Droidустанавливаем Home Assistant

ИТОГ

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

Ссылки:

  1. Как установить Proxmox?

  2. Как установить Docker?

  3. Зачем нужен собственный сервер в 2025?

  4. Как запустить прокси-сервер для сервисов?

  5. Как запустить свой менеджер паролей?

  6. Как настроить центральный менеджмент сервер для ИПБ?