سرویس موقعیت مکانی GSM ماژول های SIM800x و کار آن با Yandex.Locator API

سرویس موقعیت مکانی GSM ماژول های SIM800x و کار آن با Yandex.Locator API

گوگل، متأسفانه برای بسیاری از کاربران ماژول های GSM، 2-3 ماه پیش API را برای تعیین مکان بر اساس مختصات برج های سلولی قابل مشاهده برای ماژول مسدود کرده و به صورت پولی منتقل کرد. به همین دلیل، ماژول های سری SIM800 تولید می شوند راه حل های بی سیم سیمکام، عملکرد دستور AT+CIPGSMLOC از کار افتاد. در این مقاله به شما خواهم گفت که چگونه می توانید این مشکل را با استفاده از سرویس مشابه ارائه شده توسط Yandex حل کنید - Yandex.Locator.

بیایید از نحوه دریافت مختصات برج های سلولی یاندکس بگذریم، نکته اصلی این است که می توانیم از این سرویس رایگان استفاده کنیم و داده های زیر را دریافت کنیم: عرض جغرافیایی، طول جغرافیایی، ارتفاع و همچنین خطای تقریبی برای هر پارامتر. هدف اصلی مقاله ارائه یک آموزش کوتاه در مورد جابجایی سریع به Yandex API به جای سرویسی که دیگر در دسترس نیست از Google است.

در زیر، به عنوان مثال، فقط طول و عرض جغرافیایی مکان ماژول را نشان خواهیم داد.

پس بیایید شروع کنیم

ابتدا باید قرارداد کاربر واقع در آدرس زیر را مطالعه کنید: yandex.ru/legal/locator_api. توجه ویژه باید به بند 3.6 شود. این قرارداد کاربر، که بیان می کند Yandex این حق را برای خود محفوظ می دارد که در هر زمان و بدون اطلاع قبلی، Yandex.Locator API را تغییر/تصحیح یا به روز کند..

به آدرس بروید yandex.ru/dev/locator/keys/get و حساب Yandex را که قبلا ایجاد کرده اید به گروه توسعه اضافه کنید. این مراحل به شما امکان می دهد کلید دسترسی به این سرویس را بدست آورید.

سرویس موقعیت مکانی GSM ماژول های SIM800x و کار آن با Yandex.Locator API
کلید دریافتی خود را یادداشت کنید یا در غیر این صورت ذخیره کنید.

پس از انجام این مراحل به صفحه دسترسی خواهید داشت yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage جایی که اطلاعات اولیه در مورد مکانیسم عملکرد سرویس Yandex.Locator ارائه می شود.

برای ایجاد یک درخواست XML در قالب cURL به سرویس Yandex.Locator، باید اطلاعاتی در مورد برج های سلولی "قابل مشاهده" توسط ماژول به دست آورید:

  • کد کشور - کد کشور
  • operatorid – کد شبکه تلفن همراه
  • cellid – شناسه سلول
  • lac – کد مکان

این اطلاعات را می توان با ارسال دستور 'AT+CNETSCAN' از ماژول به دست آورد.

اطلاعات دریافتی از ماژول

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>

مهم است که توجه داشته باشید که بعداً باید داده ها را از پاسخ Cellid و Lac ماژول از هگزا دسیمال به اعشاری تبدیل کنید.

اکنون برای تماس با سرور Yandex باید داده های XML تولید کنیم که متعاقباً در یک عنصر ترکیب می شود.

جدول داده

اطلاعات
توضیح

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

...
این باید حاوی کلید 88 رقمی دریافت شده از Yandex باشد

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

کد کشور (MCC)

</countrycode><operatorid>
2

کد اپراتور (MNC)

</operatorid><cellid>
8453

سلید اولین برج از لیست دریافتی از ماژول و تبدیل از عددی با پایه 16 به عددی با پایه 10 (مقدار دریافتی از ماژول 2105 است)

</cellid><lac>
7838

Lac برج اول نیز از عدد پایه 16 به عدد پایه 10 تبدیل شده است (مقدار دریافتی از ماژول 1E9E است)

</lac></cell>
...

یک گروه متحد شده توسط تگ سلول می تواند به تعداد دفعات لازم تکرار شود تا قابلیت اطمینان یک مکان خاص افزایش یابد.

</gsm_cells>
<ip><address_v4>
10.137.92.60

آدرس IP اختصاص داده شده به ماژول توسط شبکه پس از باز کردن زمینه GPRS را می توان با ارسال دستور 'AT+SAPBR=2,1' به ماژول به دست آورد - به زیر مراجعه کنید.

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

این یک پیام XML با 1304 کاراکتر به صورت زیر ایجاد می کند:

پیام

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>

این پیام بر اساس داده های برج های سلولی اپراتور Megafon تولید می شود، می توان آن را با داده ها تکمیل کرد، از جمله: در برج های دیگر قابل مشاهده برای ماژول دریافت شده با استفاده از دستور 'AT+CNETSCAN' برای افزایش قابلیت اطمینان مختصات صادر شده.

کار با ماژول و گرفتن مختصات فعلی

AT-log کار با ماژول

>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

بنابراین، ما مختصات فعلی ماژول را دریافت کردیم: 60.0330963، 30.2484304.
با افزایش تعداد داده های ارسال شده از طریق دکل های سلولی، دقت تعیین مکان به نسبت افزایش می یابد.

اطلاعات دقیق تر در مورد محتوای پاسخ از سرویس Yandex.Locator و انتخاب داده های مورد نیاز را می توانید در پیوند بخوانید: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage، در بخش API->XML->Response

نتیجه

امیدوارم این مطالب کمک خوبی به توسعه دهندگان باشد. من آماده پاسخگویی به سوالات شما در نظرات هستم.

منبع: www.habr.com

اضافه کردن نظر