26 KiB
EMQX GBT/32960 网关
该文档定义了 GBT/32960 网关和 EMQX 之间数据交换的格式
约定:
- Payload 采用 Json 格式进行组装
- Json Key 采用大驼峰格式命名
- 使用车辆的
vin
值作为clientid
- 默认挂载点为: gbt32960/${clientid}
Upstream
数据流向: Terminal -> GBT/32960 -> EMQX
车辆登入
Topic: gbt32960/${clientid}/upstream/vlogin
{
"Cmd": 1,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"ICCID": "12345678901234567890",
"Id": "C",
"Length": 1,
"Num": 1,
"Seq": 1,
"Time": {
"Day": 29,
"Hour": 12,
"Minute": 19,
"Month": 12,
"Second": 20,
"Year": 12
}
}
}
其中
字段 | 类型 | 描述 |
---|---|---|
Cmd |
Integer | 命令单元; 1 表示车辆登入 |
Encrypt |
Integer | 数据单元加密方式,1 表示不加密,2 数据经过 RSA 加密,3 数据经过 ASE128 算法加密;254 表示异常;255 表示无效;其他预留 |
Vin |
String | 唯一识别码,即车辆 VIN 码 |
Data |
Object | 数据单元, JSON 对象格式。 |
车辆登入的数据单元格式为
字段 | 类型 | 描述 |
---|---|---|
Time |
Object | 数据采集时间,按年,月,日,时,分,秒,格式见示例。 |
Seq |
Integer | 登入流水号 |
ICCID |
String | 长度为20的字符串,SIM 卡的 ICCID 号 |
Num |
Integer | 可充电储能子系统数,有效值 0 ~ 250 |
Length |
Integer | 可充电储能系统编码长度,有效值 0 ~ 50 |
Id |
String | 可充电储能系统编码,长度为 "子系统数" 与 "编码长度" 值的乘积 |
车辆登出
Topic: gbt32960/${clientid}/upstream/vlogout
车辆登出的 Cmd
值为 4,其余字段含义与登入相同:
{
"Cmd": 4,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Seq": 1,
"Time": {
"Day": 1,
"Hour": 2,
"Minute": 59,
"Month": 1,
"Second": 0,
"Year": 16
}
}
}
实时信息上报
Topic: gbt32960/${clientid}/upstream/info
不同信息类型上报,格式上只有 Infos 里面的对象属性不同,通过
Type
进行区分 Infos 为数组,代表车载终端每次报文可以上报多个信息
整车数据
{
"Cmd": 2,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Infos": [
{
"AcceleratorPedal": 90,
"BrakePedal": 0,
"Charging": 1,
"Current": 15000,
"DC": 1,
"Gear": 5,
"Mileage": 999999,
"Mode": 1,
"Resistance": 6000,
"SOC": 50,
"Speed": 2000,
"Status": 1,
"Type": "Vehicle",
"Voltage": 5000
}
],
"Time": {
"Day": 1,
"Hour": 2,
"Minute": 59,
"Month": 1,
"Second": 0,
"Year": 16
}
}
}
其中,整车信息字段含义如下:
字段 | 类型 | 描述 |
---|---|---|
Type |
String | 数据类型,Vehicle 表示该结构为整车信息 |
Status |
Integer | 车辆状态,1 表示启动状态;2 表示熄火;3 表示其状态;254 表示异常;255 表示无效 |
Charging |
Integer | 充电状态,1 表示停车充电;2 行驶充电;3 未充电状态;4 充电完成;254 表示异常;255 表示无效 |
Mode |
Integer | 运行模式,1 表示纯电;2 混动;3 燃油;254 表示异常;255 表示无效 |
Speed |
Integer | 车速,有效值 ( 0~ 2200,表示 0 km/h ~ 220 km/h),单位 0.1 km/h |
Mileage |
Integer | 累计里程,有效值 0 ~9,999,999(表示 0 km ~ 999,999.9 km),单位 0.1 km |
Voltage |
Integer | 总电压,有效值范围 0 ~10000(表示 0 V ~ 1000 V)单位 0.1 V |
Current |
Integer | 总电流,有效值 0 ~ 20000 (偏移量 1000,表示 -1000 A ~ +1000 A,单位 0.1 A |
SOC |
Integer | SOC,有效值 0 ~ 100(表示 0% ~ 100%) |
DC |
Integer | DC,1 工作;2 断开;254 表示异常;255 表示无效 |
Gear |
Integer | 档位,参考原协议的 表 A.1,此值为其转换为整数的值 |
Resistance |
Integer | 绝缘电阻,有效范围 0 ~ 60000(表示 0 k欧姆 ~ 60000 k欧姆) |
驱动电机数据
{
"Cmd": 2,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Infos": [
{
"Motors": [
{
"CtrlTemp": 125,
"DCBusCurrent": 31203,
"InputVoltage": 30012,
"MotorTemp": 125,
"No": 1,
"Rotating": 30000,
"Status": 1,
"Torque": 25000
},
{
"CtrlTemp": 125,
"DCBusCurrent": 30200,
"InputVoltage": 32000,
"MotorTemp": 145,
"No": 2,
"Rotating": 30200,
"Status": 1,
"Torque": 25300
}
],
"Number": 2,
"Type": "DriveMotor"
}
],
"Time": {
"Day": 1,
"Hour": 2,
"Minute": 59,
"Month": 1,
"Second": 0,
"Year": 16
}
}
}
其中,驱动电机数据各个字段的含义是
字段 | 类型 | 描述 |
---|---|---|
Type |
String | 数据类型,此处为 DriveMotor |
Number |
Integer | 驱动电机个数,有效值 1~253 |
Motors |
Array | 驱动电机数据列表 |
驱动电机数据字段为:
字段 | 类型 | 描述 |
---|---|---|
No |
Integer | 驱动电机序号,有效值 1~253 |
Status |
Integer | 驱动电机状态,1 表示耗电;2 发电;3 关闭状态;4 准备状态;254 表示异常;255 表示无效 |
CtrlTemp |
Integer | 驱动电机控制器温度,有效值 0~250(数值偏移 40°C,表示 -40°C ~ +210°C)单位 °C |
Rotating |
Interger | 驱动电机转速,有效值 0~65531(数值偏移 20000表示 -20000 r/min ~ 45531 r/min)单位 1 r/min |
Torque |
Integer | 驱动电机转矩,有效值 0~65531(数据偏移量 20000,表示 - 2000 N·m ~ 4553.1 N·m)单位 0.1 N·m |
MotorTemp |
Integer | 驱动电机温度,有效值 0~250(数据偏移量 40 °C,表示 -40°C ~ +210°C)单位 1°C |
InputVoltage |
Integer | 电机控制器输入电压,有效值 0~60000(表示 0V ~ 6000V)单位 0.1 V |
DCBusCurrent |
Interger | 电机控制器直流母线电流,有效值 0~20000(数值偏移 1000A,表示 -1000A ~ +1000 A)单位 0.1 A |
燃料电池数据
{
"Cmd": 2,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Infos": [
{
"CellCurrent": 12000,
"CellVoltage": 10000,
"DCStatus": 1,
"FuelConsumption": 45000,
"H_ConcSensorCode": 11,
"H_MaxConc": 35000,
"H_MaxPress": 500,
"H_MaxTemp": 12500,
"H_PressSensorCode": 12,
"H_TempProbeCode": 10,
"ProbeNum": 2,
"ProbeTemps": [120, 121],
"Type": "FuelCell"
}
],
"Time": {
"Day": 1,
"Hour": 2,
"Minute": 59,
"Month": 1,
"Second": 0,
"Year": 16
}
}
}
其中,燃料电池数据各个字段的含义是
字段 | 类型 | 描述 |
---|---|---|
Type |
String | 数据类型,此处为 FuleCell |
CellVoltage |
Integer | 燃料电池电压,有效值范围 0~20000(表示 0V ~ 2000V)单位 0.1 V |
CellCurrent |
Integer | 燃料电池电流,有效值范围 0~20000(表示 0A ~ +2000A)单位 0.1 A |
FuelConsumption |
Integer | 燃料消耗率,有效值范围 0~60000(表示 0kg/100km ~ 600 kg/100km) 单位 0.01 kg/100km |
ProbeNum |
Integer | 燃料电池探针总数,有效值范围 0~65531 |
ProbeTemps |
Array | 燃料电池每探针温度值 |
H_MaxTemp |
Integer | 氢系统最高温度,有效值 0~2400(偏移量40°C,表示 -40°C ~ 200°C)单位 0.1 °C |
H_TempProbeCode |
Integer | 氢系统最高温度探针代号,有效值 1~252 |
H_MaxConc |
Integer | 氢气最高浓度,有效值 0~60000(表示 0mg/kg ~ 50000 mg/kg)单位 1mg/kg |
H_ConcSensorCode |
Integer | 氢气最高浓度传感器代号,有效值 1~252 |
H_MaxPress |
Integer | 氢气最高压力,有效值 0~1000(表示 0 MPa ~ 100 MPa)最小单位 0.1 MPa |
H_PressSensorCode |
Integer | 氢气最高压力传感器代号,有效值 1~252 |
DCStatus |
Integer | 高压 DC/DC状态,1 表示工作;2 断开 |
发动机数据
{
"Cmd": 2,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Infos": [
{
"CrankshaftSpeed": 2000,
"FuelConsumption": 200,
"Status": 1,
"Type": "Engine"
}
],
"Time": {
"Day": 1,
"Hour": 22,
"Minute": 59,
"Month": 10,
"Second": 0,
"Year": 16
}
}
}
其中,发动机数据各个字段的含义是
字段 | 类型 | 描述 |
---|---|---|
Type |
String | 数据类型,此处为 Engine |
Status |
Integer | 发动机状态,1 表示启动;2 关闭 |
CrankshaftSpeed |
Integer | 曲轴转速,有效值 0~60000(表示 0r/min ~ 60000r/min)单位 1r/min |
FuelConsumption |
Integer | 燃料消耗率,有效范围 0~60000(表示 0L/100km ~ 600L/100km)单位 0.01 L/100km |
车辆位置数据
{
"Cmd": 2,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Infos": [
{
"Latitude": 100,
"Longitude": 10,
"Status": 0,
"Type": "Location"
}
],
"Time": {
"Day": 1,
"Hour": 22,
"Minute": 59,
"Month": 10,
"Second": 0,
"Year": 16
}
}
}
其中,车辆位置数据各个字段的含义是
字段 | 类型 | 描述 |
---|---|---|
Type |
String | 数据类型,此处为 Location |
Status |
Integer | 定位状态,见原协议表15,此处为所有比特位的整型值 |
Longitude |
Integer | 经度,以度为单位的纬度值乘以 10^6,精确到百万分之一度 |
Latitude |
Integer | 纬度,以度为单位的纬度值乘以 10^6,精确到百万分之一度 |
极值数据
{
"Cmd": 2,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Infos": [
{
"MaxBatteryVoltage": 7500,
"MaxTemp": 120,
"MaxTempProbeNo": 12,
"MaxTempSubsysNo": 14,
"MaxVoltageBatteryCode": 10,
"MaxVoltageBatterySubsysNo": 12,
"MinBatteryVoltage": 2000,
"MinTemp": 40,
"MinTempProbeNo": 13,
"MinTempSubsysNo": 15,
"MinVoltageBatteryCode": 11,
"MinVoltageBatterySubsysNo": 13,
"Type": "Extreme"
}
],
"Time": {
"Day": 30,
"Hour": 12,
"Minute": 22,
"Month": 5,
"Second": 59,
"Year": 17
}
}
}
其中,极值数据各个字段的含义是
字段 | 类型 | 描述 |
---|---|---|
Type |
String | 数据类型,此处为 Extreme |
MaxVoltageBatterySubsysNo |
Integer | 最高电压电池子系统号,有效值 1~250 |
MaxVoltageBatteryCode |
Integer | 最高电压电池单体代号,有效值 1~250 |
MaxBatteryVoltage |
Integer | 电池单体电压最高值,有效值 0~15000(表示 0V~15V)单位 0.001V |
MinVoltageBatterySubsysNo |
Integer | 最低电压电池子系统号,有效值 1~250 |
MinVoltageBatteryCode |
Integer | 最低电压电池单体代号,有效值 1~250 |
MinBatteryVoltage |
Integer | 电池单体电压最低值,有效值 0~15000(表示 0V~15V)单位 0.001V |
MaxTempSubsysNo |
Integer | 最高温度子系统号,有效值 1~250 |
MaxTempProbeNo |
Integer | 最高温度探针序号,有效值 1~250 |
MaxTemp |
Integer | 最高温度值,有效值范围 0~250(偏移量40,表示 -40°C ~ +210°C) |
MinTempSubsysNo |
Integer | 最低温度子系统号,有效值 1~250 |
MinTempProbeNo |
Integer | 最低温度探针序号,有效值 1~250 |
MinTemp |
Integer | 最低温度值,有效值范围 0~250(偏移量40,表示 -40°C ~ +210°C) |
报警数据
{
"Cmd": 2,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Infos": [
{
"FaultChargeableDeviceNum": 1,
"FaultChargeableDeviceList": ["00C8"],
"FaultDriveMotorNum": 0,
"FaultDriveMotorList": [],
"FaultEngineNum": 1,
"FaultEngineList": ["006F"],
"FaultOthersNum": 0,
"FaultOthersList": [],
"GeneralAlarmFlag": 3,
"MaxAlarmLevel": 1,
"Type": "Alarm"
}
],
"Time": {
"Day": 20,
"Hour": 22,
"Minute": 23,
"Month": 12,
"Second": 59,
"Year": 17
}
}
}
其中,报警数据各个字段的含义是
字段 | 类型 | 描述 |
---|---|---|
Type |
String | 数据类型,此处为 Alarm |
MaxAlarmLevel |
Integer | 最高报警等级,有效值范围 0~3,0 表示无故障,1 表示 1 级故障 |
GeneralAlarmFlag |
Integer | 通用报警标志位,见原协议表 18 |
FaultChargeableDeviceNum |
Integer | 可充电储能装置故障总数,有效值 0~252 |
FaultChargeableDeviceList |
Array | 可充电储能装置故障代码列表 |
FaultDriveMotorNum |
Integer | 驱动电机故障总数,有效置范围 0 ~252 |
FaultDriveMotorList |
Array | 驱动电机故障代码列表 |
FaultEngineNum |
Integer | 发动机故障总数,有效值范围 0~252 |
FaultEngineList |
Array | 发动机故障代码列表 |
FaultOthersNum |
Integer | 其他故障总数 |
FaultOthersList |
Array | 其他故障代码列表 |
可充电储能装置电压数据
{
"Cmd": 2,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Infos": [
{
"Number": 2,
"SubSystems": [
{
"CellsTotal": 2,
"CellsVoltage": [5000],
"ChargeableCurrent": 10000,
"ChargeableSubsysNo": 1,
"ChargeableVoltage": 5000,
"FrameCellsCount": 1,
"FrameCellsIndex": 0
},
{
"CellsTotal": 2,
"CellsVoltage": [5001],
"ChargeableCurrent": 10001,
"ChargeableSubsysNo": 2,
"ChargeableVoltage": 5001,
"FrameCellsCount": 1,
"FrameCellsIndex": 1
}
],
"Type": "ChargeableVoltage"
}
],
"Time": {
"Day": 1,
"Hour": 22,
"Minute": 59,
"Month": 10,
"Second": 0,
"Year": 16
}
}
}
其中,字段定义如下
字段 | 类型 | 描述 |
---|---|---|
Type |
String | 数据类型,此处为 ChargeableVoltage |
Number |
Integer | 可充电储能子系统个数,有效范围 1~250 |
SubSystem |
Object | 可充电储能子系统电压信息列表 |
可充电储能子系统电压信息数据格式:
字段 | 类型 | 描述 |
---|---|---|
ChargeableSubsysNo |
Integer | 可充电储能子系统号,有效值范围,1~250 |
ChargeableVoltage |
Integer | 可充电储能装置电压,有效值范围,0~10000(表示 0V ~ 1000V)单位 0.1 V |
ChargeableCurrent |
Integer | 可充电储能装置电流,有效值范围,0~20000(数值偏移量 1000A,表示 -1000A ~ +1000A)单位 0.1 A |
CellsTotal |
Integer | 单体电池总数,有效值范围 1~65531 |
FrameCellsIndex |
Integer | 本帧起始电池序号,当本帧单体个数超过 200 时,应该拆分多个帧进行传输,有效值范围 1~65531 |
FrameCellsCount |
Integer | 本帧单体电池总数,有效值范围 1~200 |
CellsVoltage |
Array | 单体电池电压,有效值范围 0~60000(表示 0V ~ 60.000V)单位 0.001V |
可充电储能装置温度数据
{
"Cmd": 2,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Infos": [
{
"Number": 2,
"SubSystems": [
{
"ChargeableSubsysNo": 1,
"ProbeNum": 10,
"ProbesTemp": [0, 0, 0, 0, 0, 0, 0, 0, 19, 136]
},
{
"ChargeableSubsysNo": 2,
"ProbeNum": 1,
"ProbesTemp": [100]
}
],
"Type": "ChargeableTemp"
}
],
"Time": {
"Day": 1,
"Hour": 22,
"Minute": 59,
"Month": 10,
"Second": 0,
"Year": 16
}
}
}
其中,数据格式为:
字段 | 类型 | 描述 |
---|---|---|
Type |
String | 数据类型,此处为 ChargeableTemp |
Number |
Integer | 可充电储能子系统温度信息列表长度 |
SubSystems |
Object | 可充电储能子系统温度信息列表 |
可充电储能子系统温度信息格式为
字段 | 类型 | 描述 |
---|---|---|
ChargeableSubsysNo |
Ineteger | 可充电储能子系统号,有效值 1~250 |
ProbeNum |
Integer | 可充电储能温度探针个数 |
ProbesTemp |
Array | 可充电储能子系统各温度探针温度值列表 |
数据补发
Topic: gbt32960/${clientid}/upstream/reinfo
数据格式: 略 (与实时数据上报相同)
Downstream
请求数据流向: EMQX -> GBT/32960 -> Terminal
应答数据流向: Terminal -> GBT/32960 -> EMQX
下行主题: gbt32960/${clientid}/dnstream 上行应答主题: gbt32960/${clientid}/upstream/response
参数查询
Req:
{
"Action": "Query",
"Total": 2,
"Ids": ["0x01", "0x02"]
}
字段 | 类型 | 描述 |
---|---|---|
Action |
String | 下发命令类型,此处为 Query |
Total |
Integer | 查询参数总数 |
Ids |
Array | 需查询参数的 ID 列表,具体 ID 含义见原协议 表 B.10 |
Response:
{
"Cmd": 128,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Total": 2,
"Params": [
{"0x01": 6000},
{"0x02": 10}
],
"Time": {
"Day": 2,
"Hour": 11,
"Minute": 12,
"Month": 2,
"Second": 12,
"Year": 17
}
}
}
参数设置
Req:
{
"Action": "Setting",
"Total": 2,
"Params": [{"0x01": 5000},
{"0x02": 200}]
}
字段 | 类型 | 描述 |
---|---|---|
Action |
String | 下发命令类型,此处为 Setting |
Total |
Integer | 设置参数总数 |
Params |
Array | 需设置参数的 ID 和 值 |
Response:
// fixme? 终端是按照这种方式返回?
{
"Cmd": 129,
"Encrypt": 1,
"Vin": "1G1BL52P7TR115520",
"Data": {
"Total": 2,
"Params": [
{"0x01": 5000},
{"0x02": 200}
],
"Time": {
"Day": 2,
"Hour": 11,
"Minute": 12,
"Month": 2,
"Second": 12,
"Year": 17
}
}
}
终端控制
命令的不同, 参数不同; 无参数时为空
远程升级: Req:
{
"Action": "Control",
"Command": "0x01",
"Param": {
"DialingName": "hz203",
"Username": "user001",
"Password": "password01",
"Ip": "192.168.199.1",
"Port": 8080,
"ManufacturerId": "BMWA",
"HardwareVer": "1.0.0",
"SoftwareVer": "1.0.0",
"UpgradeUrl": "ftp://emqtt.io/ftp/server",
"Timeout": 10
}
}
字段 | 类型 | 描述 |
---|---|---|
Action |
String | 下发命令类型,此处为 Control |
Command |
Integer | 下发指令 ID,见原协议表 B.15 |
Param |
Object | 命令参数 |
列表
车载终端关机:
{
"Action": "Control",
"Command": "0x02"
}
...
车载终端报警:
{
"Action": "Control",
"Command": "0x06",
"Param": {"Level": 0, "Message": "alarm message"}
}