В свое время мне потребовалось автоматизировать перезагрузку одной из установленных интеграций после определенных действий. Поиск по документации на REST API ничего толкового не дал, но на офф. формуме нашлась пара тем с решениями похожих задач. Здесь я опишу свой опыт решения этой проблемы.
Для понимания того, как работать с REST API HA стоит обратится к официальной документации, там это достаточно понятно изложено.
Приведу пример – получение текущего состояния объекта.
C помощью curl:
curl -X GET \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <Long-lived access token>" \ <HA_URL>/api/states/sensor.time
С помощью PowerShell:
$headers = @{ "Content-Type"="application/json" "Authorization"="Bearer <Long-lived access token>" } Invoke-RestMethod -Method Get -Headers $headers -Uri <HA_URL>/api/states/sensor.time
<HA_URL> – адрес веб-интерфейса HA
<Long-lived access token> – токен, который вы можете создать в профиле своего пользователя HA (/profile), в самом низу страницы:
! Помните, что <Long-lived access token> это крайне чувствительная информация, полный аналог вашей пары логин-пароль, относитесь к нему соответствующим образом. В частности, не вставляйте в конфиги напрямую, используйте secrets.yaml
Ответ на этот запрос придет в виде json’a со всеми атрибутами запрашиваемого объекта:
{ "entity_id": "sensor.time", "state": "09:39", "attributes": { "friendly_name": "Time", "icon": "mdi:clock" }, "last_changed": "2021-02-04T06:39:00.005515+00:00", "last_updated": "2021-02-04T06:39:00.005515+00:00", "context": { "id": "80d077c0fced0fe879225b3ab6652466", "parent_id": null, "user_id": null } }
– ~ –
У меня же, напомню, была задача в автоматической перезагрузке одной из интеграций, а именно – Xiaomi Gateway 3.
После изучения офф. форума был найдет URL API при обращении к которому методом POST произойдет перезапуск интеграции:
<HA_URL>/api/config/config_entries/entry/<Integration_ID>/reload
Где <HA_URL>
это адрес веб-интерфейса Home Assistant’а, а <Integration_ID>
– внутренний ID интеграции.
Для получения ID интеграции придется воспользоватся панелью разработчика браузера (developer tools), обычно она вызывается клавишей F12.
Находясь в интерфейсе HA, откройте панель разработчика, выберите в ней закладку Network и перейдите на страницу настроек интеграций (/config/integrations/), после этого в панели вы увидите длинный список загрузившихся файлов, ресурсов и т.д.
Вам необходимо найти файл с именем entry, выбрав его, вы сможете увидеть список установленных у вас интеграций.
Найдите в этом списке нужную вам интеграцию ориентируясь по полям domain и title, искомый ID содержится в поле entry_id.
Таким образом, URL для перезагрузки показанной на скриншоте интеграции будет выглядеть так:
<HA_URL>/api/config/config_entries/entry/2eb6dcc3fdd42e63a01f7db162e7d7fb/reload
Пример с использованием curl:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <Long-lived access token>" \ <HA_URL>/api/config/config_entries/entry/2eb6dcc3fdd42e63a01f7db162e7d7fb/reload
Не стоит забывать, что эту возможность можно использовать и внутри самого HA. Например, создав автоматизацию, перезагружающую проблемную интеграцию если какие-либо объекты из нее стали недоступны.
При этом, для обращения к нужному URL можно использовать как curl через Shell Command так и специальную интеграцию RESTful Command.
shell_command: reload_integration_gw3: >- curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <Long-lived access token>" \ <HA_URL>/api/config/config_entries/entry/<Integration_ID>/reload rest_command: reload_integration_gw3: url: "<HA_URL>/api/config/config_entries/entry/<Integration_ID>/reload" content_type: "application/json" headers: authorization: "Bearer <Long-lived access token>" method: post