Usługa lokalizacji GSM modułów SIM800x i jej współpraca z API Yandex.Locator

Usługa lokalizacji GSM modułów SIM800x i jej współpraca z API Yandex.Locator

Google, niestety dla wielu użytkowników modułów GSM, 2-3 miesiące temu zablokował i przeniósł na płatną wersję API służące do określania lokalizacji na podstawie współrzędnych wież komórkowych widocznych dla modułu. Z tego powodu produkowane są moduły serii SIM800 Rozwiązania bezprzewodowe SIMCom, funkcjonalność komendy AT+CIPGSMLOC przestała działać. W tym artykule powiem Ci, jak rozwiązać ten problem, korzystając z podobnej usługi świadczonej przez Yandex - Yandex.Locator.

Pomińmy sposób, w jaki Yandex otrzymuje współrzędne wież komórkowych, najważniejsze jest to, że możemy skorzystać z tej bezpłatnej usługi i uzyskać następujące dane: szerokość, długość geograficzna, wysokość, a także przybliżony błąd dla każdego parametru. Głównym celem artykułu jest przedstawienie krótkiego poradnika dotyczącego szybkiego przejścia na Yandex API, zamiast niedostępnej już usługi Google.

Poniżej dla przykładu pokażemy jedynie szerokość i długość geograficzną lokalizacji modułu.

Więc zacznijmy

Najpierw należy zapoznać się z umową użytkownika znajdującą się pod adresem: yandex.ru/legal/locator_api. Szczególną uwagę należy zwrócić na punkt 3.6. niniejsza umowa użytkownika, która to stwierdza Yandex zastrzega sobie prawo do zmiany/poprawienia lub aktualizacji interfejsu API Yandex.Locator w dowolnym momencie i bez wcześniejszego powiadomienia..

Przejdź do adresu yandex.ru/dev/locator/keys/get i dodaj wcześniej utworzone konto Yandex do grupy programistycznej. Poniższe kroki pozwolą Ci uzyskać klucz dostępu do tej usługi.

Usługa lokalizacji GSM modułów SIM800x i jej współpraca z API Yandex.Locator
Zapisz lub w inny sposób przechowuj otrzymany klucz.

Po wykonaniu tych kroków będziesz mieć dostęp do strony yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage gdzie podane są podstawowe informacje o mechanizmie działania usługi Yandex.Locator.

Aby wygenerować żądanie XML w formacie cURL do usług Yandex.Locator, musisz uzyskać informacje o wieżach komórkowych „widocznych” przez moduł:

  • countrycode – kod kraju
  • operatorid – kod sieci komórkowej
  • cellid – identyfikator komórki
  • lac – kod lokalizacji

Informacje te można uzyskać z modułu wysyłając komendę 'AT+CNETSCAN'.

Informacje otrzymane z modułu

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>

Należy pamiętać, że później trzeba będzie przekonwertować dane z odpowiedzi Cellid i Lac modułu z postaci szesnastkowej na dziesiętną.

Teraz musimy wygenerować dane XML, aby skontaktować się z serwerem Yandex, które następnie zostaną połączone w jeden element.

Tabela danych

Te
Komentarz

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

...
Powinien zawierać 88-cyfrowy klucz otrzymany od Yandex

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

Kod kraju (MCC)

</countrycode><operatorid>
2

Kod operatora (MNC)

</operatorid><cellid>
8453

Komórka pierwszej wieży z listy otrzymanej z modułu i przekonwertowana z liczby o podstawie 16 na liczbę o podstawie 10 (wartość otrzymana z modułu to 2105)

</cellid><lac>
7838

Lac pierwszej wieży, również przekonwertowany z liczby o podstawie 16 na liczbę o podstawie 10 (wartość otrzymana z modułu to 1E9E)

</lac></cell>
...

Grupę połączoną znacznikiem komórkowym można powtórzyć tyle razy, ile jest to konieczne, aby zwiększyć wiarygodność konkretnej lokalizacji

</gsm_cells>
<ip><address_v4>
10.137.92.60

Adres IP przydzielony modułowi przez sieć po otwarciu kontekstu GPRS można uzyskać wysyłając do modułu komendę AT+SAPBR=2,1 - patrz niżej

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

Spowoduje to wygenerowanie następującego komunikatu XML o długości 1304 znaków:

wiadomość

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>

Komunikat ten generowany jest na podstawie danych z masztów komórkowych operatora Megafon, może być uzupełniony danymi m.in.: na innych wieżach widocznych dla modułu otrzymanych za pomocą komendy „AT+CNETSCAN” w celu zwiększenia wiarygodności wydawanych współrzędnych.

Praca z modułem i pobieranie aktualnych współrzędnych

AT-log pracy z modułem

>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

Tym samym otrzymaliśmy aktualne współrzędne modułu: 60.0330963, 30.2484304.
Wraz ze wzrostem liczby danych przesyłanych za pośrednictwem masztów telefonii komórkowej, dokładność określania lokalizacji będzie proporcjonalnie wzrastać.

Bardziej szczegółowe informacje na temat treści odpowiedzi z usługi Yandex.Locator i wyboru potrzebnych danych można przeczytać pod linkiem: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, w sekcji API->XML->Odpowiedź

wniosek

Mam nadzieję, że ten materiał będzie dobrą pomocą dla programistów. Jestem gotowy odpowiedzieć na Twoje pytania w komentarzach.

Źródło: www.habr.com

Dodaj komentarz