Eu uso um script PHP "shell" semelhante a este, lançado do terminal para testar se um ou mais dispositivos estão inativos / desconectados. Eu uso ele para monitorar se uma ponte Wifi foi desativada (se ela não puder ver o endereço MAC dos dispositivos no outro lado da ponte, então presuma que ela esteja inativa):
#!/usr/bin/php
<?php
$MULTICAST_ADDR='192.168.99.255';
$DEVICES_TO_TEST_FOR_BRIDGE=array( // list of MACs
'XX:XX:63:f2:XX:XX',
'XX:XX:d0:ad:XX:XX',
'XX:XX:b9:eb:XX:XX'
);
$SLEEP=10000000; // one sec = 1000000, sleep before reconnect
while(TRUE) {
usleep($SLEEP);
flush();
'ping -b -c 3 -t 3 $MULTICAST_ADDR 2> /dev/null';
flush();
$res='arp -an';
$bridgeIsOn=FALSE;
echo("DEVICES:\n");
echo($res);
echo("\n");
foreach($DEVICES_TO_TEST_FOR_BRIDGE as $deviceToTestForBridge) {
if (strpos($res, $deviceToTestForBridge) !== false) {
$bridgeIsOn=TRUE;
$lastBridgeOn=time();
}
}
if(!$bridgeIsOn && (time()-$lastBridgeOn>5*60) ) { // If bridge is down for 5 minutes
echo(" BRIDGE HAS BEEN OFF FOR LONG (".(time()-$lastBridgeOn)."s) - REQUESTING A RESTART\n");
// Do something here
}
}
O que faz é como, em um terminal, digitar
ping -b -c 3 -t 3 192.168.99.255 2> /dev/null
Meus dispositivos estão no intervalo 192.168.99.xxx, .255 significa "todos eles". Então pingar todos eles e ignorar as respostas.
E então lendo as tabelas arp com o comando
arp -an
O resto do código é comparar a lista com os dispositivos que eu quero.
No final do loop, $ bridgeIsOn é TRUE ou FALSE, e $ lastBridgeOn tem a última vez que foi visto, para que eu possa fazer escolhas e executar coisas. No seu caso, você deve reverter a lógica, $ bridgeIsOn significa que seu telefone está na rede: if($bridgeIsOn) { /* do something */}
Salvei o script como "monitorbridge", torne-o executável e inicie-o em um terminal
./monitorbridge
O script permanece ligado até eu fechar o terminal ou digitar ^ C. É claro que você pode começar no login ou na inicialização.