智能车载设备通讯规约「Device Communication Protocol,DCP」
[TOC]
- 设备:指各类能够联网的物联网设备(如:智能后视镜、大屏机、行车记录仪等),这些设备通过「物联网卡」实现网络通讯,因此需要约定设备与后台之间的通讯协议;
- 平台:指为设备接入提供各项服务的软件总称(如:设备接入网关、业务处理网关、中间件服务层);
- IMEI: 每台设备都有一个唯一标识码(如:IMEI);
- MQTT:详细约定见 ;
- 消息:是指设备与后台之间的传输的具体规约内容(必须是JSON格式);
- productkey:产品id,是由平台分配给设备的唯一产品标识;
- deviceName:设备名称,productKey下唯一
- deviceid:设备id,是由平台分配给产品下设备的唯一内部标识
- 设备与后台之间采用
标准、开源的MQTT
,采取订阅与发布,作为彼此的通讯约定; - 设备上行指令,是通过订阅
/productKey/deviceName/update
主题进行发布; - 后台对设备的下行指令,是通过订阅
/productKey/deviceName/get
主题进行发布; - 主题中消息内容必须是
JSON
格式提供,完整的的消息内容是由:+消息头+消息体,示例如下:
消息头 | 消息体 |
---|---|
msg_head | msg_body |
举例:
{
"msg_head":{
"ver":1,
"sid":1,
"cid":1,
"did":"11234344242AF32",
"seq":1,
"res":0,
"timestamp":1414141423
},
"msg_body":{
}
}
字段 | 类型 | 描述 |
---|---|---|
ver | Int | 协议版本号 |
sid | int | service id 协议服务id |
cid | Int | command id 命令字 |
did | String | device id 设备唯一标识 |
seq | Int | 消息流水号,由消息发起方维护,从1开始,至0xFFFF结束 |
res | Int | 是否要求接受方通用应答,0-无须应答 1-要应答 |
timestamp | Int | 消息发送的时间戳 |
由sid和cid具体确定
- sid 根据业务应用场景和设备与平台之间的数据通道,分为以下三种情况:
- D2P: 平台的指令下发和设备应答,比如远程拍照:0x01
- P2D: 设备请求平台数据和平台应答,比如查询天气和路况:0x02
- DR: 设备主动上报数据和平台签收,比如位置上报:0x03
- sid作为IotHub的规则引擎主要过滤条件
- 不管是平台还是设备收到的消息内容中,如果有res=1,则表示要对该消息进行通用应答处理;
- 多媒体资源文件命名规则 = deviceID_timestamp.扩展名
- 本协议中各个消息中涉及到的命令字ID,为了描述方便,而在文中使用0x方式表达,但在实际消息内容中,该命令字应为10进制整数类型;
####设备位置信息上报
- sid: 0x03
- cid: 0x0101
- 位置信息上报的消息体是由
位置基本信息
和位置附加信息
两项组成,其中位置附加信息
是由各位置附加信息项组合,如:基站信息等,也可为空。 - 位置信息上报平台不做签收
- msg_body:
{
"pos_base":{
"alarm_flag":0, //报警标志位定义,见表1
"status":0, //设备状态位定义,见表2
"lat":112.32434,//以度为单位的纬度值乘以10的6次方,精确到百万分之一度
"lon":32.23434, //以度为单位的经度值乘以10的6次方,精确到百万分之一度
"altitude":234, //海拨高度,单位为米(m)
"speed":128, //速度,单位百公里/h
"direct":328,//方向,0-359,正北为0,顺时针
"gpstime":134343434,//GPS时间戳
"satelite":4, //卫星颗数
"gsm":24, //GSM信号强度
"battery":32.8, //电瓶电压值
"mileage":11438.2, //对应车上的里程表数
}
"pos_ext" :{
"cell":[
{
"mcc":460,//终端国家标识
"mnc":0,//终端运营商标识 0移动 1联调
"lac":1234, //区号
"cellid":32, //基站号
"dbm":23, //信号强度
"rssi":233, //
"time":1223434 //基站数据采集时间
},
{
"mcc":460,
"mnc":1,
"lac":2234,
"cellid":42,
"dbm":44,
"rssi":322,
"time":1223434 //基站数据采集时间
}
]
}
}
表1_报警标志位定义
位 | 定义 | 处理说明 |
---|---|---|
0 | 1:紧急报警 | |
1 | 1:超速报警 | |
2 | 1:疲劳报警 | |
3 | 1:危险驾驶 | |
4 | 1:碰撞预警 | |
5 | 1:侧翻预警 | |
6-31 | 保留 |
表2_状态位定义
位 | 状态 |
---|---|
0 | 0: ACC 关 1:ACC 开 |
1 | 0:未定位 1:定位 |
2 | 0:北纬 1:南纬 |
3 | 0:东经 1:西经 |
4 - 31 | 保留 |
- 设备上下线由IotHub来通知,无法自定义格式,IotHub格式如下
{
"status":"online"(或offline),
"productKey":"xxx",
"deviceName":"sss",
"deviceId":"deviceId",
"time":"2015-12-23 00:00:00", //发送回调时间点.
"lastTime":"2015-12-23 18:23:00" //状态变更时最后一次通信时间
}
- 设备上下线由IotHub来通知,无法自定义格式,IotHub格式如下
{
"status":"active",
"productKey":"xxx",
"deviceName":"sss",
"deviceId":"deviceId",
"time":"2015-12-23 18:23:01" //发送回调时间点.
}
- 指令下发有服务器发往设备端,并由设备响应
- sid: 0x01
- cid : 0x8201
- msg_body:空
- sid: 0x01
- cid: 0x0201
- msg_body:
{
"alarm_flag":0, //报警标志位定义,见表1
"status":0, //设备状态位定义,见表2
"lat":112.32434,//以度为单位的纬度值乘以10的6次方,精确到百万分之一度
"lon":32.23434, //以度为单位的经度值乘以10的6次方,精确到百万分之一度
"altitude":234, //海拨高度,单位为米(m)
"speed":128, //速度,单位百公里/h
"direct":328,//方向,0-359,正北为0,顺时针
"gpstime":134343434,//GPS时间戳
"satelite":4, //卫星颗数
"gsm":24, //GSM信号强度
"battery":32.8, //电瓶电压值
"mileage":11438.2, //对应车上的里程表数
}
- sid: 0x01
- cid:0x8202
- msg_head.res 必须为1
- msg_body:
{
"params":{
"0xF001": 0,
"0xF002": 2,
//......
}
}
- sid: 0x01
- cid:0x0202
- msg_body:
{
"result": 0,
"desc":"",
"data": {
"0xF001": 0,
"0xF002": 2,
//......
}
}
表3_设备参数项
参数项 | 参数描述 | 参数取值 |
---|---|---|
0xF001 | 语音播报模式 | 0-标准模式 1-简洁模式 2-静默模式 |
0xF002 | 雷达预警模式 | 0-自动 1-郊区 2-市区 3-静默 |
0xF003 | 云播报-路况设置 | 0-开 1-关 |
0xF004 | 云播报-天气设置 | 0-开 1-关 |
0xF005 | 云播报-事件设置 | 0-开 1-关 |
0xF006 | 流动静音 | 0-关 20~60 |
0xF007 | 亮度设置 | 0-关 1~10 |
0xF008 | 音量设置 | 0-关 1~6 |
0xF009 | 震动灵敏度 | 0-关 1-低 2-中 3-高 |
- sid: 0x01
- cid :0x8203
- msg_body: 空
- sid: 0x01
- cid : 0x0203
- msg_body:
{
"result":0,
"desc":"",
"data":{
"0xF001":1,
"0xF002":0,
//......
}
}
- sid: 0x01
- cid :0x8205
- msg_body:
{
"quality":0, //图像质量 0-低 1-中 2-高
"channel":0, //摄像头通道开启约定,见表4
"photos":1, //每个摄像头抓拍图像张数(保留)
"interval":10 //每个摄像头抓拍间隔,单位:秒
}
- sid: 0x01
- cid:0x0205
- msg_body:
{
"result":0,
"desc":"xxx",
"data": {
"filename":"照片文件名",
"buckname":"云存储空间名",
"channel":0, //哪个摄像头通道产生,见表4
"model":0 //0-远程控制 1-震动 2-SOS报警
}
}
- sid: 0x01
- cid:0x8206
- msg_body:
{
"quality":0, //视频质量 0-低 1-中 2-高
"channel":0, //摄像头通道开启约定,见表4
"times":10 //每个摄像头录制时长,单位:秒
}
- sid: 0x01
- cid:0x0206
- msg_body:
{
"result":0,
"desc":"xxx",
"data": {
"filename":"视频文件名",
"buckname":"云存储空间名",
"channel":0, //哪个摄像头通道产生,见表4
"model":0 //0-远程控制 1-震动 2-SOS报警
}
}
表4_摄像头开启约定表
位 | 摄像头通道 |
---|---|
0 | 前摄像头 |
1 | 后摄像头 |
2 | 左摄像头 |
3 | 右摄像头 |
4 | 内置摄像 |
5-7 | 保留 |
- sid: 0x01
- cid:0x8207
- 后台向指定设备下发文本信息,设备根据内容自行进行播报,
- msg_body:
{
"text":"utf-8编码格式"
}
- sid: 0x01
- cid:0x0207
- 设备响应后台的文本信息下发
- msg_body:
{
"result":0,
"desc":"xxx"
}
- sid: 0x02
- cid:0x0501
- 设备向后台查询指定经纬度的当天天气信息
- msg_body:
{
"lng":112.34343,
"lat":23.23434
}
- sid: 0x02
- cid:0x8501
- 后台应答指定经纬度的当天天气信息
- msg_body:
{
"result":0,
"desc":"xxx",
"data": {
"lng":112.3434,
"lat":32.34324,
"city":"城市名称",
"date":"2017-02-24",
"weather_temp":"-28或32",
"weather_desc":"天气信息描述,一般用于TTS播报"
}
}
- sid: 0x02
- cid:0x0502
- 设备向后台查询指定经纬度附近的实时路况信息,
- msg_body:
{
"lng":112.23434,
"lat":32.3434,
"road_condition":0 //参考表5
}
- sid: 0x02
- cid:0x8502
- 后台应答指定经纬度附近的实时路况信息
- msg_body:
{
"result":0,
"desc":"xxx",
"data": {
"lng":112.23432,
"lat":32.2434,
"road_condition":0,
"road_desc":"路况信息描述,一般用于TTS播报"
}
}
表5_路况约定
路况类型 | 描述 |
---|---|
0 | 周边路况 |
1 | 前方路况 |
- sid: 0x02
- cid:0x0601
- 设备需要上传资源(图片/视频)时,需要向后台发起请求,获取资源上传授权凭证后,方可进行资源上传。
- msg_body: 空
- sid: 0x02
- 消息ID:0x8601
- 平台响应终端的资源上传凭证申请要求,消息体格式约定如下:
{
"result":0,
"desc":"xxx",
"data": {
"upload_token":"2343434343",
"buckname":"存储空间名称",
"upload_domain":"上传域名",
"upload_port":"上传端口"
}
}
sid | cid | 描述 |
---|---|---|
0x03 | 0x0101 | 设备位置信息上报 |
0x01 | 0x8201 | 位置信息查询 |
0x01 | 0x0201 | 位置信息查询响应 |
0x01 | 0x8202 | 设置设备参数 |
0x01 | 0x0202 | 设置设备参数响应 |
0x01 | 0x8203 | 查询设备参数设置 |
0x01 | 0x0203 | 查询设备参数设置响应 |
0x01 | 0x8205 | 控制设备远程拍照 |
0x01 | 0x0205 | 设备远程拍照响应 |
0x01 | 0x8206 | 控制设备远程录像 |
0x01 | 0x0206 | 设备远程录像响应 |
0x01 | 0x8207 | 文本信息下发 |
0x01 | 0x0207 | 文本信息下发响应 |
0x02 | 0x0501 | 设备查询天气信息 |
0x02 | 0x8501 | 查询天气信息应答 |
0x02 | 0x0502 | 设备查询实时路况 |
0x02 | 0x8502 | 查询实时路况响应 |
0x02 | 0x0601 | 设备查询资源上传凭证 |
0x02 | 0x8601 | 资源上传凭证响应 |