Как я могу заставить мой Raspberry Pi постоянно сканировать MAC-адрес в своей сети, а затем выполнять задачу при обнаружении определенного MAC-адреса?
Я использую свой Pi для запуска различных задач домашней автоматизации. Я бы хотел, чтобы он выполнил задание, когда обнаружит, что мой телефон подключен к Wi-Fi (то есть я только что вернулся домой). Каков наилучший способ непрерывного сканирования Pi на MAC-адрес моего телефона? Я знаю, что могу использовать arp-scan
для сканирования MAC-адресов, но мне нужно, чтобы это происходило постоянно. Я уверен, что есть лучший метод, чем arp-scan
запуск в цикле или использование cron для запуска каждую минуту.
wifi
home-automation
gsears
источник
источник
Ответы:
PhoneHome
Мой телефон работает по-разному, так как все телефоны имеют некоторые различия. Ответ на пинг происходит только в том случае, если телефон не спит. Если Pi перезагружен и телефон находится в спящем режиме, несколько пингов поместят его ip и mac адреса в таблицу arp со 100% потерей пакетов. Я только что узнал, что
arp
команда устарела,ip neighbor
сейчас используется.После тестирования мое решение будет иметь две петли внутри петли навсегда. первый внутренний цикл должен был бы выполнить многократный пинг по диапазону IP-адресов, что было бы возможно для моего телефона. Мой маршрутизатор зарезервировал первые 19 IP-адресов, и у меня может быть около полудюжины адресов, которые DHCP назначит, включая мой телефон, начиная с адреса 192.168.0.20. Я буду пинговать дюжину IP-адресов один раз в фоновом режиме, подождать одну секунду ответа и выбросить результаты как ненужные. Я подожду восемь секунд в таблице arp и выполню
ip neighbor
команду, grep mac-адрес для IP-адреса. Маршрутизатор и телефон сохранят один и тот же IP-адрес, если не произойдет что-то необычное. Таблица агр будет оставаться в Pi, но изменит состояния отREACHABLE
,STALE
иFAILED
от пингов и времени.Второй внутренний цикл будет пинговать и проверять таблицу arp каждые пять минут, чтобы определить, находится ли телефон дома. С тремя пингами «СБОЙ» подряд телефона нет дома. Один «REACHABLE», когда телефона нет дома, заставит телефон вернуться домой (что-то сделать). Существуют проверки для проверки IP-адреса и возврата к первому внутреннему циклу, если требуются исправления.
источник
Почему бы не добавить резервирование к своему IP-адресу телефона и просто выполнить пинг через задание cron каждые несколько минут.
Я выполняю это на моем rpi, используя fhem , он имеет встроенный модуль обнаружения присутствия, который позволяет мне устанавливать резидентные статусы, которые можно запрашивать, чтобы влиять на задачи домашней автоматизации.
источник