Υπηρεσία τοποθεσίας GSM των μονάδων SIM800x και η εργασία της με το Yandex.Locator API

Υπηρεσία τοποθεσίας GSM των μονάδων SIM800x και η εργασία της με το Yandex.Locator API

Η Google, δυστυχώς για πολλούς χρήστες μονάδων GSM, πριν από 2-3 μήνες απέκλεισε και μετέφερε σε πληρωμένη βάση το API για τον προσδιορισμό της τοποθεσίας με βάση τις συντεταγμένες των πύργων κυψελών που είναι ορατές στη μονάδα. Εξαιτίας αυτού, παράγονται μονάδες της σειράς SIM800 Ασύρματες λύσεις SIMCom, η λειτουργικότητα της εντολής AT+CIPGSMLOC σταμάτησε να λειτουργεί. Σε αυτό το άρθρο θα σας πω πώς μπορείτε να λύσετε αυτό το πρόβλημα χρησιμοποιώντας μια παρόμοια υπηρεσία που παρέχεται από το Yandex - Yandex.Locator.

Ας παραλείψουμε τον τρόπο με τον οποίο το Yandex λαμβάνει τις συντεταγμένες των πύργων κινητής τηλεφωνίας, το κύριο πράγμα είναι ότι μπορούμε να χρησιμοποιήσουμε αυτήν τη δωρεάν υπηρεσία και να λάβουμε τα ακόλουθα δεδομένα: Γεωγραφικό πλάτος, Γεωγραφικό μήκος, Υψόμετρο, καθώς και το κατά προσέγγιση σφάλμα για κάθε παράμετρο. Ο κύριος σκοπός του άρθρου είναι να δώσει ένα σύντομο σεμινάριο σχετικά με τη γρήγορη εναλλαγή στο 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 της μονάδας από δεκαεξαδική σε δεκαδική.

Τώρα πρέπει να δημιουργήσουμε δεδομένα XML για να επικοινωνήσουμε με τον διακομιστή Yandex, τα οποία στη συνέχεια θα συνδυαστούν σε ένα στοιχείο.

πίνακας δεδομένων

Δεδομένα
Σχόλιο

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

Cellid του πρώτου πύργου από τη λίστα που ελήφθη από τη μονάδα και μετατράπηκε από αριθμό με βάση 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->Απόκριση

Συμπέρασμα

Ελπίζω ότι αυτό το υλικό θα είναι μια καλή βοήθεια στους προγραμματιστές. Είμαι έτοιμος να απαντήσω στις ερωτήσεις σας στα σχόλια.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο