Servizio di localizzazione GSM dei moduli SIM800x e suo funzionamento con l'API Yandex.Locator

Servizio di localizzazione GSM dei moduli SIM800x e suo funzionamento con l'API Yandex.Locator

Google, sfortunatamente per molti utenti di moduli GSM, 2-3 mesi fa ha bloccato e trasferito a pagamento l'API per determinare la posizione in base alle coordinate delle torri cellulari visibili al modulo. Per questo motivo, vengono prodotti i moduli della serie SIM800 Soluzioni wireless SIMCom, la funzionalità del comando AT+CIPGSMLOC ha smesso di funzionare. In questo articolo ti dirò come risolvere questo problema utilizzando un servizio simile fornito da Yandex - Yandex.Locator.

Tralasciamo il modo in cui Yandex riceve le coordinate delle torri cellulari, l'importante è che possiamo utilizzare questo servizio gratuito e ottenere i seguenti dati: latitudine, longitudine, altitudine, nonché l'errore approssimativo per ciascun parametro. Lo scopo principale dell'articolo è fornire un breve tutorial su come passare rapidamente all'API Yandex, invece del servizio non più disponibile di Google.

Di seguito, a titolo di esempio, mostreremo solo la latitudine e la longitudine della posizione del modulo.

Quindi iniziamo

Per prima cosa devi leggere il contratto d'uso che si trova all'indirizzo: yandex.ru/legal/locator_api. Particolare attenzione dovrebbe essere prestata alla clausola 3.6. questo accordo con l'utente, che afferma che Yandex si riserva il diritto di modificare/correggere o aggiornare l'API Yandex.Locator in qualsiasi momento, senza preavviso..

Vai all'indirizzo yandex.ru/dev/locator/keys/get e aggiungi il tuo account Yandex creato in precedenza al gruppo di sviluppo. Questi passaggi ti permetteranno di ottenere una chiave per accedere a questo servizio.

Servizio di localizzazione GSM dei moduli SIM800x e suo funzionamento con l'API Yandex.Locator
Annota o conserva in altro modo la chiave che ricevi.

Dopo aver completato questi passaggi, avrai accesso alla pagina yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage dove vengono fornite informazioni di base sul meccanismo di funzionamento del servizio Yandex.Locator.

Per generare una richiesta XML in formato cURL ai servizi Yandex.Locator, dovrai ottenere informazioni sulle torri cellulari “visibili” dal modulo:

  • codice paese – codice paese
  • operatorid – codice di rete mobile
  • cellid – identificatore di cella
  • lac – codice di posizione

Questa informazione può essere ottenuta dal modulo inviando il comando 'AT+CNETSCAN'.

Informazioni ricevute dal modulo

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>

È importante notare che in seguito sarà necessario convertire i dati dalla risposta Cellid e Lac del modulo da esadecimale a decimale.

Ora dobbiamo generare dati XML per contattare il server Yandex, che verranno successivamente combinati in un unico elemento.

tabella dati

Dati
commento

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

...
Questo dovrebbe contenere la chiave di 88 cifre ricevuta da Yandex

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

Codice paese (MCC)

</countrycode><operatorid>
2

Codice operatore (MNC)

</operatorid><cellid>
8453

Cellid della prima torre dalla lista ricevuta dal modulo e convertita da un numero in base 16 ad un numero in base 10 (il valore ricevuto dal modulo è 2105)

</cellid><lac>
7838

Lac della prima torre, anch'esso convertito da numero in base 16 a numero in base 10 (il valore ricevuto dal modulo è 1E9E)

</lac></cell>
...

Un gruppo unito dal tag cella può essere ripetuto tante volte quanto necessario per aumentare l'affidabilità di una posizione specifica

</gsm_cells>
<ip><address_v4>
10.137.92.60

L'indirizzo IP assegnato al modulo dalla rete dopo l'apertura del contesto GPRS può essere ottenuto inviando il comando 'AT+SAPBR=2,1' al modulo - vedere sotto

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

Questo genererà un messaggio XML di 1304 caratteri lungo come segue:

Messaggio

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>

Questo messaggio viene generato sulla base dei dati sulle torri cellulari dell'operatore Megafon, può essere integrato con dati, tra cui: su altre torri visibili al modulo ricevuto utilizzando il comando 'AT+CNETSCAN' per aumentare l'affidabilità delle coordinate emesse.

Lavorare con il modulo e ottenere le coordinate attuali

Registro AT del lavoro con il modulo

>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

Pertanto, abbiamo ricevuto le coordinate attuali del modulo: 60.0330963, 30.2484304.
Con l’aumento del numero di dati inviati tramite ripetitori cellulari, la precisione nella determinazione della posizione aumenterà proporzionalmente.

Informazioni più dettagliate sul contenuto della risposta del servizio Yandex.Locator e sulla selezione dei dati necessari possono essere lette al collegamento: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, nella sezione API->XML->Risposta

conclusione

Spero che questo materiale possa essere di grande aiuto per gli sviluppatori. Sono pronto a rispondere alle tue domande nei commenti.

Fonte: habr.com

Aggiungi un commento