GSM-platstjänst för SIM800x-moduler och dess arbete med Yandex.Locator API

GSM-platstjänst för SIM800x-moduler och dess arbete med Yandex.Locator API

Tyvärr för många användare av GSM-moduler blockerade Google för 2-3 månader sedan och överförde till en betald API för bestämning av plats baserat på koordinaterna för mobiltorn som är synliga för modulen. På grund av detta, på SIM800-serien moduler produceras SIMCom trådlösa lösningar, slutade funktionen hos kommandot AT+CIPGSMLOC att fungera. I den här artikeln kommer jag att berätta hur du kan lösa detta problem genom att använda en liknande tjänst från Yandex - Yandex.Locator.

Låt oss hoppa över hur Yandex tar emot koordinaterna för celltorn, det viktigaste är att vi kan använda den här gratistjänsten och få följande data: Latitud, Longitud, Altitude, samt det ungefärliga felet för varje parameter. Huvudsyftet med artikeln är att ge en kort handledning om hur du snabbt byter till Yandex API, istället för den inte längre tillgängliga tjänsten från Google.

Nedan, som ett exempel, visar vi endast latitud och longitud för modulplatsen.

Så låt oss börja

Först måste du läsa användaravtalet som finns på: yandex.ru/legal/locator_api. Särskild uppmärksamhet bör ägnas åt punkt 3.6. detta användaravtal, som säger att Yandex förbehåller sig rätten att ändra/korrigera eller uppdatera Yandex.Locator API när som helst, utan föregående meddelande..

Gå till adressen yandex.ru/dev/locator/keys/get och lägg till ditt tidigare skapade Yandex-konto i utvecklingsgruppen. Dessa steg gör att du kan få en nyckel för att komma åt den här tjänsten.

GSM-platstjänst för SIM800x-moduler och dess arbete med Yandex.Locator API
Skriv ner eller förvara på annat sätt nyckeln du får.

När du har slutfört dessa steg har du tillgång till sidan yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage där grundläggande information om funktionsmekanismen för Yandex.Locator-tjänsten tillhandahålls.

För att generera en XML-förfrågan i cURL-format till Yandex.Locator-tjänster måste du få information om mobiltorn som är "synliga" av modulen:

  • landskod – landskod
  • operatorid – mobilnätskod
  • cellid – cellidentifierare
  • lac – platskod

Denna information kan erhållas från modulen genom att skicka kommandot 'AT+CNETSCAN'.

Information erhållen från 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 är viktigt att notera att du senare kommer att behöva konvertera data från modulens Cellid- och Lac-svar från hexadecimal till decimal.

Nu måste vi generera XML-data för att kontakta Yandex-servern, som sedan kommer att kombineras till ett element.

datatabell

Data
Kommentar

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

.
Denna bör innehålla den 88-siffriga nyckeln som tagits emot från Yandex

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

Landskod (MCC)

</countrycode><operatorid>
2

Operatörskod (MNC)

</operatorid><cellid>
8453

Cellid av det första tornet från listan mottaget från modulen och konverterat från ett tal med bas 16 till ett tal med bas 10 (värdet som tas emot från modulen är 2105)

</cellid><lac>
7838

Lac av det första tornet, även omvandlat från ett bas 16-tal till ett bas 10-tal (värdet som tas emot från modulen är 1E9E)

</lac></cell>
...

En grupp som förenas av celltaggen kan upprepas så många gånger som behövs för att öka tillförlitligheten för en specifik plats

</gsm_cells>
<ip><address_v4>
10.137.92.60

IP-adressen som tilldelas modulen av nätverket efter att ha öppnat GPRS-kontexten kan erhållas genom att skicka kommandot 'AT+SAPBR=2,1' till modulen - se nedan

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

Detta kommer att generera ett XML-meddelande med 1304 tecken långt enligt följande:

meddelande

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>

Detta meddelande genereras på grundval av data om mobiltorn från Megafon-operatören, det kan kompletteras med data, inklusive: på andra torn som är synliga för modulen som tas emot med kommandot 'AT+CNETSCAN' för att öka tillförlitligheten för de utfärdade koordinaterna.

Arbeta med modulen och få aktuella koordinater

AT-logg över arbete 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

Således fick vi de aktuella koordinaterna för modulen: 60.0330963, 30.2484304.
När antalet data som skickas via mobiltorn ökar, kommer noggrannheten i platsbestämningen att öka proportionellt.

Mer detaljerad information om innehållet i svaret från Yandex.Locator-tjänsten och valet av data du behöver kan läsas på länken: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, i avsnittet API->XML->Svar

Slutsats

Jag hoppas att detta material kommer att vara till god hjälp för utvecklare. Jag är redo att svara på dina frågor i kommentarerna.

Källa: will.com

Lägg en kommentar