GSM-locatieservice van SIM800x-modules en het werk ervan met de Yandex.Locator API

GSM-locatieservice van SIM800x-modules en het werk ervan met de Yandex.Locator API

Google heeft, helaas voor veel gebruikers van GSM-modules, 2-3 maanden geleden de API voor het bepalen van de locatie geblokkeerd en op betaalde basis overgedragen op basis van de coördinaten van zendmasten die zichtbaar zijn voor de module. Hierdoor worden er modules uit de SIM800-serie geproduceerd SIMCom draadloze oplossingen, werkt de functionaliteit van de AT+CIPGSMLOC-opdracht niet meer. In dit artikel zal ik je vertellen hoe je dit probleem kunt oplossen door een vergelijkbare service van Yandex te gebruiken - Yandex.Locator.

Laten we overslaan hoe Yandex de coördinaten van zendmasten ontvangt, het belangrijkste is dat we deze gratis service kunnen gebruiken en de volgende gegevens kunnen verkrijgen: breedtegraad, lengtegraad, hoogte, evenals de geschatte fout voor elke parameter. Het belangrijkste doel van het artikel is om een ​​korte tutorial te geven over het snel overschakelen naar de Yandex API, in plaats van de niet langer beschikbare service van Google.

Hieronder laten we als voorbeeld alleen de breedte- en lengtegraad van de modulelocatie zien.

Dus laten we beginnen

Eerst moet u de gebruikersovereenkomst lezen die u kunt vinden op: yandex.ru/legal/locator_api. Er moet bijzondere aandacht worden besteed aan artikel 3.6. deze gebruikersovereenkomst, waarin dat staat Yandex behoudt zich het recht voor om de Yandex.Locator API op elk moment, zonder voorafgaande kennisgeving, te wijzigen/corrigeren of bij te werken..

Ga naar adres yandex.ru/dev/locator/keys/get en voeg uw eerder gemaakte Yandex-account toe aan de ontwikkelingsgroep. Met deze stappen kunt u een sleutel verkrijgen voor toegang tot deze service.

GSM-locatieservice van SIM800x-modules en het werk ervan met de Yandex.Locator API
Schrijf de sleutel die u ontvangt op of bewaar deze op een andere manier.

Nadat u deze stappen heeft voltooid, heeft u toegang tot de pagina yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage waar basisinformatie over het werkingsmechanisme van de Yandex.Locator-service wordt verstrekt.

Om een ​​XML-verzoek in cURL-formaat voor Yandex.Locator-services te genereren, moet u informatie verkrijgen over zendmasten die “zichtbaar” zijn door de module:

  • landcode – landcode
  • operatorid – mobiele netwerkcode
  • cellid – celidentificatie
  • lac – locatiecode

Deze informatie kan uit de module worden verkregen door het 'AT+CNETSCAN'-commando te verzenden.

Informatie ontvangen van de module

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>

Het is belangrijk op te merken dat u later de gegevens uit het Cellid- en Lac-antwoord van de module moet converteren van hexadecimaal naar decimaal.

Nu moeten we XML-gegevens genereren om contact op te nemen met de Yandex-server, die vervolgens in één element worden gecombineerd.

data tafel

Gegevens
Commentaar

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

...
Dit zou de 88-cijferige sleutel moeten bevatten die is ontvangen van Yandex

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

Landcode (MCC)

</countrycode><operatorid>
2

Operatorcode (MNC)

</operatorid><cellid>
8453

Cellid van de eerste toren uit de lijst ontvangen van de module en omgezet van een getal met grondtal 16 naar een getal met grondtal 10 (de waarde ontvangen van de module is 2105)

</cellid><lac>
7838

Lac van de eerste toren, ook omgezet van een basis 16-nummer naar een basis 10-nummer (de waarde ontvangen van de module is 1E9E)

</lac></cell>
...

Een groep verenigd door de celtag kan zo vaak als nodig worden herhaald om de betrouwbaarheid van een specifieke locatie te vergroten

</gsm_cells>
<ip><address_v4>
10.137.92.60

Het IP-adres dat door het netwerk aan de module is toegewezen na het openen van de GPRS-context kan worden verkregen door het commando 'AT+SAPBR=2,1' naar de module te sturen - zie hieronder

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

Dit genereert een XML-bericht van 1304 tekens lang:

bericht

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>

Dit bericht wordt gegenereerd op basis van gegevens over zendmasten van de Megafon-operator en kan worden aangevuld met gegevens, waaronder: op andere torens zichtbaar voor de ontvangen module met behulp van het 'AT+CNETSCAN'-commando om de betrouwbaarheid van de uitgegeven coördinaten te vergroten.

Werken met de module en huidige coördinaten verkrijgen

AT-log van het werk met de module

>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

Zo ontvingen we de huidige coördinaten van de module: 60.0330963, 30.2484304.
Naarmate het aantal gegevens dat via zendmasten wordt verzonden toeneemt, zal de nauwkeurigheid van de locatiebepaling proportioneel toenemen.

Meer gedetailleerde informatie over de inhoud van het antwoord van de Yandex.Locator-service en de selectie van de gegevens die u nodig heeft, kunt u lezen op de link: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, in de sectie API->XML->Reactie

Conclusie

Ik hoop dat dit materiaal een goede hulp zal zijn voor ontwikkelaars. Ik ben klaar om uw vragen in de reacties te beantwoorden.

Bron: www.habr.com

Voeg een reactie