Автоматизация по местоположению в Home Assistant

17 янв. 2019 г.

Писатель из меня так-себе. Потому, прошу сильно не пинать, а если что-то не понятно - спрашивайте! Помогу чем смогу ;) 


Как известно, в home assistant реализовано большое количество компонентов для обнаружения присутствия (52 модуля) среди которых есть модули мониторящие устройства подключенные по WiFi к роутеру (TP-Link, Huawei, Asus, Ubiquity, OpenWRT), следящие за устройствами имеющими включенный Bluetooth модуль, а также компоненты получающие данные о местоположении пользователя из систем мониторинга (OwnTracks, Traccar, Google Maps Location Sharing). Благодаря им можно не просто наблюдать за теми кто находится дома, но и мониторить местоположение устройств и их владельцев вне дома. Я не буду пересказывать документацию этих компонентов - это скучно и можно найти на официальном сайте. 

Вместо этого я рассмотрю подключение Home Assistant к MQTT брокеру flespi

flespi

На самом деле flespi это не простой mqtt брокер - это система позволяющая подключать и перенаправлять данные от различных GPS трекеров (на данный момент поддерживается 273 типа устройств) и систем мониторинга. При этом данные парсятся в удобный унифицированный JSON формат. Кроме того, это не публичный mqtt брокер к которому все имеют неограниченный доступ. Тут присутствует авторизация по токену, гарантирующая, что в топиках будут только ваши данные и их никто не сможет получить. 

Теперь немного о том, как это работает:

  1. Вы создаёте flespi канал в панели управления.
  2. Направляете своё (*поддерживаемое) устройство или приложение (например WiaTag Android или iOS) на flespi (указав в настройках ip и порт).
  3. Все поступающие в flespi сообщения от устройств парсятся в соответствии с выбранным протоколом попадают в MQTT брокер в виде JSON объекта. 

Регистрация по email или с использованием соцсетей. Для личного дома должно быть вполне достаточно бесплатного пакета. Залогинился гуглом/фейсбуком/гитхабом/мелкомягкими и в путь.

В flespi есть несколько вариантов получения данных о местоположении:

  • Для первого варианта вам достаточно:

    1. подключить устройство к каналу flespi соответствующего протоколу устройства

    2. подписаться на топик flespi/message/gw/channels/{channel_id}/{ident} с подставленным id канала и ident устройства

  •    Во втором случае вам надо:

    1. так-же подключить устройство к каналу

    2. после чего, необходимо будет создать виртуальное устройство flespi (с указанным типом как созданный канал) и прописать туда ident

    3. а уже затем, можно будет подписаться на топик flespi/message/gw/devices/{device_id} с соответствующим id устройства.

Отличие в том, что устройство flespi спроектировано для хранения истории сообщений (до 10 лет), а канал flespi является трубой, конвертирующей сообщения от устройств из определённого протокола в json формат и долгое хранение данных в каналах не предусмотрено.

Для примера использования и простоты настройки я решил показать настройку на основе Telegram бота, который отправляет сообщения в канал flespi. Однако, вы можете использовать любой программный или железный трекер, который поддерживается в flespi.

Для начала создадим канал работающий через Телеграм бота.

Вам необходимо в настройках канала указать токен телеграм бота которого вы создали в телеграме через botfather.

Если вы все правильно сделали - можете отправить сообщение с позицией в чат телеграм бота и в канале увидите принятое сообщение.

Теперь, если вы выбрали второй путь и вам необходимо хранить историю посещений - настроим виртуальное устройство flespi.

Главное, что нужно понимать на этом этапе - вы должны выбрать подходящий device_type и ident.  В нашем случае это будет Telegram и Dexif.

Если все настроено правильно и вы пришлете еще одно позиционное сообщение - сможете увидеть текущую позицию устройства на карте.

Кроме того, сообщения уже конвертированные в json, уже можно увидеть подключившись к mqtt брокеру используя mqtt board - web mqtt клиент (поддерживается mqtt 5.0, 3.11, 3.1)

С настройкой на стороне flespi - всё... Теперь время добавить ваши устройства в Home Assistant.

Home Assistant

К сожалению, в Home Assistant нет компонента, который бы подошёл для получения данных от flespi.  Потому пришлось накидать на коленке свой вариант device_tracker компонента (за основу взят MQTT_device_tracker)

mqtt_flespi_message.py

Этот компонент необходимо положить в папку config/custom_components/device_tracker

Для подключения к брокеру необходимо создать MQTT интеграцию в home assistant

В качестве имени указать flespi token, а пароль может быть любым (главное - не пустое значение)



После этого необходимо сконфигурировать его на прослушивание необходимых топиков.  Для этого открываем configuration.yaml и добавляем в раздел device_tracker подписки на топики в следующем формате:

device_tracker:
  — platform: mqtt_flespi_message
    devices:
      # flespi channel
      dexif: 'flespi/message/gw/channels/7730/Dexif'
      another: 'flespi/message/gw/channels/7730/another'
      # flespi device
      dexif2: 'flespi/message/gw/devices/173073'

Кроме того, можно добавить известные устройства в файл known_devices.yaml

dexif:
  hide_if_away: false
  icon:
  mac:
  name: dexif
  picture:
  track: true
  gravatar: blah@blah.blah

Вот и все наши подключенные трекеры на карте в home assistant

Если вы решили выбрать вариант получения сообщений из устройства flespi - для вас у меня есть небольшой бонус.

Home Assistant позволяет добавлять любые ресурсы в панель управления по ссылке.

Таким образом мы добавим TrackIt (простенькая система мониторинга для устройств подключенных к flespi) в Home Assistant и сможем просматривать треки устройств на карте:

panel_iframe:
  trackit:
    title: TrackIt
    icon: mdi:map-search
    url: https://trackit.flespi.io/#/login/{Your_FlespiToken}

А вот так это выглядит:

Теперь осталось придумать, что вы хотите сделать в тот момент, когда вы приехали домой или на работу. ;)

Мысли о прекрасном об автоматизации

Как пример - почему бы не разогревать чайник, когда ты подъезжаешь к дому. Если электрочайник довольно глупый можно его подключить например через Xiaomi розетку и нажать кнопку, а в автоматизации активировать розетку в тот момент, когда вы приблизились к дому (только не забудьте заранее налить воды ;) )

Ну, а ещё можно завязать на это дело мультиварку и когда выходишь с работы, чтобы она автоматически включалась. Тогда, приехав домой, у вас будет свежеприготовленный ужин. (Правда и тут главное не забыть закинуть чего в мультиварку). 

А в TrаckIt вы всегда увидите где припарковали машину или куда ездила жена (а может и муж ;) ) Или на какой парковке она стоит ;)

А если вы живёте в частном доме и у вас есть гараж с автоматическими воротами - можно их открывать когда вы подъезжаете.


Мы в Telegram - t.me/soprut
  1. Олег Челбаев (sprut)
    Олег Челбаев (sprut) 3 месяца назад

    Да это целая статья !!!!!! огонь ))) красавец )))) подписался жду продолжения ))

  2. Белояр Иван (Ivan711)
    Белояр Иван (Ivan711) 3 месяца назад

    Статья интересная, для себя открыл кое что новое.. Но по мне реализация избыточна, считай что из пушки по воробьям) 

    В случае с ios, я решил это более простым методом. Создал в ha переключатель, прокинул его в homekit, в нем же настроил по приходу и уходу его переключение. Так же для нативных приложений у ios несколько другая политика к использованию gps. То есть (субъективно) экономим батарейку, и получаем более точные данные. К слову - 2 телефона, одновременно покидая дом одновременно меняют свое состояние. 

    Думал может воспользоваться этим, что бы трекать машину, но не увидел поддержки globalsat. Что странно. 

К списку блогов

Похожие записи

13 февр. 2019 г.
Подключение радио на Xiaomi Gateway к Home Assistant c дальнейшим использованием в автоматизациях
7 февр. 2019 г.
Самое важное из апдейта Home Assistant 0.87 от 06.02.19.
6 февр. 2019 г.
Автоматизированное открытие/закрытие окна
21 мар. 2019 г.
Самое важное из апдейта Home Assistant 0.9 от 20.03.19.
21 февр. 2019 г.
Самое важное из апдейта Home Assistant 0.88 от 20.02.19.
4 апр. 2019 г.
Самое важное из апдейта Home Assistant 0.91-0.91.4 от 03.04.19.
19 янв. 2019 г.
Делюсь новостями по проекту.
27 янв. 2019 г.
Избавляемся от wi-fi реле на ESP в пользу zigbee без прошивок и танцев с бубном.
13 мар. 2019 г.
Самое важное из апдейта Home Assistant 0.89 от 06.03.19.
30 янв. 2019 г.
Я построю свой луна-парк, с блекджеком и шлюхами! Хотя, к черту лунапарк !