Одна из вещей, которую умеет делать Home Assistant, это штука под названием "device tracking" — отслеживание устройств в домашней WiFi сети.
Home Assistant можно научить смотреть когда устройство появляется в сети и когда пропадает, а дальше делать уже на базе этой информации какую-нибудь автоматизацию. Например, можно сделать автоматизацию для дачи. Если к WiFi сети на даче подключен мой мобильный телефон, плюс солнце зашло, то должен быть включен свет перед входом. Или, например, можно настроить что если мобильного телефона нет в сети и сейчас день, то нужно запустить робот пылесос.
Для того чтобы строить такие автоматизации в Home Assistant нужно в первую очередь научить его отслеживать наличие устройств в WiFi сети.
Есть несколько способов как Home Assistant может узнавать про наличие устройств в сети. Если у вас достаточно современный WiFi роутер, то этот роутер знает что к нему подключено и через специальное API позволяет получить этот список устройств (так умеет, например, роутер Xiaomi Router 4). Если у вас есть роутер, который умеет взаимодействовать с Home Assistant, то лучше всего настроить device tracking с помощью роутера.
Но далеко не все роутеры могут взаимодействовать с Home Assistant. Но, к счастью, есть другой способ как Home Assistant может узнать какие устройства есть в WiFi сети. Этот способ называется "nmap". Вообще "nmap" это такая специальная утилита в Linux. Эта утилита появилась еще в прошлом веке (в конце 1990-x годов) и с тех пор продолжает развиваться. С помощью "nmap" можно определять какие устройства подключены к сети, какие порты на них открыты и какая операционная система работает на этих устройствах. Home Assistant не использует все возможности "nmap", а использует только возможность про нахождению устройств.
Чтобы настроить device tracking в HA нужно отредактировать файл configuration.yaml и добавить в него фрагмент что-то вроде этого:
device_tracker:
- platform: nmap_tracker
interval_seconds: 60
hosts: 192.168.1.0/24
home_interval: 10
Изначально у меня в конфигурации не было настройки "interval_seconds: 60", но без этой настройки в логах Home Assistant очень часто было предупреждения вида:
2019-12-16 18:11:09 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from legacy took longer than the scheduled scan interval 0:00:12
2019-12-16 18:11:22 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from legacy took longer than the scheduled scan interval 0:00:12
2019-12-16 18:11:48 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from legacy took longer than the scheduled scan interval 0:00:12
Если не указать "interval_seconds", то значение по умолчанию это 12 секунд — каждые 12 секунд HA запускает команду "nmap", не всегда она успевает отработать до момента когда нужно запускать "nmap" в следующий раз и из-за этого предупреждение в логе. На мой взгляд, проверять на устройства 5 раз в минуту — это чересчур. Я переставил на проверку раз в минуту и предупреждения в логе больше не появляются.
После изменения файла configuration.yaml нужно перезапустить Home Assistant. Когда он снова поднимется он начнет раз в минуту опрашивать WiFi сеть. Результат этого опроса — это две вещи.
Во-первых, Home Assistant начнет складывать информацию про все найденные устройства в файл known_devices.yaml. Этот файл лежит там же где и configuration.yaml. Вот фрагмент known_devices.yaml с информацией про одно устройство:
4c_11_ae_0d_7a_ab:
hide_if_away: false
icon:
mac: 4C:11:AE:0D:7A:AB
name: 4c 11 ae 0d 7a ab
picture:
track: true
Home Assistant с помощью "nmap" получает список всех mac адресов устройств, которые прямо сейчас работают в WiFi сети. HA получает только мак адреса про устройства, больше "nmap" ничего не передает HA. И Home Assistant как может создает запись про устройство в файле known_devices.yaml. Ничего кроме мака нет, вот он и записывает этот мак в три поля в чуть-чуть разных форматах.
Нужно помочь Home Assistant, понять что за устройство скрывается за маком и заполнить информацию про устройство. Вот что стало с записью про это устройство, после того как я его отредактировал:
wemos_bath:
hide_if_away: false
icon:
mac: 4C:11:AE:0D:7A:AB
name: Wemos Bath
picture: /local/wemos.png
track: true
Это устройство — это один из тех датчиков температуры что я сделал некоторое время назад. Вместо первой строки "4c_11_ae_0d_7a_ab:" я написал более приличный id: "wemos_bath:", написал "name:" и указал адрес картинки устройства.
Для того чтобы HA узнал про изменения в файле known_devices.yaml HA нужно перезагрузить.
Если HA увидит новый mac адрес, то он допишет его в файл known_devices.yaml и можно будет отредактировать эту запись.
Первая часть чем занимается модуль "nmap" в Home Assistant — это дополнение файла known_devices.yaml. Вторая часть — это собственно и есть отслеживание устройств. HA запускает "nmap", получает из него список мак адресов из файла known_devices.yaml выясняет id этого устройства и записывает в свою базу что это устройство в этот момент времени было включено.
А вот пример yaml с конфигурацией интерфейса, которая отобразит историю нахождения устройства в WiFi сети:
- title: devices
path: devices
icon: 'mdi:devices'
badges:
- entity: device_tracker.wemos_bath
cards:
- entities:
- entity: device_tracker.wemos_bath
hours_to_show: 24
refresh_interval: 0
type: history-graph
Вот скриншот как это может выглядеть:
Системе обнаружения устройств с помощью nmap у меня проработала около месяца. Я купил новый WiFi роутер, из которого Home Assistant может забирать данные про устройства. Перенастроил Home Assistant чтобы он использовал данные с роутера и прямо поразился насколько это лучше работает. Вот ссылка на подробности со скриншотом.
16 декабря 2019
Кстати, у меня есть телеграм канал про Home Assistant: https://t.me/bessarabov_ha
|