Layanan Lokasi GSM dari modul SIM800x dan kerjanya dengan Yandex.Locator API



Google, sayangnya untuk banyak pengguna modul GSM, diblokir dan ditransfer ke basis berbayar sebuah API 2-3 bulan lalu untuk menentukan lokasi dengan koordinat menara sel yang terlihat oleh modul. Karena itu, fungsi dari tim AT + CIPGSMLOC telah berhenti bekerja pada modul seri SIM800 yang diproduksi oleh SIMCom Wireless Solutions . Pada artikel ini saya akan memberi tahu Anda cara mengatasi masalah dengan menggunakan layanan serupa yang disediakan oleh Yandex - Yandex.Locator .

Kami akan mengabaikan bagaimana Yandex menerima koordinat menara sel, yang terpenting adalah kami dapat menggunakan layanan gratis ini dan mendapatkan data berikut: Latitude, Longitude, Altitude, serta perkiraan kesalahan untuk setiap parameter. Tujuan utama artikel ini adalah memberikan tutorial kecil tentang transisi cepat ke API dari Yandex, alih-alih layanan yang tidak lagi tersedia dari Google.

Di bawah, sebagai contoh, kita hanya akan mendapatkan garis lintang dan garis bujur dari lokasi modul.

Jadi mari kita mulai


Pertama, Anda perlu membaca perjanjian pengguna, yang terletak di: yandex.ru/legal/locator_api . Perhatian khusus harus diberikan untuk ayat 3.6. perjanjian pengguna ini, yang menyatakan bahwa Yandex berhak untuk mengubah / memperbaiki atau memperbarui API Yandex.Locator setiap saat, tanpa pemberitahuan sebelumnya .

Buka yandex.ru/dev/locator/keys/get dan tambahkan akun Yandex yang Anda buat sebelumnya ke grup pengembangan. Tindakan ini akan memungkinkan Anda untuk mendapatkan kunci untuk mengakses layanan ini.


Tuliskan atau simpan kunci yang diterima.

Setelah melakukan langkah-langkah ini, Anda akan mendapatkan akses ke halaman yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage di mana informasi dasar tentang mekanisme layanan Yandex.Locator disediakan.

Untuk menghasilkan permintaan XML dalam format cURL untuk layanan Yandex.Locator, Anda perlu mendapatkan informasi tentang menara sel modul "terlihat":

  • kode negara - kode negara
  • operatorid - kode jaringan seluler
  • selid - id sel
  • lac - kode lokasi

Informasi ini dapat diperoleh dari modul dengan mengirimkan perintah 'AT + CNETSCAN'.

Informasi diterima dari 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>

Penting untuk dicatat bahwa di masa depan Anda perlu mengubah data dari respons modul tentang Cellid dan Lac dari heksadesimal menjadi desimal.

Sekarang kita perlu menghasilkan data XML untuk mengakses server Yandex, yang, di masa depan, akan digabungkan menjadi satu elemen.

Tabel data
xml=<ya_lbs_request><common><version>1.0</version><api_key>
...88-
</api_key></common>
<gsm_cells>
<cell><countrycode>
250
(MCC)
</countrycode><operatorid>
2
(MNC)
</operatorid><cellid>
8453
Cellid 16 10 ( — 2105)
</cellid><lac>
7838
Lac , 16 10 ( – 1E9E)
</lac></cell>
...
, cell -
</gsm_cells>
<ip><address_v4>
10.137.92.60
IP GPRS , ‘AT+SAPBR=2,1’ – .
</address_v4></ip></ya_lbs_request>


Dengan demikian, pesan XML dengan panjang 1304 karakter dari formulir berikut akan dihasilkan:

Pesan
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>


Pesan ini didasarkan pada data pada menara seluler operator Megafon, dapat dilengkapi dengan data termasuk pada menara lain yang terlihat oleh modul yang diterima oleh perintah 'AT + CNETSCAN' untuk meningkatkan keandalan koordinat yang dikeluarkan.

Bekerja dengan modul dan mendapatkan koordinat saat ini


AT-log bekerja 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

Dengan demikian, kami mendapat koordinat modul saat ini: 60.0330963, 30.2484304.
Dengan meningkatnya jumlah data yang dikirim oleh menara sel, keakuratan penentuan lokasi akan meningkat secara proporsional.

Informasi lebih rinci tentang isi respons dari layanan Yandex.Locator dan pemilihan data yang Anda butuhkan dapat ditemukan di: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage , di bagian API-> XML-> Reply

Kesimpulan


Saya berharap materi ini akan menjadi bantuan yang baik bagi para pengembang. Siap menjawab pertanyaan Anda di komentar.

All Articles