Ранее я уже писал про отслеживание местоположения с помощью Tasker, но с тех пор я поменял телефон и отказался от Tasker совсем — приложение больше не устанавливается через Play Store. Но на Tasker свет клином не сошелся и можно реализовать все то же самое с помощью приложения Home Assistant. Еще и настройка существенно проще, чем с Tasker.
Как можно использовать отслеживание местоположения на практике, я опишу в конце статьи.
Принцип работы
Принцип такой же, как и с Tasker: если телефон подключен к домашнему Wi-Fi, то Home Assistant считает что человек дома. Если используется мобильный интернет или другой Wi-Fi — не дома.
Вообще приложение Home Assistant из коробки поддерживает отслеживание местоположения по GPS, но у этого способа есть минусы:
- Низкая точность. GPS в помещениях обычно не работает и координаты будут приблизительные — по сотовым вышкам (если вообще будут).
- Срабатывание с задержкой. Из-за низкой точности Home Assistant считает домом все, что входит в круг радиусом 100 метров. В итоге вам нужно относительно далеко отойти от дома прежде чем Home Assistant поймет, что дома уже давно никого нет.
- Быстрая разрядка аккумулятора. Хотя замеров я не делал, врать не буду 🙂
Настройка мобильного приложения
Для начала нужно установить приложение Home Assistant на телефон и связать его с сервером (если это не было сделано ранее). Важно чтобы сервер Home Assistant был доступен извне, иначе телефон не сможет с ним связаться по мобильному интернету.
Дальше нужно зайти в настройки мобильного приложения и включить датчики Wi-Fi:
После этого в Панели разработчика (Developer Tools) должны появиться новые сенсоры с параметрами текущей сети:
Настройка 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).
В принципе этого уже достаточно и созданный 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
И в итоге получим новый трекер, который можно привязать к человеку в настройках:
Применение на практике
Приведу пару примеров автоматизаций, которые сам использую. Включение и выключение электроприборов:
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 ленту.