SIM800x modulių GSM vietos nustatymo paslauga ir jos darbas su Yandex.Locator API

SIM800x modulių GSM vietos nustatymo paslauga ir jos darbas su Yandex.Locator API

Google, deja, daugeliui GSM modulių vartotojų prieš 2-3 mėnesius užblokavo ir perkėlė į mokamą pagrindą API, skirtą vietai nustatyti pagal moduliui matomas mobiliojo ryšio bokštų koordinates. Dėl šios priežasties gaminami SIM800 serijos moduliai SIMCom Wireless Solutions, nustojo veikti komandos AT+CIPGSMLOC funkcionalumas. Šiame straipsnyje aš jums pasakysiu, kaip galite išspręsti šią problemą naudodami panašią „Yandex“ paslaugą - Yandex.Locator.

Praleiskime, kaip „Yandex“ gauna mobiliojo ryšio bokštų koordinates, svarbiausia, kad galėtume naudotis šia nemokama paslauga ir gauti šiuos duomenis: Platuma, Ilguma, Aukštis, taip pat apytikslę kiekvieno parametro paklaidą. Pagrindinis straipsnio tikslas – pateikti trumpą pamoką, kaip greitai pereiti prie „Yandex“ API, o ne į nebepasiekiamą „Google“ paslaugą.

Žemiau, kaip pavyzdį, parodysime tik modulio vietos platumą ir ilgumą.

Taigi pradėkime

Pirmiausia turite perskaityti vartotojo sutartį, esančią adresu: yandex.ru/legal/locator_api. Ypatingas dėmesys turėtų būti skiriamas 3.6 punktui. ši vartotojo sutartis, kurioje nurodyta, kad „Yandex“ pasilieka teisę bet kuriuo metu be išankstinio įspėjimo keisti/taisyti arba atnaujinti „Yandex.Locator“ API..

Eiti į adresą yandex.ru/dev/locator/keys/get ir pridėkite anksčiau sukurtą „Yandex“ paskyrą į kūrimo grupę. Šie veiksmai leis jums gauti raktą, kad galėtumėte pasiekti šią paslaugą.

SIM800x modulių GSM vietos nustatymo paslauga ir jos darbas su Yandex.Locator API
Užsirašykite arba kitaip išsaugokite gautą raktą.

Atlikę šiuos veiksmus turėsite prieigą prie puslapio yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage kur pateikiama pagrindinė informacija apie Yandex.Locator paslaugos veikimo mechanizmą.

Norėdami sugeneruoti XML užklausą cURL formatu Yandex.Locator paslaugoms, turėsite gauti informaciją apie modulio „matomus“ mobiliojo ryšio bokštus:

  • countrycode – šalies kodas
  • operatorid – mobiliojo ryšio tinklo kodas
  • cellid – ląstelės identifikatorius
  • lac – vietos kodas

Šią informaciją galima gauti iš modulio išsiuntus komandą „AT+CNETSCAN“.

Informacija gauta iš modulio

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>

Svarbu pažymėti, kad vėliau reikės konvertuoti duomenis iš modulio Cellid ir Lac atsako iš šešioliktainės į dešimtainę.

Dabar turime sugeneruoti XML duomenis, kad susisiektume su „Yandex“ serveriu, kuris vėliau bus sujungtas į vieną elementą.

duomenų lentelė

Duomenys
Komentuoti

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

...
Jame turėtų būti 88 skaitmenų raktas, gautas iš „Yandex

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

Šalies kodas (MKC)

</countrycode><operatorid>
2

Operatoriaus kodas (MNC)

</operatorid><cellid>
8453

Pirmojo bokšto langelis iš sąrašo, gautas iš modulio ir konvertuotas iš skaičiaus su 16 baze į skaičių su baze 10 (iš modulio gauta reikšmė yra 2105)

</cellid><lac>
7838

Pirmojo bokšto lakas, taip pat konvertuotas iš 16 bazinio skaičiaus į 10 bazinį skaičių (iš modulio gauta reikšmė yra 1E9E)

</lac></cell>
...

Grupė, kurią vienija langelio žyma, gali būti kartojama tiek kartų, kiek reikia, kad padidėtų konkrečios vietos patikimumas

</gsm_cells>
<ip><address_v4>
10.137.92.60

Tinklo moduliui priskirtą IP adresą atidarius GPRS kontekstą galima gauti moduliui atsiuntus komandą 'AT+SAPBR=2,1' - žr.

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

Taip bus sukurtas 1304 simbolių XML pranešimas:

Žinutė

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>

Šis pranešimas yra sugeneruotas remiantis Megafon operatoriaus mobiliojo ryšio bokštų duomenimis, jis gali būti papildytas duomenimis, įskaitant: kitiems moduliams matomiems bokštams, gautiems naudojant komandą 'AT+CNETSCAN', siekiant padidinti išduodamų koordinačių patikimumą.

Darbas su moduliu ir esamų koordinačių gavimas

AT-logas apie darbą su moduliu

>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

Taip gavome esamas modulio koordinates: 60.0330963, 30.2484304.
Didėjant duomenų, siunčiamų per mobiliojo ryšio bokštus, skaičiui, vietos nustatymo tikslumas proporcingai padidės.

Išsamesnę informaciją apie atsakymo iš „Yandex.Locator“ tarnybos turinį ir jums reikalingų duomenų pasirinkimą galite perskaityti nuorodoje: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpageskiltyje API->XML->Atsakymas

išvada

Tikiuosi, kad ši medžiaga bus gera pagalba kūrėjams. Esu pasirengęs atsakyti į jūsų klausimus komentaruose.

Šaltinis: www.habr.com

Добавить комментарий