PDA

Ver la Versión Completa : [ SOLUCIONADO ] Saber si otro aparato está conectado a mi tethering


Caravantes
05/07/13, 02:17:45
En el apartado de Red, Tasker tiene una acción llamada Enlace-WiFi-(Tether), que nos permite activar o desactivar la función tethering (anclaje a red), convirtiendo el smartphone en un hotspot Wifi. Lo uso con cierta frecuencia y ahora estoy pensando en automatizarlo. Lo que me gustaría es que Tasker pudiera detectar si hay otro aparato conectado a este tethering de mi smartphone.

La idea de fondo es la siguiente: cuando no estoy conectado a ninguna red Wifi (no estoy ni en casa ni en el trabajo), cada 60 minutos pondría en marcha una tarea con el siguiente boceto:
1 Enlace-WiFi-(Tether), encender.
2 Esperar unos 30 segundos para dar tiempo a que otros aparatos se conecten.
3 Enlace-WiFi-(Tether), apagar... si no se ha conectado ningún aparato.

De esta forma mantengo el tethering activo si hay otro aparato usando ese enlace, o apago el tethering para ahorrar batería si no hay ningún aparato usando ese enlace.

Quizá en Linux/Android haya algún comando de consola que emita un listado con las direcciones MAC de los aparatos conectados. Supongo que con algo así, la tarea podría saber si hay algún aparato conectado al tethering de mi smartphone. He tratado de buscar por Google con estas ideas, pero no saco nada en claro.

maid450
05/07/13, 11:31:56
Pues no estoy en casa para probarlo bien, pero mira a ver si este comando devuelve lo que quieres (no debería hacer falta root):

cat /proc/net/arp | tail +2 | awk '{ print $4 }'

Parece un poco marciano, pero si te funciona y hay alguien interesado explicaré que hace y como funciona (no es tan complicado en el fondo) :risitas:

Caravantes
06/07/13, 03:35:42
cat /proc/net/arp | tail +2 | awk '{ print $4 }'

Excelente. Lo he probado en el Terminal y parece que funciona bastante bien. Si tengo otro aparato conectado a mi tethering me devuelve la dirección MAC de ese aparato. Si no tengo ningún aparato contectado no devuelve nada. O sea que cumple perfectamente mis necesidades y expectativas. Además, de regalo... Si estoy en situación de Wifi-normal conectado al router de casa, creo que devuelve la MAC del router.

Con ese comando y la ayuda de Google, he investigado un poco, y tras ello interpreto las siguientes explicaciones, que para mí son suficientes. Corrígeme si estoy muy despistado.

- CAT concatena e imprime (en pantalla) el contenido de un fichero o la salida de un proceso; supongo que aquí lo que hace es mostrar el resultado de...
- ARP son las siglas en inglés de Address Resolution Protocol (Protocolo de resolución de direcciones). Es un protocolo de nivel de red responsable de encontrar la dirección hardware (Ethernet MAC). Este comando hace la parte principal, buscar la información de los equipos conectados, el resultado es porcesado por CAT y luego reenviado a los siguientes elementos...
- TAIL muestra las últimas líneas de un archivo (o de un proceso); supongo que el +2 es para que solo muestre dos líneas, que para mí caso son suficientes. El resultado es redirigido a...
- AWK sirve para manipular texto de una forma selectiva. Con el parámetro '{ print $4 }' sirve para imprimir (por pantalla) la cuarta columna del texto que recibe, omitiendo la información de las otras columnas (direcciones IP y otros datos irrelevantes para el caso).

Todo lo cual parece más complicado que aprender a escribir en chino. No sé cuanto cobra un informático pero creo que les pagan poco, menos que a un ministro, lo cual es muy injusto.

Muchas gracias Maid :gracias:

maid450
06/07/13, 10:44:23
Excelente análisis, eso es justo lo que va haciendo el comando.

Sólo 2 apuntes, en realidad no se usa el comando "arp", existe en Linux, pero he leído que no en todos los Android. En su lugar se lee ("cat" sirve para leer un fichero) el fichero /proc/net/arp, que es un fichero de texto donde se registran los dispositivos conectados (evidentemente tiene que ver con el protocolo ARP que has descrito).
Aparte, el "tail +2" lo que hace es saltarse la primera línea y empezar en la segunda, y esto es porque la primera línea contiene los encabezamientos, los nombres de las distintas columnas, y en la segunda empiezan los resultados.
Si conectaras varios dispositivos te devolvería todas sus MACs.

Todo lo cual parece más complicado que aprender a escribir en chino. No sé cuanto cobra un informático pero creo que les pagan poco, menos que a un ministro, lo cual es muy injusto.

¡Jajaja! Ya te digo xD

Caravantes
13/07/13, 06:25:27
cat /proc/net/arp | tail +2 | awk '{ print $4 }'

Hoy lo he implementado en Tasker, y funciona perfectamente.
He hecho una tarea sencilla que acaba estableciendo una variable %Enlazado a 1 o 0 (uno o cero) dependiendo de que haya otros equipos enlazados o no.

1 Establecer variable %Enlazado a 0
2 Ejecutar consola, cat /proc/net/arp | tail +2 | awk '{ print $4 }' , Root:Encendido, Almacenar Salida En %salida
3 Establecer variable %Enlazado a 1 Si (if) %salida ~ *:*

Luego, en otra tarea, combino esa variable %Enlazado con la variable %WIFI (on/off) para saber la situación exacta porque la variable %Enlazado se pone a 1 tanto si estoy conectado a un router como si estoy en tethering con otro aparato conectado a mi smartphone. Dependiendo de lo que contengan esas dos variables salen cuatro posibilidades para tomar decisiones según corresponda.

Gracias nuevamente, estoy feliz como una lombriz.

Añado la tarea exportada con los detalles:

A1: Establecer variable [ Nombre:%Enlazado A:0 Calcular:Apagado Añadir:Apagado ]
A2: Ejecutar consola [ Comando:cat /proc/net/arp | tail +2 | awk '{ print $4 }' Cuenta atrás (segundos):0 Usar Root:Encendido Almacenar Salida En:%salida Almacenar Errores En: Almacenar Resultado en: ]
A3: Establecer variable [ Nombre:%Enlazado A:1 Calcular:Apagado Añadir:Apagado ] Si (if) [ %salida ~ *:* ]

ATaskREADOS
18/07/13, 01:49:58
Subido al recopilatorio.
Maid y Caravantes muchas gracias y enhorabuena, habeis sido recompensados con el máximo galardón de este subforo: la copa virtual
:campeon:
Fdo: Mlesir