GSM lokalizační služba modulů SIM800x a její práce s API Yandex.Locator

GSM lokalizační služba modulů SIM800x a její práce s API Yandex.Locator

Google, bohužel pro mnoho uživatelů GSM modulů, před 2-3 měsíci zablokoval a převedl na placenou bázi API pro určování polohy na základě souřadnic mobilních věží viditelných modulem. Z tohoto důvodu jsou moduly řady SIM800 vyráběny Bezdrátová řešení SIMCom, přestala fungovat funkce příkazu AT+CIPGSMLOC. V tomto článku vám řeknu, jak můžete tento problém vyřešit pomocí podobné služby poskytované společností Yandex - Yandex.Locator.

Přeskočme, jak Yandex přijímá souřadnice mobilních věží, hlavní je, že můžeme použít tuto bezplatnou službu a získat následující údaje: zeměpisná šířka, délka, nadmořská výška a přibližná chyba pro každý parametr. Hlavním účelem článku je poskytnout krátký návod, jak rychle přejít na Yandex API místo již nedostupné služby od Google.

Níže si jako příklad ukážeme pouze zeměpisnou šířku a délku umístění modulu.

Začněme tedy

Nejprve si musíte přečíst uživatelskou smlouvu na adrese: yandex.ru/legal/locator_api. Zvláštní pozornost by měla být věnována bodu 3.6. tuto uživatelskou smlouvu, která uvádí, že Yandex si vyhrazuje právo kdykoli bez předchozího upozornění změnit/opravit nebo aktualizovat rozhraní Yandex.Locator API..

Přejděte na adresu yandex.ru/dev/locator/keys/get a přidejte svůj dříve vytvořený účet Yandex do vývojové skupiny. Tyto kroky vám umožní získat klíč pro přístup k této službě.

GSM lokalizační služba modulů SIM800x a její práce s API Yandex.Locator
Zapište si nebo jinak uložte klíč, který obdržíte.

Po dokončení těchto kroků budete mít přístup na stránku yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage kde jsou uvedeny základní informace o mechanismu fungování služby Yandex.Locator.

Chcete-li vygenerovat požadavek XML ve formátu cURL pro služby Yandex.Locator, budete muset získat informace o mobilních věžích „viditelných“ modulem:

  • countrycode – kód země
  • operatorid – kód mobilní sítě
  • cellid – identifikátor buňky
  • lac – kód umístění

Tyto informace lze získat z modulu odesláním příkazu 'AT+CNETSCAN'.

Informace získané z modulu

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>

Je důležité si uvědomit, že později budete muset převést data z odezvy Cellid a Lac modulu z hexadecimální na desítkovou.

Nyní potřebujeme vygenerovat data XML pro kontakt se serverem Yandex, která budou následně spojena do jednoho prvku.

datová tabulka

Data
Komentář

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

...
To by mělo obsahovat 88místný klíč přijatý od společnosti Yandex

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

kód země (MCC)

</countrycode><operatorid>
2

Kód operátora (MNC)

</operatorid><cellid>
8453

Buňka první věže ze seznamu přijatého z modulu a převedeného z čísla se základem 16 na číslo se základem 10 (hodnota přijatá z modulu je 2105)

</cellid><lac>
7838

Lac první věže, také převedené z čísla se základnou 16 na číslo se základnou 10 (hodnota přijatá z modulu je 1E9E)

</lac></cell>
...

Skupina spojená buněčnou značkou může být opakována tolikrát, kolikrát je potřeba, aby se zvýšila spolehlivost konkrétního místa

</gsm_cells>
<ip><address_v4>
10.137.92.60

IP adresu přidělenou modulu sítí po otevření GPRS kontextu lze získat zasláním příkazu 'AT+SAPBR=2,1' do modulu - viz níže

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

Tím se vygeneruje zpráva XML o délce 1304 znaků takto:

zpráva

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>

Tato zpráva je generována na základě údajů o mobilních věžích operátora Megafon, lze ji doplnit údaji, včetně: pro ostatní modulově viditelné věže přijaté pomocí příkazu 'AT+CNETSCAN' ke zvýšení spolehlivosti vydávaných souřadnic.

Práce s modulem a získávání aktuálních souřadnic

AT-log práce s modulem

>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

Takto jsme obdrželi aktuální souřadnice modulu: 60.0330963, 30.2484304.
S rostoucím počtem dat odesílaných přes mobilní věže se úměrně zvýší přesnost určení polohy.

Podrobnější informace o obsahu odpovědi ze služby Yandex.Locator a výběru údajů, které potřebujete, si můžete přečíst na odkazu: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, v sekci API->XML->Odpověď

Závěr

Doufám, že tento materiál bude dobrým pomocníkem pro vývojáře. Jsem připraven odpovědět na vaše otázky v komentářích.

Zdroj: www.habr.com

Přidat komentář