GSM-lokaliseringstjeneste for SIM800x-moduler og dets arbeid med Yandex.Locator API

GSM-lokaliseringstjeneste for SIM800x-moduler og dets arbeid med Yandex.Locator API

Google, dessverre for mange brukere av GSM-moduler, blokkerte for 2-3 måneder siden og overførte APIen til en betalt basis for å bestemme plassering basert på koordinatene til celletårnene som er synlige for modulen. På grunn av dette, på SIM800-serien moduler produsert SIMCom trådløse løsninger, sluttet funksjonaliteten til AT+CIPGSMLOC-kommandoen å virke. I denne artikkelen vil jeg fortelle deg hvordan du kan løse dette problemet ved å bruke en lignende tjeneste levert av Yandex - Yandex.Locator.

La oss hoppe over hvordan Yandex mottar koordinatene til celletårnene, det viktigste er at vi kan bruke denne gratis tjenesten og få følgende data: Breddegrad, Lengdegrad, Høyde, samt den omtrentlige feilen for hver parameter. Hovedformålet med artikkelen er å gi en kort veiledning om raskt å bytte til Yandex API, i stedet for den ikke lenger tilgjengelige tjenesten fra Google.

Nedenfor vil vi som et eksempel kun vise breddegrad og lengdegrad for modulplasseringen.

Så la oss komme i gang

Først må du lese brukeravtalen som ligger på: yandex.ru/legal/locator_api. Spesiell oppmerksomhet bør rettes mot klausul 3.6. denne brukeravtalen, som sier at Yandex forbeholder seg retten til å endre/korrigere eller oppdatere Yandex.Locator API når som helst uten forvarsel..

Gå til adressen yandex.ru/dev/locator/keys/get og legg til din tidligere opprettede Yandex-konto i utviklingsgruppen. Disse trinnene lar deg få en nøkkel for å få tilgang til denne tjenesten.

GSM-lokaliseringstjeneste for SIM800x-moduler og dets arbeid med Yandex.Locator API
Skriv ned eller oppbevar på annen måte nøkkelen du mottar.

Etter å ha fullført disse trinnene, vil du ha tilgang til siden yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage hvor grunnleggende informasjon om driftsmekanismen til Yandex.Locator-tjenesten er gitt.

For å generere en XML-forespørsel i cURL-format til Yandex.Locator-tjenester, må du skaffe informasjon om celletårn "synlig" av modulen:

  • landskode – landskode
  • operatorid – mobilnettverkskode
  • cellid – celleidentifikator
  • lac – plasseringskode

Denne informasjonen kan hentes fra modulen ved å sende 'AT+CNETSCAN'-kommandoen.

Informasjon mottatt fra modulen

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 viktig å merke seg at du senere må konvertere dataene fra modulens Cellid- og Lac-respons fra heksadesimal til desimal.

Nå må vi generere XML-data for å kontakte Yandex-serveren, som deretter vil bli kombinert til ett element.

data bord

Data
Kommentar

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

...
Denne skal inneholde den 88-sifrede nøkkelen mottatt fra Yandex

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

Landskode (MCC)

</countrycode><operatorid>
2

Operatørkode (MNC)

</operatorid><cellid>
8453

Cellid av det første tårnet fra listen mottatt fra modulen og konvertert fra et tall med base 16 til et tall med base 10 (verdien mottatt fra modulen er 2105)

</cellid><lac>
7838

Lac av det første tårnet, også konvertert fra et base 16-tall til et base 10-tall (verdien mottatt fra modulen er 1E9E)

</lac></cell>
...

En gruppe forent av celle-taggen kan gjentas så mange ganger som nødvendig for å øke påliteligheten til et bestemt sted

</gsm_cells>
<ip><address_v4>
10.137.92.60

IP-adressen som er tildelt modulen av nettverket etter å ha åpnet GPRS-konteksten kan fås ved å sende kommandoen 'AT+SAPBR=2,1' til modulen - se nedenfor

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

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

Beskjed

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 meldingen genereres på grunnlag av data om mobiltårnene til Megafon-operatøren, den kan suppleres med data, inkludert: på andre tårn som er synlige for modulen mottatt ved å bruke 'AT+CNETSCAN'-kommandoen for å øke påliteligheten til de utstedte koordinatene.

Arbeide med modulen og få aktuelle koordinater

AT-logg over arbeid med modulen

>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

Dermed mottok vi gjeldende koordinater for modulen: 60.0330963, 30.2484304.
Etter hvert som antallet data som sendes via mobilmaster øker, vil nøyaktigheten av stedsbestemmelse øke proporsjonalt.

Mer detaljert informasjon om innholdet i svaret fra Yandex.Locator-tjenesten og utvalget av dataene du trenger kan leses på lenken: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, i API->XML->Respons-delen

Konklusjon

Jeg håper dette materialet vil være til god hjelp for utviklere. Jeg er klar til å svare på spørsmålene dine i kommentarene.

Kilde: www.habr.com

Legg til en kommentar