From a4da1d260a03e0eddb373a111ff7c1e8aa13f87c Mon Sep 17 00:00:00 2001 From: JimMoen Date: Mon, 6 Nov 2023 08:22:52 +0800 Subject: [PATCH] docs(gw_jt808): data exchange guide cn --- .../doc/Data_Exchange_Guide_CN.md | 840 ++++++++++++++++++ 1 file changed, 840 insertions(+) create mode 100644 apps/emqx_gateway_jt808/doc/Data_Exchange_Guide_CN.md diff --git a/apps/emqx_gateway_jt808/doc/Data_Exchange_Guide_CN.md b/apps/emqx_gateway_jt808/doc/Data_Exchange_Guide_CN.md new file mode 100644 index 000000000..d786369d2 --- /dev/null +++ b/apps/emqx_gateway_jt808/doc/Data_Exchange_Guide_CN.md @@ -0,0 +1,840 @@ +# emqx-jt808 + +JT/T 808 2013 协议接入网关 + +该文档定义了 Plugins **emqx_jt808** 和 **EMQX** 之间数据交换的格式 + +约定: +- Payload 采用 Json 格式进行组装 +- Json Key 采用全小写格式命名 + +Json 结构示例 + +## 终端到服务器 +```json +{ + "header" : { + "msg_id" : 1, + "encrypt": 0, + "len": VAL, + "phone": 13900000000, + "msg_sn": 0 + }, + "body": { + "seq": 1, + "id": 1, + "result": 0 + } +} +``` + +## 服务器到终端 +```json +{ + "header": { + "msg_id": 32769, + "encrypt": 0, + "phone": 13900000000, + "msg_sn": 0 + }, + "body": { + "seq": 1, + "id": 1, + "result": 0 + } +} +``` + +## 数据类型对照表 +| JT808 Defined Type | In Json Type | Comment | +|:------------------:|:------------:|:----------:| +| BYTE | integer | in decimal | +| WORD | integer | in decimal | +| DWORD | integer | in decimal | +| BYTE(n) | string | | +| BCD(n) | string | | +| STRING | string | | + +## 字段对照表 + +### 消息头字段对照表 + +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:------------------:| +| 消息 ID | msg_id | word | integer | +| 数据加密方式 | encrypt | word | integer | +| 终端手机号 | phone | bcd(6) | string | +| 消息流水号 | msg_sn | word | integer | + +| Optional Field | Json Key name | Value Type | Value Type in JSON | +|:--------------:|:-------------:|:----------:|:------------------:| +| 消息总包数 | frag_total | word | integer | +| 消息包序号 | frag_sn | word | integer | + +- 存在 `frag_total` 与 `frag_sn` 时表示消息体为长消息,进行分包处理 + +### 消息体字段对照表 + +- 终端通用应答 `"msg_id": 1` 0x0001 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------:|:------------------:| +| 应答流水号 | seq | word | integer | +| 应答 ID | id | word | integer | +| 结果 | result | byte | integer | + + +- 平台通用应答 `"msg_id": 32769` 0x8001 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------:|:------------------:| +| 应答流水号 | seq | word | integer | +| 应答 ID | id | word | integer | +| 结果 | result | byte | integer | + + +- 终端心跳 `"msg_id": 2` 0x0002 +空 Json + + +- 补传分包请求 `"msg_id": 32771` 0x8003 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------:|:-------------:|:--------------:|:------------------:| +| 原始消息流水号 | seq | word | integer | +| 重传包总数 | length | byte | integer | +| 重传包 ID 列表 | ids | byte(2*length) | list of integer | + + +- 终端注册 `"msg_id": 256` 0x0100 +| Field | Json Key name | Value Type | Value Type in Json | +|:---------:|:--------------:|:----------:|:------------------:| +| 省域 ID | province | word | integer | +| 市县域 ID | city | word | integer | +| 制造商 ID | manufacture | byte(5) | string | +| 终端型号 | model | byte(20) | string | +| 终端 ID | dev_id | byte(7) | string | +| 车牌颜色 | color | byte | integer | +| 车辆标识 | license_number | string | string | + + +- 终端注册应答 `"msg_id": 33024` 0x8100 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------:|:------------------:| +| 应答流水号 | seq | word | integer | +| 结果 | result | byte | integer | + +只有成功后才有此字段 +| Optional Field | Json Key name | Value Type | Value Type in JSON | +| 鉴权码 | auth_code | string | string | + + +- 终端注销 `"msg_id": 3` 0x0003 +空 Json + + +- 终端鉴权 `"msg_id": 258` 0x0102 +| Field | Json Key name | Value Type | Value Type in Json | +|:------:|:-------------:|:----------:|:------------------:| +| 鉴权码 | code | string | string | + + +- 设置终端参数 `"msg_id": 33027` 0x8103 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------:|:------------------------------------------------------:| +| 参数总数 | length | byte | integer | +| 参数项列表 | params | list | list of id and value. `[{"id":ID, "value": VAL}, ...]` | +| 参数项 | id | dword | integer | +| 参数值 | value | byte | integer | + +参数 ID 说明见协议规定. + + +- 查询终端参数 `"msg_id": 33028` 0x8104 +空 Json + + +- 查询指定终端参数 `"msg_id": 33030` 0x8106 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:--------------:|:--------------------------------:| +| 参数总数 | length | byte | integer | +| 参数 ID 列表 | ids | byte(2*length) | list of id. `[1, 2, 3, 4, ...]` | + +参数 ID 列表中元素为 integer + + +- 查询终端应答参数 `"msg_id": 260` 0x0104 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:------------------------------------------------------:| +| 应答流水号 | seq | word | integer | +| 应答参数个数 | length | byte | integer | +| 参数项列表 | params | list | list of id and value. `[{"id":ID, "value": VAL}, ...]` | +| 参数项 | id | dword | integer | +| 参数值 | value | byte | integer | + +参数 ID 说明见协议规定. + + +- 终端控制 `"msg_id": 33029 ` 0x8105 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------:|:-------------:|:----------:|:------------------:| +| 命令字 | command | byte | integer | +| 命令参数 | param | string | string | + + +- 查询终端属性 `"msg_id": 33031` 0x8107 +空 Json + + +- 查询终端属性应答 `"msg_id": 263` 0x0107 +| Field | Json Key name | Value Type | Value Type in Json | +|:-----------------:|:----------------:|:----------:|:------------------:| +| 终端类型 | type | word | integer | +| 制造商 ID | manufacture | byte(5) | string | +| 终端型号 | model | byte(20) | string | +| 终端 ID | id | byte(7) | string | +| 终端 SIM 卡 ICCID | iccid | byte(10) | string | +| 终端硬件版本号 | hardware_version | string | string | +| 终端硬件固件号 | firmware_version | string | string | +| GNSS 模块属性 | gnss_prop | byte | integer | +| 通信模块属性 | comm_prop | byte | integer | + +-- 终端硬件版本号长度、终端固件版本号长度,将被用于二进制报文解析,不向上暴露 + + +- 下发终端升级包 `"msg_id": 33032` 0x8108 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------:|:-------------:|:----------:|:----------------------:| +| 升级类型 | type | byte | integer | +| 制造商 ID | manufacturer | byte(5) | string | +| 版本号长度 | ver_len | byte | integer | +| 版本号 | version | string | string | +| 升级数据包长度 | fw_len | dword | integer | +| 升级数据包 | firmware | binary | string(base64 encoded) | + + +- 终端升级结果通知 `"msg_id": 264` 0x0108 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------:|:-------------:|:----------:|:------------------:| +| 升级类型 | type | byte | integer | +| 升级结果 | result | byte | integer | + + +- 位置信息汇报 `"msg_id": 512` 0x0200 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------------:|:-------------:|:----------:|:------------------:| +| 报警标志 | alarm | dword | integer | +| 状态 | status | dword | integer | +| 纬度 | latitude | dword | integer | +| 经度 | longitude | dword | integer | +| 高程 | altitude | word | integer | +| 速度 | speed | word | integer | +| 方向 | direction | word | integer | +| 时间 | time | bcd(6) | string | + +| Optional Field | Json Key name | Value Type | Value Type in JSON | +| 位置附加信息项列表 | extra | - | map | + +%% TODO: refine alarm mroe details + +位置附加信息项列表, 在 `extra` 中 +| Field (附加信息描述) | Json Key name | Value Type | Value Type in Json | +|:---------------------------------:|:---------------:|:----------:|:----------------------:| +| 里程 | mileage | dword | integer | +| 油量 | fuel_meter | word | integer | +| 行驶记录功能获取的速度 | speed | word | integer | +| 需要人工确认报警事件的 ID | alarm_id | word | integer | +| 超速报警附加信息(长度1或5) | overspeed_alarm | - | map | +| 进出区域/路线报警附加信息 | in_out_alarm | - | map | +| 路段行驶时间不足/过长报警附加信息 | path_time_alarm | - | map | +| 扩展车辆信号状态位 | 见状态位附表 | - | - | +| IO 状态位 | io_status | - | map | +| 模拟量 | analog | - | map | +| 无线通信网络信号强度 | rssi | byte | integer | +| GNSS 定位卫星数 | gnss_sat_num | byte | integer | +| 后续自定义信息长度 | custome | - | string(base64 encoded) | +| %% TODO 自定义区域 | | | | + +超速报警附加信息(长度1或5), 置于 map `overspeed_alarm` 内 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------:|:-------------:|:----------:|:------------------:| +| 位置类型 | type | byte | integer | + +| Optional Field | Json Key name | Value Type | Value Type in JSON | +| 区域或路段 ID | id | dword | integer | + + +进出区域/路线报警附加信息, 置于 map `in_out_alarm` 内 +| Field | Json Key name | Value Type | Value Type in Json | +|:-------------:|:-------------:|:----------:|:------------------:| +| 位置类型 | type | byte | integer | +| 区域或路段 ID | id | dword | integer | +| 方向 | direction | byte | integer | + +路段行驶时间不足/过长报警附加信息, 置于 map `path_time_alarm` 内 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:------------------:| +| 路段 ID | id | dword | integer | +| 路段行驶时间 | time | word | integer | +| 结果 | result | byte | integer | + +IO 状态位, 置于 map `io_status` 内 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:------------------:| +| 深度休眠状态 | deep_sleep | 1 bit | integer | +| 休眠状态 | sleep | 1 bit | integer | + +模拟量, 置于 map `analog` 内 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------:|:-------------:|:----------:|:------------------:| +| 模拟量 0 | ad0 | 16 bits | integer | +| 模拟量 1 | ad1 | 16 bits | integer | + +扩展车辆信号状态位, 置于 map `extra` 内 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:---------------:|:----------:|:------------------------------------------:| +| 信号 | signal | - 2 bits | map, `{"low_beam": VAL, "high_beam": VAL}` | +| 右转向灯信号 | right_turn | 1 bit | integer | +| 左转向灯信号 | left_turn | 1 bit | integer | +| 制动信号 | brake | 1 bit | integer | +| 倒档信号 | reverse | 1 bit | integer | +| 雾灯信号 | fog | 1 bit | integer | +| 示廓灯 | side_marker | 1 bit | integer | +| 喇叭状态 | horn | 1 bit | integer | +| 空调状态 | air_conditioner | 1 bit | integer | +| 空档信号 | neutral | 1 bit | integer | +| 缓速器工作 | retarder | 1 bit | integer | +| ABS 工作 | abs | 1 bit | integer | +| 加热器工作 | heater | 1 bit | integer | +| 离合器状态 | cluth | 1 bit | integer | + +信号状态, 置于 map `signal` 内 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------:|:------------------:| +| 近光灯信号 | low_beam | 1 bit | integer | +| 远光灯信号 | high_beam | 1 bit | integer | + +例 +example: +``` +{ + "header" : { + "msg_id" : 1, + "encrypt": 0, + "len": VAL, + "phone": 13900000000, + "msg_sn": 0 + }, + "body": { + "alarm": VAL, + "status": VAL, + "latitude": VAL, + "longitude": VAL, + "altitude": VAL, + "speed": VAL, + "direction": VAL, + "time": VAL, + "extra": { + "mileage": VAL, + "fuel_unit": VAL, + "speed": VAL, + "alarm_id": VAL, + "overspeed_alarm": { + "type": VAL, + "id": VAL + }, + "in_out_alarm": { + "type": VAL, + "id": VAL, + "direction": VAL + }, + "path_time_alarm": { + "id": VAL, + "time": VAL, + "result": VAL + }, + "signal": { + "low_beam": VAL, + "high_beam": VAL + }, + "right_turn": VAL, + "left_turn": VAL, + "break": VAL, + "reverse": VAL, + "fog": VAL, + "side_marker": VAL, + "horn": VAL, + "air_conditioner": VAL, + "neutral": VAL, + "retarder": VAL, + "abs": VAL, + "heater": VAL, + "cluth": VAL, + "io_status": { + "deep_sleep": VAL, + "sleep": VAL + }, + "analog": { + "ad0": VAL, + "ad1": VAL + } + } + } +} +``` + + +- 位置信息查询 `"msg_id": 33281` 0x8201 +空 Json + + +- 位置信息查询应答 `"msg_id": 513` 0x0201 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:------------------:| +| 应答流水号 | seq | word | integer | +| 位置信息汇报 | params | - | map | + + +- 临时位置跟踪控制 `"msg_id": 33282` 0x8202 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------:|:-------------:|:----------:|:------------------:| +| 时间间隔 | period | word | integer | +| 跟踪位置有效期 | expiry | dword | integer | + + +- 人工确认报警消息 `"msg_id": 33283` 0x8203 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------------:|:-------------:|:----------:|:------------------:| +| 报警消息流水号 | seq | word | integer | +| 人工确认报警类型 | type | dword | integer | + + +- 文本信息下发 `"msg_id": 33536` 0x8300 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------:|:-------------:|:----------:|:------------------:| +| 标志 | flag | byte | integer | +| 文本信息 | text | string | string | + + +- 事件设置 `"msg_id": 33537` 0x8301 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:-----------------------------------------------------------------:| +| 设置类型 | type | byte | integer | +| 设置总数 | length | byte | integer | +| 事件项列表 | events | list | list of event. `[{"id": ID, "length": LEN, "content": CON}, ...]` | +| 事件 ID | id | byte | integer | +| 事件内容长度 | length | byte | integer | +| 事件内容 | content | string | string | + + +- 事件报告 `"msg_id": 769` 0x0301 +| Field | Json Key name | Value Type | Value Type in Json | +|:-------:|:-------------:|------------|:------------------:| +| 事件 ID | id | byte | integer | + + +- 提问下发 `"msg_id": 33538` 0x8302 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:---------------------------------------------------------------:| +| 标志 | flag | byte | integer | +| 问题内容长度 | length | byte | integer | +| 问题 | question | string | string | +| 候选答案列表 | answers | list | list of answer. `[{"id": ID, "len": LEN, "answer": ANS}, ...]` | +| 答案 ID | id | byte | integer | +| 答案内容长度 | len | byte | integer | +| 答案内容 | answer | string | string | + +%% TODO: len -> length or other length -> len + +- 提问应答 `"msg_id": 770` 0x0302 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------:|:------------------:| +| 应答流水号 | seq | word | integer | +| 答案 ID | id | byte | integer | + + +- 信息点播菜单设置 `"msg_id": 33539` 0x8303 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:------------------:| +| 设置类型 | type | byte | integer | +| 信息项总数 | length | byte | integer | +| 信息项列表 | menus | list | list of menu | +| 信息类型 | type | byte | integer | +| 信息名称长度 | length | word | integer | +| 信息名称 | info | string | string | + + +- 信息点播/取消 `"msg_id": 771` 0x0303 +| Field | Json Key name | Value Type | Value Type in Json | +|:-------------:|:-------------:|:----------:|:------------------:| +| 信息类型 | id | byte | integer | +| 点拨/取消标志 | flag | byte | integer | + + +- 信息服务 `"msg_id": 33540` 0x8304 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------:|:-------------:|:----------:|:------------------:| +| 信息类型 | type | byte | integer | +| 信息长度 | length | word | integer | +| 信息内容 | info | string | string | + + +- 电话回拨 `"msg_id": 33792` 0x8400 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------:|:-------------:|:----------:|:------------------:| +| 标志 | type | byte | integer | +| 电话号码 | phone | string | string | + + +- `"msg_id": 33793` 0x8401 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------:|:------------------:| +| 设置类型 | type | byte | integer | +| 联系人总数 | length | byte | integer | +| 联系人项 | contacts | list | list of contact. | +| 标志 | type | byte | integer | +| 号码长度 | phone_len | byte | integer | +| 电话号码 | phone | string | string | +| 联系人长度 | name_len | byte | integer | +| 联系人 | name | string | string | + +联系人项示例 +`[{"type": TYPE, "phone_len", PH_LEN, "phone": PHONE, "name_len": NAME_LEN, "name": NAME}, ...]` + + +- `"msg_id": 34048` 0x8500 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------:|:-------------:|:----------:|:------------------:| +| 标志控制 | flag | byte | integer | + + +- `"msg_id": 1280` 0x0500 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------------:|:-------------:|:----------:|:------------------:| +| 应答流水号 | seq | word | integer | +| 位置信息汇报消息体 | location | map | map of location | + + +- `"msg_id": 34304` 0x8600 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:------------------:|:----------:|:------------------:| +| 设置属性 | type | byte | integer | +| 区域总数 | length | byte | integer | +| 区域项 | areas | list | list of area. | +| 区域 ID | id | dword | integer | +| 区域属性 | flag | dword | integer | +| 中心点纬度 | center_latitude | dword | integer | +| 中心点经度 | center_longitude | dword | integer | +| 半径 | radius | dword | integer | +| 起始时间 | start_time | string | string | +| 结束时间 | end_time | string | string | +| 最高速度 | max_speed | word | integer | +| 超速持续时间 | overspeed_duration | byte | integer | + +区域列表示例 +`[{"id": ID, + "flag": FLAG, + "center_latitude": CEN_LAT, + "center_longitude": CEN_LON, + "radius": RADIUS, + "start_time": START_TIME, + "end_time": END_TIME, + "max_speed", MAX_SPEED, + "overspeed_duration", OVERSPEED_DURATION + }, + ... + ]` + + +- 删除圆形区域 `"msg_id": 34305` 0x8601 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:------------------:| +| 区域数 | length | byte | integer | +| 区域 ID 列表 | ids | list | list of id. | +| 区域 ID 1~n | - | dword | integer | + +`[ID1, ID2, ...]` + + +- 设置矩形区域 `"msg_id": 34306` 0x8602 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:------------------:|:----------:|:------------------------:| +| 设置属性 | type | byte | integer | +| 区域总数 | length | byte | integer | +| 区域项 | areas | list | list of rectangle area. | +| 区域 ID | id | dword | integer | +| 区域属性 | flag | dword | integer | +| 左上点纬度 | lt_lat | dword | integer | +| 左上点经度 | lt_lng | dword | integer | +| 右下点纬度 | rb_lat | dword | integer | +| 右下点经度 | rb_lng | dword | integer | +| 起始时间 | start_time | string | string | +| 结束时间 | end_time | string | string | +| 最高速度 | max_speed | word | integer | +| 超速持续时间 | overspeed_duration | byte | integer | + + +- 删除矩形区域 `"msg_id": 34307` 0x8603 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:------------------:| +| 区域数 | length | byte | integer | +| 区域 ID 列表 | ids | list | list of id. | +| 区域 ID 1~n | - | dword | integer | + + +- 设置多边形区域 `"msg_id": 34308` 0x8604 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:------------------:|:----------:|:------------------:| +| 区域 ID | id | dword | integer | +| 区域属性 | flag | dword | integer | +| 起始时间 | start_time | string | string | +| 结束时间 | end_time | string | string | +| 最高速度 | max_speed | word | integer | +| 超速持续时间 | overspeed_duration | byte | integer | +| 区域总顶点数 | length | word | integer | +| 顶点项列表 | points | list | list of point. | +| 顶点纬度 | lat | dword | integer | +| 顶点经度 | lng | dword | integer | + + +- 删除多边形区域 `"msg_id": 34309` 0x8605 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:------------------:| +| 区域数 | length | byte | integer | +| 区域 ID 列表 | ids | list | list of id. | +| 区域 ID 1~n | - | dword | integer | + + +- 设置路线 `"msg_id": 34310` 0x8606 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------------:|:------------------:|:----------:|:------------------:| +| 路线 ID | id | dword | integer | +| 路线属性 | flag | word | integer | +| 起始时间 | start_time | string | string | +| 结束时间 | end_time | string | string | +| 路线总拐点数 | length | word | integer | +| 拐点项 | points | list | list of point. | +| 拐点 ID | point_id | dword | integer | +| 路段 ID | path_id | dword | integer | +| 拐点纬度 | point_lat | dword | integer | +| 拐点经度 | point_lng | dword | integer | +| 路段宽度 | width | byte | integer | +| 路段属性 | attrib | byte | integer | +| 路段行驶过长阈值 | passed | word | integer | +| 路段行驶不足阈值 | uncovered | word | integer | +| 路段最高速度 | max_speed | word | integer | +| 路段超速持续时间 | overspeed_duration | byte | integer | + + +- `"msg_id": 34311` 0x8607 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------:|:-------------:|:----------:|:------------------:| +| 路线数 | length | byte | integer | +| 路线列表 | ids | list | list of id | +| 路线 ID | - | dword | integer | + + +- 行驶记录数据采集命令 `"msg_id": 34560` 0x8700 +| Field | Json Key name | Value Type | Value Type in Json | +|:------:|:-------------:|:----------------------:|:------------------:| +| 命令字 | command | byte | integer | +| 数据块 | param | string(base64 encoded) | string | + + +- 行驶记录数据上传 `"msg_id": 1792` 0x0700 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------------------:|:------------------:| +| 应答流水号 | seq | word | integer | +| 命令字 | command | byte | integer | +| 数据块 | data | string(base64 encoded) | string | + + +- 行驶记录参数下传命令 `"msg_id": 34561` 0x8701 +| Field | Json Key name | Value Type | Value Type in Json | +|:------:|:-------------:|:----------------------:|:------------------:| +| 命令字 | command | byte | integer | +| 数据块 | param | string(base64 encoded) | string | + + +- 电子运单上报 `"msg_id": 1793` 0x0701 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------------------:|:------------------:| +| 电子运单长度 | length | dword | integer | +| 电子运单内容 | data | string(base64 encoded) | string | + + +- 上报驾驶员身份信息请求 `"msg_id": 34562` 0x8702 +空 Json + + +- 驾驶员身份信息采集上报 `"msg_id": 1794` 0x0702 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------:|:-------------:|:----------:|:------------------:| +| 状态 | status | byte | integer | +| 时间 | time | string | string | +| IC 卡读取结果 | ic_result | byte | integer | +| 驾驶员姓名 | driver_name | string | string | +| 从业资格证编码 | certificate | string | string | +| 发证机构名称 | organization | string | string | +| 证件有效期 | cert_expiry | string | string | + + +- 定位数据批量上传 `"msg_id": 1796` 0x0704 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------:|:-------------:|:----------:|:------------------:| +| 位置数据类型 | type | byte | integer | +| 数据项个数 | length | word | integer | +| 位置汇报数据项 | location | list | list of location | + + +- `"msg_id": 1797` 0x0705 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------------:|:-------------:|:----------:|:----------------------:| +| 数据项个数 | length | word | integer | +| CAN 总线数据接收时间 | time | bcd(5) | integer | +| CAN 总线数据项 | can_data | list | list of can data. | +| CAN 总线通道号 | channel | 1 bit | integer | +| 帧类型 | frame_type | 1 bit | integer | +| 数据采集方式 | data_method | 1 bit | integer | +| CAN 总线 ID | id | 29 bits | integer | +| CAN 数据 | data | binary | string(base64 encoded) | + + +- 多媒体时间信息上传 `"msg_id": 2048` 0x0800 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------:|:-------------:|:----------:|:------------------:| +| 多媒体数据 ID | id | dword | integer | +| 多媒体类型 | type | byte | integer | +| 多媒体编码格式 | format | byte | integer | +| 事件项编码 | event | byte | integer | +| 通道 ID | channel | byte | integer | + + +- 多媒体数据上传 `"msg_id": 2049` 0x0801 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------:|:-------------:|:----------:|:----------------------:| +| 多媒体 ID | id | dword | integer | +| 多媒体类型 | type | byte | integer | +| 多媒体编码格式 | format | byte | integer | +| 事件项编码 | event | byte | integer | +| 通道 ID | channel | byte | integer | +| 位置信息汇报 | location | byte(28) | map | +| 多媒体数据包 | multimedia | binary | string(base64 encoded) | + + + +- 多媒体数据上传应答 `"msg_id": 34816` 0x8800 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------:|:-------------:|:----------:|:------------------:| +| 多媒体 ID | mm_id | dword | integer | +| 重传包总数 | length | byte | integer | +| 重传包 ID 列表 | retx_ids | list | list of retry IDs | + + +- 摄像头立即拍摄命令 `"msg_id": 34817` 0x8801 +| Field | Json Key name | Value Type | Value Type in Json | +|:-----------------:|:-------------:|:----------:|:------------------:| +| 通道 ID | channel_id | byte | integer | +| 拍摄命令 | command | word | integer | +| 拍照间隔/录像时间 | period | word | integer | +| 保存标志 | save | byte | integer | +| 分辨率 | resolution | byte | integer | +| 图像/视频质量 | quality | byte | integer | +| 亮度 | bright | byte | integer | +| 对比度 | contrast | byte | integer | +| 饱和度 | saturate | byte | integer | +| 色度 | chromaticity | byte | integer | + + +- 摄像头立即拍摄应答 `"msg_id": 2053` 0x0805 +| Field | Json Key name | Value Type | Value Type in Json | +|:--------------:|:-------------:|:--------------:|:------------------:| +| 应答流水号 | seq | word | integer | +| 结果 | result | byte | integer | +| 多媒体 ID 个数 | length | word | integer | +| 多媒体 ID 列表 | ids | byte(4*length) | integer | + + +- 存储多媒体数据检索 `"msg_id": 34818` 0x8802 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------:|:------------------:| +| 多媒体类型 | | byte | | +| 通道 ID | | byte | | +| 事件项编码 | | byte | | +| 起始时间 | | string | | +| 结束时间 | | string | | + + +- 存储多媒体数据检索应答 `"msg_id": 2050` 0x0802 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------------:|:-------------:|:----------:|:---------------------:| +| 应答流水号 | seq | word | integer | +| 多媒体数据项总数 | length | word | integer | +| 检索项 | result | list | list of search result | +| 多媒体 ID | id | dword | integer | +| 多媒体类型 | type | byte | integer | +| 通道 ID | channel | byte | integer | +| 事件项编码 | event | byte | integer | +| 位置信息汇报 | location | byte(28) | map | + + +- 存储多媒体数据上传命令 `"msg_id": 34819` 0x8803 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------:|:------------------:| +| 多媒体类型 | type | byte | integer | +| 通道 ID | channel | byte | integer | +| 事件项编码 | event | byte | integer | +| 起始时间 | start_time | string | string | +| 结束时间 | end_time | string | string | +| 删除标志 | delete | byte | integer | + + +- 录音开始命令 `"msg_id": 34820` 0x8804 +| Field | Json Key name | Value Type | Value Type in Json | +|:----------:|:-------------:|:----------:|:------------------:| +| 录音命令 | command | byte | integer | +| 录音时间 | time | word | integer | +| 保存标志 | save | byte | integer | +| 音频采样率 | rate | byte | integer | + + +- 单条存储多媒体j叔叔检索上传命令 `"msg_id": 34821` 0x8805 +| Field | Json Key name | Value Type | Value Type in Json | +|:---------:|:-------------:|:----------:|:------------------:| +| 多媒体 ID | id | dword | integer | +| 删除标志 | flag | byte | integer | + + +- 数据下行透传 `"msg_id": 35072` 0x8900 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:----------------------:| +| 透传消息类型 | type | byte | integer | +| 透传消息内容 | data | binary | string(base64 encoded) | + + +- 数据上行透传 `"msg_id": 2304` 0x0900 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:----------------------:| +| 透传消息类型 | type | byte | integer | +| 透传消息内容 | data | binary | string(base64 encoded) | + + +- 数据压缩上报 `"msg_id": 2305` 0x0901 +| Field | Json Key name | Value Type | Value Type in Json | +|:------------:|:-------------:|:----------:|:----------------------:| +| 压缩消息长度 | length | dword | integer | +| 压缩消息体 | data | binary | string(base64 encoded) | + + +- 平台 RSA 公钥 `"msg_id": 35328` 0x8A00 +| Field | Json Key name | Value Type | Value Type in Json | +|:-----:|:-------------:|:----------:|:----------------------:| +| e | e | dword | integer | +| n | n | byte(128) | string(base64 encoded) | + + +- 终端 RSA 公钥 `"msg_id": 2560` 0x0A00 +| Field | Json Key name | Value Type | Value Type in Json | +|:-----:|:-------------:|:----------:|:----------------------:| +| e | e | dword | integer | +| n | n | byte(128) | string(base64 encoded) | + +- 0x8F00 ~ 0x8FFF +- 0x0F00 ~ 0x0FFF