У меня было два решения, которые я использовал. (Python)
Решение 1
Сначала нужно было записать известные ipnumbers, которые я хочу отслеживать. Я сделал это в три этапа. 1 # используйте «-c1», чтобы отправить только один ping. Если устройство активно, оно ответит и. Функция завершится с успехом 2 # используйте «-c3», теперь дайте ей больше времени для ответа на один из трех. Этого обычно достаточно, когда это плохой сигнал Wi-Fi. 3 # используйте «-c10», это может понадобиться, когда это действительно плохой сигнал Wi-Fi. (Заметил, что старому iPad нужно около 10 попыток ответить) Чтобы ускорить процесс, я создал отдельные процессы для каждого ip-номера, который я хочу отслеживать.
Я также изменил интервалы пинга в зависимости от того, успешно это или нет. Если он найдет устройство, он будет ждать дольше, пока не проверит снова. Если это сбой, он попытается снова через 60 секунд. (Я хочу, чтобы свет вошел в мой дом), поэтому 60-х годов достаточно, чтобы найти меня на улице
Это сработало отлично! Когда я вернулся домой, он почувствовал меня, выключил свет и выключился, когда я ушел.
Решение 2
Возможно, Arping не сильно загружен в сети, но я изменил решение, чтобы пропустить все запросы, и создал свой собственный DHCP-сервер на моем raspberry pi.
Затем я добавил «on commit», который запускает скрипт, как только устройство получает ipnumber. В этом сценарии используется вызов curl http API для уведомления моего www-сервера (Flask), как только устройство получает или обновляет свой ipnumber.
На моем Android я изменил настройки, чтобы никогда не выключать Wi-Fi, когда экран выключен. Не уверен, что это возможно на iPhone. Нет большой разницы в батарее (OnePlus 5)
Первое решение также включало сканирование Bluetooth для конкретного Mac. Таким образом, даже если мой WiFi выключен на моем телефоне, он все равно обнаружит Bluetooth. Использование Mac-адреса не требует сопряжения или того, чтобы его могли видеть все.