W jaki sposób mogę Raspberry Pi stale skanować w poszukiwaniu adresu MAC w mojej sieci, a następnie wykonywać zadania po wykryciu określonego adresu MAC?
Używam mojego Pi do uruchamiania różnych zadań automatyki domowej. Chciałbym, aby wykonał zadanie, gdy wykryje, że mój telefon łączy się z Wi-Fi (co oznacza, że właśnie wróciłem do domu). Jaki jest najlepszy sposób ciągłego skanowania Pi dla adresu MAC mojego telefonu? Wiem, że mogę używać arp-scan
do skanowania adresów MAC, ale potrzebuję tego, aby ciągle skanować. Jestem pewien, że istnieje lepsza metoda niż arp-scan
uruchamianie w pętli lub używanie crona, aby uruchamiał ją co minutę.
wifi
home-automation
gsears
źródło
źródło
Odpowiedzi:
PhoneHome
Mój telefon działa inaczej, ponieważ wszystkie telefony mają pewną różnicę. Odpowiedź ping występuje tylko wtedy, gdy telefon nie śpi. Jeśli Pi zostanie ponownie uruchomiony, a telefon będzie w trybie uśpienia, wiele pingów umieści swoje adresy IP i mac w tablicy arp ze 100% utratą pakietów. Właśnie dowiedziałem się, że
arp
polecenie jest przestarzałe,ip neighbor
jest teraz używane.Po przetestowaniu moim rozwiązaniem byłoby posiadanie dwóch pętli w pętli na zawsze. pierwszą wewnętrzną pętlą byłoby wykonanie polecenia ping na zakres adresów IP, wiele razy, co byłoby możliwe dla mojego telefonu. Mój router zarezerwował 19 pierwszych adresów IP i mogę mieć około pół tuzina adresów, które DHCP przydzieli, w tym mój telefon, zaczynając od adresu 192.168.0.20. Prześlę pingiem tuzin adresów IP raz, w trybie tła, poczekam sekundę na odpowiedź i wyrzucę wyniki jako śmieci. Poczekam osiem sekund na tablicy arp i uruchomię
ip neighbor
polecenie, grep adres MAC dla adresu IP. Router i telefon zachowają ten sam adres IP, chyba że wydarzy się coś niezwykłego. W tabeli ARP pozostanie w Pi, ale zmieni członkowskimREACHABLE
,STALE
orazFAILED
z pingi i czasu.Druga pętla wewnętrzna będzie pingować i sprawdzać tabelę arp co pięć minut, aby ustalić, czy telefon jest w domu. Trzy ping „FAILED” z rzędu oznacza, że telefonu nie ma w domu. Jeden „DOSTĘPNY”, gdy telefonu nie ma w domu, spowoduje, że telefon wróci do domu (zrób coś). Sprawdzane są poprawność adresu IP i powrót do pierwszej pętli wewnętrznej, jeśli wymagane są poprawki.
źródło
Dodaj rezerwację do swojego adresu IP telefonu i po prostu wykonaj ping za pomocą zadania cron co kilka minut.
Osiągam to na moim rpi za pomocą fhem , ma wbudowany moduł wykrywania obecności, który pozwala mi ustawiać status rezydenta, który może być zapytany, aby wpłynąć na zadania automatyki domowej.
źródło