基于traccar快捷搭建gps轨迹应用

0. 环境

- win10 +虚拟机ubuntu18
- i5 ubuntu22笔记本
- USB-GPS模块一台,比如华大北斗TAU1312-232板
- 双笔记本组网设备:路由器,使得win10笔记本ip:192.168.123.x,而i5笔记本IP是192.168.123.215。
- 安卓 手机

1. 搭建traccar服务

1.0 环境


ubuntu22 + i5笔记本

1.1 安装docker

$ sudo apt remove docker docker-engine docker && \
sudo apt update && \
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common && \
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - && \
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
$ sudo systemctl status docker
$ sudo systemctl restart docker
$ sudo docker run hello-world

1.2 跟着教程安装docker traccar


1.2.1 Create work directories:

mkdir -p /opt/traccar/logs

1.2.2 Get default traccar.xml:

docker run \
--rm \
--entrypoint cat \
traccar/traccar:latest \
/opt/traccar/conf/traccar.xml > /opt/traccar/traccar.xml

1.2.3 Create container:

docker run \
--name traccar \
--hostname traccar \
--detach --restart unless-stopped \
--publish 80:8082 \
--publish 5000-5150:5000-5150 \
--publish 5000-5150:5000-5150/udp \
--volume /opt/traccar/logs:/opt/traccar/logs:rw \
--volume /opt/traccar/traccar.xml:/opt/traccar/conf/traccar.xml:ro \
traccar/traccar:latest

2. 手机测试效果


安卓手机安装traccar client 。
手机浏览器打开https://www.traccar.org/client/,下载apk后安装。服务器地址改为搭建了traccar服务的i5笔记本ip,默认端口是5055。

电脑登录traccar服务器的web,添加手机设备编码到账户下。

设置完毕后,可以看到手机在线。注意手机和服务器在同一个路由器下。 

3. win10笔记本作为客户端


3.0 环境


ubuntu18虚拟机 + gps机

3.1 验证gps


minicom -s 配置ttyUSB0,波特率115200
有数据再进行下一步。

注意:如果没有收到 GPS 数据,可能是权限问题导致的。执行下面命令将当前用户(非 root 用户)添加到 dialout 用户组,然后重启系统后再次尝试。
 

sudo usermod -a -G dialout $USER
reboot


 
3.2 apt直接安装gpsd

sudo apt install gpsd gpsd-clients


 
以 systemd 方式启动 gpsd 服务

sudo systemctl start gpsd

以 systemd 方式停止 gpsd 服务,原因是gpsd默认的配置不正常,不是ttyUSB0

sudo systemctl stop gpsd.socket

查看 gpsd 服务状态

sudo systemctl status gpsd

启动一个新的gpsd实例,该实例将正确的串行端口的数据重定向到套接字:

sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock

启动 cgps 客户端观测数据:

cgps

启动 gpsmon 客户端观测数据:

gpsmon

3.3 获取gpsd-traccar脚本

https://gist.github.com/linuxsocist/55e10998e88f61af9e6ec12c12bbb04e

这是gpsd-traccar.sh内容:

#!/bin/bash

ADDR="192.168.123.215" # Replace with your traccar server address
PORT="5055" # Replace this with the port of your traccar server
ID="1234" # Replace this with your chosen traccar id
UPDATE="5" # Update interval

while [ true ]
do
  { echo "?WATCH={"enable":true}"; sleep 1; echo "?POLL;"; sleep 1; } | telnet 127.0.0.1 2947 2> /dev/null 1> gpsgrab-dump
  
  MODE=$( cat gpsgrab-dump | tail -n 1 | jq -r '.tpv[0] | {mode}'  | awk '{print $2}' | head -n 2 | tail -n 1)
  TIME=$( cat gpsgrab-dump | tail -n 1 | jq -r '.tpv[0] | {time}'  | awk '{print $2}' | head -n 2 | tail -n 1 | cut -c2-25)
  LAT=$(  cat gpsgrab-dump | tail -n 1 | jq -r '.tpv[0] | {lat}'   | awk '{print $2}' | head -n 2 | tail -n 1)
  LON=$(  cat gpsgrab-dump | tail -n 1 | jq -r '.tpv[0] | {lon}'   | awk '{print $2}' | head -n 2 | tail -n 1)
  ALT=$(  cat gpsgrab-dump | tail -n 1 | jq -r '.tpv[0] | {alt}'   | awk '{print $2}' | head -n 2 | tail -n 1)
  SPEED=$(cat gpsgrab-dump | tail -n 1 | jq -r '.tpv[0] | {speed}' | awk '{print $2}' | head -n 2 | tail -n 1)
  HDOP=$( cat gpsgrab-dump | tail -n 1 | jq -r '.sky[0] | {hdop}'  | awk '{print $2}' | head -n 2 | tail -n 1)
  
  DATA="http://"$ADDR":"$PORT"/?id="$ID"&lat={"$LAT"}&lon={"$LON"}&timestamp={"$TIME"}&hdop={"$HDOP"}&altitude={"$ALT"}&speed={"$SPEED"}"
  curl "$DATA" 2> /dev/null
  sleep $UPDATE
done

3.4 运行测试


把IP修改为192.168.123.215为部署了traccar的电脑ip.

运行测试

sudo apt install jd
chmod +x gpsd-traccar.sh
./gpsd-traccar.sh

登录web,看到位置。

traccar带有报表功能,可以查看客户到过的轨迹、地区。

不过docker里面的数据库,如果未经过额外的设置,退出docker后,数据库数据会被清空。

4. 感想

这个服务是占用的端口比较多,昨晚1C2G的服务器也不够我部署用,实际部署占用了i5笔记本2.5G内存。这个应用比较惊艳,用了几个短视频APP都会获取用户的位置数据信息。真的后背有点凉。


参考:

如何在Raspberry Pi 4中使用GPS接收器模块,https://www.yiboard.com/thread-1381-1-1.html
Install Traccar on DigitalOcean VPS,https://www.traccar.org/install-digitalocean/
Traccar 记录你的足迹,https://zhuanlan.zhihu.com/p/98380567
[进阶教程] traccar从零开始到完美使用完全教程,https://bbs.hassbian.com/thread-7568-1-1.html
traccar从零开始到完美使用完全教程,https://bbs.iobroker.cn/t/topic/772


 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要使用Spring Boot对接Traccar,可以使用Traccar的Java API,这个API可以与Traccar服务器进行通信,收发数据。以下是简单的对接示例: 1. 首先在Spring Boot项目的pom.xml文件中添加Traccar的Java API依赖: ```xml <dependency> <groupId>org.traccar</groupId> <artifactId>traccar-client</artifactId> <version>4.8</version> </dependency> ``` 2. 创建一个Traccar客户端类,用于与Traccar进行通信: ```java import org.traccar.client.Client; import org.traccar.client.ClientFactory; import org.traccar.client.protocol.CommandResult; import org.traccar.client.protocol.DeviceState; import org.traccar.client.protocol.GpsData; public class TraccarClient { private final Client client; public TraccarClient(String serverUrl) { ClientFactory factory = new ClientFactory(); client = factory.createClient(); client.setServerUrl(serverUrl); } public void start() { client.start(); } public void stop() { client.stop(); } public boolean sendCommand(long deviceId, String command) { CommandResult result = client.sendCommand(deviceId, command); return result != null && result.isSuccess(); } public DeviceState getDeviceState(long deviceId) { return client.getDeviceState(deviceId); } public GpsData getLatestPosition(long deviceId) { return client.getLatestPosition(deviceId); } } ``` 3. 在Spring Boot项目中使用Traccar客户端类: ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyApp { @Value("${traccar.server.url}") private String serverUrl; public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } @Bean(initMethod = "start", destroyMethod = "stop") public TraccarClient traccarClient() { return new TraccarClient(serverUrl); } // 使用Traccar客户端 @Autowired private TraccarClient traccarClient; public void doSomething() { // 发送命令 traccarClient.sendCommand(123, "engineOn"); // 获取设备状态 DeviceState state = traccarClient.getDeviceState(123); // 获取最新位置 GpsData gpsData = traccarClient.getLatestPosition(123); } } ``` 在这个示例中,Traccar客户端类被注入到Spring Boot应用中,然后就可以在应用中使用它与Traccar服务器进行通信了。需要注意的是,示例中的Traccar客户端类只是一个简单的示例,如果需要更复杂的功能,可以参考Traccar的Java API文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值