?>/script>'; } ?> ar-5387un openwrt led de nivel de señal Widgets Magazine

Autor Tema: ar-5387un openwrt led de nivel de señal  (Leído 19706 veces)

0 Usuarios y 1 Visitante están viendo este tema.

danitool

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #20 en: 09-01-2015, 12:28 (Viernes) »
Me gusta tu script raphik, resulta muy compacto, y el parpadeo de los leds resulta muy amigable a la vista.

Sin embargo hay varias cosas que quiero comentar:
  • la línea que devuelve la señal
    Citar
    cat /proc/net/wireless |  sed '3q;d' | cut -d \  -f 8 | sed 's/.$//'
    resulta posible que no devuleva nada en algunos casos, ya que cuenta por número de espacios la situación del nivel de señal, y no siempre es 8 (supongo que dependerá de las versiones wifi), en mi caso es 15 y no sale nada con esa línea, así que prefiero awk, ya que no importa el número de espacios y por tanto parece más genérico para cualquier dispositivo.
  • en caso de no haber conexión (sin señal), el script no lo tiene en cuenta, o que se devuelva un valor atípico por error (mayor o igual que ¿0?, improbable pero no imposible), aquí nos daría indicador excelente, cuando sabemos que es imposible tener valores iguales a 0 ó mayores

Sobre los intervalos de señal RSSI, para gustos colores. Parece que según fabricante, Atheros, Ralink, Realtek, Broadcom, estos intervalos podrían significar cosas diferentes en cuestión de calidad de señal. Véase Realtek que típicamente con una fuerza de señal grande comparado con Atheros tenemos una calidad pobre.

Eché un ojo a lo que considera ubiquiti para sus leds de señal por defecto en sus routers. Me refiero concretamente a estos leds

Resulta que tenemos estos cuatro umbrales (configurables) que activan la señal, e indican el: malo, regular, bueno, excelente, que por defecto ellos ponen en.
Código: [Seleccionar]
LED1 LED2 LED3 LED4
- 94 - 80 - 73 - 65
Parecen valores bastante conservadores.



 

danitool

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #21 en: 09-01-2015, 20:21 (Viernes) »
Bien pues he reescrito de nuevo el script, con algunos cambios menores y esta vez usando los umbrales que usa Ubiquiti en sus dispositivos wifi. Supongo que Ubiquiti tendrá mejor criterio, ya que se dedican a estas cosas.

Código: [Seleccionar]
#!/bin/sh
#Filename: ledwsignal.sh
#Description: This script shows wifi signal strength by blinking one led.
#2015 raphik, danitool

AVLEDS=`ls /sys/class/leds`
ELED=`ls /sys/class/leds|grep -wo -m1 "$1"`
OLD_STRENGTH=-1

Led_On() {
 echo $2 > /sys/class/leds/$1/delay_on
}

Led_Off() {
 echo $2 > /sys/class/leds/$1/delay_off
}

#HELP
if [ "$#" -ne 1 ] || [ "$ELED" != "$1" ]; then
    printf "\nUSAGE:
    ledwsignal.sh <led name>
    \navailable leds:\n$AVLEDS
    \n\nERROR\n"
    exit 255
fi

echo timer > /sys/class/leds/$1/trigger

while true ; do
  RSSI=`cat /proc/net/wireless | awk 'NR==3 {print $4}' | sed 's/\.//'`
  #echo "RSSI: $RSSI"
  
  if [ -z $RSSI ] || [ $RSSI -ge 0 ]; then STRENGTH=0 #error
  elif [ $RSSI -ge -65 ] ; then STRENGTH=4 #excellent
  elif [ $RSSI -ge -73 ] ; then STRENGTH=3 #good
  elif [ $RSSI -ge -80 ] ; then STRENGTH=2 #fair
  elif [ $RSSI -ge -94 ] ; then STRENGTH=1 #bad
  else STRENGTH=0
  fi

  if [ $OLD_STRENGTH != $STRENGTH ] ; then
    case $STRENGTH in
      4)  Led_On $1 1960; Led_Off $1 40 ;;
      3)  Led_On $1 950;  Led_Off $1 50  ;;
      2)  Led_On $1 500;  Led_Off $1 500 ;;
      1)  Led_On $1 50;   Led_Off $1 950  ;;
      0)  Led_On $1 40;   Led_Off $1 1960 ;;
    esac
    echo "STRENGTH (0-4): $STRENGTH"
  fi

OLD_STRENGTH=$STRENGTH

sleep 3
done
exit

El script es genérico, para un solo led y debiera funcionar en cualquier router. Tal vez meta esto en la wiki.
« Última modificación: 10-01-2015, 13:50 (Sábado) por danitool »

raphik

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #22 en: 10-01-2015, 01:42 (Sábado) »
Me gusta tu script raphik, resulta muy compacto, y el parpadeo de los leds resulta muy amigable a la vista.

Sin embargo hay varias cosas que quiero comentar:
  • la línea que devuelve la señal
    Citar
    cat /proc/net/wireless |  sed '3q;d' | cut -d \  -f 8 | sed 's/.$//'
    resulta posible que no devuleva nada en algunos casos, ya que cuenta por número de espacios la situación del nivel de señal, y no siempre es 8 (supongo que dependerá de las versiones wifi), en mi caso es 15 y no sale nada con esa línea, así que prefiero awk, ya que no importa el número de espacios y por tanto parece más genérico para cualquier dispositivo.
  • en caso de no haber conexión (sin señal), el script no lo tiene en cuenta, o que se devuelva un valor atípico por error (mayor o igual que ¿0?, improbable pero no imposible), aquí nos daría indicador excelente, cuando sabemos que es imposible tener valores iguales a 0 ó mayores


¡Gracias!

En relación al primer punto que comentas, es verdad, es mejor usar awk que la combinación sed|cut.

Y en relación al segundo, no he considerado que la lectura de /proc/net/wireless devuelva un valor fuera de rango. Pero, puestos en lo peor, ¿y si devolviera caracteres no numéricos?

Por otra parte, aunque no lo comentas, pensaba que rssi y nivel de señal (los famosos dBm) eran dos cosas distintas, cuando en realidad es justamente lo mismo. Ya lo tengo más claro.

Enhorabuena por tu script. Te ha quedado de lujo. En cuanto al ritmo de parpadeo de los LEDs, ¿no prefieres que delay_on + delay_off sea múltiplo de un segundo? En los casos 3 y 1, la suma sube a 1100 ms. Bastaría con ajustar un par de retardos a 950 ms. Ya sé que es una totería, pero me chifla este tipo de chorradas.

Saludos.

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re:
« Respuesta #23 en: 10-01-2015, 11:49 (Sábado) »
Pongo 'chincheta' al hilo.
Y en cuanto tenga un Pc a mano, lo añado, al Índice.

Enviado desde uno de mis 'cacharros' usando Tapatalk


danitool

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #24 en: 10-01-2015, 12:21 (Sábado) »
Vale, pues para celebrar la chincheta, pongo un nuevo script.

Esta vez usa un concepto de visualización diferente. La idea es regular el "brillo" del led de forma que brille con más o menos intensidad. Para ello trato de hacer un PWM casero usando el timer en intervalos muy cortos.

Haciendo pruebas parece que el ojo humano (el mío), el encendido/apagado dentro  intervalos de 20 milisegundos es interpretado como disminución o aumento del brillo del led.

Así por tanto el script contempla 5 situaciones:
Señal excelente: brillo total (led permanentemente encendido)
Señal buena: brillo intermedio
Señal regular: brillo bajo
Señal mala: brillo mínimo (el menor que pude conseguir)
Error de señal: led parpadea


Código: [Seleccionar]
#!/bin/sh
#Filename: ledwsignal.sh
#Description: This script shows wifi signal strength by controlling one led brightness
#2015 raphik, danitool

AVLEDS=`ls /sys/class/leds`
ELED=`ls /sys/class/leds|grep -wo -m1 "$1"`
OLD_STRENGTH=-1

Led_On() {
 echo $2 > /sys/class/leds/$1/delay_on
}

Led_Off() {
 echo $2 > /sys/class/leds/$1/delay_off
}

#HELP
if [ "$#" -ne 1 ] || [ "$ELED" != "$1" ]; then
    printf "\nUSAGE:
    ledwsignal.sh <led name>
    \navailable leds:\n$AVLEDS
    \n\nERROR\n"
    exit 255
fi

echo timer > /sys/class/leds/$1/trigger

while true ; do
  RSSI=`cat /proc/net/wireless | awk 'NR==3 {print $4}' | sed 's/\.//'`
  #echo "RSSI: $RSSI"
  
  if [ -z $RSSI ] || [ $RSSI -ge 0 ]; then STRENGTH=0 #error
  elif [ $RSSI -ge -65 ] ; then STRENGTH=4 #excellent
  elif [ $RSSI -ge -73 ] ; then STRENGTH=3 #good
  elif [ $RSSI -ge -80 ] ; then STRENGTH=2 #fair
  elif [ $RSSI -ge -94 ] ; then STRENGTH=1 #bad
  else STRENGTH=0
  fi

  if [ $OLD_STRENGTH != $STRENGTH ] ; then
      if [ $OLD_STRENGTH = 4 ] ; then echo timer > /sys/class/leds/$1/trigger
      fi
      case $STRENGTH in
4)  echo default-on > /sys/class/leds/$1/trigger ;;
3)  Led_On $1 12;  Led_Off $1 8  ;;
2)  Led_On $1 6;  Led_Off $1 14 ;;
1)  Led_On $1 1;   Led_Off $1 19  ;;
0)  Led_On $1 500;   Led_Off $1 500 ;;
      esac
  echo "SIGNAL STRENGTH (0-4): $STRENGTH"
  fi



OLD_STRENGTH=$STRENGTH

sleep 3
done
exit


No sé como se verá el "brillo" en otros routers, ya que cada uno usa leds diferentes. Y como en algunos el brillo del led de por sí es penoso igual ahí el script no produzca diferencias apreciables. O bien cuando la luz del sol incide directamente los cambios de "brillo" también son difíciles de apreciar.

Así que recomiendo probar el script a oscuras  ;D
« Última modificación: 10-01-2015, 13:36 (Sábado) por danitool »

raphik

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #25 en: 10-01-2015, 12:39 (Sábado) »
Sobre los intervalos de señal RSSI, para gustos colores. Parece que según fabricante, Atheros, Ralink, Realtek, Broadcom, estos intervalos podrían significar cosas diferentes en cuestión de calidad de señal.

Los LEDs del Ubiquiti miden la potencia de la señal recibida, que no la calidad del enlace. Para el cálculo de la calidad hay que considerar también el factor ruido.





En el ejemplo ilustrado por la imagen de arriba, CL1 recibe menos cantidad de señal que CL2. Sin embargo, debido a una fuente próxima de ruido (otros AP, teléfonos inalámbricos, hornos microondas), el enlace de CL1 podría ser de mejor calidad que el de CL2.

Seguro que ya sabes todo esto, pero lo menciono para dejar claro que estamos midiendo la potencia de la señal recibida y no la calidad del enlace.

Saludos.

Este enlace es interesante: http://e2e.ti.com/support/wireless_connectivity/w/design_notes/calculation-and-usage-of-lqi-and-rssi
« Última modificación: 10-01-2015, 12:56 (Sábado) por raphik »

danitool

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #26 en: 10-01-2015, 13:02 (Sábado) »
Está bien dejarlo claro. De hecho varias veces me pasó que con una señal muy grande el enlace ni siquiera conectaba.

Digamos que para disfrutar de una calidad buena de enlace es condición necesaria recibir una buena potencia de señal, pero no suficiente.

Sobre el RSSI, la verdad al comentarlo tú me surgieron dudas de si eso es lo que indica /proc/net/wireless. Y todavía no lo tengo claro, y como cada fabricante/driver hace cosas diferentes... seguiré sin tenerlo.

Quizás no debiera usar el nombre QUALITY en el script. O quizás habría que usar otro parámentro, por ejemplo el mismo que usa Luci en OpenWrt en su icono con rayitas, pero no sé así de forma inmediata que parámetro del kernel usa luci para poner más o menos rayitas.

Edito:  en los dos anteriors scripts reemplacé las cadenas QUALITY por STRENGTH, son los mismos scripts, simplemente con otra nomenclatura para que sea más correcto.
« Última modificación: 10-01-2015, 13:40 (Sábado) por danitool »

raphik

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #27 en: 10-01-2015, 13:29 (Sábado) »
Supongo que para evaluar la calidad de un servicio de correos habría que tener en cuenta cuántas cartas llegan a su destino sobre el total de cartas que se envían.

En mi opinión, la calidad de un enlace no debería medirse por la potencia de la señal recibida, sino por la relación entre paquetes que salen de A y paquetes que llegan a B y vicevarsa.

Saludos.

danitool

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #28 en: 10-01-2015, 13:48 (Sábado) »
En teoría es tal como lo explicas raphik. Desafortuadamente en la práctica se suelen usar medidores más rudos. Los carteros por cierta experiencia con ellos muchas veces lo que quieren es librarse de la carta/paquete y la entregan de cualquier manera, de forma que disminuye la probabilidad que llegue realmente a su destino. En la oficina seguramente evaluarán que el mejor cartero  es aquél que más cartas despachó en un día sin tener en cuenta si esas cartas llegaron al destino.

Resumiendo el feedback es costoso  >:D.

Ya he editado los scripts para que no aparezca quality en ellos, lo cual es lo correcto.

raphik

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #29 en: 11-01-2015, 03:34 (Domingo) »
Me parece que estamos mezclando churras con merinas. Es verdad que al orientar una antena conviene conocer el nivel de señal recibida, pero lo que interesa al usuario es saber si verá la Smart TV a trompicones o si navegará por la web con fluidez. Y para esto, tal vez, el indicador óptimo es la velocidad de transmisión.



Saludos.

danitool

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #30 en: 11-01-2015, 10:49 (Domingo) »
Efectivamente lo que interesa al final de todo es el ancho de banda real conseguido, aunque tal vez más en la recepción de los clientes que en la transmisión, las cuales suelen ser velocidades diferentes.

A veces forzando la velocidad de transmisión a un valor más bajo en nuestro receptor wifi, conseguimos una recepción más alta. Con esto quiero decir que este será un parámetro difícil de evaluar.

También a veces lo que indica el adaptador wireless en cuestión de velocidad no es real. No sería la primera vez que marca 36 Mbit y luego la conectividad resulta que es una castaña (véase realtek), con contínuos cortes cuando intentamos transferir con tasas altas de datos.

La única forma certera en mi opinión para evaluar la calidad del enlace es un test real de descarga de un archivo de punto a punto. Me parece casi inviable en un  script.

En estos scripts simplemente tratamos de tener una referencia para saber si la cosa "pilla o no pilla algo". O bien un indicador que nos dirá si la señal está variando o pasa algo en el chisme wifi  >:D

Personalmente creo que si Ubiquiti usa la fuerza de señal recibida como indicador en sus leds, seguro que es porque no encontraron mejor forma ó más simple. No es que sea fan de una marca u otra, pero instalando un par de nanostations vi que realmente el indicador tiene gran utilidad aunque sea imprecisa en ciertas condiciones.

seny

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #31 en: 11-01-2015, 18:45 (Domingo) »
Se podria parametrizar la funcion para que señale la intensidad o el MCS que indica la velocidad, segun queramos.
O incluso otro parámetro que le diga el led que queremos usar.

El MCS en este router va de 0 a 15 pero en otros puede variar e ir de 0 a 31, ahi se deberia identificar el tipo de wifi y eso ya es mas complicado.
edito:
Pensandolo bien el valor máximo del MCS se podría indicar en el propio parámetro, si es 0 se mide la intensidad de señal y si tiene un valor superior a 0, se indica además de que se quiere medir el MCS,  del valor máximo al que puede llegar en ese router.
Se podria reducir la escala para igualarla a la de intensidad de señal y asi poder usar las mismas rutinas.
saludos
« Última modificación: 11-01-2015, 22:46 (Domingo) por seny »

uniextra

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #32 en: 17-01-2015, 10:22 (Sábado) »
podrias poner un link de descarga a firm asi lo podemos probar otros?

raphik

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #33 en: 19-01-2015, 08:57 (Lunes) »
podrias poner un link de descarga a firm asi lo podemos probar otros?
Para probarlo no hay que descargarse ningún firmware. Se trata de un simple script. Si lees el post detenidamente, verás las instrucciones para instalarlo.

Código: [Seleccionar]
# INSTRUCCIONES:
# nombre del fichero: nivel.sh
# - copia este fichero en la carpeta /root del router
# - conviértelo en ejecutable: chmod +x /root/nivel.sh
# - ejecuta el script desde una consola: /root/./nivel.sh
# - para detenerlo: Control+C
#

Saludos.

uniextra

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #34 en: 22-01-2015, 21:12 (Jueves) »
si lo se, pero a mi este router me va muy mal la wifi por eso te pedia tambien la compilcion q estas usando

gracias

raphik

  • Visitante
Re: ar-5387un openwrt led de nivel de señal
« Respuesta #35 en: 23-01-2015, 09:46 (Viernes) »
si lo se, pero a mi este router me va muy mal la wifi por eso te pedia tambien la compilcion q estas usando

La compilación que estoy usando la puedes descargar aquí: download783.mediafire.com/2652wbyjfx0g/73mm22mlz12t4n6/openwrt-AR-5387un-squashfs-cfe.bin

Es la misma que la de este post https://foro.seguridadwireless.net/openwrt/openwrt-en-comtrend-ar5387un/msg322879/#msg322879

Saludos.
« Última modificación: 23-01-2015, 09:54 (Viernes) por raphik »