Hoy vamos a hacer un experimento de localización GSM, seguro que te resulta interesante. Así que corre, ves a buscar un módem Cinterion, el que sea, un TC65, XT65, HC25 … o un terminal MTX65, MTXH25 … que vamos a empezar.

Como seguro sabéis Google tiene un servicio (que está pontenciando con Android, su nuevo Sistema Operativo para móviles) para la locaclización por celdas GSM. Es decir, por ejemplo, te va a permitir, mediante una aplicación en el móvil, saber qué amigos tienes a tus alrededores. ¿Y cómo hace eso? Pues detectando si algún amigo tuyo está dentro de la misma celda GSM (o próxima) a la que estás tú.

¿Y cómo sabe Google si una celda está próxima a otra?

Pues porque es Google y ya sabes que Google todo lo sabe. :)   Realmente es porque tiene una gran base de datos con las coordenadas GPS de todas las antenas de telefonía.

Si dáis un vistazo a la web:
http://www.codeproject.com/KB/mobile/DeepCast.aspx

veréis que esos chicos explican muy bien cómo funciona este servicio de Google y ya se han dedicado a investigar qué datos hay que pasar a esta API de Google (concretamente a http://www.google.com/glm/mmap) y lo más importante, cómo hay que hacerlo pára que ésta devuelva las coordenadas (latitud / longitud) de una determinada antena de telefonía.

Si leéis con atención el artículo veréis que son necesarios obtener los siguientes datos de una antena GSM para obtener dicha posición:

Cell Tower ID
Location Area Code (LAC)
Mobile Network Code (MNC)
Mobile Country Code (MCC)


¿Y cómo obtener esos datos con nuestros módems? En el artículo habla de RIL Windows Mobile, …

Eso es porque el artículo piensa en teléfonos móviles. Nosotros vamos a pensar en nuestros módems Cinterion. Afortunadamente estos estupendos módems cuentan con comandos que nos permiten obtener tales datos. Por ejemplo uno de ellos es:

AT^MONI

¿Ya has ejecutado el comando? Venga …

Si lo has ejecutado verás que obtienes unos datos, en mi caso:

chann rs  dBm MCC MNC  LAC cell NCC BCC PWR RXLev  C1 I chann TS timAdv PWR  dBm Q ChMod
18 21  -89 214  07 0335 5A0C   1   0  33  -103  13 I    No connection

Pues bien, de aquí podemos extraer que:

Cell Tower ID = 5A0C
Location Area Code (LAC) = 0335
Mobile Network Code (MNC) = 07
Mobile Country Code (MCC) = 214

Muy bien, con estos datos ya podemos llamar a la página siguiente y ver el resultado. Hacer click en el enlace de Test y luego, en los valores de los parámetros de la URL (mcc, mnc, lac,cid) substituir los que yo os pongo (que son los que obtengo desde mi casa :) ) por los vuestros y volver a cargar la página:

Test de localización GSM

localizacion-gsm


¿Chulo verdad?

Obviamente la posición es aproximada, esto no es un GPS, pero sí da una aproximación bastante decente dentro de la inmensidad del territorio de dónde se encuentra nuestro módem. ¿Aplicaciones?  Eso ya queda en la imaginación de cada uno …

Y hablando de aplicaciones decir que dentro de un tiempo volveré a hablar largo y tendido del MTX-Tunnel-Advanced, pues tiene añadidas un montón de nuevas prestaciones, entre ellas, ésta que acabamos de ver.

¿Se puede mejorar la posición de localización GSM?

Sí, pero eso ya es otro post para el año que viene o para cuando tenga tiempo. Los módems Cinterion disponen de otro comando AT^SMONC que puede llegar a devolver información de hasta 7 celdas que éstén próximas al módem GSM. En esta información se devuelve el RSSI, por lo que con la posición (longitud/latitud) de estas antenas de telefonía triangulándolas en función del RSSI deberíamos poder obtener una información más precisa. Como digo esto por ahora se sale de lo que yo puedo aportaros.

Ya por útimo os dejo el enlace al código fuente del PHP en el que me he basado (para la consulta a la API de Google y el PHP final de blogElectronica donde he añadido al código anterior el código necesario para usar Google Maps y hacer la demostración más visual. Os lo dejo todo en una caja con lazo, no os quejaréis …

Espero que os haya gustado el post, yo al menos me lo he pasado muy bien.

Bueno, ahora me voy a arreglar el buggy, que he de cambiar todo el eje delantero derecho y tengo para rato … ciao ;)

www.blogElectronica.com


Post relacionados:

  1. Modem terminal para aplicaciones de localización GPS Ultimamente he leído bastantes posts (y recibido emails) de lectores...








Etiquetas: , ,
21 Respuestas a “Localización GSM”
  1. Pua dice:

    hol,a

    Se ve que te ha gustado la idea!!

    Eres mas rápido que Speedy Gonzalez!!

    Salu2

    Pua

  2. Gaugan dice:

    Awesome Mann! Keep it up! Hey but can you give me an example for at^smonc ? I got the logic behind it but how can we implement?

  3. Pua dice:

    Hi,

    enclosed a examples with my personal SIM card of the output of the comands at^moni, at^smonc and at^smond.

    I used one TC65i Release 1.1 .

    at^moni
    Serving Cell I Dedicated channel
    chann rs dBm MCC MNC LAC cell NCC BCC PWR RXLev C1 I chann TS timAdv PWR
    dBm Q ChMod
    522 35 -75 214 07 0AF1 014F 1 0 30 -103 27 I No connection

    OK
    at^smonc
    ^SMONC:214,07,0AF1,014F,10,522,35,27,27,214,07,0AF1,0408,72,58,31, 23,23,214,07,0AF1,014E,10,519,31,23,23,214,07,0AF1,0150,10,528,27,19, 19,214,07,0AF1,FFFF,71,56,26,18,18,214,07,0AF1,0D99,71,48,25,17,17,214, 07,0AF1,03F4,70,3,19,11,11

    OK
    at^smond
    ^SMOND:214,07,0AF1,014F,10,522,75,,,0,,,0,214,07,0AF1,014E,10,519,78 ,214,07,0AF1,0408,72,58,79,214,07,0AF1,0150,10,528,83,214,07,0AF1,FFFF ,71,56,85,214,07,0AF1,0D99,71,48,85,214,07,0AF1,0D9D,64,521,90,0,19,99

    OK

    the comand at^smond gives more detailled information about the actual cell and up to 6 neighbour cells8 If the cells are availables)

    Kind Regards

    Pua

  4. Pua dice:

    Hi,

    enclosed the information about othe command

    AT^MONP
    chann rs dBm MCC MNC BCC C1 C2
    58 31 -79 214 07 2 23 23
    56 29 -81 214 07 1 21 21
    519 28 -82 214 07 0 20 20
    528 24 -86 214 07 0 16 16
    48 22 -88 214 07 1 14 14
    52 20 -90 214 07 7 12 12

    OK

    all the commands show you the same information, but some time in diferent format(Decimal o Hexa).
    the values 000 and FFF means information not yet decoded.

    do not worry if you do not obtain the same values always. the information about the cells and BTS is updated permanently.

    Take care to call this commands in a comunication. In thsi case the only information decoded is the infor of the service cell(the other possible 6 cell infos would not be decoded)

    I think the easy way to implement the cade is the comannd AT^MONP.

    I do not know if all the Cinterion modules support all this commands. My Tc65i supports the commands and i suppose the TC63i and MC75 i too. for other modules you have to check the at-comands manual.

    Regards

    Pua

  5. Pua dice:

    hola Blogelectrónica,

    qué raro llamarte por ese apodo.

    Ves alguna relación en conocer las coordenas de las BTS(aprox) y poder usarlas como información para realizar un A-GPS?
    No de diseñarlo, pero quizás si con esa información poder asistir la información del GPS parap oder hallar la primera posición válida y acelelar el posicionamiento?

    Salu2

    Pua

  6. blogElectronica dice:

    Hola Pua,

    jejeje, llámame por mi nombre si quieres. Sí, el link que me pasaste era interesante y no me pude resistir a hacer / probar esta API :)

    Y sí, es verdad ;) , si que hay relación entre el A-GPS y esto. Como sabemos se puede asistir al A-GPS del XT65 con la información del almanaque, ephemerides y última posición GPS.

    A voz de pronto lo más evidente resulta asistir al GPS con la posición GPS de la BTS próxima, ya que eso es bastante sencillo con lo visto hasta aquí. Supongo que un ligero decremento del tiempo necesario para coger la primera posición GPS válida lo conseguiríamos. Lo siguiente para tener el sistema A-GPS más completo sería poder asistir al GPS con el almanaque y las ephemerides adecuadas, que teniendo la posición GPS de la BTS, supongo que habrá alguna manera de conseguir las adecuadas para un momento dado en un determinado lugar. Si alguien sabe cómo y lo comenta sería perfecto.

    Obviamente otra opción es utilizar el comando AT especial de los módems Cinterion para almacenar los datos de navegación en el FFS (file flash system) del módem. De esa manera si no han pasado demasiadas horas desde el último apagado/ pérdida de cobertura del GPS, podremos recuperar el almanaque y ephemerides y ajustarlo con el valor de la posición GPS actual de la BTS próxima y mejorar bastante los tiempos.

    Salu2

  7. Pua dice:

    hola José,

    Hay una mnera mejor de conocer la distancia con las BTS.
    EL parámetro de Time Advance. Este valor lo que que mide a grandes rasgos es la distancia con la BTS/Celdas para poder gestionar la comunicación y que no percibas el retraso, imaginate conocer la posición GPS de la BTs y el time advance con las celdas.

    Pero conseguir este valor es otra historia. Ya sabes que por unas cervezas “comparto” información y mis experiencias wireless

    Salu2

    Pua

  8. Pua dice:

    Hi,

    Por cierto estoy esperando unos LGA de test con conector para DSB. soy cerveceramente sobornable. jajaja

    Salu2

    Pua

  9. blogElectronica dice:

    A todos,

    hoy en tenido 2 consultas por lo mismo así que lo comento para todos.

    Para ejecutar este PHP es necesario hacerlo con un servidor que admita PHP5, con PHP4 no va a funcionar.

    Salu2.

  10. blogElectronica dice:

    Bueno, después de sobornar a Pua, podemos ver que según el artículo que comentaba antes:

    http://en.wikipedia.org/wiki/Timing_advance

    es posible obtener una aproximación de la distancia del módem a la BTS averiguando el valor de timing advance (timAdv) que nos devuelve la función AT^MONI

    Si ejecutamos el comando obtenemos algo como:

    AT^MONI

    chann rs dBm MCC MNC LAC cell NCC BCC PWR RXLev C1 I chann TS timAdv PWR dBm Q ChMod
    18 21 -89 214 07 0335 5A0C 1 0 33 -103 13 I No connection

    donde no hay datos para timAdv. Eso es porque para que el módem obtenga esos datos es necesario que lo haga mientras hay una llamada activa GSM o CSD. Yo lo he probado (con una llamada perdida) y funciona perfectamente.

    Una vez obtenido ese timAdv, cada unidad indica unos 550m de distancia entre la BTS (antena) y el módem. Si timAdv devuelve 3 signitica que el módem está a poco más de 1.5Km aprox de la BTS. Esto puede ser muy interesante en lugares muy poco poblados (tipo monegros) donde puede haber distancias de hasta 35 Km entre la BTS y el módem para tener una aproximación razonable de la ubicación.

    Salu2

    • Pua dice:

      Hola,

      solo puntualizar que le tamaño máximo de las BTS es de 35 KM menos en GSM400 MHZ(No hay esas redes en Europa) y en GSM-R(Variante de GSM para Trenes, redes privadas sin conexión a ninguna red pública)
      Aprovecho para recordar que hay variantes de módulos que soportan GSM-R.
      Creo recordar que los adapta y comercializa triolrail

      Salu2

      Pua

  11. Pua dice:

    hola,

    entonces resumiendo, para ver si me he enterado.

    LA idea es usar el at^MonP para tener la mayor información acerca de las celdas, con un poco de suerte hasta tenemos celdas de dos o mas BTS disponibles. Y luego si tenemos o generemos una llamada CSD o de Voz podremos saber la distancia a la celda(y BTS) que nos está dando servicio

    No me he aturrullado mucho?

    Salu2

    Pua

  12. Pua dice:

    Jose,

    Y nos vas a ilustar como usar todo para poder asistir razonablemente a un GPS?
    Esta vez te tendré que sobornar cerveceramente yo

    Salu2

    Pua

    • blogelectronica dice:

      Hola Pua,

      pues para usar a-gps se le puede pasar al módulo GPS 3 cosas: la información de la posición GPS, las ephemerides y el almanaque.

      He visto por Internet varios sitios donde proporcionan las ephemerides actualizadas cada 15 minutos, pero no voy a entrar con ellas ya que tendría que analizar el formato, la adaptación para pasárselas al módulo … demasiado tiempo.

      Pero para asistir al módulo GPS únicamente con la posición podemos pasar dicha posición de la estación base que nos proporciona google como hemos visto en el artículo.

      Para ello vale con algo como lo siguiente para guardar la posición GPS en el FFS del módem:

      AT^SGPSC=”GpsStorage”,0
      AT^SGPSC=”GpsData”,2009/12/08,17:38:41,41.635545,N,002.361285,E,237,000.00,330.0

      Después si arrancamos el GPS en frío con:
      AT^SGPSC=”StartType”,2

      Podemos asistir al GPS pasándole dicha posición GPS que estará almacenada en el FFS:
      AT^SGPSC=”GpsStorage”,2

      Salu2

  13. Quabox dice:

    Probare esta forma de obtener la posición de un dispositivo móvil haber que tal me va, les estaré contando, bye.

  14. Gaugan dice:

    Hi Pua and blogelectronica,

    Had a question on TC65i ! I’m using DSB75 development board with TC65i module which is having SD card interface. But I’m unable to access the SD card for data writing purpose using J2ME code. Basically, Using J2ME coding I’m able to store any file from http in the internal
    flash memory but I’m unable to store it in the SD card. Can you please guide me on how to access, read, write on sd card! Thank you in advance.

    Regards,
    Gaugan

  15. Gaugan dice:

    Hi!

    Thanks for replying! Had a talk with Cinterion technical head, Germany and this is what he said: “Please be informed that Cinterion doesn`t support SD card. Though it is possible to connect SD card to module, using SPI interface and comunicate by SPI command. As I`ve mentioned this solution is possible but not suported, so we don`t have any documentation regarding SD cards to provide.

    Currently we are trying to set which SD cards should be used in such solution. I will keep you informed”

    Regards,
    Gautam G. Iyer (Gaugan)

  16.  
Deja una Respuesta

Puedes publicar un comentario aquí si quieres, pero te recomiendo que uses el nuevo foroElectronica.com para introducir comentarios. Te contestaré más rápido. Recuerda que debes registrarte si no lo estás para publicar un comentario.