Servicio de localización GSM de módulos SIM800x y su funcionamiento con la API Yandex.Locator

Servicio de localización GSM de módulos SIM800x y su funcionamiento con la API Yandex.Locator

Google, desafortunadamente para muchos usuarios de módulos GSM, hace 2 o 3 meses bloqueó y transfirió a una plataforma paga la API para determinar la ubicación en función de las coordenadas de las torres de telefonía móvil visibles para el módulo. Debido a esto, en los módulos de la serie SIM800 producidos Soluciones inalámbricas SIMCom, la funcionalidad del comando AT+CIPGSMLOC dejó de funcionar. En este artículo, le diré cómo resolver este problema utilizando un servicio similar proporcionado por Yandex. Localizador Yandex.

Saltemos cómo Yandex recibe las coordenadas de las torres de telefonía móvil, lo principal es que podemos utilizar este servicio gratuito y obtener los siguientes datos: Latitud, Longitud, Altitud, así como el error aproximado de cada parámetro. El objetivo principal del artículo es ofrecer un breve tutorial sobre cómo cambiar rápidamente a la API de Yandex, en lugar del servicio que ya no está disponible de Google.

A continuación, como ejemplo, mostraremos solo la latitud y longitud de la ubicación del módulo.

Entonces empecemos

Primero debe leer el acuerdo de usuario ubicado en: yandex.ru/legal/locator_api. Se debe prestar especial atención a la cláusula 3.6. este acuerdo de usuario, que establece que Yandex se reserva el derecho de cambiar/corregir o actualizar la API Yandex.Locator en cualquier momento, sin previo aviso..

Ir a la dirección yandex.ru/dev/locator/keys/get y agregue su cuenta Yandex creada previamente al grupo de desarrollo. Estos pasos le permitirán obtener una clave para acceder a este servicio.

Servicio de localización GSM de módulos SIM800x y su funcionamiento con la API Yandex.Locator
Anote o guarde de otro modo la clave que reciba.

Después de completar estos pasos, tendrás acceso a la página. yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage donde se proporciona información básica sobre el mecanismo de funcionamiento del servicio Yandex.Locator.

Para generar una solicitud XML en formato cURL a los servicios Yandex.Locator, necesitará obtener información sobre las torres de telefonía móvil "visibles" por el módulo:

  • código de país – código de país
  • operatorid – código de red móvil
  • cellid – identificador de celda
  • lac – código de ubicación

Esta información se puede obtener del módulo enviando el comando 'AT+CNETSCAN'.

Información recibida del módulo.

Operator:"MegaFon",MCC:250,MNC:02,Rxlev:59,Cellid:2105,Arfcn:96,Lac:1E9E,Bsic:31<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:54,Cellid:2107,Arfcn:18,Lac:1E9E,Bsic:3A<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:45,Cellid:10A9,Arfcn:97,Lac:1E9E,Bsic:11<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:41,Cellid:2108,Arfcn:814,Lac:1E9E,Bsic:1F<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:43,Cellid:5100,Arfcn:13,Lac:1E9E,Bsic:2B<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:39,Cellid:5102,Arfcn:839,Lac:1E9E,Bsic:1A<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:38,Cellid:2106,Arfcn:104,Lac:1E9E,Bsic:0A<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:37,Cellid:0FE7,Arfcn:12,Lac:1E9E,Bsic:24<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:44,Cellid:14C8,Arfcn:91,Lac:1E9E,Bsic:24<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:37,Cellid:04B3,Arfcn:105,Lac:1E9E,Bsic:3A<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:47,Cellid:29A0,Arfcn:70,Lac:39BA,Bsic:09<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:43,Cellid:0FDD,Arfcn:590,Lac:39BA,Bsic:09<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:44,Cellid:29A1,Arfcn:84,Lac:39BA,Bsic:10<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:40,Cellid:8F95,Arfcn:81,Lac:39BA,Bsic:03<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:43,Cellid:0FDF,Arfcn:855,Lac:39BA,Bsic:24<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:37,Cellid:299C,Arfcn:851,Lac:39BA,Bsic:17<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:37,Cellid:0FDE,Arfcn:852,Lac:39BA,Bsic:1B<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:35,Cellid:299F,Arfcn:72,Lac:39BA,Bsic:10<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:33,Cellid:28A5,Arfcn:66,Lac:396D,Bsic:25<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:33,Cellid:2A8F,Arfcn:71,Lac:39BA,Bsic:23<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:46,Cellid:39D2,Arfcn:865,Lac:4D0D,Bsic:14<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:36,Cellid:09EE,Arfcn:866,Lac:4D0D,Bsic:25<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:28,Cellid:09ED,Arfcn:869,Lac:4D0D,Bsic:22<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:28,Cellid:09EF,Arfcn:861,Lac:4D0D,Bsic:17<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:66,Cellid:58FE,Arfcn:1021,Lac:00EC,Bsic:0A<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:50,Cellid:58FD,Arfcn:1016,Lac:00EC,Bsic:08<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:49,Cellid:58FF,Arfcn:1023,Lac:00EC,Bsic:09<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:46,Cellid:F93B,Arfcn:59,Lac:00EC,Bsic:20<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:50,Cellid:381B,Arfcn:1020,Lac:00EC,Bsic:0A<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:37,Cellid:3819,Arfcn:42,Lac:00EC,Bsic:08<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:34,Cellid:4C0F,Arfcn:43,Lac:00EC,Bsic:0A<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:33,Cellid:0817,Arfcn:26,Lac:00EC,Bsic:27<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:34,Cellid:3A5D,Arfcn:1017,Lac:00E9,Bsic:34<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:33,Cellid:3D05,Arfcn:1018,Lac:00EC,Bsic:1F<CR><LF>

Es importante tener en cuenta que más adelante deberá convertir los datos de la respuesta Cellid y Lac del módulo de hexadecimal a decimal.

Ahora necesitamos generar datos XML para contactar con el servidor Yandex, que posteriormente se combinarán en un solo elemento.

tabla de datos

Datos
comentario

xml=<ya_lbs_request><common><version>1.0</version><api_key>

...
Este debe contener la clave de 88 dígitos recibida de Yandex.

</api_key></common>
<gsm_cells>
<cell><countrycode>
250

Código de país (MCC)

</countrycode><operatorid>
2

Código de operador (MNC)

</operatorid><cellid>
8453

Cellid de la primera torre de la lista recibida del módulo y convertida de un número con base 16 a un número con base 10 (el valor recibido del módulo es 2105)

</cellid><lac>
7838

Lac de la primera torre, también convertido de un número de base 16 a un número de base 10 (el valor recibido del módulo es 1E9E)

</lac></cell>
...

Un grupo unido por la etiqueta de la celda se puede repetir tantas veces como sea necesario para aumentar la confiabilidad de una ubicación específica.

</gsm_cells>
<ip><address_v4>
10.137.92.60

La dirección IP asignada al módulo por la red después de abrir el contexto GPRS se puede obtener enviando el comando 'AT+SAPBR=2,1' al módulo - ver más abajo

</address_v4></ip></ya_lbs_request>

Esto generará un mensaje XML de 1304 caracteres de largo como se muestra a continuación:

Mensaje

xml=<ya_lbs_request><common><version>1.0</version><api_key>{здесь необходимо указать свой ключ}</api_key></common><gsm_cells><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8453</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8455</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>4265</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8456</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>20736</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>20738</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8454</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>4071</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>5320</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>1203</cellid><lac>7838</lac></cell></gsm_cells><ip><address_v4>10.137.92.60</address_v4></ip></ya_lbs_request>

Este mensaje se genera a partir de datos de las torres de telefonía móvil del operador Megafon y se puede complementar con datos, entre ellos: en otras torres visibles para el módulo recibido usando el comando 'AT+CNETSCAN' para aumentar la confiabilidad de las coordenadas emitidas.

Trabajar con el módulo y obtener coordenadas actuales.

AT-log de trabajo con el módulo

>AT+SAPBR=3,1,”Contype”,”GPRS” // конфигурирование профиля доступа в Интернет
<OK
>AT+SAPBR=3,1,”APN”,”internet” // конфигурирование APN 
<OK
>AT+SAPBR=1,1 // запрос на открытие GPRS контекста
<OK // контекст открыт
>AT+SAPBR=2,1 // запрос текущего IP адреса присвоенного оператором сотовой связи
<+SAPBR: 1,1,”10.137.92.60” // данный IP адрес потребуется вставить в XML-сообщение
<
<OK
>AT+HTTPINIT
<OK
>AT+HTTPPARA=”CID”,1
<OK
>AT+HTTPPARA=”URL”,”http://api.lbs.yandex.net/geolocation”
<OK
>AT+HTTPDATA=1304,10000 // первое число – длина сформированного XML-сообщения
<DOWNLOAD // приглашение к вводу XML-сообщения
< // вводим сформированное нами XML-сообщение
<OK
>AT+HTTPACTION=1
<OK
<
<+HTTPACTION: 1,200,303 // 200 – сообщение отправлено, 303 – получено 303 байт данных
>AT+HTTPREAD=81,10
<+HTTPREAD: 10
<60.0330963 // широта на которой расположен модуль
<OK
>AT+HTTPREAD=116,10
<+HTTPREAD: 10
<30.2484303 // долгота на которой расположен модуль
>AT+HTTPTERM
<OK

Así, recibimos las coordenadas actuales del módulo: 60.0330963, 30.2484304.
A medida que aumenta la cantidad de datos enviados a través de torres de telefonía celular, la precisión de la determinación de la ubicación aumentará proporcionalmente.

Puede leer información más detallada sobre el contenido de la respuesta del servicio Yandex.Locator y la selección de los datos que necesita en el enlace: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, en la sección API->XML->Respuesta

Conclusión

Espero que este material sea de gran ayuda para los desarrolladores. Estoy listo para responder tus preguntas en los comentarios.

Fuente: habr.com

Añadir un comentario