Dịch vụ định vị GSM của các mô-đun SIM800x và hoạt động của nó với API Yandex.Locator

Dịch vụ định vị GSM của các mô-đun SIM800x và hoạt động của nó với API Yandex.Locator

Google, thật không may cho nhiều người dùng mô-đun GSM, 2-3 tháng trước đã chặn và chuyển sang cơ sở trả phí API để xác định vị trí dựa trên tọa độ của các tháp di động hiển thị cho mô-đun. Vì lý do này, trên các mô-đun dòng SIM800 được sản xuất Giải pháp không dây SIMCom, chức năng của lệnh AT+CIPGSMLOC đã ngừng hoạt động. Trong bài viết này, tôi sẽ cho bạn biết cách bạn có thể giải quyết vấn đề này bằng cách sử dụng dịch vụ tương tự do Yandex cung cấp - Yandex.Locator.

Hãy bỏ qua cách Yandex nhận tọa độ của các tháp di động, điều chính là chúng ta có thể sử dụng dịch vụ miễn phí này và nhận các dữ liệu sau: Vĩ độ, Kinh độ, Độ cao, cũng như lỗi gần đúng cho từng tham số. Mục đích chính của bài viết là đưa ra một hướng dẫn ngắn về cách chuyển nhanh sang Yandex API, thay vì dịch vụ không còn khả dụng của Google.

Dưới đây là một ví dụ, chúng tôi sẽ chỉ hiển thị vĩ độ và kinh độ của vị trí mô-đun.

Vậy hãy bắt đầu

Trước tiên, bạn cần đọc thỏa thuận người dùng có tại: yandex.ru/legal/locator_api. Cần đặc biệt chú ý đến khoản 3.6. thỏa thuận người dùng này, trong đó nêu rõ rằng Yandex có quyền thay đổi/chỉnh sửa hoặc cập nhật API Yandex.Locator bất cứ lúc nào mà không cần thông báo trước..

Đi đến địa chỉ yandex.ru/dev/locator/keys/get và thêm tài khoản Yandex đã tạo trước đó của bạn vào nhóm phát triển. Các bước này sẽ cho phép bạn lấy chìa khóa để truy cập dịch vụ này.

Dịch vụ định vị GSM của các mô-đun SIM800x và hoạt động của nó với API Yandex.Locator
Viết ra hoặc lưu trữ chìa khóa bạn nhận được.

Sau khi hoàn thành các bước này, bạn sẽ có quyền truy cập vào trang yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage nơi cung cấp thông tin cơ bản về cơ chế hoạt động của dịch vụ Yandex.Locator.

Để tạo yêu cầu XML ở định dạng cURL tới các dịch vụ Yandex.Locator, bạn sẽ cần lấy thông tin về các tháp di động “hiển thị” theo mô-đun:

  • countrycode - mã quốc gia
  • operatorid – mã mạng di động
  • cellid - nhận dạng tế bào
  • lac – mã vị trí

Thông tin này có thể được lấy từ mô-đun bằng cách gửi lệnh 'AT+CNETSCAN'.

Thông tin nhận được từ mô-đun

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>

Điều quan trọng cần lưu ý là sau này bạn sẽ cần chuyển đổi dữ liệu từ phản hồi Cellid và Lac của mô-đun từ hệ thập lục phân sang thập phân.

Bây giờ chúng ta cần tạo dữ liệu XML để liên hệ với máy chủ Yandex, sau đó sẽ được kết hợp thành một phần tử.

bảng dữ liệu

Dữ liệu
Bình luận

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

...
Cái này phải chứa khóa 88 chữ số nhận được từ Yandex

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

Mã quốc gia (MCC)

</countrycode><operatorid>
2

Mã nhà điều hành (MNC)

</operatorid><cellid>
8453

Cellid của tháp đầu tiên trong danh sách nhận được từ mô-đun và được chuyển đổi từ một số có cơ số 16 thành số có cơ số 10 (giá trị nhận được từ mô-đun là 2105)

</cellid><lac>
7838

Lạc của tháp thứ nhất, cũng được chuyển đổi từ số cơ sở 16 sang số cơ sở 10 (giá trị nhận được từ mô-đun là 1E9E)

</lac></cell>
...

Một nhóm được thống nhất bởi thẻ di động có thể được lặp lại nhiều lần nếu cần để tăng độ tin cậy của một vị trí cụ thể

</gsm_cells>
<ip><address_v4>
10.137.92.60

Có thể lấy địa chỉ IP được mạng gán cho mô-đun sau khi mở ngữ cảnh GPRS bằng cách gửi lệnh 'AT+SAPBR=2,1' tới mô-đun - xem bên dưới

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

Điều này sẽ tạo ra một thông báo XML dài 1304 ký tự như sau:

thông điệp

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>

Tin nhắn này được tạo ra trên cơ sở dữ liệu trên các trạm phát sóng di động của nhà mạng Megafon, có thể bổ sung thêm dữ liệu, bao gồm: trên các tháp khác mà mô-đun nhận được có thể nhìn thấy bằng lệnh 'AT+CNETSCAN' để tăng độ tin cậy của tọa độ đã ban hành.

Làm việc với mô-đun và nhận tọa độ hiện tại

Nhật ký AT của công việc với mô-đun

>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

Như vậy, chúng ta đã nhận được tọa độ hiện tại của mô-đun: 60.0330963, 30.2484304.
Khi số lượng dữ liệu được gửi qua tháp di động tăng lên, độ chính xác của việc xác định vị trí sẽ tăng theo tỷ lệ.

Thông tin chi tiết hơn về nội dung phản hồi từ dịch vụ Yandex.Locator và việc lựa chọn dữ liệu bạn cần có thể được đọc tại liên kết: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, trong phần API->XML->Phản hồi

Kết luận

Tôi hy vọng tài liệu này sẽ giúp ích tốt cho các nhà phát triển. Tôi sẵn sàng trả lời câu hỏi của bạn trong phần bình luận.

Nguồn: www.habr.com

Thêm một lời nhận xét