Интеграция с Home Assistant

Hermes Agent интегрируется с Home Assistant двумя способами:

  1. Платформа шлюза (Gateway) — подписывается на изменения состояний в реальном времени через WebSocket и реагирует на события

  2. Инструменты умного дома — четыре LLM-вызываемых инструмента для запросов и управления устройствами через REST API

Настройка

1. Создание долгоживущего токена доступа

  1. Откройте ваш экземпляр Home Assistant

  2. Перейдите в свой Профиль (нажмите на своё имя в боковой панели)

  3. Прокрутите до раздела Долгоживущие токены доступа

  4. Нажмите Создать токен, дайте ему имя, например «Hermes Agent»

  5. Скопируйте токен

2. Настройка переменных окружения

# Add to ~/.hermes/.env

# Required: your Long-Lived Access Token
HASS_TOKEN=your-long-lived-access-token

# Optional: HA URL (default: http://homeassistant.local:8123)
HASS_URL=http://192.168.1.100:8123
Набор инструментов `homeassistant` включается автоматически, когда установлен `HASS_TOKEN`. Как платформа шлюза, так и инструменты управления устройствами активируются от одного этого токена.

3. Запуск шлюза (Gateway)

hermes gateway

Home Assistant появится как подключённая платформа рядом с другими мессенджер-платформами (Telegram, Discord и т. д.).

Доступные инструменты

Hermes Agent регистрирует четыре инструмента для управления умным домом:

ha_list_entities

Выводит список сущностей Home Assistant, опционально отфильтрованных по домену или зоне.

Параметры:

Пример:

List all lights in the living room

Возвращает идентификаторы сущностей, состояния и дружественные имена.

ha_get_state

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

Параметры:

Пример:

What's the current state of climate.thermostat?

Возвращает: состояние, все атрибуты, временные метки последнего изменения/обновления.

ha_list_services

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

Параметры:

Пример:

What services are available for climate devices?

ha_call_service

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

Параметры:

Примеры:

Turn on the living room lights
→ ha_call_service(domain="light", service="turn_on", entity_id="light.living_room")
Set the thermostat to 22 degrees in heat mode
→ ha_call_service(domain="climate", service="set_temperature",
    entity_id="climate.thermostat", data={"temperature": 22, "hvac_mode": "heat"})
Set living room lights to blue at 50% brightness
→ ha_call_service(domain="light", service="turn_on",
    entity_id="light.living_room", data={"brightness": 128, "color_name": "blue"})

Платформа шлюза (Gateway): события в реальном времени

Адаптер шлюза Home Assistant подключается через WebSocket и подписывается на события state_changed. Когда состояние устройства меняется и соответствует вашим фильтрам, оно пересылается агенту в виде сообщения.

Фильтрация событий

warning Требуется конфигурация По умолчанию события не пересылаются. Вы должны настроить хотя бы один из параметров watch_domains, watch_entities или watch_all, чтобы получать события. Без фильтров при запуске регистрируется предупреждение, и все изменения состояний молча игнорируются.

Настройте, какие события видит агент, в файле ~/.hermes/config.yaml в разделе extra платформы Home Assistant:

platforms:
  homeassistant:
    enabled: true
    extra:
      watch_domains:
        - climate
        - binary_sensor
        - alarm_control_panel
        - light
      watch_entities:
        - sensor.front_door_battery
      ignore_entities:
        - sensor.uptime
        - sensor.cpu_usage
        - sensor.memory_usage
      cooldown_seconds: 30
Настройка По умолчанию Описание
watch_domains (нет) Отслеживать только домены сущностей (например, climate, light, binary_sensor)
watch_entities (нет) Отслеживать только указанные идентификаторы сущностей
watch_all false Установите true, чтобы получать все изменения состояний (не рекомендуется для большинства конфигураций)
ignore_entities (нет) Всегда игнорировать эти сущности (применяется до фильтров домена/сущности)
cooldown_seconds 30 Минимальное количество секунд между событиями для одной и той же сущности
Начните с небольшого набора доменов — `climate`, `binary_sensor` и `alarm_control_panel` покрывают большинство полезных автоматизаций. Добавляйте другие по мере необходимости. Используйте `ignore_entities`, чтобы подавить шумные датчики, такие как температура CPU или счётчики времени работы.

Форматирование событий

Изменения состояний форматируются в удобочитаемые сообщения в зависимости от домена:

Домен Формат
climate «Режим HVAC изменён с 'off' на 'heat' (текущая: 21, целевая: 23)»
sensor «изменилось с 21°C на 22°C»
binary_sensor «сработал» / «сброшен»
light, switch, fan «включён» / «выключен»
alarm_control_panel «состояние сигнализации изменено с 'armed_away' на 'triggered'»
(другие) «изменилось с 'old' на 'new'»

Ответы агента

Исходящие сообщения от агента доставляются как постоянные уведомления Home Assistant (через persistent_notification.create). Они отображаются в панели уведомлений HA с заголовком «Hermes Agent».

Управление подключением

Безопасность

Инструменты Home Assistant применяют ограничения безопасности:

warning Заблокированные домены Следующие домены служб заблокированы для предотвращения произвольного выполнения кода на хосте HA:

Попытка вызвать службы в этих доменах возвращает ошибку.

Идентификаторы сущностей проверяются по шаблону ^[a-z_][a-z0-9_]*\\.[a-z0-9_]+$ для предотвращения атак внедрения.

Примеры автоматизаций

Утренняя рутина

User: Start my morning routine

Agent:

1. ha_call_service(domain="light", service="turn_on",
     entity_id="light.bedroom", data={"brightness": 128})

2. ha_call_service(domain="climate", service="set_temperature",
     entity_id="climate.thermostat", data={"temperature": 22})

3. ha_call_service(domain="media_player", service="turn_on",
     entity_id="media_player.kitchen_speaker")

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

User: Is the house secure?

Agent:

1. ha_list_entities(domain="binary_sensor")
      checks door/window sensors

2. ha_get_state(entity_id="alarm_control_panel.home")
      checks alarm status

3. ha_list_entities(domain="lock")
      checks lock states

4. Reports: "All doors closed, alarm is armed_away, all locks engaged."

Реактивная автоматизация (через события шлюза)

При подключении в качестве платформы шлюза агент может реагировать на события:

[Home Assistant] Front Door: triggered (was cleared)

Agent automatically:

1. ha_get_state(entity_id="binary_sensor.front_door")

2. ha_call_service(domain="light", service="turn_on",
     entity_id="light.hallway")

3. Sends notification: "Front door opened. Hallway lights turned on."