Зачем нужно, чтобы умный дом знал, где вы находитесь? Вот несколько идей, которые можно реализовать:
- Автоматическое выключение света, когда все ушли из дома;
- Включение кондиционера или обогревателя, когда вы выехали с работы. Так чтобы дом охлаждался/прогревался пока вы едете;
- Оповещение близких, где вы находитесь;
- Автоматическое включение сигнализации, когда дома никого.
Разных способов отслеживания местоположения достаточно много. Например, можно через Android/iOS приложение OwnTracks. OwnTracks очень легко настраивается, но я попользовался приложением пару недель и в итоге решил отказаться от OwnTracks и настроить все с помощью Tasker. OwnTracks работает не очень точно и иногда может пройти минут 20 до того момента как умный дом поймет, что дома никого. Расход батарейки тоже не радует.
Идея
У меня на смартфоне уже и так было установлено приложение Tasker, которое я использовал для всякой другой автоматизации и у меня уже был настроен MQTT сервер. Поэтому замена OwnTracks придумалась очень быстро ?
Идея проста — когда смартфон отключается от домашней Wi-Fi сети и переключается на мобильный интернет, то Tasker оповещает об этом Home Assistant через MQTT. И тоже самое, когда смартфон подключается к Wi-Fi обратно.
Что понадобится
- Tasker на телефоне;
- MQTT Client;
- MQTT сервер (Mosquitto, встроенный в Home Assistant, облачный flespi или любой другой). На самом деле можно было бы обойтись и без MQTT, HTTP вполне достаточно, но MQTT сервер в любом случае полезная в умном доме штука.
Реализация
Реализация состоит из двух частей: настройка трекера в Home Assistant и интеграция Tasker.
Home Assistant
Для начала нужно добавить MQTT трекер (MQTT Device Tracker) в configuration.yaml
:
device_tracker:
- platform: mqtt
devices:
roland_bbf100_wifi: 'devices/phones/bbf100/wifi-ssid' # название девайса, которое будет использоваться в Home Assistant и соответствующий MQTT-топик
payload_home: 'Home WiFi' # название домашней Wi-Fi сети
payload_not_home: 'mobile_data' # название, которое будет использоваться для обозначения мобильного интернета
source_type: 'gps'
И перезапустить Home Assistant. После этого в Developer Tools появится новый трекер:
Принцип работы трекера очень прост. Если отправить в топик devices/phones/bbf100/wifi-ssid
название домашней Wi-Fi сети, то трекер изменит состояние на home
, а если отправить mobile_data
, то соответственно на not_home
. В случае если отправить любое другое название, например Office
, то трекер так и покажет Office
.
Осталось только привязать трекер к определенному человеку:
Tasker
Для начала нужно настроить MQTT Client — добавьте брокера, укажите хост, имя пользователя и прочие требуемые параметры. MQTT Client умеет интегрироваться с Tasker и через него телефон будет "общаться" с Home Assistant.
Дальше переходим непосредственно к Tasker. Нужно добавить новую таску, которая будет передавать в Home Assistant информацию о текущей Wi-Fi сети каждый раз, когда телефон переподключается к интернету. Проще всего это сделать импортировав уже готовую таску, которую я заботливо подготовил ? Просто откройте эту ссылку с телефона.
Как все это безобразие работает? В Tasker есть встроенная переменная %WIFII
, которая позволяет получить информацию о доступных Wi-Fi сетях. В таске на 2-ой строке проверяется содержит ли эта переменная слово >>> SCAN <<<
и если да, то в MQTT топик отправляется сообщение mobile_data
. Если нет, то парсится название сети и отправляется по MQTT.
А запускается эта таска по событию переподключения к MQTT серверу (настраивается на вкладке Profiles). То есть таска запускается каждый раз, когда меняется текущая активная сеть, через которую телефон подключен к интернету.
Альтернативные способы
Мне хотелось организовать какой-то простой, но достаточно точный способ отслеживания местоположения и Tasker + MQTT очень хорошо подошли. Но помимо этого на странице Home Assistant есть еще несколько десятков различных интеграций. Даже описанный метод можно модифицировать, например, заменив MQTT на HTTP или Tasker на любое другое приложение.
Мне было бы очень интересно узнать использует ли кто-то другие способы отслеживания — пишите в комменты.