4G执法记录仪软件系统定制平台对接
一、 总体架构
由于现阶段采用的调用QH云平台接口进行抓拍和获取设备信息方案对双方平台都有较大压力,而且抓拍频率满足任意值要求,因此定制版需要改为设备监听平台下发指令,抓拍动作由设备主动执行并上传。总体架构如下:
注:由于设备采用4G卡上网,因此上图中的扫描二维码功能不再需要。
二、 执法仪-云平台对接需求
2.1 上报信息
执法仪定期向云平台上报设备状态,用于了解执法仪状态,包含信息见表1和表2。
表1. 上报信息数据结构
|
序号 |
属性 |
类型 |
说明 |
|
1 |
deviceId |
String |
设备唯一序列号 |
|
2 |
batteryLevel |
Float |
设备剩余电量0-100 |
|
3 |
captureFrequency |
Integer |
定时抓拍频率(秒) |
|
4 |
networkMode |
Integer |
网络模式(0-4G,1-wifi) |
|
5 |
captureState |
Integer |
定时抓拍任务状态(0-已停止,1-已启动) |
|
6 |
devicePhoto |
Object[] |
按日期分组,数据对象属性见表2 |
|
7 |
timestamp |
Long |
当前时间的毫秒级时间戳 |
表2. 上报信息devicePhoto属性数据项结构
|
序号 |
属性 |
类型 |
说明 |
|
1 |
date |
String |
日期 |
|
2 |
number |
Integer |
数量 |
2.2 推送抓拍照片
执法仪将手动抓拍和定时抓拍的照片推送到云平台,包含信息见表3。
表3. 推送照片数据结构
|
序号 |
属性 |
类型 |
说明 |
|
1 |
deviceId |
String |
设备唯一序列号 |
|
2 |
photo |
Byte[] |
照片字节数组 |
|
3 |
captureType |
Integer |
照片来源(1-定时自动抓拍,2-手动抓拍) |
|
4 |
photoTime |
Long |
照片拍摄时间,毫秒级时间戳 |
|
5 |
timestamp |
Long |
当前时间的毫秒级时间戳 |
2.3 接收指令
执法仪接收云平台下发的指令,并完成相应操作,数据信息见表4。
表4. 下发指令数据结构
|
序号 |
属性 |
类型 |
说明 |
|
1 |
cmd |
String |
指令类型 |
|
2 |
data |
数据对象 |
指令详细信息,json对象 |
帽子端根据cmd属性判断指令类型,根据data属性数据完成相应操作。具体指令包括:
1. 更新抓拍频率指令
云平台下发json格式指令{"cmd":"update_capture_frequency","data":{"frequency":5}}
2. 更新上报信息频率指令
云平台下发json格式指令{"cmd":"update_report_frequency","data":{"frequency":5}}
3. 上传指定日期的离线照片
云平台下发json格式指令
{"cmd":"upload_offline_photo","data":{"photoDate":["2025-11-15","2025-09-05"]}}
4. 删除指定日期的离线照片
云平台下发json格式指令
{"cmd":"delete_offline_photo","data":{"photoDate":["2025-11-15","2025-09-05"]}}
一、 简要说明
1. 本文档为帽子与云平台对接进行消息订阅与发布相关功能的说明文档。
2. 采用MQTT协议进行消息通信,也兼容ws/wss协议
3. 平台可以接受消息丢失,Mqtt消息质量Qos均采用0
4. 帽子需要订阅私有主题:acdpf/aqm/<设备序列号>
5. 帽子需要订阅广播主题:acdpf/aqm/all
6. 帽子上报设备信息主题:acdpf/aqm/info
7. 帽子推送抓拍照片主题:acdpf/aqm/capture
8. 请先使用帽子的唯一序列号在云平台注册帽子,再扫码获取消息服务器连接信息,可以直接通过云平台下发信息进行联调测试
9. 云平台操作说明见附件一
二、 执法仪订阅消息
私有主题:acdpf/aqm/<设备序列号>
广播主题:acdpf/aqm/all
2.1 更新抓拍频率指令
平台会通过广播和私有主题给所有设备或特定设备下发更新抓拍频率指令。指令格式为:
{"cmd":"update_capture_frequency","data":{"frequency":5}}
2.2 更新上报信息频率指令
平台会通过广播和私有主题给所有设备或特定设备下发更新上报信息频率指令。指令格式为:
{"cmd":"update_report_frequency","data":{"frequency":5}}
2.3 立即上报信息指令
平台会通过广播和私有主题给所有设备或特定设备下发立即上报信息指令。指令格式为:
{"cmd":"report_info_now"}
2.4 上传指定日期的离线照片指令
平台会通过私有主题给特定设备下发上传指定日期的离线照片指令。指令格式为:
{"cmd":"upload_offline_photo","data":{"photoDate":["2025-11-15","2025-09-05"]}}
2.5 删除指定日期的离线照片指令
平台会通过私有主题给特定设备下发删除指定日期的离线照片指令。指令格式为:
{"cmd":"delete_offline_photo","data":{"photoDate":["2025-11-15","2025-09 05"]}}
三、 执法仪发送消息
3.1 上报设备信息
发送主题:acdpf/aqm/info
消息结构:
表1. 上报信息数据结构
|
序号 |
属性 |
类型 |
说明 |
|
1 |
serialNo |
String |
设备唯一序列号 |
|
2 |
batteryLevel |
Float |
设备剩余电量0-100 |
|
3 |
captureFrequency |
Integer |
定时抓拍频率(秒) |
|
4 |
networkMode |
Integer |
网络模式(0-4G,1-wifi) |
|
5 |
captureState |
Integer |
定时抓拍任务状态(0-已停止,1-已启动) |
|
6 |
devicePhoto |
Object[] |
按日期分组,数据对象属性见表2 |
|
7 |
timestamp |
Long |
当前时间的毫秒级时间戳 |
表2. 上报信息devicePhoto属性数据项结构
|
序号 |
属性 |
类型 |
说明 |
|
1 |
date |
String |
日期 |
|
2 |
number |
Integer |
数量 |
示例:
{
"serialNo": "aqm_00000001",
"batteryLevel": 50,
"captureFrequency": 20,
"networkMode": 1,
"captureState": 0,
"devicePhoto": [
{"date": "2025-11-24", "number": 10},
{"date": "2025-11-26", "number": 64}
],
"timestamp": 1764585297108
}
3.2 推送抓拍照片
推送抓拍照片采用消息体采用字节流模式,消息内容包含元数据文本和图片,消息体由元数据文本字节数组和图片字节数据构成,通过0x00进行分割连接为一个字节数组进行发送。
发送主题:acdpf/aqm/capture
元数据结构:
表3. 推送照片的元数据结构
|
序号 |
属性 |
类型 |
说明 |
|
1 |
serialNo |
String |
设备唯一序列号 |
|
3 |
captureType |
Integer |
照片来源(1-定时自动抓拍,2-手动抓拍) |
|
4 |
photoTime |
Long |
照片拍摄时间,毫秒级时间戳 |
|
5 |
timestamp |
Long |
当前时间的毫秒级时间戳 |
示例:
元数据:String meta = "{\"serialNo\":\"aqm_00000001\",\"captureType\":2,\"photoTime\":1764644764807,\"timestamp\":1764644764807}";
Byte[] metaBytes = meta.getBytes(StandardCharsets.UTF_8);
图片数据:byte[] imageBytes = getImageByte(“1.jpg”)
// 连接字节数组,构造消息体
byte[] payload = concatBytes(metaBytes, new byte[]{0x00}, imageBytes);
