Comment puis-je faire en sorte que mon Raspberry Pi recherche continuellement une adresse MAC sur mon réseau, puis effectue une tâche lorsqu'il détecte une adresse MAC spécifique?
J'utilise mon Pi pour exécuter diverses tâches domotiques. Je voudrais qu'il exécute une tâche lorsqu'il détecte que mon téléphone se connecte au Wi-Fi (ce qui signifie que je viens de rentrer à la maison). Quelle est la meilleure façon d'avoir le scan Pi pour l'adresse MAC de mon téléphone en continu? Je sais que je peux utiliser arp-scan
pour rechercher des adresses MAC, mais j'en ai besoin pour rechercher en permanence. Je suis sûr qu'il y a une meilleure méthode que d'avoir arp-scan
exécuté en boucle, ou d'utiliser cron pour l'exécuter toutes les minutes.
wifi
home-automation
gsears
la source
la source
Réponses:
PhoneHome
Mon téléphone agit différemment, car tous les téléphones ont une différence. Une réponse ping ne se produit que si le téléphone est réveillé. Si le Pi est redémarré et que le téléphone est en mode veille, plusieurs pings placeront ses adresses ip et mac dans la table arp, avec une perte de paquets de 100%. Je viens d'apprendre que la
arp
commande est obsolète,ip neighbor
est utilisée maintenant.Après le test, ma solution serait d'avoir deux boucles à l'intérieur d'une boucle pour toujours. la première boucle intérieure serait de faire un ping sur une plage d'adresses IP, plusieurs fois, ce serait possible pour mon téléphone. Mon routeur a réservé la première 19 adresses IP et j'ai peut-être une demi-douzaine d'adresses que DHCP attribuera, y compris mon téléphone, à partir de l'adresse 192.168.0.20. Je vais pinguer une douzaine d'adresses IP une fois, en mode arrière-plan, attendre une seconde pour la réponse et jeter les résultats comme indésirables. Je vais attendre huit secondes sur la table arp et exécuter la
ip neighbor
commande, grep l'adresse mac pour l'adresse ip. Le routeur et le téléphone conserveront cette même adresse IP, sauf si quelque chose d'inhabituel se produit. Le tableau arp restera dans la Pi, mais changera d' état à partirREACHABLE
,STALE
etFAILED
de pings et de temps.La deuxième boucle intérieure va cingler et vérifier la table d'arp toutes les cinq minutes pour déterminer si le téléphone est à la maison. Avec trois ping «FAILED» d'affilée, le téléphone n'est pas à la maison. Un «REACHABLE», lorsque le téléphone n'est pas à la maison, fera revenir le téléphone à la maison (faire quelque chose). Il y a des vérifications pour valider l'adresse IP et revenir à la première boucle intérieure si des corrections sont nécessaires.
la source
Pourquoi ne pas ajouter une réservation à l'adresse IP de votre téléphone et faire simplement un ping via un travail cron toutes les quelques minutes.
J'accomplis cela sur mon rpi en utilisant fhem , il a un module de détection de présence intégré qui me permet de définir des statuts de résident qui peuvent être interrogés pour influencer les tâches domotiques.
la source