Service de localisation GSM des modules SIM800x et son travail avec l'API Yandex.Locator

Service de localisation GSM des modules SIM800x et son travail avec l'API Yandex.Locator

Google, malheureusement pour de nombreux utilisateurs de modules GSM, a bloqué et transféré il y a 2-3 mois sur une base payante l'API permettant de déterminer l'emplacement en fonction des coordonnées des tours de téléphonie cellulaire visibles par le module. Pour cette raison, sur les modules de la série SIM800 produits Solutions sans fil SIMCom, la fonctionnalité de la commande AT+CIPGSMLOC a cessé de fonctionner. Dans cet article, je vais vous expliquer comment résoudre ce problème en utilisant un service similaire fourni par Yandex - Yandex.Localisateur.

Passons comment Yandex reçoit les coordonnées des tours de téléphonie cellulaire, l'essentiel est que nous puissions utiliser ce service gratuit et obtenir les données suivantes : Latitude, Longitude, Altitude, ainsi que l'erreur approximative pour chaque paramètre. L'objectif principal de l'article est de donner un court didacticiel sur la façon de passer rapidement à l'API Yandex, au lieu du service de Google qui n'est plus disponible.

Ci-dessous, à titre d'exemple, nous afficherons uniquement la latitude et la longitude de l'emplacement du module.

Alors, commençons

Vous devez d’abord lire les conditions d’utilisation situées à l’adresse : yandex.ru/legal/locator_api. Une attention particulière doit être accordée à la clause 3.6. cet accord d'utilisation, qui stipule que Yandex se réserve le droit de modifier/corriger ou mettre à jour l'API Yandex.Locator à tout moment, sans préavis..

Aller à l'adresse yandex.ru/dev/locator/keys/get et ajoutez votre compte Yandex précédemment créé au groupe de développement. Ces étapes vous permettront d'obtenir une clé pour accéder à ce service.

Service de localisation GSM des modules SIM800x et son travail avec l'API Yandex.Locator
Notez ou conservez autrement la clé que vous recevez.

Après avoir complété ces étapes, vous aurez accès à la page yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage où des informations de base sur le mécanisme de fonctionnement du service Yandex.Locator sont fournies.

Pour générer une requête XML au format cURL vers les services Yandex.Locator, vous devrez obtenir des informations sur les tours de téléphonie cellulaire « visibles » par le module :

  • code pays – code pays
  • identifiant de l'opérateur – code du réseau mobile
  • cellid – identifiant de cellule
  • lac – code de localisation

Ces informations peuvent être obtenues du module en envoyant la commande 'AT+CNETSCAN'.

Informations reçues du module

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>

Il est important de noter que vous devrez ultérieurement convertir les données de la réponse Cellid et Lac du module de l'hexadécimal en décimal.

Nous devons maintenant générer des données XML pour contacter le serveur Yandex, qui seront ensuite combinées en un seul élément.

tableau de données

Données
commentaire

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

...
Celui-ci devrait contenir la clé à 88 chiffres reçue de Yandex

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

Indicatif de pays (MCC)

</countrycode><operatorid>
2

Code opérateur (MNC)

</operatorid><cellid>
8453

Cellid de la première tour de la liste reçue du module et convertie d'un nombre de base 16 en un nombre de base 10 (la valeur reçue du module est 2105)

</cellid><lac>
7838

Lac de la première tour, également converti d'un nombre en base 16 en un nombre en base 10 (la valeur reçue du module est 1E9E)

</lac></cell>
...

Un groupe uni par la balise de cellule peut être répété autant de fois que nécessaire pour augmenter la fiabilité d'un emplacement spécifique

</gsm_cells>
<ip><address_v4>
10.137.92.60

L'adresse IP attribuée au module par le réseau après ouverture du contexte GPRS peut être obtenue en envoyant la commande 'AT+SAPBR=2,1' au module - voir ci-dessous

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

Cela générera un message XML de 1304 caractères comme suit :

Post

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>

Ce message est généré sur la base des données sur les tours cellulaires de l'opérateur Megafon, il peut être complété par des données, notamment : sur d'autres tours visibles par le module reçu à l'aide de la commande 'AT+CNETSCAN' pour augmenter la fiabilité des coordonnées émises.

Travailler avec le module et obtenir les coordonnées actuelles

AT-log de travail avec le module

>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

Ainsi, nous avons reçu les coordonnées actuelles du module : 60.0330963, 30.2484304.
À mesure que le nombre de données envoyées via les tours de téléphonie cellulaire augmente, la précision de la détermination de la localisation augmentera proportionnellement.

Des informations plus détaillées sur le contenu de la réponse du service Yandex.Locator et la sélection des données dont vous avez besoin peuvent être lues sur le lien : yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, dans la section API->XML->Réponse

Conclusion

J'espère que ce matériel sera d'une grande aide aux développeurs. Je suis prêt à répondre à vos questions dans les commentaires.

Source: habr.com

Ajouter un commentaire