Простое отслеживание местоположения в Home Assistant

Простое отслеживание местоположения в Home Assistant

Ранее я уже писал про отслеживание местоположения с помощью Tasker, но с тех пор я поменял телефон и отказался от Tasker совсем — приложение больше не устанавливается через Play Store. Но на Tasker свет клином не сошелся и можно реализовать все то же самое с помощью приложения Home Assistant. Еще и настройка существенно проще, чем с Tasker.

Как можно использовать отслеживание местоположения на практике, я опишу в конце статьи.

Отслеживание местоположения телефона — обзор разных способов в Home Assistant
Отслеживание местоположения и присутствия в Home Assistant: трекинг телефона по Wi-Fi, определение дома/не дома, Home Assistant device_tracker, геолокация.Вк…

А о других способах отслеживания можно узнать из этого видео.

Принцип работы

Принцип такой же, как и с Tasker: если телефон подключен к домашнему Wi-Fi, то Home Assistant считает что человек дома. Если используется мобильный интернет или другой Wi-Fi — не дома.

Вообще приложение Home Assistant из коробки поддерживает отслеживание местоположения по GPS, но у этого способа есть минусы:

  1. Низкая точность. GPS в помещениях обычно не работает и координаты будут приблизительные — по сотовым вышкам (если вообще будут).
  2. Срабатывание с задержкой. Из-за низкой точности Home Assistant считает домом все, что входит в круг радиусом 100 метров. В итоге вам нужно относительно далеко отойти от дома прежде чем Home Assistant поймет, что дома уже давно никого нет.
  3. Быстрая разрядка аккумулятора. Хотя замеров я не делал, врать не буду 🙂
Карта с кругом радиусом 100 метров
ℹ️
Это не единственный возможный способ отслеживания местоположения. Я сейчас готовлю небольшой обзор разных вариантов, а пока вы можете заглянуть в комментарии, где упоминаются и другие способы. Например, в Home Assistant доступны интеграции для некоторых роутеров.

Настройка мобильного приложения

Для начала нужно установить приложение Home Assistant на телефон и связать его с сервером (если это не было сделано ранее). Важно чтобы сервер Home Assistant был доступен извне, иначе телефон не сможет с ним связаться по мобильному интернету.

Дальше нужно зайти в настройки мобильного приложения и включить датчики Wi-Fi:

0:00
/0:16

«Wi-Fi BSSID» и «Wi-Fi соединение».

После этого в Панели разработчика (Developer Tools) должны появиться новые сенсоры с параметрами текущей сети:

BSSID роутера на скриншоте Home Assistant
BSSID это MAC-адрес Wi-Fi роутера, к которому подключен смартфон.

Настройка Home Assistant

На стороне сервера нужно отредактировать configuration.yaml и добавить конфиг бинарного сенсора, подставив свои значения:

template:
  - binary_sensor:
    - name: T676K at home
      state: "{{ is_state('sensor.t676k_wifi_bssid', '70:4f:xx:xx:xx:xx') }}"
      device_class: presence
      delay_off: "0:00:30"
      availability: "{{ states('sensor.t676k_wifi_bssid') not in ['unavailable', 'unknown'] and not is_state('sensor.t676k_wifi_bssid', '02:00:00:00:00:00') }}"

После перезапуска Home Assistant появится новый сенсор, который будет в состоянии on, когда телефон подключен к домашней Wi-Fi сети и off в остальных случаях.

Идентифицировать домашний Wi-Fi можно и по имени (sensor.t676k_wifi_connection), но лучше использовать BSSID, чтобы избежать коллизий. Актуальный BSSID отображается в Панели разработчика (Developer Tools).

ℹ️
Если у вас двухдиапазонный роутер, то смартфон может периодически сам переключаться между сетями на 2.4 и 5ГГц. Поэтому в шаблоне сенсора нужно перечислить BSSID обеих сетей через or: {{ is_state('sensor.t676k_wifi_bssid', '70:4f:xx:xx:xx:01') or is_state('sensor.t676k_wifi_bssid', '70:4f:xx:xx:xx:02') }}.

В принципе этого уже достаточно и созданный binary sensor можно использовать в автоматизациях, а можно превратить его в device tracker. Для этого понадобится установить сторонний компонент — Composite Device Tracker.

Я не буду подробно описывать процесс установки, скажу только что для создания device tracker из binary sensor нужно добавить примерно вот такой YAML-конфиг:

composite:
  trackers:
    - name: roland_t676k_wifi
      time_as: local
      entity_id:
        - binary_sensor.t676k_at_home

И в итоге получим новый трекер, который можно привязать к человеку в настройках:

Настройки людей в Home Assistant

Применение на практике

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

group:
  # Группа электроприборов, которые будут выключаться, когда никого нет дома
  turn_off_when_leaving_home:
    name: Turn off when leaving home
    entities:
      - light.main_room_ceiling_lights
      - light.bedside_lamp
      - humidifier.humidifier

  # Электроприборы, которые будут включаться
  turn_on_when_coming_home:
    name: Turn on when coming home
    entities:
      - light.main_room_ceiling_lights
      - light.bedside_lamp
      - humidifier.humidifier

automation:
  - alias: "Turn off everything when leaving home"
    trigger:
      platform: state
      entity_id: person.roland
      from: "home"
    action:
      - service: homeassistant.turn_off
        entity_id: group.turn_off_when_leaving_home

  - alias: "Turn on everything when coming home"
    trigger:
      platform: state
      entity_id: person.roland
      to: "home"
    action:
      - service: homeassistant.turn_on
        entity_id: group.turn_on_when_coming_home

Примерно то же самое, только вместо электроприборов сигнализация и не для одного человека, а для нескольких:

group:
  # Все жильцы
  family:
    name: Family
    entities:
      - person.alice
      - person.bob

automation:
  # Включение сигнализации, когда все ушли
  - alias: "Arm alarm when leaving home"
    trigger:
      platform: state
      entity_id: group.family
      from: "home"
    action:
      service: alarm_control_panel.alarm_arm_away
      data:
        entity_id: alarm_control_panel.home_alarm

  # Выключение сигнализации
  - alias: "Disarm alarm when coming home"
    trigger:
      platform: state
      entity_id: group.family
      to: "home"
    action:
      service: homeassistant.turn_on
      entity_id: group.turn_on_when_coming_home

Другие примеры можем обсудить в комментариях 😉

Так же в будущем я подробнее расскажу про систему охраны дома, если интересно. Чтобы не пропустить, подписывайтесь на Telegram или RSS ленту.

Была ли статья полезна?

Хотите сказать спасибо? Кофе автору — ваша благодарность.

На кофе
Подписка на новые статьи

Уведомления, как только в блоге появится что-нибудь интересненькое.

Подписываясь, вы даете согласие на обработку персональных данных.