Retomo la idea original de neodark, en la que proponía 4 estados de visualización dependiendo del nivel de señal.
Los nanostation de ubiquiti creo que son los únicos que tienen implementada la idea de usar leds marcando el nivel de señal (o los primeros en ponerlo en práctica). También usan el concepto de usar cuatro estados de visualización, pero para ellos es sencillo porque usan cuatro leds dedicados.
Resulta que la calidad del enlace en los drivers wifi parece que también va representada por cuatro estados de 0 a 4, aunque 0 supongo que sería sin enlace y nos quedamos con 1, 2, 3, 4. Supongo que es algo extendido (véase móviles y otros aparatos que marcan la señal con cuatro ó cinco rayitas)
Así que he cogido el anterior script, usando este concepto de calidad de señal, transformándolo para intentar hacer diferencias apreciables entre esas 4 calidades de señal. Lo bueno es que sigo usando triggers de kernel, lo cual consigue parpadeos cortos y precisos.
#!/bin/sh
AVLEDS=`ls /sys/class/leds`
ELED=`ls /sys/class/leds|grep -wo -m1 "$1"`
if [ "$#" -ne 1 ] || [ "$ELED" != "$1" ]; then
printf "\nUSAGE:
ledwsignal.sh <led name>
\navailable leds:\n$AVLEDS
\n\nERROR\n"
exit 255
fi
OLDVAL=0
echo timer > /sys/class/leds/$1/trigger
while [ 1 ]; do
#Getting our signal level from the desired inteface...
REZ=`cat /proc/net/wireless | awk 'NR==3 {print $3}'|sed 's/\.//'`
echo "Link quality (0-4) is: $REZ"
if [ $OLDVAL -ne $REZ ]; then
case "$REZ" in
4) #Best quality
echo 50 > /sys/class/leds/$1/delay_on
echo 50 > /sys/class/leds/$1/delay_off
;;
3) #Good quality
echo 100 > /sys/class/leds/$1/delay_on
echo 100 > /sys/class/leds/$1/delay_off
;;
2) #Fair quality
echo 150 > /sys/class/leds/$1/delay_on
echo 150 > /sys/class/leds/$1/delay_off
;;
1) #Bad quality
echo 250 > /sys/class/leds/$1/delay_on
echo 250 > /sys/class/leds/$1/delay_off
;;
0) #No link
echo 500 > /sys/class/leds/$1/delay_on
echo 700 > /sys/class/leds/$1/delay_off
;;
esac
else
# We have the same signal as before, we do nothing.
echo "Static"
fi
OLDVAL=$REZ
sleep 3
done