Autor Tema: nivel de señal wifi  (Leído 3634 veces)

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

daskoud

  • Visitante
nivel de señal wifi
« en: 01-12-2016, 18:05 (Jueves) »
Hola buenas a toso,

Me gustaría pedir ayuda para obtener la variable del nivel de señal de wifi, ya que necesito extraer esa variable y enviar su contenido por puerto serial a un micro controlador.
Problema es que no se utilizar el script shell y necesito un poco de ayuda para obtener esa variable y enviarla por el puerto TX.

Gracias un saludos.



danitool

  • Visitante
Re: nivel de señal wifi
« Respuesta #1 en: 01-12-2016, 18:17 (Jueves) »
Hace tiempo en el foro, raphik y algunos otros habíamos hecho un script para mostrar la fuerza de la señal en los leds.

Si no me equivoco para extraer el nivel de señal wifi usábamos esta línea
Código: [Seleccionar]
cat /proc/net/wireless | awk 'NR==3 {print $4}' | sed 's/\.//'
Aunque solo te interese esa línea, los scripts están colgados en la wiki
https://wiki.openwrt.org/doc/howto/led.wifi.meter

daskoud

  • Visitante
Re: nivel de señal wifi
« Respuesta #2 en: 01-12-2016, 18:21 (Jueves) »
perdon por preguntarte esto, no se utilizar script solo utilizo lenguaje C.
Como podria guardar lo que recibo por esa linea en una variable para luego poder utilizara con un echo para enviarlo en un pin.
Y otra cosa lo que recibo por esa linea que tipo de dato es (caracteres, numeos,..)

Gracias por responder.

danitool

  • Visitante
Re: nivel de señal wifi
« Respuesta #3 en: 01-12-2016, 18:31 (Jueves) »
perdon por preguntarte esto, no se utilizar script solo utilizo lenguaje C.
Como podria guardar lo que recibo por esa linea en una variable para luego poder utilizara con un echo para enviarlo en un pin.
Y otra cosa lo que recibo por esa linea que tipo de dato es (caracteres, numeos,..)

Gracias por responder.

lo que obtienes de esa línea es un número negativo, el RSSI (Received Signal Strength Indicator)
algo tal que así
Código: [Seleccionar]
-71Supongo que podrías hacer lo mismo en lenguaje C, accediendo mediante un file descriptor a /proc/net/wireless y mediante lenguaje C extraer el RSSI.

O bien otra opción sería combinar script y código C, con un script hacer un loop usando la línea con cat de modo que envíe el RSSI a un archivo temporal /tmp/RSSI , y en tu código escrito en C obtener el valor de ahí directamente

« Última modificación: 01-12-2016, 18:32 (Jueves) por danitool »

daskoud

  • Visitante
Re: nivel de señal wifi
« Respuesta #4 en: 01-12-2016, 18:38 (Jueves) »
La verdad pensaba hacer algo similar, es decir crear un script que haga un loop así cada cierto tiempo envía por echo la variable al puerto de serie del router hacia el microcontrolador. (Una descripción muy superficial pero luego ya surgirán los Problemas  ;D).

Pero me han enseñado este código :
 
Código: [Seleccionar]
$(cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}')
y este otro que me has pasado:

Código: [Seleccionar]
cat /proc/net/wireless | awk 'NR==3 {print $4}' | sed 's/\.//'
hay alguna diferencia importante??
« Última modificación: 01-12-2016, 18:39 (Jueves) por daskoud »

danitool

  • Visitante
Re: nivel de señal wifi
« Respuesta #5 en: 01-12-2016, 18:55 (Jueves) »
Código: [Seleccionar]
$(cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}')
parece más económico ya que no usa sed, aunque ignoro si devuelve lo mismo

Ficht

  • Visitante
Re: nivel de señal wifi
« Respuesta #6 en: 01-12-2016, 19:09 (Jueves) »
Código: [Seleccionar]
$(cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}')
parece más económico ya que no usa sed, aunque ignoro si devuelve lo mismo

dvuelve esto
Código: [Seleccionar]
$(cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}')

-ash: 64: not found

y..
Código: [Seleccionar]
cat /proc/net/wireless | awk 'NR==3 {print $4}' | sed 's/\.//'

-65

daskoud

  • Visitante
Re: nivel de señal wifi
« Respuesta #7 en: 01-12-2016, 23:02 (Jueves) »
Vaya... :-\

Me parece que tendré que aprender a manejar el bash shell script de linux para poder aprovechar y entender a fondo los router con firmware openwrt.


Ficht si utilizas este codigo:
Código: [Seleccionar]
cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}'te da la señal wifi en porcentaje
« Última modificación: 01-12-2016, 23:12 (Jueves) por daskoud »

Ficht

  • Visitante
Re: nivel de señal wifi
« Respuesta #8 en: 01-12-2016, 23:48 (Jueves) »
Vaya... :-\

Me parece que tendré que aprender a manejar el bash shell script de linux para poder aprovechar y entender a fondo los router con firmware openwrt.


Ficht si utilizas este codigo:
Código: [Seleccionar]
cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}'te da la señal wifi en porcentaje

Sí, en efecto.

Código: [Seleccionar]
~# cat /proc/net/wireless | awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}'

64 %

raphik

  • Visitante
Re: nivel de señal wifi
« Respuesta #9 en: 01-12-2016, 23:49 (Jueves) »
El nivel de señal está en el archivo cat /proc/net/wireless, que se puede leer con el comando "cat":

Código: [Seleccionar]
root@OpenWrt:~# cat /proc/net/wireless
Inter-| sta-|   Quality        |   Discarded packets               | Missed | WE
 face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22
 wlan0: 0000   40.  -76.  -256        0      0      0   1784      3        0

El resto del código ( awk 'NR==3 {printf "%0.0f %% \n", $3/70*100}' ) sirve para extraer el valor que interesa, que en el caso de arriba es 40, aplicarle un factor de corrección y expresarlo porcentualmente. Aplicando el que aquí se propone, tendríamos que el nivel de señal de mi router es del 40/70*100 = 57 %.

Compilar un programa en C para OpenWrt no es tarea baladí. Por aquí ya lo hemos intentado y, al menos a mí, no me ha dado buenos resultados. Mejor Lua o el propio Bash. Si te apetece, pásate por el hilo https://foro.seguridadwireless.net/openwrt/base-practica-de-desarrollo/.

Saludos.
« Última modificación: 03-12-2016, 14:37 (Sábado) por raphik »

daskoud

  • Visitante
Re: nivel de señal wifi
« Respuesta #10 en: 02-12-2016, 00:12 (Viernes) »
Gracias raphik,

he estado toqueteando el comando y si se cumple lo que dices, pero me he fijado que el valor de noise nunca cambia esto es normal?
« Última modificación: 02-12-2016, 18:42 (Viernes) por daskoud »

raphik

  • Visitante
Re: nivel de señal wifi
« Respuesta #11 en: 03-12-2016, 14:11 (Sábado) »
No sé si tu router calcula de verdad el valor noise o se lo está inventando.

Bueno, a tu proyecto sólo le queda sacar el dato por puerto serie. En OpenWrt (como en Linux), para escribir en el puerto serie se utiliza un fichero especial.

Para enviar el contenido de una variable a puerto serie:
Código: [Seleccionar]
echo $mi_variable > /dev/ttyS0
Saludos.
« Última modificación: 03-12-2016, 14:46 (Sábado) por raphik »

daskoud

  • Visitante
Re: nivel de señal wifi
« Respuesta #12 en: 03-12-2016, 18:29 (Sábado) »
existe alguna pagina que te muestre mas comandos de este tipo, como por ejemplo hacer un scan de ap mediante script ?
« Última modificación: 03-12-2016, 19:12 (Sábado) por daskoud »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2113
Re: nivel de señal wifi
« Respuesta #13 en: 04-12-2016, 07:55 (Domingo) »
existe alguna pagina que te muestre mas comandos de este tipo, como por ejemplo hacer un scan de ap mediante script ?

Muestra un listado de las wifis internas del router:
Código: [Seleccionar]
iw devEn mi caso devuelve wlan0 y wlan1.

Escanea redes con una de las wifis anteriormente devueltas:
Código: [Seleccionar]
iw wlan1 scan
Busca información sobre el comando iw en linux y te dará más resultados de cómo usarlo.
Sobre scripts ya prefritos, para usarlos, puede que te encuentres alguno, del que puedas aprovechar algo, porque cada script está adaptado a las necesidades del que lo hace. Depende de las necesidades que tú tengas.
No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
Los dispositivos táctiles y las pantallas pequeñas son una lacra para la información relevante y el desarrollo de interfaces de usuario.
Trabajar sin la nube debería ser una prestación de los IoT, no un bug.

raphik

  • Visitante
Re: nivel de señal wifi
« Respuesta #14 en: 04-12-2016, 10:56 (Domingo) »
existe alguna pagina que te muestre mas comandos de este tipo ... ?

Claro que existe. Busca comandos linux en Internet y verás... Pero ten en cuenta que OpenWrt es un Linux para máquinas con escasos recursos y no todos los comandos de Linux funcionan en OpenWrt.

hacer un scan de AP ...

Como dice Tki2000, lo primero es averiguar el nombre de la wifi interna (generalmente es wlan0):
Código: [Seleccionar]
iw dev
Para escanear los AP y obtener un listado legible y ordenado por nivel de señal:
Código: [Seleccionar]
iw dev wlan0 scan | egrep "signal|SSID" | sed -e "s/\tsignal: //" -e "s/\tSSID: //" | awk '{ORS = (NR % 2 == 0)? "\n" : " "; print}' | sort
Saludos.

danitool

  • Visitante
Re: nivel de señal wifi
« Respuesta #15 en: 04-12-2016, 11:20 (Domingo) »
creo que iwinfo usa las mismas librerías que Luci para obtener información del wifi, así que devería devolver lo mismo que Luci devuelve en la interfaz web.

daskoud

  • Visitante
Re: nivel de señal wifi
« Respuesta #16 en: 04-12-2016, 13:33 (Domingo) »
La verdad muchas gracias desde que he abierto este tema he aprendido bastante incluso ya me puedo mover por shell script de putty ;D , Ademas todo ese código proporcionado me ha servido y lo tengo funcionando.

Abro otro post para otras dudas ya que veo que me salgo del tema.

Gracias.