デバイス (スマートフォン、GPS トラッカー) から GPS 位置を収集し、SQLite データベースに保存し、地図 (OSM または Google) 上に表示できるようにします。
js/GM_utils/
) docker
サーバーにコピーします (たとえば、 gps-server
に名前を変更します)。webapp
(および必要に応じてtcp_udp_http_bridge
) をgps-server
ディレクトリにコピーします。auth/.htpasswd
には、パスワードchangeme
を持つ単一のユーザーadmin
含まれていますadmin/.htaccess
で調整する必要があります。絶対パスは必須です!htpasswd /path-to-htpasswd-file/.htpasswd myusername mypassword
またはオンライン ジェネレーターhttps://www.j-berkemeier.de/GPXViewer/
から JavaScript GPXViewer を取得し、フォルダー GM_Utils をgpstracker/js/
にコピーします。google maps api key application
を検索./js/GM_Utils/GPX2GM_Defs.js
を編集し、 JB.GPX2GM.GM_Api_key
を含む行のコメントを解除し、値として API キーを追加します。1 * * * * /usr/bin/wget -O /dev/null -o /dev/null https://servername/gpstracker?checkserver=SECRETKEY >/dev/null 2>&1
owntracks/<username>
例: owntracks/gps
mqtt-bridge
で利用できます。docker-compose.yml
ファイルをセットアップに合わせて調整するか、対応する環境変数 (サーバー、パスワード、シークレットなど) を設定します。docker-compose build
docker-compose up -d
sudo docker exec gps-mqtt sh -c "mosquitto_passwd -b mosquitto/config/password.txt <username> <password>"
devices.config
./exe/ ディレクトリにコピーします。これには、さまざまな形式の正規表現が含まれます (OpenGTS、TK103 など)。devices.config
に追加します。html/gpxviewer_html.template
の HTML テンプレートにオプションのパラメータ (上記の Web ページにリストされている) を追加することで制御できます。js/GM_utils/GPX2GM_Defs.js
に入力する必要があります。 GO コードはポートを開き、TCP および UDP 経由の接続を受け入れます。サーバーはパケットをダイジェストするだけで、(通常は)応答しません。受信したデータは、既知のデバイス形式 (./exe/devices.config) の正規表現によって照合されます。一致が見つかり、デバイス ID がわかっている場合、GPS データは PHP コードで予期される形式に変換され、HTTP 接続経由でサーバー (例: localhost/gpstracker/index.php) に渡されます。 GPS 位置はデータベースに保存されます。サーバーに渡すパラメータ:
-port <portnumber>
-httpserver <server name - e.g. localhost>
-urlpath <path on server>
-key <secret key in order to check the status of the server - used by PHP>
-verbose - print raw messages, which allows to determine the format send by the device
呼び出しの例
nohup tcp_udp_http_bridge -port 20202 -httpserver localhost -urlpath /gpstracker/index.php -key 123456
tcp/udp サーバーは、AES 暗号化パケットを処理できます。これには、 ./exe/encrypt_psk.config
にサーバー全体の PSK が必要です。現在、これは私のプライベートバージョンの Android 用 GPS ロガーにのみ実装されています。
ほとんどのデバイスは、NMEA GPRMC レコードとしてデータを提供します (https://de.wikipedia.org/wiki/NMEA_0183 を参照)
$GPRMC,162614,A,5230.5900,N,01322.3900,E,10.0,90.0,131006,1.2,E,A*13
identifier, time, Active/Void, latitude, N/S, longitude, E/W, speed, angle, date, magnetic deviation, E/W, signal integrity, check sum
緯度と経度は度および分 (ddmm.mmmm) で指定され、サーバーによって度で保存されます。ノット単位で指定され、サーバーによって m/秒単位で保存される速度。
多くの場合、デバイス タイプ、デバイスが識別されるための追加の識別子とともに、縮小された GPRMC レコード (磁気偏差なし) が使用されます。識別されるのは多くの場合、デバイスの IMEI 番号です。 GPRMCでは高度や精度が不足しているため、追加する場合もあります。チェックサムは、$ と * の間のすべての文字 (ASCII コード) の XOR によって計算されます。
HTTP形式
https://my-server.com?time=UTC&lat=LATITUDE&lon=LONGITUDE&alt=ALTITUDE&acc=ACCURACY&id=DEVICEID (lat and lon given in degree 0-180 and 0-360, respectively) or
https://my-server.com?id=DEVICEID&gprmc=<GPRMC-RECORD> or
TCP/UDP形式
Android用GPSロガー(OpenGTS形式)
uabcde/Y0xXyY/$GPRMC,180725,A,5637.37477,N,1211.26495,E,0.000000,0.000000,021017,,*20
username/deviceid/GPRMC-RECORD
高度を追加した Android 用 GPS ロガー
uabcde/Y0xXyY/$GPRMC,180725,A,5637.37477,N,1211.26495,E,0.000000,0.000000,021017,,*20,alt=100.5
商用デバイス (TCP/UDP)
さまざまな形式が存在します。通常、2 ~ 3 文字の短いヘッダーの後に、デバイスの IMEI/デバイス識別番号、2 文字のステータス、およびほぼ完全な GPRMC レコード ($GPRMC ヘッダーなし) が続きます。いくつかのステータスビットが最後に追加される場合があります。ほとんどのデバイスは、さらに、異なる形式のハートビート メッセージを送信します。一部のデバイスでは、通信を開始するためにログインが必要です。このプロトコルはサーバーとデバイスの構成に含まれていますが、現在テストされていません。現在、devices.config には TK103B H02 デバイスのみが含まれています。
UDP 経由の GPS 位置メッセージの例
*HQ,7893267561,V1,050316,A,2212.8745,N,11346.6574,E,14.28,028,220902,FFFFFFFF#
HQ はメーカー ID で、その後に識別番号とメッセージ タイプ「V1」が続きます。 GPRMC レコードには、$GPRMC ヘッダー、磁気偏差、チェックサムがありません。メッセージの最後にステータス情報が表示されます。