20 de juliol de 2013

WDR3600: Apagar la xarxa sense fils quan ningú l'utilitzi

Fa uns dies comentava com poder activar/desactivar la xarxa sense fils amb un botó en un encaminador WDR3600. Ara bé, no seria millor encara que es desactivés automàticament quan ningú l'utilitzi?

Anem a veure com ho podem aconseguir. En primer lloc, hem de poder detectar si la xarxa sense fils està activada o no, i si hi ha algú connectat. Accedim a l'encaminador i provem les comandes:
$ ssh root@gargoyle
root@gargoyle password: xxxxxxx
root@Gargoyle:~# iwconfig wlan0
root@Gargoyle:~# iwconfig wlan1
root@Gargoyle:~# iw dev wlan0 station dump
root@Gargoyle:~# iw dev wlan1 station dump
Les dues primeres comandes verifiquen l'estat de la xarxa sense fils de 2.4GHz (wlan0) i la de 5GHz (wlan1). Les dues següents ens informes dels ordinadors connectats, si n'hi ha cap.

Amb això ja estem en condicions d'escriure un petit script per la nostra tasca. La idea de base la vaig agafar d'un missatge dels fòrums d'Openwrt. El resultat és aquest:
#!/bin/sh

LOG=/tmp/autowifi.log
SW=$(iwconfig wlan0 2>/dev/null | grep IEEE)

echo $(date) >> ${LOG}

if [ -z "$SW" ] # check if wifi is on
then
  echo "Wifi is already OFF" >> ${LOG}
else
  echo "Wifi is ON" >> ${LOG}
  if [ -z "$(iw dev wlan0 station dump | tr -d '\n')" ] # Anyone here? 
  then 
  if [ -z "$(iw dev wlan1 station dump | tr -d '\n')" ] # Anyone here?
  then
    echo "No-one is connected" >> ${LOG}
    case "$(cat /var/autowifi)" in # Someone connected before?
      1) 
        echo "No-one was connected. Turning wireless OFF" >> ${LOG}
        /sbin/wifi down 2>/dev/null
        cat /var/autowifi
      ;;
      *)
        echo "Someone was connected. Leaving wireless ON" >> ${LOG}
        echo 1 > /var/autowifi
      ;;
    esac
  else
    echo "Someone is connected to wlan1 (5GHz)" >> ${LOG}
    cat  /var/autowifi
  fi
  else
    echo "Someone is connected wlan0 (2.4GHz)" >> ${LOG}
    cat  /var/autowifi
  fi
fi
Aquest fitxer s'ha de guardar a /sbin amb el nom autowifi (/sbin/autowifi).

Tot seguit l'hem de fer executable, també crearem el fitxer auxiliar /var/autowifi (que serveix per indicar si hi havia algú connectat la darrera vegada) i editarem el crontab per tal d'executar el codi autowifi cada cert temps (15 minuts en aquest cas):
root@Gargoyle:~# chmod +x /sbin/autowifi
root@Gargoyle:~# touch /var/autowifi
root@Gargoyle:~# vi /etc/crontabs/root
Afegim la línia següent al crontab:
*/15 * * * * /sbin/autowifi
I ja ho tenim. La xarxa sense fils s'apagarà automàticament si ningú si ha connectat en la darrera mitja hora. Evidentment, podeu baixar l'interval a uns pocs minuts simplement modificant el valor indicat en el crontab.

Cap comentari:

Publica un comentari a l'entrada