GSM-Ortungsdienst für SIM800x-Module und dessen Betrieb mit der Yandex.Locator-API

GSM-Ortungsdienst für SIM800x-Module und dessen Betrieb mit der Yandex.Locator-API

Unglücklicherweise für viele Nutzer von GSM-Modulen hat Google vor zwei bis drei Monaten die API zur Standortbestimmung anhand der Koordinaten der für das Modul sichtbaren Mobilfunkmasten blockiert und auf eine kostenpflichtige Basis umgestellt. Aus diesem Grund werden auf der SIM2-Serie Module produziert SIMCom Wireless-Lösungen, funktionierte die Funktionalität des Befehls AT+CIPGSMLOC nicht mehr. In diesem Artikel erzähle ich Ihnen, wie Sie dieses Problem lösen können, indem Sie einen ähnlichen Dienst von Yandex nutzen – Yandex.Locator.

Lassen Sie uns überspringen, wie Yandex die Koordinaten von Mobilfunkmasten erhält. Hauptsache, wir können diesen kostenlosen Dienst nutzen und die folgenden Daten erhalten: Breitengrad, Längengrad, Höhe sowie den ungefähren Fehler für jeden Parameter. Der Hauptzweck des Artikels besteht darin, ein kurzes Tutorial für den schnellen Wechsel zur Yandex-API anstelle des nicht mehr verfügbaren Dienstes von Google zu geben.

Im Folgenden zeigen wir beispielhaft nur den Breiten- und Längengrad des Modulstandorts.

Also lasst uns anfangen

Zuerst müssen Sie die Benutzervereinbarung lesen, die sich unter folgender Adresse befindet: yandex.ru/legal/locator_api. Besonderes Augenmerk sollte auf Abschnitt 3.6 gelegt werden. diese Benutzervereinbarung, in der dies festgelegt ist Yandex behält sich das Recht vor, die Yandex.Locator-API jederzeit und ohne vorherige Ankündigung zu ändern/zu korrigieren oder zu aktualisieren..

Zur Adresse gehen yandex.ru/dev/locator/keys/get und fügen Sie Ihr zuvor erstelltes Yandex-Konto zur Entwicklungsgruppe hinzu. Mit diesen Schritten erhalten Sie einen Schlüssel für den Zugriff auf diesen Dienst.

GSM-Ortungsdienst für SIM800x-Module und dessen Betrieb mit der Yandex.Locator-API
Notieren Sie sich den Schlüssel, den Sie erhalten, oder bewahren Sie ihn anderweitig auf.

Nachdem Sie diese Schritte ausgeführt haben, haben Sie Zugriff auf die Seite yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage Hier werden grundlegende Informationen zum Funktionsmechanismus des Yandex.Locator-Dienstes bereitgestellt.

Um eine XML-Anfrage im cURL-Format an Yandex.Locator-Dienste zu generieren, müssen Sie Informationen über Mobilfunkmasten erhalten, die für das Modul „sichtbar“ sind:

  • Ländercode – Ländercode
  • Betreiber-ID – Mobilfunknetzcode
  • cellid – Zellkennung
  • lac – Standortcode

Diese Informationen können vom Modul durch Senden des Befehls „AT+CNETSCAN“ abgerufen werden.

Vom Modul empfangene Informationen

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>

Es ist wichtig zu beachten, dass Sie später die Daten aus der Cellid- und Lac-Antwort des Moduls von hexadezimal in dezimal konvertieren müssen.

Jetzt müssen wir XML-Daten generieren, um den Yandex-Server zu kontaktieren, die anschließend zu einem Element zusammengefasst werden.

Datentabelle

Daten
Kommentar

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

...
Dieser sollte den von Yandex erhaltenen 88-stelligen Schlüssel enthalten

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

Ländercode (MCC)

</countrycode><operatorid>
2

Betreibercode (MNC)

</operatorid><cellid>
8453

Zellen-ID des ersten Turms aus der Liste, die vom Modul empfangen und von einer Zahl mit der Basis 16 in eine Zahl mit der Basis 10 umgewandelt wurde (der vom Modul empfangene Wert ist 2105)

</cellid><lac>
7838

Lac des ersten Turms, ebenfalls von einer Zahl zur Basis 16 in eine Zahl zur Basis 10 umgewandelt (der vom Modul empfangene Wert ist 1E9E)

</lac></cell>
...

Eine durch das Zell-Tag verbundene Gruppe kann beliebig oft wiederholt werden, um die Zuverlässigkeit eines bestimmten Standorts zu erhöhen

</gsm_cells>
<ip><address_v4>
10.137.92.60

Die dem Modul nach dem Öffnen des GPRS-Kontexts vom Netzwerk zugewiesene IP-Adresse kann durch Senden des Befehls „AT+SAPBR=2,1“ an das Modul ermittelt werden – siehe unten

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

Dadurch wird eine XML-Nachricht mit 1304 Zeichen wie folgt generiert:

Nachricht

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>

Diese Nachricht wird auf der Grundlage von Daten zu Mobilfunkmasten des Megafon-Betreibers erstellt und kann durch Daten ergänzt werden, darunter: für andere modulsichtbare Türme, die mit dem Befehl „AT+CNETSCAN“ empfangen wurden, um die Zuverlässigkeit der ausgegebenen Koordinaten zu erhöhen.

Mit dem Modul arbeiten und aktuelle Koordinaten abrufen

AT-Protokoll der Arbeit mit dem Modul

>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

Somit haben wir die aktuellen Koordinaten des Moduls erhalten: 60.0330963, 30.2484304.
Da die Anzahl der über Mobilfunkmasten gesendeten Daten zunimmt, steigt proportional auch die Genauigkeit der Standortbestimmung.

Nähere Informationen zum Inhalt der Antwort des Yandex.Locator-Dienstes und zur Auswahl der benötigten Daten finden Sie unter folgendem Link: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage, im Abschnitt API->XML->Response

Abschluss

Ich hoffe, dass dieses Material den Entwicklern eine gute Hilfe sein wird. Ich bin bereit, Ihre Fragen in den Kommentaren zu beantworten.

Source: habr.com

Kommentar hinzufügen