Si echáis un vistazo al siguiente howto, veréis que es muy sencillo asignar funciones a los botones de nuestro router wifi con OpenWRT:
http://wiki.openwrt.org/doc/howto/hardware.button Para este post, he utilizado un A4001N, pero es perfectamente aplicable a otros routers con OpenWRT.
La idea es que podamos apagar el wifi si mantenemos presionado el botón de reset/wps durante un intervalo de tiempo y volver a encenderlo de nuevo del mismo modo.
Vamos a hacer todo ésto desde la línea de comandos, así que nos conectamos al router mediante ssh.
Una vez conectados, lo primero que tenemos que hacer es identificar los botones. Para ello, creamos una carpeta en el directorio /etc/hotplug.d a la que llamaremos button:
# mkdir /etc/hotplug.d/button
Dentro de esa carpeta creamos un script al que podemos llamar buttons, por ejemplo, con el siguiente contenido:
/etc/hotplug.d/button/buttons #!/bin/sh
logger the button was $BUTTON and the action was $ACTION
El script lo que hará será crear una entrada en el registro de logs con un mensaje que nos informa del botón que pulsó y la acción que se realizó.
Una vez lo hayamos guardado, pulsamos un botón (en nuestro caso hemos dicho que el botón de reset/wps, que por cierto, es el único que tiene nuestro router además del botón de apagado) y lo soltamos.
A continuación leemos los logs utilizando el comando logread:
# logread
Y entre los muchos mensajes de log, veremos algunos como los siguientes:Thu Oct 22 20:30:37 2015 user.notice root: the button was wps and the action was pressed
Thu Oct 22 20:30:38 2015 user.notice root: the button was wps and the action was released
Que nos informa de dos cosas:- El botón llamando "wps" fué pulsado "presed".
- El botón llamando "wps" fué soltado "released".
El siguiente paso que daremos, una vez identificado el botón, será descargarnos un script que va a gestionar las acciones que se deben realizar cuando el botón se haya pulsado durante un intervalo de tiempo. Y lo vamos a descargar directamente en el router usando wget, así que si no tenéis instalado wget, lo instaláis:
# opkg update && opkg install wget
Una vez instalado wget, lo ejecutamos para que descargue el script 00-button y lo coloque en el directorio /etc/hotplug.d/button/ directamente:
# wget --no-check-certificate -O /etc/hotplug.d/button/00-button https://dev.openwrt.org/export/36332/trunk/target/linux/atheros/base-files/etc/hotplug.d/button/00-button
Y le damos permisos de ejecución:# chmod 755 /etc/hotplug.d/button/00-button
Este script contiene el siguiente código:. /lib/functions.sh
do_button () {
local button
local action
local handler
local min
local max
config_get button $1 button
config_get action $1 action
config_get handler $1 handler
config_get min $1 min
config_get max $1 max
[ "$ACTION" = "$action" -a "$BUTTON" = "$button" -a -n "$handler" ] && {
[ -z "$min" -o -z "$max" ] && eval $handler
[ -n "$min" -a -n "$max" ] && {
[ $min -le $SEEN -a $max -ge $SEEN ] && eval $handler
}
}
}
config_load system
config_foreach do_button button
Ahora que ya tenemos el script en su sitio, podemos crear configuraciones para ejecutar diferentes acciones en función del tiempo que el usuario deje pulsado el botón.
Las configuraciones de los botones se almacenan en el mismo fichero que las configuraciones de los leds, es decir, en el archivo /etc/config/system. Así que editamos este fichero y le añadimos lo siguiente:
config button
option button wps
option action released
option handler "/usr/bin/wifionoff"
option min 0
option max 3
La configuración que estamos realizando se entiende por sí sola: Estamos definiendo un botón cuyo nombre es wps y la acción que se debe realizar (ejecutar el script /usr/bin/wifionoff) al soltar el botón cuando se haya pulsado durante un tiempo entre 0 y 3 segundos.
Por último, no nos queda más que crear el script /usr/bin/wifionoff, que se encargará de conmutar entre los estados de encendido y apagado del router:
#!/bin/sh
SW=$(uci -q get wireless.@wifi-device[0].disabled)
[ "$SW" == "1" ] && uci set wireless.@wifi-device[0].disabled=0
[ "$SW" == "1" ] || uci set wireless.@wifi-device[0].disabled=1
wifi
Si ahora quisiéramos hacer que el router se resetease a los valores por defecto al pulsar el mismo botón durante un tiempo de entre 20 y 25 segundos, añadiríamos la siguiente configuración al fichero /etc/config/system:
config button
option button wps
option action released
option handler "firstboot && reboot"
option min 20
option max 25
De este modo, podríamos configurar diferentes acciones dependiendo del intervalo de tiempo que se esté pulsando el botón.
Publicado por primera vez en http://enavas.blogspot.com.es
0 comentarios:
Publicar un comentario