Skip to content

Commit

Permalink
feat: 添加位置附加信息
Browse files Browse the repository at this point in the history
  • Loading branch information
cuteLittleDevil committed Oct 16, 2024
1 parent 73aff1f commit 45ec06c
Show file tree
Hide file tree
Showing 6 changed files with 203 additions and 78 deletions.
14 changes: 8 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# go-jt808

- 本项目已更好支持二次开发为目标 可通过各种自定义事件去完成相应功能 常见案例如下
1. 存储经纬度 [详情点击](./example/simulator/server/main.go)
1. 存储经纬度 [代码参考](./example/simulator/server/main.go)
``` txt
jt808服务端 模拟器 消息队列 数据库都运行在2核4G腾讯云服务器
测试每秒保存5000条的情况 约5.5小时保存了近1亿的经纬度
```
2. 协议解析 [详情点击](./example/simulator/protocol/main.go)
2. 协议解析 [代码参考](./example/protocol/main.go)
``` txt
使用自定义模拟器 可以轻松生成测试用的报文
生成的报文 可解析成详情描述
Expand Down Expand Up @@ -71,9 +71,11 @@ func main() {
### 连接数测试
[详情点击](./example/simulator/README.md#online)

| 服务端版本 | 客户端 | 并发数 | 服务器配置 | jt808服务使用资源情况 |
| :---: | :-------: | :--: | :------: | :-------------- |
| v0.3.0 | 10w+ go模拟器 | 10w+ | 10核32G | 20%cpu 1.4G内存 |
- 2台云服务器各开5w+客户端 总计10w+

| 服务端版本 | 场景 | 并发数 | 服务器配置 | 服务器使用资源情况 | 描述 |
| :---: | :-------: | :--: | :------: | :-------------- | :----------------------------: |
| v0.3.0 | 连接数测试 | 10w+ | 2核4G | 120%+cpu 1.7G内存 | 10.0.16.5上开启服务端和模拟器 <br/> 10.0.16.14机器上开启模拟器 |

<h3 id="save"> 模拟经纬度存储测试 </h3>

Expand Down Expand Up @@ -105,7 +107,7 @@ func main() {
fmt.Println(fmt.Sprintf("模拟器生成的[%x]", data))

jtMsg := jt808.NewJTMessage()
_ = jtMsg.Decode(data) // 解析固体请求头
_ = jtMsg.Decode(data) // 解析固定请求头

var t0x0100 model.T0x0100 // 把body数据解析到结构体中
_ = t0x0100.Parse(jtMsg)
Expand Down
18 changes: 11 additions & 7 deletions example/simulator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ ulimit -n 1100000
ulimit -u 26600
# 调整可用端口数量
sysctl -w net.inet.ip.portrange.first=5000

```

linux系统的 永久修改
Expand All @@ -39,27 +38,32 @@ sysctl -a
---
<h2 id="online"> 1. 连接数测试 </h2>

- 模拟器请求为1次注册 1次鉴权 循环发送心跳(10秒间隔)
- 目前mac笔记本无线情况只能模拟2个IP 只能测试到10w+
- 模拟器请求为1次注册 1次鉴权 循环发送心跳(20秒间隔)
- 使用2台云服务器[2核4G] 因为一个ip有效端口是65535个 测试10w+需要2个ip

### 1.1 操作
服务端
``` shell
cd ../quick_start && go build
./start
nohup ./start >./start.log &
```

模拟器
``` shell
cd ./client && go build
./client -ip=192.168.1.10 -addr=127.0.0.1:8080 -max=55000
./client -ip=192.168.1.11 -addr=127.0.0.1:8080 -max=55000
# A服务器的模拟器
nohup ./client -ip=127.0.0.1 -max=50005 -blc=0 -lc=0 >./test1.log &
# B服务器的模拟器
nohup ./client -ip=10.0.16.14 -addr=10.0.16.5:8080 -max=50005 -blc=0 -lc=0 >./test2.log &
```

### 1.2 测试结果
| 服务端版本 | 场景 | 并发数 | 服务器配置 | 服务器使用资源情况 | 描述 |
| :---: | :-------: | :--: | :------: | :-------------- | :----------------------------: |
| v0.3.0 | 连接数测试 | 10w+ | 10核32G | 20%cpu 1.4G内存 | 客户端和服务端都运行在本地mac笔记本 |
| v0.3.0 | 连接数测试 | 10w+ | 2核4G | 120%+cpu 1.7G内存 | 10.0.16.5上开启服务端和模拟器 <br/> 10.0.16.14机器上开启模拟器 |

在本机启动的 腾讯云统计*2 显示150017 实际100012
![腾讯云监控情况](./testdata/tx.png)

<h2 id="save"> 2. 模拟经纬度存储测试 </h2>

Expand Down
Binary file added example/simulator/testdata/tx.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 0 additions & 10 deletions shared/consts/event.go

This file was deleted.

166 changes: 111 additions & 55 deletions shared/consts/jt808_command.go
Original file line number Diff line number Diff line change
@@ -1,64 +1,120 @@
package consts

// JT808CommandType jt808协议的指令
type JT808CommandType uint16

const (
T0001GeneralRespond JT808CommandType = 0x0001 // 终端-通用应答
T0002HeartBeat JT808CommandType = 0x0002 // 终端-心跳
T0100Register JT808CommandType = 0x0100 // 终端-注册
T0102RegisterAuth JT808CommandType = 0x0102 // 终端-注册鉴权
T0104QueryParameter JT808CommandType = 0x0104 // 终端-查询参数
T0107QueryAttribute JT808CommandType = 0x0107 // 终端-查询属性
T0108UpgradeNotice JT808CommandType = 0x0108 // 终端-升级通知
T0200LocationReport JT808CommandType = 0x0200 // 终端-位置上报 经纬度坐标是WGS84
T0201QueryLocation JT808CommandType = 0x0201 // 终端-查询位置
T0301EventReport JT808CommandType = 0x0301 // 终端-事件上报
T0302QuestionAnswer JT808CommandType = 0x0302 // 终端-提问应答
T0303MessagePlayCancel JT808CommandType = 0x0303 // 终端-消息点播取消
T0608QueryRegionRespond JT808CommandType = 0x0608 // 终端-查询区域应答
T0700DrivingRecordUpload JT808CommandType = 0x0700 // 终端-行驶记录上传
T0702DriverInfoCollectReport JT808CommandType = 0x0702 // 终端-驾驶员信息采集上报
T0704LocationBatchUpload JT808CommandType = 0x0704 // 终端-位置批量上传
T0800MultimediaEventInfoUpload JT808CommandType = 0x0800 // 终端-多媒体事件信息上传
T0801MultimediaDataUpload JT808CommandType = 0x0801 // 终端-多媒体数据上传
T0805CameraShootImmediately JT808CommandType = 0x0805 // 终端-摄像头立即拍照
T0900DataUpTransparentTransmission JT808CommandType = 0x0900 // 终端-数据上行透传
// T0001GeneralRespond 终端-通用应答
T0001GeneralRespond JT808CommandType = 0x0001
// T0002HeartBeat 终端-心跳
T0002HeartBeat JT808CommandType = 0x0002
// T0100Register 终端-注册
T0100Register JT808CommandType = 0x0100
// T0102RegisterAuth 终端-注册鉴权
T0102RegisterAuth JT808CommandType = 0x0102
// T0104QueryParameter 终端-查询参数
T0104QueryParameter JT808CommandType = 0x0104
// T0107QueryAttribute 终端-查询属性
T0107QueryAttribute JT808CommandType = 0x0107
// T0108UpgradeNotice 终端-升级通知
T0108UpgradeNotice JT808CommandType = 0x0108
// T0200LocationReport 终端-位置上报 经纬度坐标是WGS84
T0200LocationReport JT808CommandType = 0x0200
// T0201QueryLocation 终端-查询位置
T0201QueryLocation JT808CommandType = 0x0201
// T0301EventReport 终端-事件上报
T0301EventReport JT808CommandType = 0x0301
// T0302QuestionAnswer 终端-提问应答
T0302QuestionAnswer JT808CommandType = 0x0302
// T0303MessagePlayCancel 终端-消息点播取消
T0303MessagePlayCancel JT808CommandType = 0x0303
// T0608QueryRegionRespond 终端-查询区域应答
T0608QueryRegionRespond JT808CommandType = 0x0608
// T0700DrivingRecordUpload 终端-行驶记录上传
T0700DrivingRecordUpload JT808CommandType = 0x0700
// T0702DriverInfoCollectReport 终端-驾驶员信息采集上报
T0702DriverInfoCollectReport JT808CommandType = 0x0702
// T0704LocationBatchUpload 终端-位置批量上传
T0704LocationBatchUpload JT808CommandType = 0x0704
// T0800MultimediaEventInfoUpload 终端-多媒体事件信息上传
T0800MultimediaEventInfoUpload JT808CommandType = 0x0800
// T0801MultimediaDataUpload 终端-多媒体数据上传
T0801MultimediaDataUpload JT808CommandType = 0x0801
// T0805CameraShootImmediately 终端-摄像头立即拍照
T0805CameraShootImmediately JT808CommandType = 0x0805
// T0900DataUpTransparentTransmission 终端-数据上行透传
T0900DataUpTransparentTransmission JT808CommandType = 0x0900

P8001GeneralRespond JT808CommandType = 0x8001 // 平台-通用应答
P8003ReissueSubcontractingRequest JT808CommandType = 0x8003 // 平台-补发分包请求
P8004QueryTimeRespond JT808CommandType = 0x8004 // 平台-查询时间应答
P8100RegisterRespond JT808CommandType = 0x8100 // 平台-注册应答
P8103SetTerminalParams JT808CommandType = 0x8103 // 平台-设置终端参数
P8104QueryTerminalParams JT808CommandType = 0x8104 // 平台-查询终端参数
P8105TerminalControl JT808CommandType = 0x8105 // 平台-终端控制
P8106QuerySpecifyParam JT808CommandType = 0x8106 // 平台-查询指定参数
P8107QueryTerminalProperties JT808CommandType = 0x8107 // 平台-查询终端属性
P8108DistributeTerminalUpgradePackage JT808CommandType = 0x8108 // 平台-下发终端升级包
P8201QueryLocation JT808CommandType = 0x8201 // 平台-查询位置
P8202TmpLocationTrack JT808CommandType = 0x8202 // 平台-临时位置跟踪
P8203ManuallyConfirmAlarmInfo JT808CommandType = 0x8203 // 平台-人工确认报警信息
P8300TextInfoDistribution JT808CommandType = 0x8300 // 平台-文本信息下发
P8301EventSetting JT808CommandType = 0x8301 // 平台-事件设置
P8302QuestionDistribution JT808CommandType = 0x8302 // 平台-提问下发
P8303InfoPlaySetting JT808CommandType = 0x8303 // 平台-信息点播设置
P8304InfoService JT808CommandType = 0x8304 // 平台-信息服务
P8400PhoneCallBack JT808CommandType = 0x8400 // 平台-电话回拨
P8401SetPhoneBook JT808CommandType = 0x8401 // 平台-设置电话本
P8500VehicleControl JT808CommandType = 0x8500 // 平台-车辆控制
P8600SetCircularArea JT808CommandType = 0x8600 // 平台-设置圆形区域
P8601DeleteArea JT808CommandType = 0x8601 // 平台-删除区域
P8602SetRectArea JT808CommandType = 0x8602 // 平台-设置矩形区域
P8604PolygonArea JT808CommandType = 0x8604 // 平台-设置多边形区域
P8606SetRoute JT808CommandType = 0x8606 // 平台-设置路线
P8608QueryAreaOrRouteData JT808CommandType = 0x8608 // 平台-查询区域或路线数据
P8701DrivingRecordParamDistribution JT808CommandType = 0x8701 // 平台-行驶记录仪参数下发
P8800MultimediaUploadRespond JT808CommandType = 0x8800 // 平台-多媒体上传应答
P8801CameraShootImmediateCommand JT808CommandType = 0x8801 // 平台-摄像头立即拍摄命令
P8802StorageMultimediaDataRetrieval JT808CommandType = 0x8802 // 平台-存储多媒体数据检索
P8803StorageMultimediaDataUpload JT808CommandType = 0x8803 // 平台-存储多媒体数据上传
P8804SoundRecordStartCommand JT808CommandType = 0x8804 // 平台-录音开始命令
P8805SingleMultimediaDataRetrieval JT808CommandType = 0x8805 // 平台-单条多媒体数据检索
P8900DataDownTransparentTransmission JT808CommandType = 0x8900 // 平台-数据下行透传
// P8001GeneralRespond 平台-通用应答
P8001GeneralRespond JT808CommandType = 0x8001
// P8003ReissueSubcontractingRequest 平台-补发分包请求
P8003ReissueSubcontractingRequest JT808CommandType = 0x8003
// P8004QueryTimeRespond 平台-查询时间应答
P8004QueryTimeRespond JT808CommandType = 0x8004
// P8100RegisterRespond 平台-注册应答
P8100RegisterRespond JT808CommandType = 0x8100
// P8103SetTerminalParams 平台-设置终端参数
P8103SetTerminalParams JT808CommandType = 0x8103
// P8104QueryTerminalParams 平台-查询终端参数
P8104QueryTerminalParams JT808CommandType = 0x8104
// P8105TerminalControl 平台-终端控制
P8105TerminalControl JT808CommandType = 0x8105
// P8106QuerySpecifyParam 平台-查询指定参数
P8106QuerySpecifyParam JT808CommandType = 0x8106
// P8107QueryTerminalProperties 平台-查询终端属性
P8107QueryTerminalProperties JT808CommandType = 0x8107
// P8108DistributeTerminalUpgradePackage 平台-下发终端升级包
P8108DistributeTerminalUpgradePackage JT808CommandType = 0x8108
// P8201QueryLocation 平台-查询位置
P8201QueryLocation JT808CommandType = 0x8201
// P8202TmpLocationTrack 平台-临时位置跟踪
P8202TmpLocationTrack JT808CommandType = 0x8202
// P8203ManuallyConfirmAlarmInfo 平台-人工确认报警信息
P8203ManuallyConfirmAlarmInfo JT808CommandType = 0x8203
// P8300TextInfoDistribution 平台-文本信息下发
P8300TextInfoDistribution JT808CommandType = 0x8300
// P8301EventSetting 平台-事件设置
P8301EventSetting JT808CommandType = 0x8301
// P8302QuestionDistribution 平台-提问下发
P8302QuestionDistribution JT808CommandType = 0x8302
// P8303InfoPlaySetting 平台-信息点播设置
P8303InfoPlaySetting JT808CommandType = 0x8303
// P8304InfoService 平台-信息服务
P8304InfoService JT808CommandType = 0x8304
// P8400PhoneCallBack 平台-电话回拨
P8400PhoneCallBack JT808CommandType = 0x8400
// P8401SetPhoneBook 平台-设置电话本
P8401SetPhoneBook JT808CommandType = 0x8401
// P8500VehicleControl 平台-车辆控制
P8500VehicleControl JT808CommandType = 0x8500
// P8600SetCircularArea 平台-设置圆形区域
P8600SetCircularArea JT808CommandType = 0x8600
// P8601DeleteArea 平台-删除区域
P8601DeleteArea JT808CommandType = 0x8601
// P8602SetRectArea 平台-设置矩形区域
P8602SetRectArea JT808CommandType = 0x8602
// P8604PolygonArea 平台-设置多边形区域
P8604PolygonArea JT808CommandType = 0x8604
// P8606SetRoute 平台-设置路线
P8606SetRoute JT808CommandType = 0x8606
// P8608QueryAreaOrRouteData 平台-查询区域或路线数据
P8608QueryAreaOrRouteData JT808CommandType = 0x8608
// P8701DrivingRecordParamDistribution 平台-行驶记录仪参数下发
P8701DrivingRecordParamDistribution JT808CommandType = 0x8701
// P8800MultimediaUploadRespond 平台-多媒体上传应答
P8800MultimediaUploadRespond JT808CommandType = 0x8800
// P8801CameraShootImmediateCommand 平台-摄像头立即拍摄命令
P8801CameraShootImmediateCommand JT808CommandType = 0x8801
// P8802StorageMultimediaDataRetrieval 平台-存储多媒体数据检索
P8802StorageMultimediaDataRetrieval JT808CommandType = 0x8802
// P8803StorageMultimediaDataUpload 平台-存储多媒体数据上传
P8803StorageMultimediaDataUpload JT808CommandType = 0x8803
// P8804SoundRecordStartCommand 平台-录音开始命令
P8804SoundRecordStartCommand JT808CommandType = 0x8804
// P8805SingleMultimediaDataRetrieval 平台-单条多媒体数据检索
P8805SingleMultimediaDataRetrieval JT808CommandType = 0x8805
// P8900DataDownTransparentTransmission 平台-数据下行透传
P8900DataDownTransparentTransmission JT808CommandType = 0x8900
)

func (s JT808CommandType) String() string {
Expand Down
73 changes: 73 additions & 0 deletions shared/consts/jt808_location_addition.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package consts

// JT808LocationAdditionType 终端-位置附加信息
type JT808LocationAdditionType uint8

const (
// A0x01Mile 里程
A0x01Mile JT808LocationAdditionType = 0x01
// A0x02Oil 油量
A0x02Oil JT808LocationAdditionType = 0x02
// A0x03Speed 行驶记录功能获取的速度
A0x03Speed JT808LocationAdditionType = 0x03
// A0x04ManualAlarm 需要人工确认报警事件的ID
A0x04ManualAlarm JT808LocationAdditionType = 0x04
// A0x05TirePressure 胎压 2019版本新增
A0x05TirePressure JT808LocationAdditionType = 0x05
// A0x06CarTemperature 车厢温度 2019版本新增
A0x06CarTemperature JT808LocationAdditionType = 0x06
// A0x11OverSpeedAlarm 超速报警 详情见表28
A0x11OverSpeedAlarm JT808LocationAdditionType = 0x11
// A0x12AreaAlarm 进出区域/路线报警 详情见表29
A0x12AreaAlarm JT808LocationAdditionType = 0x12
// A0x13DrivingTimeInsufficientAlarm 路段行驶时间不足/过长报警 详情见表30
A0x13DrivingTimeInsufficientAlarm JT808LocationAdditionType = 0x13
// A0x25ExtendVehicleStatus 扩展车辆信号状态位 详情见表31
A0x25ExtendVehicleStatus JT808LocationAdditionType = 0x25
// A0x2AIOStatus IO状态位 详情见表32
A0x2AIOStatus JT808LocationAdditionType = 0x2A
// A0x2BAnalog 模拟量 bit0-15 ADD bit16-31 AD1
A0x2BAnalog JT808LocationAdditionType = 0x2B
// A0x30WIFISignalStrength 无线通信网络信号强度 数据类型位BYTE
A0x30WIFISignalStrength JT808LocationAdditionType = 0x30
// A0x31GNSSPositionNum GNSS定位卫星数 数据类型位BYTE
A0x31GNSSPositionNum JT808LocationAdditionType = 0x31
// A0xE0Custom 厂商自定义
A0xE0Custom JT808LocationAdditionType = 0xE0
)

func (t JT808LocationAdditionType) String() string {
switch t {
case A0x01Mile:
return "里程"
case A0x02Oil:
return "油量"
case A0x03Speed:
return "行驶记录功能获取的速度"
case A0x04ManualAlarm:
return "需要人工确认报警事件的ID"
case A0x05TirePressure:
return "胎压"
case A0x06CarTemperature:
return "车厢温度"
case A0x11OverSpeedAlarm:
return "超速报警"
case A0x12AreaAlarm:
return "进出区域/路线报警"
case A0x13DrivingTimeInsufficientAlarm:
return "路段行驶时间不足/过长报警"
case A0x25ExtendVehicleStatus:
return "扩展车辆信号状态位"
case A0x2AIOStatus:
return "IO状态位"
case A0x2BAnalog:
return "模拟量"
case A0x30WIFISignalStrength:
return "无线通信网络信号强度"
case A0x31GNSSPositionNum:
return "GNSS定位卫星数"
case A0xE0Custom:
return "厂商自定义"
}
return "非标准的附加信息"
}

0 comments on commit 45ec06c

Please sign in to comment.