Автоматизация присутствия в Home Assistant: проверка устройств по IP, MAC и через роутер

Автоматизация присутствия в Home Assistant: как определить, что все ушли из дома, и выключить свет

📅 Дата публикации: 14 мая 2026 ⏱️ Время чтения: ~20 минут

Первоначальная задача состояла в том, чтобы собрать автоматизацию в Home Assistant, которая по IP-адресам Wi-Fi будет проверять наличие устройств «дома». Когда все уходят из дома, система должна проверить, все ли устройства выключены (или те же лампочки), и через какое-то время сама выключить их.

Данную историю можно докрутить: отправлять себе в Telegram-бота сообщение с уточнением «Точно все ушли? Выключить?» и так далее — тут всё зависит от вашей фантазии и желания, как должен работать скрипт.

Но тут возник иной момент: а где гарантия, что устройство корректно передаёт свои данные? Как выяснилось, ping и MAC-адреса отлично отрабатывают на Android, а вот на Apple — нет. При блокировке экрана (в целях экономии заряда) Wi-Fi отключается, и устройство «резко уходит» из дома, хотя физически находится дома. Но оно остаётся ассоциированным с точкой доступа (роутером) на 2-м уровне модели OSI (L2).

Отсюда появилась идея: не пинговать само устройство на наличие сети, а пойти к роутеру и спросить у него напрямую — кто вообще тут находится. И тут помогла интеграция от автора netAlert, которая стучится к роутеру и спрашивает «кто тут?». Главное, она видит частоты 2,4 и 5 ГГц, в то время как тот же ping/MAC зависел от адреса устройства, что нестабильно, если включен режим шифрования (Private Address).

Но и на этом вариативность не закончилась. А в чём проблема попросить сам роутер отдать нам данные в Home Assistant через MQTT? Тут уже можно жёстко прописать, какие устройства мы хотим отдавать: например, только компьютеры, или только телефоны, а может, только одно устройство (тут опять история с различными частотами Wi-Fi). Данный способ позволяет пробрасывать данные быстрее, чем тот же netAlert — разница достигает нескольких минут.

В статье рассмотрим все 4 варианта подключения и их работу на практике.

1. Интеграция Ping (ICMP)

📡 Что это? Встроенный компонент Home Assistant, который проверяет, отвечает ли устройство на ICMP-запросы (ping).

Как работает: Вы указываете IP-адрес, и HA проверяет доступность устройства.

Требования: Для корректной работы устройству нужен статический IP в вашей сети (либо резервирование адреса по MAC в настройках роутера).

Как добавить: Настройки → Устройства и службы → Добавить интеграцию → Ping (ICMP).

🔗 Официальная документация

Настройка опций интеграции:

  • Ping count — количество отправляемых запросов (по умолчанию 5)
  • Consider home — время в секундах, после которого устройство считается «не дома» (по умолчанию 180 секунд)
💡 В тесте интервал опроса был установлен в 5 секунд.

Результаты тестирования:

  • Android (Xiaomi HyperOS, Poco C65) — ping отрабатывает хорошо при выключении сети и даже при блокировке экрана
  • iPhone (iOS 12 и новее) — Wi-Fi при выключении экрана уходит в сон, ping перестаёт отвечать
Видео: iPhone
Видео: Android

2. Интеграция LAN Diagnostic

🔍 Что это? Интеграция от AlexxIT, которая позволяет отслеживать устройства по MAC или IP.

Возможности:

  • Можно указать только MAC — IP определится автоматически
  • Можно указать только IP — MAC определится автоматически
  • Можно задать оба параметра

Как установить:

  1. Скачайте последнюю версию lan_diagnostics из репозитория AlexxIT/LANDiagnostics
  2. Распакуйте папку lan_diagnostics в /config/custom_components/
  3. Полностью перезагрузите Home Assistant
  4. Добавьте интеграцию: Настройки → Устройства и службы → + Добавить интеграцию → LAN Diagnostics
Директория custom_components
Расположение папки custom_components

Результаты тестирования: картина идентична ping — на Android работает, на iPhone нет. Интервал опроса также установлен в 5 секунд.

Видео: LAN Diagnostic на iPhone

3. Интеграция NetAlertX (полноценный сканер сети)

🌐 Что это? NetAlertX — это полноценный сканер сети, который устанавливается в отдельный Docker-контейнер. Отслеживает IP, MAC, имя хоста, время появления в сети и отправляет все данные в Home Assistant через MQTT.

Плюсы NetAlertX:

  • Отслеживает IP, MAC, имя хоста, время появления в сети
  • Отправляет все данные в Home Assistant через MQTT
  • Имеет веб-интерфейс для детального просмотра устройств в сети

🔗 Официальный репозиторий: github.com/netalertx/NetAlertX

Шаг 1. Установка NetAlertX через Docker

1 docker run -d \\
2 --name netalertx \\
3 --restart=unless-stopped \\
4 --network=host \\
5 -v /var/lib/docker/volumes/netalertx/data:/data \\
6 -v /etc/localtime:/etc/localtime:ro \\
7 --cap-add=NET_ADMIN \\
8 --cap-add=NET_RAW \\
9 -e PORT=20211 \\
10 -e TZ=Europe/Moscow \\
11 ghcr.io/netalertx/netalertx:latest
🌐 Веб-интерфейс NetAlertX доступен по адресу: http://IP_вашего_сервера:20211

Шаг 2. Настройка Mosquitto MQTT и создание пользователя для NetAlertX

Запуск Mosquitto (если ещё не установлен):

1 docker run -d \\
2 --name mosquitto \\
3 --restart=unless-stopped \\
4 -p 1883:1883 \\
5 -v /var/lib/docker/volumes/mosquitto/config:/mosquitto/config \\
6 -v /var/lib/docker/volumes/mosquitto/data:/mosquitto/data \\
7 -v /var/lib/docker/volumes/mosquitto/log:/mosquitto/log \\
8 eclipse-mosquitto:latest

Создание конфигурации Mosquitto:

1 mkdir -p /var/lib/docker/volumes/mosquitto/config
2 cat > /var/lib/docker/volumes/mosquitto/config/mosquitto.conf < 3 persistence true
4 persistence_location /mosquitto/data/
5 log_dest file /mosquitto/log/mosquitto.log
6
7 listener 1883 0.0.0.0
8 allow_anonymous false
9 password_file /mosquitto/config/passwd
10 EOF

Создание пользователя для NetAlertX:

1 docker exec -it mosquitto sh
2 mosquitto_passwd -b /mosquitto/config/passwd netalertx ваш_пароль
3 exit
4 docker restart mosquitto

Шаг 3. Настройка ARP flux на хосте (однократно)

Для корректной работы ARP-сканирования выполните на сервере:

1 sudo sysctl -w net.ipv4.conf.all.arp_ignore=1
2 sudo sysctl -w net.ipv4.conf.all.arp_announce=2
3
4 # Чтобы сохранить после перезагрузки
5 echo "net.ipv4.conf.all.arp_ignore=1" | sudo tee -a /etc/sysctl.conf
6 echo "net.ipv4.conf.all.arp_announce=2" | sudo tee -a /etc/sysctl.conf

Шаг 4. Базовая настройка NetAlertX

  1. Откройте веб-интерфейс: http://IP_сервера:20211
  2. Пройдите первоначальную настройку (создайте пароль администратора)
  3. Спустя некоторое время устройства подтянутся автоматически
Устройства в NetAlertX
Список устройств в NetAlertX

Шаг 5. Подключение к Home Assistant через MQTT

Настройка MQTT в Home Assistant: Если интеграция MQTT ещё не добавлена:

  • Настройки → Устройства и службы → + Добавить интеграцию → MQTT
  • Введите параметры:
ПолеЗначение
ХостIP вашего сервера (например, 192.168.1.50)
Порт1883
Имя пользователяnetalertx
Парольтот, что вы задали

Настройка MQTT в NetAlertX:

  1. Перейдите в Settings
  2. Найдите раздел General
  3. В поле Loaded plugins впишите дополнительно MQTT
Добавление MQTT в NetAlertX
Добавление MQTT в список плагинов

Заполните поля в разделе publishers (разверните появившийся MQTT):

ПараметрЗначение
MQTT_BROKER_urlIP вашего сервера
MQTT_broker_PORT1883
MQTT_USERnetalertx
MQTT_PASSWORDваш пароль
MQTT_RUNalways_after_scan
MQTT_SEND_DEVICESTrue
Настройки MQTT в NetAlertX
Настройки MQTT в NetAlertX
💡 Примечание: Спустя 5-10 минут устройства появятся в Home Assistant. Если какое-то устройство было определено как «Неизвестно» внутри NetAlertX, переименуйте его — иначе оно не всегда передаётся в HA.

Шаг 6. Настройка основного сканера ARPSCAN

  1. Перейдите в Settings (Настройки) в веб-интерфейсе NetAlertX
  2. Найдите ARPSCAN в списке доступных плагинов/сканеров
  3. Нажмите на значок редактирования (карандаш) рядом с ARPSCAN
  4. Установите следующие параметры:
ПараметрЗначение
When to RUNschedule (запуск по расписанию)
Schedule*/2 * * * * (каждые 2 минуты)
💡 Важно: Если поставить расписание * * * * * (каждую минуту), на практике сканирование будет происходить всё равно примерно каждые 2 минуты из-за накладных расходов на выполнение.
Видео: работа NetAlertX

4. MQTT с роутера напрямую (OpenWrt)

📶 Самый надёжный способ: Мы не используем «пинг» (L3), а напрямую опрашиваем роутер OpenWrt. Роутер каждые 60 секунд выполняет команду iwinfo assoclist (список всех WiFi-устройств) и отправляет JSON через MQTT в Home Assistant.

Почему это надежно? iPhone может не отвечать на ping, но для поддержания соединения с WiFi он обязан периодически (раз в несколько минут) отправлять служебные кадры. Роутер это видит.

1. Установка пакетов на OpenWrt:

1 apk update
2 apk add mosquitto-client-nossl iwinfo

2. Создание скрипта /usr/bin/openwrt_wifi_json_ram.sh:

1 #!/bin/sh
2 # OpenWrt WiFi Device List → JSON → MQTT
3
4 MQTT_HOST="192.168.90.90"
5 MQTT_USER="123"
6 MQTT_PASS="abc"
7 TOPIC="openwrt/wifi/devices"
8 IFACES="phy0-ap0 phy1-ap0"
9
10 MAC_MAP="c6:90:cf:b9:14:8d=iPhone|aa:bb:cc:dd:ee:ff=Айфон_5G|xx:xx:xx:xx:xx:xx=Ноутбук"
11
12 {
13 printf '{"timestamp":%d,"devices":[' "$(date +%s)"
14
15 for IFACE in $IFACES; do
16 iwinfo "$IFACE" assoclist 2>/dev/null | awk -v IFACE="$IFACE" -v MAC_MAP="$MAC_MAP" '
17 BEGIN { ... }
18 /^[0-9a-fA-F:]+/ { ... }
19 ' done
20
21 printf ']}'
22 } | mosquitto_pub -s -i "openwrt_tracker" -h "$MQTT_HOST" -p 1883 -r -q 1 -u "$MQTT_USER" -P "$MQTT_PASS" -t "$TOPIC"

3. Сделайте скрипт исполняемым и добавьте в cron:

1 chmod +x /usr/bin/openwrt_wifi_json_ram.sh
2 echo "* * * * * /usr/bin/openwrt_wifi_json_ram.sh" >> /etc/crontabs/root
3 service cron restart

4. Настройка Home Assistant (configuration.yaml):

1 mqtt:
2 sensor:
3 - name: "OpenWrt WiFi Devices"
4 state_topic: "openwrt/wifi/devices"
5 value_template: "{{ value_json.devices | length }}"
6 json_attributes_topic: "openwrt/wifi/devices"
7 unique_id: openwrt_wifi_json
8
9 template:
10 - binary_sensor:
11 - name: "iPhone WiFi Presence"
12 unique_id: iphone_wifi_presence
13 device_class: presence
14 state: >
15 {% set devs = state_attr('sensor.openwrt_wifi_devices', 'devices') or [] %}
16 {% set known_macs = ['c6:90:cf:b9:14:8d', 'aa:bb:cc:dd:ee:ff'] %}
17 {% set iphone = devs | selectattr('mac', 'in', known_macs) | first | default(None) %}
18 {{ 'on' if iphone and iphone.inactive_ms | default(999999) < 300000 else 'off' }}
⚠️ Важно: У iPhone может быть два MAC-адреса (для 2.4 ГГц и 5 ГГц). Добавьте оба в список known_macs. Чтобы их узнать, посмотрите на вывод JSON из OpenWrt, когда телефон точно подключен.
Видео: работа MQTT с роутера OpenWrt

5. Автоматизация в Home Assistant

Как создать автоматизацию для выключения света при отсутствии всех дома:

  1. Откройте Настройки → Автоматизации и скрипты → Создать автоматизацию
  2. В разделе «Когда» выберите один из триггеров (любой из описанных выше способов отслеживания присутствия)
  3. В разделе «И если» выберите тот же объект и укажите состояние, которое должно вызвать процесс (например, состояние «не дома»)
  4. В разделе «Тогда» выберите ваше освещение и задайте действие «Выключить»
Пример автоматизации в Home Assistant
Пример настройки автоматизации в HA
✅ Готово! Теперь, когда все устройства покинут дом, система автоматически выключит свет. Вы также можете добавить уведомление в Telegram для подтверждения.
Мы используем cookie-файлы. Это нужно для лучшей работы сайта. Продолжая пользоваться сайтом, вы соглашаетесь с этим.