Интеграция с Домашним помощником

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

  1. Платформа шлюза — подписывается изменение состояния в первый раз через WebSocket и реагирует на события.
  2. Инструменты умного дома — четыре вызываемых инструмента LLM для запросов и управления устройствами через REST API.

Настройка

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

  1. Откройте ваш экземпляр Home Assistant.
  2. Перейдите в свой Профиль (нажмите на свое имя на боковой панели).
  3. Прокрутите до Долгоживущие токены доступа
  4. Нажмите Создать токен, дайте ему имя, например «Агент Гермеса».
  5. Скопируйте токен

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

# Добавьте в ~/.hermes/.env

# Обязательно: ваш долгоживущий токен доступа
HASS_TOKEN=your-long-lived-access-token

# Опционально: URL HA (по умолчанию: http://homeassistant.local:8123)
HASS_URL=http://192.168.1.100:8123
```:::информация
Набор инструментов «homeassistant» включается автоматически, когда установлен «HASS_TOKEN». И шлюз платформы, и инструменты управления устройствами активируются из этого одного токена.</div>
### 3. Запустить шлюз
```bash
hermes gateway

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

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

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

ha_list_entities

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

Параметры: - domain (опционально) — Фильтр по домену влияний: light, switch, climate, sensor, binary_sensor, cover, fan, media_player и т.д. - область (опционально) — Фильтр по названию области/комнаты (сопоставляется с дружественными именами): гостиная, кухня, спальня и т.д.

Пример:

Список всех светильников в гостиной

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

ha_get_state

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

Параметры: - entity_id (обязательно) — Сущность для запроса, например, light.living_room, climate.thermostat, sensor.temperature

Пример:

Каково текущее состояние climate.thermostat?

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

ha_list_services

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

Параметры: - домен (опционально) — Фильтр по домену, например, свет, климат, выключатель

Пример:

Какие сервисы доступны для климатических устройств?

ha_call_service

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

Параметры: - domain (обязательно) — Домен сервиса: light, switch, climate, cover, media_player, fan, scene, script - service (обязательно) — Имя сервиса: turn_on, turn_off, toggle, set_temperature, set_hvac_mode, open_cover, close_cover, set_volume_level - entity_id (опционально) — Целевая сущность, например, light.living_room - data (опционально) — Дополнительные параметры в виде JSON-объекта

Примеры:

Включи свет в гостиной
→ ha_call_service(domain="light", service="turn_on", entity_id="light.living_room")
Установи термостат на 22 градуса в режиме обогрева
→ ha_call_service(domain="climate", service="set_temperature",
    entity_id="climate.thermostat", data={"temperature": 22, "hvac_mode": "heat"})
Установи свет в гостиной на синий цвет с яркостью 50%
→ ha_call_service(domain="light", service="turn_on",
    entity_id="light.living_room", data={"brightness": 128, "color_name": "blue"})

Платформа шлюза: события в первый раз

Адаптер шлюза 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 (нет) Следить только за сверхъестественными доменами сущностей (например, климат, свет, binary_sensor)
watch_entities (нет) Следить только за событиями ID сущностей
смотреть_все ложь Установите true, чтобы получать все изменения состояния (не рекомендуется для большинства настроек)
игнорировать_сущности (нет) Всегда соотношение этих последствий (применяется к фильтрам домена/сущности)
cooldown_секунды 30 Минимальное количество секунд между событиями для одного и того же следствия
Переход с узким набором доменов — climate, binary_sensor и alarm_control_panel раскрывает наиболее полезные инновации. Добавляйте больше по мере необходимости. Используйте ignore_entities, чтобы подавить шумные датчики, такие как температура процессора или счетчики времени работы.
### Форматирование событий

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

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

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

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

Управление соединением

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

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

Попытка вызова сервисов в этих доменах возвращает ошибку. ID сущностей проверяются на соответствие шаблону ^[a-z_][a-z0-9_]*\.[a-z0-9_]+$ для предотвращения инъекций.

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

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

Пользователь: Запусти мою утреннюю рутину

Агент:
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")

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

Пользователь: Дом в безопасности?

Агент:
1. ha_list_entities(domain="binary_sensor")
      проверяет датчики дверей/окон
2. ha_get_state(entity_id="alarm_control_panel.home")
      проверяет статус сигнализации
3. ha_list_entities(domain="lock")
      проверяет состояния замков
4. Сообщает: "Все двери закрыты, сигнализация в режиме armed_away, все замки заперты."

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

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

[Home Assistant] Входная дверь: сработал (был сброшен)

Агент автоматически:
1. ha_get_state(entity_id="binary_sensor.front_door")
2. ha_call_service(domain="light", service="turn_on",
     entity_id="light.hallway")
3. Отправляет уведомление: "Входная дверь открыта. Свет в коридоре включён."