Shërbimi i vendndodhjes GSM i moduleve SIM800x dhe puna e tij me API Yandex.Locator

Shërbimi i vendndodhjes GSM i moduleve SIM800x dhe puna e tij me API Yandex.Locator

Google, për fat të keq për shumë përdorues të moduleve GSM, 2-3 muaj më parë bllokoi dhe transferoi në një bazë të paguar API-në për përcaktimin e vendndodhjes bazuar në koordinatat e kullave celulare të dukshme për modulin. Për shkak të kësaj, në seritë SIM800 prodhohen module SIMCom Wireless Solutions, funksionaliteti i komandës AT+CIPGSMLOC pushoi së punuari. Në këtë artikull do t'ju tregoj se si mund ta zgjidhni këtë problem duke përdorur një shërbim të ngjashëm të ofruar nga Yandex - Yandex.Locator.

Le të kalojmë se si Yandex merr koordinatat e kullave celulare, gjëja kryesore është që ne mund të përdorim këtë shërbim falas dhe të marrim të dhënat e mëposhtme: Gjerësia, Gjatësia, Lartësia, si dhe gabimi i përafërt për secilin parametër. Qëllimi kryesor i artikullit është të japë një mësim të shkurtër për kalimin e shpejtë në API Yandex, në vend të shërbimit të padisponueshëm nga Google.

Më poshtë, si shembull, do të tregojmë vetëm gjerësinë dhe gjatësinë e vendndodhjes së modulit.

Pra, le të fillojmë

Së pari ju duhet të lexoni marrëveshjen e përdoruesit të vendosur në: yandex.ru/legal/locator_api. Vëmendje e veçantë duhet t'i kushtohet pikës 3.6. këtë marrëveshje përdoruesi, e cila thotë se Yandex rezervon të drejtën të ndryshojë/korrigjojë ose përditësojë API-në Yandex.Locator në çdo kohë, pa njoftim paraprak..

Shkoni në adresë yandex.ru/dev/locator/keys/get dhe shtoni llogarinë tuaj Yandex të krijuar më parë në grupin e zhvillimit. Këta hapa do t'ju lejojnë të merrni një çelës për të hyrë në këtë shërbim.

Shërbimi i vendndodhjes GSM i moduleve SIM800x dhe puna e tij me API Yandex.Locator
Shkruani ose ruani ndryshe çelësin që merrni.

Pas përfundimit të këtyre hapave, do të keni akses në faqe yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage ku jepet informacioni bazë për mekanizmin e funksionimit të shërbimit Yandex.Locator.

Për të gjeneruar një kërkesë XML në formatin cURL për shërbimet Yandex.Locator, do t'ju duhet të merrni informacion mbi kullat celulare "të dukshme" nga moduli:

  • kodi i shtetit - kodi i shtetit
  • operatorid – kodi i rrjetit celular
  • cellid – identifikues i qelizës
  • lac - kodi i vendndodhjes

Ky informacion mund të merret nga moduli duke dërguar komandën 'AT+CNETSCAN'.

Informacioni i marrë nga moduli

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>

Është e rëndësishme të theksohet se më vonë do t'ju duhet të konvertoni të dhënat nga përgjigja Cellid dhe Lac e modulit nga heksadecimal në dhjetor.

Tani duhet të gjenerojmë të dhëna XML për të kontaktuar serverin Yandex, i cili më pas do të kombinohet në një element.

Tabela e të dhënave

Të dhëna
Koment

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

...
Ky duhet të përmbajë çelësin 88-shifror të marrë nga Yandex

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

Kodi i Shtetit (MCC)

</countrycode><operatorid>
2

Kodi i operatorit (MNC)

</operatorid><cellid>
8453

Cellidi i kullës së parë nga lista e marrë nga moduli dhe e konvertuar nga një numër me bazën 16 në një numër me bazën 10 (vlera e marrë nga moduli është 2105)

</cellid><lac>
7838

Lac i kullës së parë, i konvertuar gjithashtu nga një numër bazë 16 në një numër bazë 10 (vlera e marrë nga moduli është 1E9E)

</lac></cell>
...

Një grup i bashkuar nga etiketa e qelizave mund të përsëritet aq herë sa është e nevojshme për të rritur besueshmërinë e një vendndodhjeje specifike

</gsm_cells>
<ip><address_v4>
10.137.92.60

Adresa IP e caktuar në modul nga rrjeti pas hapjes së kontekstit GPRS mund të merret duke dërguar komandën 'AT+SAPBR=2,1' tek moduli - shih më poshtë

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

Kjo do të gjenerojë një mesazh XML 1304 karaktere të gjatë si më poshtë:

Mesazh

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>

Ky mesazh gjenerohet në bazë të të dhënave për kullat celulare të operatorit Megafon, ai mund të plotësohet me të dhëna, duke përfshirë: në kullat e tjera të dukshme për modulin e marrë duke përdorur komandën 'AT+CNETSCAN' për të rritur besueshmërinë e koordinatave të lëshuara.

Puna me modulin dhe marrja e koordinatave aktuale

AT-log i punës me modulin

>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

Kështu, morëm koordinatat aktuale të modulit: 60.0330963, 30.2484304.
Ndërsa numri i të dhënave të dërguara përmes kullave celulare rritet, saktësia e përcaktimit të vendndodhjes do të rritet proporcionalisht.

Informacion më të detajuar në lidhje me përmbajtjen e përgjigjes nga shërbimi Yandex.Locator dhe zgjedhjen e të dhënave që ju nevojiten mund të lexoni në lidhjen: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, në seksionin API->XML->Përgjigje

Përfundim

Shpresoj se ky material do të jetë një ndihmë e mirë për zhvilluesit. Unë jam gati t'u përgjigjem pyetjeve tuaja në komente.

Burimi: www.habr.com

Shto një koment