从设备(智能手机、GPS 跟踪器)收集 GPS 位置,存储在 SQLite 数据库中并允许显示在地图上(OSM 或 Google)。
js/GM_utils/
) docker
复制到您的服务器(例如重命名为gps-server
)webapp
(如果需要的话tcp_udp_http_bridge
)复制到gps-server
目录中auth/.htpasswd
中包含一个用户admin
,其密码为changeme
admin/.htaccess
中调整 .htpasswd 文件的路径。需要绝对路径!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
下提供了桥接代码,用于从 MQTT 服务器提取数据并将其发送到简单 GPS 数据服务器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 模板中来控制外观和行为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) 为单位给出,由服务器以度为单位存储。速度以节为单位,由服务器以米/秒为单位存储。
通常使用简化的 GPRMC 记录(无磁偏差),并带有设备类型、已识别设备的附加标识符。所识别的通常是设备的 IMEI 号码。由于 GPRMC 缺乏高度和精度/准确度,有时会添加这些。校验和是通过 $ 和 * 之间的所有字符(ASCII 代码)进行异或计算得出的
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 标头、磁偏差和校验和。在消息的末尾,给出了状态信息。