Интеграция с Домашним помощником
Hermes Agent интегрируется с Home Assistant двумя способами:
- Платформа шлюза — подписывается изменение состояния в первый раз через WebSocket и реагирует на события.
- Инструменты умного дома — четыре вызываемых инструмента LLM для запросов и управления устройствами через REST API.
Настройка
1. Создание долгоживущего токена доступа
- Откройте ваш экземпляр Home Assistant.
- Перейдите в свой Профиль (нажмите на свое имя на боковой панели).
- Прокрутите до Долгоживущие токены доступа
- Нажмите Создать токен, дайте ему имя, например «Агент Гермеса».
- Скопируйте токен
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
⚠️ Warning
Обязательная переменаПо умолчанию никакие события не пересылаются. Чтобы получать события, вам нужно настроить хотя бы один из параметров watch_domains, watch_entities или watch_all. Без фильтров при запуске записывается предупреждение, и все изменения состояния выбрасываются молча.
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 с заголовком «Агент Гермес».
Управление соединением
- WebSocket с 30-секундным пульсом для событий в первое время
- Автоматическое переподключение с задержкой: 5с → 10с → 30с → 60с
- REST API для исходящих тегов (отдельная сессия для избежания проблем WebSocket)
- Авторизация — события HA всегда авторизованы (не нужен белый список пользователей, так как
HASS_TOKENаутентифицирует соединение)
Безопасность
Инструменты Home Assistant соблюдение ограничений безопасности::::предупреждение Заблокированные домены Следующие доменные сервисы заблокированы для предотвращения невыполнения кода на хосте HA:
shell_command— произвольные команды контроля.command_line— датчики/выключатели, выполняющие команды.python_script— скриптовое выполнение Pythonpyscript— более широкая интеграция скриптовhassio— управление аддонами, включение/перезагрузка хостаrest_command— HTTP-запросы с сервера HA (вектор SSRF)
Попытка вызова сервисов в этих доменах возвращает ошибку.