Perkhidmatan Lokasi GSM modul SIM800x dan kerjanya dengan Yandex.Locator API

Perkhidmatan Lokasi GSM modul SIM800x dan kerjanya dengan Yandex.Locator API

Google, malangnya bagi kebanyakan pengguna modul GSM, 2-3 bulan lalu menyekat dan memindahkan API kepada asas berbayar untuk menentukan lokasi berdasarkan koordinat menara sel yang boleh dilihat oleh modul. Disebabkan ini, modul siri SIM800 dihasilkan Penyelesaian Tanpa Wayar SIMCom, kefungsian perintah AT+CIPGSMLOC berhenti berfungsi. Dalam artikel ini saya akan memberitahu anda bagaimana anda boleh menyelesaikan masalah ini dengan menggunakan perkhidmatan serupa yang disediakan oleh Yandex - Yandex.Locator.

Mari kita langkau bagaimana Yandex menerima koordinat menara sel, perkara utama ialah kita boleh menggunakan perkhidmatan percuma ini dan mendapatkan data berikut: Latitud, Longitud, Altitud, serta ralat anggaran untuk setiap parameter. Tujuan utama artikel tersebut adalah untuk memberikan tutorial ringkas tentang menukar dengan cepat kepada API Yandex, bukannya perkhidmatan yang tidak lagi tersedia daripada Google.

Di bawah, sebagai contoh, kami akan menunjukkan hanya latitud dan longitud lokasi modul.

Jadi mari kita mulakan

Mula-mula anda perlu membaca perjanjian pengguna yang terletak di: yandex.ru/legal/locator_api. Perhatian khusus harus diberikan kepada klausa 3.6. perjanjian pengguna ini, yang menyatakan bahawa Yandex berhak untuk menukar/membetulkan atau mengemas kini Yandex.Locator API pada bila-bila masa, tanpa notis awal..

Pergi ke alamat yandex.ru/dev/locator/keys/get dan tambahkan akaun Yandex anda yang telah dibuat sebelum ini ke kumpulan pembangunan. Langkah-langkah ini akan membolehkan anda mendapatkan kunci untuk mengakses perkhidmatan ini.

Perkhidmatan Lokasi GSM modul SIM800x dan kerjanya dengan Yandex.Locator API
Tulis atau simpan kunci yang anda terima.

Selepas melengkapkan langkah ini, anda akan mempunyai akses ke halaman yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage di mana maklumat asas tentang mekanisme operasi perkhidmatan Yandex.Locator disediakan.

Untuk menjana permintaan XML dalam format cURL kepada perkhidmatan Yandex.Locator, anda perlu mendapatkan maklumat tentang menara sel "kelihatan" oleh modul:

  • kod negara – kod negara
  • operatorid – kod rangkaian mudah alih
  • cellid – pengecam sel
  • lac – kod lokasi

Maklumat ini boleh diperolehi daripada modul dengan menghantar arahan 'AT+CNETSCAN'.

Maklumat yang diterima daripada modul

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>

Adalah penting untuk ambil perhatian bahawa kemudian anda perlu menukar data daripada respon Cellid dan Lac modul daripada perenambelasan kepada perpuluhan.

Sekarang kita perlu menjana data XML untuk menghubungi pelayan Yandex, yang kemudiannya akan digabungkan menjadi satu elemen.

Jadual data

Data
Komen

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

...
Ini harus mengandungi kunci 88 digit yang diterima daripada Yandex

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

Kod Negara (MCC)

</countrycode><operatorid>
2

Kod operator (MNC)

</operatorid><cellid>
8453

Selid menara pertama daripada senarai yang diterima daripada modul dan ditukar daripada nombor dengan asas 16 kepada nombor dengan asas 10 (nilai yang diterima daripada modul ialah 2105)

</cellid><lac>
7838

Lac menara pertama, juga ditukar daripada nombor asas 16 kepada nombor asas 10 (nilai yang diterima daripada modul ialah 1E9E)

</lac></cell>
...

Kumpulan yang disatukan oleh tag sel boleh diulang seberapa banyak kali yang perlu untuk meningkatkan kebolehpercayaan lokasi tertentu

</gsm_cells>
<ip><address_v4>
10.137.92.60

Alamat IP yang diberikan kepada modul oleh rangkaian selepas membuka konteks GPRS boleh diperoleh dengan menghantar arahan 'AT+SAPBR=2,1' ke modul - lihat di bawah

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

Ini akan menjana mesej XML 1304 aksara panjang seperti berikut:

mesej

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>

Mesej ini dijana berdasarkan data pada menara sel pengendali Megafon, ia boleh ditambah dengan data, termasuk: pada menara lain yang boleh dilihat oleh modul yang diterima menggunakan arahan 'AT+CNETSCAN' untuk meningkatkan kebolehpercayaan koordinat yang dikeluarkan.

Bekerja dengan modul dan mendapatkan koordinat semasa

AT-log kerja dengan modul

>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

Oleh itu, kami menerima koordinat semasa modul: 60.0330963, 30.2484304.
Apabila bilangan data yang dihantar melalui menara sel meningkat, ketepatan penentuan lokasi akan meningkat secara berkadar.

Maklumat lebih terperinci tentang kandungan respons daripada perkhidmatan Yandex.Locator dan pemilihan data yang anda perlukan boleh dibaca di pautan: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, dalam bahagian API->XML->Respons

Kesimpulan

Saya berharap bahan ini akan menjadi bantuan yang baik kepada pembangun. Saya bersedia untuk menjawab soalan anda dalam komen.

Sumber: www.habr.com

Tambah komen