GSM-Loka servo de SIM800x-moduloj kaj ĝia laboro kun la Yandex.Locator API

GSM-Loka servo de SIM800x-moduloj kaj ĝia laboro kun la Yandex.Locator API

Google, bedaŭrinde por multaj uzantoj de GSM-moduloj, antaŭ 2-3 monatoj blokis kaj translokigis al pagita bazo la API por determini lokon surbaze de la koordinatoj de ĉelaj turoj videblaj de la modulo. Pro tio, sur SIM800 serio moduloj produktitaj SIMCom Sendrataj Solvoj, la funkcieco de la komando AT+CIPGSMLOC ĉesis funkcii. En ĉi tiu artikolo mi rakontos al vi kiel vi povas solvi ĉi tiun problemon uzante similan servon provizitan de Yandex - Yandex.Locator.

Ni saltu kiel Yandex ricevas la koordinatojn de ĉelaj turoj, la ĉefa afero estas, ke ni povas uzi ĉi tiun senpagan servon kaj akiri la jenajn datumojn: Latitudo, Longitudo, Alteco, kaj ankaŭ la proksimuman eraron por ĉiu parametro. La ĉefa celo de la artikolo estas doni mallongan lernilon pri rapide ŝanĝi al la Yandex API, anstataŭ la ne plu disponebla servo de Guglo.

Malsupre, kiel ekzemplo, ni montros nur la latitudon kaj longitudon de la modula loko.

Do ni komencu

Unue vi devas legi la uzantinterkonsenton situantan ĉe: yandex.ru/legal/locator_api. Apartan atenton oni devas doni al klaŭzo 3.6. ĉi tiu uzantinterkonsento, kiu deklaras tion Yandex rezervas la rajton ŝanĝi/korekti aŭ ĝisdatigi la Yandex.Locator API en ajna momento, sen antaŭa avizo..

Iru al adreso yandex.ru/dev/locator/keys/get kaj aldonu vian antaŭe kreitan Yandex-konton al la disvolva grupo. Ĉi tiuj paŝoj permesos al vi akiri ŝlosilon por aliri ĉi tiun servon.

GSM-Loka servo de SIM800x-moduloj kaj ĝia laboro kun la Yandex.Locator API
Skribu aŭ alie konservu la ŝlosilon, kiun vi ricevas.

Post plenumi ĉi tiujn paŝojn, vi havos aliron al la paĝo yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage kie bazaj informoj pri la mekanismo de funkciado de la servo Yandex.Locator estas provizitaj.

Por generi XML-peton en cURL-formato al Yandex.Locator-servoj, vi devos akiri informojn pri ĉelaj turoj "videblaj" per la modulo:

  • landkodo – landokodo
  • operatorid - poŝtelefona retokodo
  • cellid – ĉelidentigilo
  • lac - loka kodo

Ĉi tiuj informoj povas esti akiritaj de la modulo sendante la komandon 'AT+CNETSCAN'.

Informoj ricevitaj de la modulo

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>

Gravas noti, ke poste vi devos konverti la datumojn de la respondo de Cellid kaj Lac de la modulo de deksesuma al decimala.

Nun ni devas generi XML-datumojn por kontakti la Yandex-servilon, kiu poste estos kombinita en unu elementon.

Datuma tabelo

datumoj
komento

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

...
Ĉi tio devus enhavi la 88-ciferan ŝlosilon ricevitan de Yandex

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

Landa Kodo (MCC)

</countrycode><operatorid>
2

Operaciistkodo (MNC)

</operatorid><cellid>
8453

Cellid de la unua turo el la listo ricevita de la modulo kaj konvertita de nombro kun bazo 16 al nombro kun bazo 10 (la valoro ricevita de la modulo estas 2105)

</cellid><lac>
7838

Lako de la unua turo, ankaŭ konvertita de bazo 16 nombro al bazo 10 nombro (la valoro ricevita de la modulo estas 1E9E)

</lac></cell>
...

Grupo kunigita per la ĉela etikedo povas esti ripetita tiom da fojoj kiel necese por pliigi la fidindecon de specifa loko

</gsm_cells>
<ip><address_v4>
10.137.92.60

La IP-adreso asignita al la modulo de la reto post malfermo de la GPRS-kunteksto povas esti akirita sendante la komandon 'AT+SAPBR=2,1' al la modulo - vidu sube.

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

Ĉi tio generos XML-mesaĝon kun 1304 signoj longaj jene:

mesaĝo

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>

Ĉi tiu mesaĝo estas generita surbaze de datumoj pri ĉelaj turoj de la telefonisto Megafon, ĝi povas esti kompletigita per datumoj, inkluzive de: sur aliaj turoj videblaj al la modulo ricevita uzante la komandon 'AT+CNETSCAN' por pliigi la fidindecon de la elsenditaj koordinatoj.

Laborante kun la modulo kaj akiri aktualajn koordinatojn

AT-protokolo de laboro kun la modulo

>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

Tiel, ni ricevis la nunajn koordinatojn de la modulo: 60.0330963, 30.2484304.
Ĉar la nombro da datumoj senditaj per ĉelaj turoj pliiĝas, la precizeco de lokdeterminado pliiĝos proporcie.

Pli detalaj informoj pri la enhavo de la respondo de la servo Yandex.Locator kaj la elekto de la datumoj, kiujn vi bezonas, povas esti legitaj ĉe la ligo: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, en la sekcio API->XML->Respondo

konkludo

Mi esperas, ke ĉi tiu materialo estos bona helpo al programistoj. Mi pretas respondi viajn demandojn en la komentoj.

fonto: www.habr.com

Aldoni komenton