GSM Location service af SIM800x moduler og dets arbejde med Yandex.Locator API

GSM Location service af SIM800x moduler og dets arbejde med Yandex.Locator API

Google blokerede desværre for mange brugere af GSM-moduler for 2-3 måneder siden og overførte til en betalt basis API'en til at bestemme placering baseret på koordinaterne for celletårne, der er synlige for modulet. På grund af dette, på SIM800-serien moduler produceret SIMCom trådløse løsninger, funktionaliteten af ​​AT+CIPGSMLOC-kommandoen holdt op med at virke. I denne artikel vil jeg fortælle dig, hvordan du kan løse dette problem ved at bruge en lignende service leveret af Yandex - Yandex.Locator.

Lad os springe over, hvordan Yandex modtager koordinaterne for celletårne, det vigtigste er, at vi kan bruge denne gratis tjeneste og få følgende data: Latitude, Longitude, Altitude, samt den omtrentlige fejl for hver parameter. Hovedformålet med artiklen er at give en kort vejledning om hurtigt at skifte til Yandex API i stedet for den ikke længere tilgængelige tjeneste fra Google.

Nedenfor vil vi som eksempel kun vise bredde- og længdegraden af ​​modulplaceringen.

Så lad os komme i gang

Først skal du læse brugeraftalen, som findes på: yandex.ru/legal/locator_api. Der bør lægges særlig vægt på paragraf 3.6. denne brugeraftale, hvoraf det fremgår Yandex forbeholder sig retten til at ændre/korrigere eller opdatere Yandex.Locator API til enhver tid uden forudgående varsel..

Gå til adressen yandex.ru/dev/locator/keys/get og føj din tidligere oprettede Yandex-konto til udviklingsgruppen. Disse trin giver dig mulighed for at få en nøgle til at få adgang til denne tjeneste.

GSM Location service af SIM800x moduler og dets arbejde med Yandex.Locator API
Skriv ned eller gem på anden måde den nøgle, du modtager.

Når du har gennemført disse trin, har du adgang til siden yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage hvor grundlæggende oplysninger om funktionsmekanismen for Yandex.Locator-tjenesten leveres.

For at generere en XML-anmodning i cURL-format til Yandex.Locator-tjenester, skal du indhente oplysninger om celletårne ​​"synlige" af modulet:

  • landekode – landekode
  • operatorid – mobilnetværkskode
  • cellid – celleidentifikator
  • lac – lokationskode

Denne information kan fås fra modulet ved at sende kommandoen 'AT+CNETSCAN'.

Oplysninger modtaget fra modulet

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>

Det er vigtigt at bemærke, at du senere skal konvertere dataene fra modulets Cellid- og Lac-respons fra hexadecimal til decimal.

Nu skal vi generere XML-data for at kontakte Yandex-serveren, som efterfølgende vil blive kombineret til et element.

datatabel

Data
Kommentar

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

...
Dette bør indeholde den 88-cifrede nøgle, der er modtaget fra Yandex

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

Landekode (MCC)

</countrycode><operatorid>
2

Operatørkode (MNC)

</operatorid><cellid>
8453

Cellid af det første tårn fra listen modtaget fra modulet og konverteret fra et tal med base 16 til et tal med base 10 (værdien modtaget fra modulet er 2105)

</cellid><lac>
7838

Lac af det første tårn, også konverteret fra et base 16 tal til et base 10 tal (værdien modtaget fra modulet er 1E9E)

</lac></cell>
...

En gruppe forenet af cellemærket kan gentages så mange gange som nødvendigt for at øge pålideligheden af ​​en bestemt placering

</gsm_cells>
<ip><address_v4>
10.137.92.60

IP-adressen tildelt til modulet af netværket efter åbning af GPRS-konteksten kan fås ved at sende kommandoen 'AT+SAPBR=2,1' til modulet - se nedenfor

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

Dette vil generere en XML-meddelelse på 1304 tegn lang som følger:

besked

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>

Denne besked genereres på grundlag af data om mobiltårne ​​fra Megafon-operatøren, den kan suppleres med data, herunder: på andre tårne, der er synlige for modulet modtaget ved hjælp af 'AT+CNETSCAN'-kommandoen for at øge pålideligheden af ​​de udstedte koordinater.

Arbejde med modulet og få aktuelle koordinater

AT-log over arbejdet med modulet

>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

Således modtog vi modulets aktuelle koordinater: 60.0330963, 30.2484304.
Efterhånden som antallet af data sendt via mobilmaster stiger, vil nøjagtigheden af ​​lokaliseringsbestemmelse stige proportionalt.

Mere detaljerede oplysninger om indholdet af svaret fra Yandex.Locator-tjenesten og valget af de data, du har brug for, kan læses på linket: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, i afsnittet API->XML->Respons

Konklusion

Jeg håber, at dette materiale vil være en god hjælp for udviklere. Jeg er klar til at besvare dine spørgsmål i kommentarerne.

Kilde: www.habr.com

Tilføj en kommentar