Skip to content

Latest commit

 

History

History
570 lines (457 loc) · 12.1 KB

dcp_v2.md

File metadata and controls

570 lines (457 loc) · 12.1 KB

智能车载设备通讯规约「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":{
  }
}

回到目录

msg_head 定义

字段 类型 描述
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 消息发送的时间戳

msg_body 定义

由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 资源上传凭证响应

回到目录