Servei d'ubicació GSM dels mòduls SIM800x i el seu treball amb l'API Yandex.Locator

Servei d'ubicació GSM dels mòduls SIM800x i el seu treball amb l'API Yandex.Locator

Google, malauradament per a molts usuaris de mòduls GSM, fa 2-3 mesos va bloquejar i va transferir a una base de pagament l'API per determinar la ubicació en funció de les coordenades de les torres cel·lulars visibles per al mòdul. Per això, es produeixen mòduls de la sèrie SIM800 Solucions sense fil SIMCom, la funcionalitat de l'ordre AT+CIPGSMLOC va deixar de funcionar. En aquest article us explicaré com podeu resoldre aquest problema utilitzant un servei similar proporcionat per Yandex: Yandex.Locator.

Ometem com rep Yandex les coordenades de les torres mòbils, el més important és que podem utilitzar aquest servei gratuït i obtenir les següents dades: Latitud, Longitud, Altitud, així com l'error aproximat de cada paràmetre. L'objectiu principal de l'article és donar un petit tutorial sobre com canviar ràpidament a l'API Yandex, en lloc del servei que ja no està disponible de Google.

A continuació, com a exemple, mostrarem només la latitud i la longitud de la ubicació del mòdul.

Així que comencem

Primer heu de llegir l'acord d'usuari que es troba a: yandex.ru/legal/locator_api. Cal prestar especial atenció a la clàusula 3.6. aquest acord d'usuari, que estableix que Yandex es reserva el dret de canviar/corregir o actualitzar l'API Yandex.Locator en qualsevol moment, sense avís previ..

Vés a l'adreça yandex.ru/dev/locator/keys/get i afegiu el vostre compte Yandex creat anteriorment al grup de desenvolupament. Aquests passos us permetran obtenir una clau per accedir a aquest servei.

Servei d'ubicació GSM dels mòduls SIM800x i el seu treball amb l'API Yandex.Locator
Anoteu o emmagatzemeu la clau que rebeu.

Després de completar aquests passos, tindreu accés a la pàgina yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage on es proporciona informació bàsica sobre el mecanisme de funcionament del servei Yandex.Locator.

Per generar una sol·licitud XML en format cURL als serveis Yandex.Locator, haureu d'obtenir informació sobre les torres mòbils "visibles" pel mòdul:

  • codi de país – codi de país
  • operadorid: codi de xarxa mòbil
  • cellid: identificador de cel·la
  • lac: codi d'ubicació

Aquesta informació es pot obtenir des del mòdul enviant l'ordre 'AT+CNETSCAN'.

Informació rebuda del mòdul

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>

És important tenir en compte que més endavant haureu de convertir les dades de la resposta Cellid i Lac del mòdul d'hexadecimal a decimal.

Ara hem de generar dades XML per contactar amb el servidor Yandex, que posteriorment es combinaran en un sol element.

Taula de dades

Dades
Comentari

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

...
Això hauria de contenir la clau de 88 dígits rebuda de Yandex

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

Codi de país (MCC)

</countrycode><operatorid>
2

Codi d'operador (MNC)

</operatorid><cellid>
8453

Cellid de la primera torre de la llista rebuda del mòdul i convertida d'un nombre amb base 16 a un nombre amb base 10 (el valor rebut del mòdul és 2105)

</cellid><lac>
7838

Lac de la primera torre, també convertida d'un número de base 16 a un número de base 10 (el valor rebut del mòdul és 1E9E)

</lac></cell>
...

Un grup unit per l'etiqueta cel·lular es pot repetir tantes vegades com sigui necessari per augmentar la fiabilitat d'una ubicació específica

</gsm_cells>
<ip><address_v4>
10.137.92.60

L'adreça IP assignada al mòdul per la xarxa després d'obrir el context GPRS es pot obtenir enviant l'ordre 'AT+SAPBR=2,1' al mòdul - vegeu a continuació

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

Això generarà un missatge XML de 1304 caràcters de la següent manera:

Missatge

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>

Aquest missatge es genera a partir de les dades de les torres mòbils de l'operador Megafon, es pot complementar amb dades, com ara: en altres torres visibles pel mòdul rebut mitjançant l'ordre 'AT+CNETSCAN' per augmentar la fiabilitat de les coordenades emeses.

Treballar amb el mòdul i obtenir les coordenades actuals

AT-log de treball amb el mòdul

>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

Així, hem rebut les coordenades actuals del mòdul: 60.0330963, 30.2484304.
A mesura que augmenta el nombre de dades enviades mitjançant torres cel·lulars, la precisió de la determinació de la ubicació augmentarà proporcionalment.

Podeu llegir informació més detallada sobre el contingut de la resposta del servei Yandex.Locator i la selecció de les dades que necessiteu a l'enllaç: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, a la secció API->XML->Resposta

Conclusió

Espero que aquest material sigui una bona ajuda per als desenvolupadors. Estic preparat per respondre les vostres preguntes als comentaris.

Font: www.habr.com

Afegeix comentari