Como o Raspberry Pi pode procurar continuamente um endereço MAC na minha rede e executar uma tarefa quando ele detecta um endereço MAC específico?
Eu uso o meu Pi para executar várias tarefas de automação residencial. Gostaria que ele executasse uma tarefa quando sentir que meu telefone está conectado ao Wi-Fi (o que significa que acabei de chegar em casa). Qual é a melhor maneira de o Pi procurar continuamente o endereço MAC do meu telefone? Sei que posso usar arp-scan
a verificação de endereços MAC, mas preciso que esta seja verificada continuamente. Tenho certeza de que existe um método melhor do que arp-scan
executar em loop ou usar cron para executá-lo a cada minuto.
wifi
home-automation
gsears
fonte
fonte
Respostas:
Telefone de casa
Meu telefone funciona de maneira diferente, pois todos os telefones têm alguma diferença. Uma resposta de ping ocorre apenas se o telefone estiver ativado. Se o Pi for reinicializado e o telefone estiver no modo de suspensão, vários pings colocarão seus endereços IP e Mac na tabela arp, com 100% de perda de pacotes. Acabei de saber que o
arp
comando é obsoleto,ip neighbor
é usado agora.Após o teste, minha solução seria ter dois loops dentro de um loop para sempre. o primeiro loop interno seria fazer um ping em vários endereços IP, várias vezes, o que seria possível para o meu telefone. Meu roteador reservou o primeiro endereço IP 19 e eu posso ter cerca de meia dúzia de endereços que o DHCP atribuirá, incluindo meu telefone, começando no endereço 192.168.0.20. Vou executar ping em uma dúzia de endereços IP uma vez, no modo de segundo plano, esperar um segundo pela resposta e jogar os resultados fora como lixo. Vou esperar oito segundos na tabela arp e executarei o
ip neighbor
comando grep o endereço mac para o endereço IP. O roteador e o telefone manterão esse mesmo endereço IP, a menos que algo incomum aconteça. A tabela arp permanecerá no Pi, mas vai mudar estados deREACHABLE
,STALE
eFAILED
de pings e tempo.O segundo loop interno fará ping e verificará a tabela arp a cada cinco minutos para determinar se o telefone está em casa. Com três ping 'FAILED' seguidos, o telefone não está em casa. Um 'ACESSÍVEL', quando o telefone não está em casa, fará com que o telefone volte para casa (faça alguma coisa). Existem verificações para validar o endereço IP e retornar ao primeiro loop interno, se forem necessárias correções.
fonte
Por que não adicionar uma reserva ao endereço IP do seu telefone / es e simplesmente executar um ping através de um trabalho cron a cada poucos minutos.
Eu faço isso no meu rpi usando o fhem , ele possui um módulo de detecção de presença integrado que permite definir status de residente que pode ser consultado para influenciar as tarefas de automação residencial.
fonte