PDA

Ver la Versión Completa : Saber si un dispositivo pierde señal Wifi


marcial
21-10-2013, 08:38:13
Hola a todos.

Trabajo con D5 y mi problema/necesidad es la siguiente:

Tengo uno/varios dispositivo/s wifi (tablet/portatil/PDA) conectado/s por wifi a un servidor (W8, W7 ó XP). Me gustaria monitorizar en el servidor y saber en todo momento la intensidad de la señal del/los dispositivo/s conectado/s (Como cuando se ven en el dispositivo las 5 rayitas verticales). Esto es para establecer como una especie de seguridad y decir por ej. si hay 5 rayitas, nada; si hay 3 rayitas, mensaje en el servidor de "se esta perdiendo la señal de la PDA1" y si hay una o menos (cuando normalmente debería de haber 5 ) sacar un mensaje "urgente" diciendo "se estan llevando el termina PDA1/2/3...etc".

Si sabés de alguna rutina o idea que pueda monitorizar esto os lo agradecería un montón.

Muchas gracias a todos por vuestro interés.
Marcial

Neftali [Germán.Estévez]
21-10-2013, 11:15:05
No tengo claro que eso puedas hacerlo desde el Servidor o debas hacerlo desde los clientes.
Seguro que puedes conocer los dispositivos conectados (por ejemplo vía WMI), pero no se si podrás acceder a esos datos (intensidad de señal), ya que eso es un dato que ves desde el dispositivo, no desde el servidor.

marcial
21-10-2013, 12:25:37
Bueno Neftalí, seguro que tienes razón. Entonces, en el programa que ejecutan los clientes (Via Terminal Server y que está logicamente en el Servidor) y con un timer en ese programa, habría recoger ese dato y que lo leyera el programa principal que es el que estaría vigilando si se pierde señal porque se estan llevando el dispositivo.

Pero ¿alguna idea o rutina de como hacerlo?

Neftali [Germán.Estévez]
21-10-2013, 14:18:25
Bueno Neftalí, seguro que tienes razón.

No, no,... Yo no iría tan lejos.. ;-)
Como te he dicho es algo que no tengo claro, pero no lo tomes como una afirmación, porque es más una intuición o una deducción, que una seguridad.
No lo descartes e investígalo.



...en el programa que ejecutan los clientes (Via Terminal Server y que está logicamente en el Servidor) y con un timer en ese programa, habría recoger ese dato y que lo leyera el programa principal que es el que estaría vigilando si se pierde señal porque se estan llevando el dispositivo.


Más o menos algo así es lo que a mi se me había ocurrido.
Desde los clientes sí que debe ser accesible la fuerza o la intensidad de señal.
Como tú bien dices, ese datos es el que habría que "pasar" desde el cliente al servidor cada X tiempo.

(1) La consulta creo que se puede hacer vía WMI. Revisa el blog de Rodrigo Ruz (http://theroadtodelphi.wordpress.com/2011/10/15/all-about-wifi-networks-and-wifi-adapters-using-the-wmi-and-delphi/), porque creo que hay ejemplos al respecto.
(2) En cuanto a la comunicación entre clientes y servidor, si están en la misma red, puedes utilizar sockets (http://www.hackerdude.com/courses/delphi/Cap010.2.html) (algo sencillo bastaría). en el FTP del club, es posible que encuentres algún otro ejemplo al respecto.

marcial
21-10-2013, 19:01:01
Vaya, por desgracia hay un problema: Clase no valida aqui

FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM WiFi_NetworkAdapter','WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;

Y claro, anulando esa linea ya vienen luego una serie de errores en cascada.

Por lo visto, y segun dice Rodrigo "Maybe your Wifi Adapter driver does not install a CIMWiFiProvider which is necesary to register these classes".

Yo tengo un Router Comtrend HG5636+ de Jazztel (al que no tuve que instalar ningún driver para que funcionara) y en la web del fabricante no vienen drivers para W7, los trae para XP,NT y 2000. La verdad es que no se si instalar uno de esos drivers pero quiza me arriesgue a que luego no funcione el router. Además, según he leido por ahí, los de XP y luego ejecutar desde W7 con compatibilidad para XP no funcionan.

Seguiré mirando y si no, trataré de buscar otra solución para que no se lleven los tablets/ Pda's

Gracias Neftalí y a los que no habéis podido ayudarme.

Neftali [Germán.Estévez]
21-10-2013, 19:16:22
¿Pero dónde estás ejecutando esta línea?
¿Tienes un adaptador WIFI en ese equipo?

Que el router tenga WIFI no tiene nada que ver con esto. Esto te estará dando las características del adaptador wifi del equipo en el que lo estás ejecutando, no del router.

marcial
21-10-2013, 19:38:03
Vaya, lo que es el no saber.

Mi equipo no tiene adaptador wifi, tiene un router con una antena. Yo pensaba que como por ej.un portatil se conecta via wifi con mi servidor, pues que ya estaba todo hecho; que mi servidor tenía todo lo que hacia falta para implementar esta solución..

Digamos que es la configuración más estandard, un equipo y un router wifi. Por lo visto la solución para que no se lleven las tablets es más compleja que la que yo creia.

¿Alguna sugerencia para averiguar si las tablets/Pda's están fisicamente cerca del servidor?

Saludos

Casimiro Notevi
21-10-2013, 19:42:57
¿Alguna sugerencia para averiguar si las tablets/Pda's están fisicamente cerca del servidor?
Amarrada con una cuerda :D
Le puedes poner un chip RFID, de esos que envían una señal y salta una alarma.

ecfisa
21-10-2013, 19:52:22
Hola.

Como dice Neftali, ese código te va a dar la recepción que tiene cada equipo, no se me ocurre otra cosa que lo ejecutaras en cada portátil. ¿ Y desde donde deseas verificar la recepción ?

Saludos :)


Edito: ¡ Me hiciste buscar que #@!& es un chip RFID (http://es.wikipedia.org/wiki/RFID) ! :D (no es descabellado... :))

marcial
21-10-2013, 20:36:44
Hola Ecfisa
Es un restaurante de lujo que pretende entregar una/s tablet/pda a los clientes para que ellos se encargen su propia comanda. Entonces habría un PC digamos en la barra con el que estarían conectados por TermServer las tablets. En ese PC se estaría ejecutando el programa para el control de las comandas, mesas, etc., y tendría por ej. un timer que recibiria las señales de las tablets conectadas con el PC. Las tablets estarían ejecutando un programa ubicado en ese mismo PC.

Por ej. yo podría hacer que la tablet leyera un fichero y con el timer prog.de las comandas del PC chequeara si estaba leido. Si no lo leyera es que la tablet estaría fuera del alcance. Entonces eso significa que se lo han llevado y aqui entraría la solución de la cuerda de Casimiro. Investigaré sin embargo sobre la otra solución de RFID a ver si es viable o no en precio y operatividad.

Gracias
PD.Casimiro, voy a decirle al cliente lo de la cuerda. El tio es un panolis de mil demonios que seguro que se cae de espaldas.

mamcx
21-10-2013, 20:37:48
No se que tablets estas usando, pero es posible saber si que antenas estan encendidas (como el WIFI, Bluethooth, etc) y que tipos de redes (WAN, Celular, local) están abiertas.

Lo que NO te va a decir es si hay comunicación, que por lo general es lo que *realmente* uno quiere saber.

En ese caso, solo existen 2 metodos:

1- Desde el cliente: Haces una llamada a un sitio web, periodicamente. Asi es como se hace con los dispositivos iOS y el ejemplo de codigo de Reachability (https://developer.apple.com/Library/ios/samplecode/Reachability/Introduction/Intro.html). Podrias usar www.google.com u otro similar (osea, haces PING o un GET)

2- Desde el servidor: Vas logeando cada vez que el cliente asoma su cara. Y tienes un timeout.

Si quieres algo superfacil de implementar que te da excelente desempeño y muy escaso overhead (que sirve para mezclar los dos anteriores e implementa algo asi como el indicador de presencia de un chat):

http://www.pubnub.com/

ecfisa
21-10-2013, 21:06:02
Hola marcial.

También habría que considerar cuál es la distancia máxima estimada que se podrán alejar las tablets, tal vez se solucione buscando un router Wifi con la potencia adecuada...

No soy experto en la materia pero encontré estos enlaces que tal vez te sirvan:

Alcance de una antena, router o USB Wifi (http://www.lacuevawifi.com/CompraWifi/2013/01/23/como-saber-el-alcance-de-una-antena-router-o-usb-wifi/). En este sitio (http://www.comprawifi.com/index.php) que mencionan, hay información sobre varios routers, también hay una utilidad para el cálculo de distancia entre antenas (http://www.comprawifi.com/index.php?act=calculo)

Saludos :)

marcial
21-10-2013, 21:25:26
Hola Mancx. Mira, es que la idea es que el cliente con la tablet no se pueda conectar a internet; sólo servirá para manipular su comanda. Aunque se podrían hacer pings, también se podría leer un fichero cada "2 segundo" y si no lo lee no hay alcance y saltaría la alarma. Pero creo que con ambas soluciones, cuando salte la alarma quizá ya sea tarde.

Hola Ecfisa. No creo que sea problema de conseguir routers con mas alcance, lo que yo quería con lo de la intensidad de la señal es averiguar si el tablet se está alejando del router; es decir, que yo se que en la sala en la que están los tables tienen 4 rayitas de intensidad en toda la sala; pues bien, si tienen tres o dos....es que se están alejando y entonces que salte la alarma pero antes de perder la conexión, porque entonces estarán en la calle con los tablets en el bolsillo.

Si como decia Neftalí, la intensidad sólo la puede averiguar la tablet y no el servidor, quizá fuera otra solución que ese dato se intentara guardar en un fichero que leyera periodicamente el programa principal de las comandas. Pero el problema sería cómo grabar ese ficherito con la intensidad. Creo además que el problema se complica (la solucion de www.pubnub.com) porque todo ha de estar hecho con D5.

De todas formas seguiré investigando sobre vuestras ideas.

mamcx
21-10-2013, 23:01:54
Ya que lo que te interesa es la ubicacion de los objetos y no la comunicacion:

http://www.parl.clemson.edu/~ahoover/theses/lowe-thesis.pdf

(Resumen: Usando GPS, RFID y otros)

Un posible metodo:

http://stackoverflow.com/questions/8921157/location-and-distance-calculation-using-wifi-in-android

http://stackoverflow.com/questions/7074173/is-it-possible-to-determine-an-iphone-or-android-devices-location-based-on-wifi?rq=1

La idea es que operas sobre los principios de como funcionan los GPS. Marcas los puntos fijos donde esta el acces point y utilizas las "fuerzas" relativas de la señal para generar un mapa que te indica en base a la fuerza donde esta el aparato. Luego triangulando te daria la ubicacion aproximada.

Pero eso puede resultar complicado...

Soluciones ya hechas, que se podrian "pegar" a las tablets y funcionan parecido a GPS:

http://mashable.com/2013/07/18/find-keys-apps/#_

http://www.npr.org/blogs/alltechconsidered/2013/08/14/209917395/this-little-thing-may-help-you-find-your-keys

ecfisa
22-10-2013, 01:06:32
Hola Ecfisa. No creo que sea problema de conseguir routers con mas alcance, lo que yo quería con lo de la intensidad de la señal es averiguar si el tablet se está alejando del router; es decir, que yo se que en la sala en la que están los tables tienen 4 rayitas de intensidad en toda la sala; pues bien, si tienen tres o dos....es que se están alejando y entonces que salte la alarma pero antes de perder la conexión, porque entonces estarán en la calle con los tablets en el bolsillo.
Hola marcial.

Aaaa, había entendido otra cosa :o, ¿ Entonces es para evitar posibles "extravíos" ? :D

Si se debe evitar que los tablets salgan a la calle, la sugerencia de Casimiro me suena con mas fuerza todavía.

Saludos :)

Neftali [Germán.Estévez]
22-10-2013, 08:51:45
Yo para este caso optaría por una seguridad más física.
Piensa que hay más opciones por las que la tablet puede perder comunicación y vas a estar más pendiente de esos avisos que de lo que realmente interesa.

Si la tablet va a ser para pedir comandas, porque no la "atas" físicamente a cada mesa. De esa forma, cada mesa tiene su tablet (como entiendo que debe ser) y tú estás más tranquilo.

En las exposiciones, museos,... es habitual ver los terminales con presentaciones interactivas que están "atados".

Algo similar a esto, aunque seguro que hay otras cosas parecidas.

http://image.dhgate.com/albu_228822424_00-1.0x0/secureback-security-case-with-2-way-stand.jpg

Independientemente puedes hacer algo por software, que en tu caso bastaría con un programa en los clientes y si estás conectado por TS, bastaría con que dejaran cada x segundos un fichero o una marca en Base de Datos, que sería revisada por un programa en el servidor.

marcial
22-10-2013, 09:56:17
Bueno, bueno; vaya aporte.

Gracias Mamcx por tus link. Por desgracia el resumen del tan interesante primero es: "None of the methods tested worked as expected". Sin embargo, las opciones que propones de "pegar" dispositivos a las tables es muy a tener en cuenta y además a precios muy aceptables (sobre todo el último link).

Tambien agradecer a Neftalí su aporte (por cierto tambien a tener muy en cuenta mas bien el el futuro, ya que ahora el cliente no va a poner una tablet en cada mesa +- 35 porque se le iría de presupuesto).

Voy a hablarle al cliente de la solución de pegar una etiquetita electronica http://www.microsiervos.com/archivo/gadgets/tile-objetos-perdidos.html (este link en español) y de la opción de software que aporta Neftalí (o de ambas a la vez) y así haré. Esto es una solución física/software-D5 apropiada, ya que no dispongo de las herramientas (XE5) para las soluciones Android.

Muchas gracias por vuestra ayuda.