Home assistant

Сохранение геолокации через Api

• 04-05-2023 •

Появилась идея поставить трекер в машину и с помощью сим карты POST запросом отправлять данные в Home Assistant. К примеру можно было бы использовать ардуино, подключить GPS и sim модули, подключить все это дело от 12в и радоваться жизни. Но с чего начать?

Разбираемся с API

В первую очередь, перед тем как начать что-нибудь паять, хотелось бы разобраться в програмной части и убедится, что Home Assistant это позволяет сделать.

Если зайти в документацию API в HA, то увидим примеры запросов:

curl \
  -H "Authorization: Bearer TOKEN" \
  -H "Content-Type: application/json" \
  http://IP_ADDRESS:8123/ENDPOINT

Из данного примера, видно что для начало нужно создать токен, который мы будем использовать для наших API зпросов. Чтобы это сделать, нужно перейти в раздел своего профиля. Для этого прокрутите левое мени в самый низ, нажимаете на свой профиль, скролите вниз и смотрим на следующую секцию

Api token

Дальше нажимаем на кнопку создать токен, попросит ввести название, называем к примеру API и полученный токен сохраняем в безопасное место. Так как посмотреть в HA его еще раз не получится в целях безопасности. Если вы его потеряете, то придется этот удалить и создать новый.

Вебхук и автоматизация

В документации по API ничего не сказано про вебхуки, а для данного случая это прекрасный способ отправлять данные геолокации. Урл будет выглять следующим образом:

http://your-home-assistant:8123/api/webhook/some_hook_id

Перед тем как мы продолжим с API, нужно реализовать автоматизацию, которая будет получать и расставлять данные, которые мы будет отправлять через API. Для этого переходим в раздел Настройки -> Автоматизации

Создаем новую автоматизацию, в триггере выбираем вебхук, как только мы выберем, он сразу создаст уникальный ID, который нам понадобится. В действиях мы выбираем сервис device_tracker.see, который будет выглять следующим образом:

service: device_tracker.see
data:
  gps:
    - "{{ trigger.json.latitude }}" // Данные, которые будут в POST запросе
    - "{{ trigger.json.longitude }}"
  dev_id: car // Имя вашего устройства
  gps_accuracy: 10
  battery: 100

И этого пока что нам хватит, сохраняем автоматизацию.

Тестируем через Postman

Если нужно протестировать какой либо запрос, для этого я использую приложение postman. Отличное приложение, которое позволяет создавать запросы любой сложности и так же сохранять и делиться с колегами. В целом MUST HAVE для подобных вещей.

Все что нам понадобится, это ссылка, токен, вебхук_айди и данные, которые мы будем отсылать. Для этого в postman в раздел ссылки указываем http://your-home-assistant:8123/api/webhook/hook_id, где hook_id, это айди созданный в автоматизации.

Дальше прописываем headers как на скриншоте

Postman HA api

И прописываем примеры наших данных.

Postman HA api data

Проверяем что получилось

После того как мы отправили POST запрос и получили 200 ответ. Можно идти раздел Панель разработчика, перейти во вкладку состояния и вбить где поиск объектов: device_tracker.car. Мы должны увидеть вот такое

HA Device tracker

Для наглядности, можно поменять данные в postman, отправить и посмотреть как в разделе панель разработчика в реальном времени данные меняются. На этом все, мы убедились что все работает и можно приступать к пайке устройства для получения данных геолокации и отправки. Но это уже другая история!

Добавить комментарий