乐高易车联网网关中间件使用手册
广西乐高易网络有限公司
www.legaoyi.com
修订日期:2024年2月20日
目录
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
1.引用标准
GB/T32960.3-2016《电动汽车远程服务与管理系统技术规范 第3部分通讯协议及数据格式》
2.系统架构
netty/mina网关支持近200多种网络接入协议,全面覆盖市场上的终端设备,轻松连接各种车联网终端设备。网关采用MQ消息中间件以json消息(支持Kafka/RabbitMQ/ActiveMQ与业务平台进行数据交换,能够无缝接入各种异构系统。车联网网关主要功能包括:
一、 协议封装
车联网网关屏蔽了车载终端设备通讯协议的复杂性以及异构性,提供标准的json消息与业务平台进行交互,业务平台只需要按照车联网网关规定的json消息格式将消息发送至指定MQ消息队列/主题当中即可。车联网网关对json消息进行数据转换、协议适配,封装成符合各种车载终端设备的通讯协议的消息。
二、 协议解析
车联网网关屏蔽了车载终端设备通讯协议的复杂性以及异构性,对车载终端设备上行的消息进行协议适配、数据转换,封装成标准的json消息,并发送到指定的MQ消息队列/主题当中与业务平台进行数据交换。
三、 链路管理
车联网网关根据车载终端设备通讯协议的通讯方式、链路管理规范,管理接入设备与车联网网关之间的链路通讯、状态维护、链路状态通知等。
四、 数据交换
车联网网关按照车载终端设备通讯协议的规范,现实车载终端设备与业务平台之间的数据传输功能。
五、 安全控制
车联网网关具备流量控制、过载保护、数据加密、IP黑名单等安全控制功能。
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
3.消息定义
3.1 数据交换方式
车联网网关(中间件)与业务平台之间通过json+MQ消息队列/主题方式进行数据交换,载终端设备发送到车联网网关(中间件)的协议消息,由网关中间件进行数据转换成为标准的json消息并发送到对应的MQ消息队列/主题中,业务平台通过监听对应的MQ消息队列/主题获得对应的消息,然后根据自身业务需求进行业务处理。当业务平台需要与车载终端设备进行通信时,业务平台根据本文定义的消息格式把对应的消息发送至对应MQ消息队列/主题中即可,车联网网关(中间件)会监听对应的MQ消息队列/主题获取相关的消息并按照协议的规定进行消息转换,封装成协议指定的消息格式发送到车载终端设备上。
3.2 数据交换队列/主题
(1){elink.upstream.urgent.topic}:车联网网关紧急上行消息队列/主题,该队列/主题主要存放车载终端设备注册、鉴权、上下线等消息。业务平台可监听该队列/主题获取相关消息。
(2){elink.upstream.gps.topic}:车联网网关位置信息上行消息队列/主题,业务平台可监听该队列/主题获取相关终端设备上传的位置信息。
(3){elink.upstream.common.topic}:车联网网关普通上行消息队列/主题,该队列/主题存放(1)(2)以外的上行消息。业务平台可监听该队列/主题获取相关的消息。
(4){elink.gateway.id}:业务平台普通下行消息队列/主题,业务平台通过该队列/主题下发消息到车载终端设备(该队列/主题对应的rabbitmq网关为“elink.downstream.message.direct.exchange”消息路由key为车联网网关的网关id(“elink.gateway.id”),业务平台把消息发送到该rabbitmq网关即可)。
3.3 数据交换消息类型
(1)上行消息(车载终端设备向业务平台发送的消息):
{
"messageId":"0000",
"gatewayId":"网关id",
"exchangeId":"消息流水号",
"createTime":"接收时间",
"message":{
消息体
},
"dataLength":"消息字节数"
}
注意:messageId固定为"0000"。其中消息体定义(message)格式:
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
{
"messageHeader":{
消息头
},
"messageBody":{
消息体
}
}
其中消息体定义(message)的消息头(messageHeader)参数是固定的,消息头格式
字段名
类型
描述
protocol
String
协议名称,如gb32960
protocolVersion
String
协议版本,如2016
deviceSn
String
设备ID,终端设备唯一标识
messageId
String
协议定义的消息id
messageSeq
Long
消息流水号,对于下行消息,业务平台需维护对应设备的消息流水号,范围:0~65535
attributes
Map
消息头扩展属性
消息头样例:
{
"protocol":"gb32960", "protocolVersion":"2016", "deviceSn":"440465321201", "messageId":"0200", "messageSeq":159
}
网关中间件支持的协议以及版本:
协议名称
协议版本
描述
gb32960
2016
GB/T 32960.3-2016 电动汽车远程服务与管理系统技术规范 第3部分:通讯协议及数据格式
其中消息体定义(message)的消息体(messageBody)则根据协议定义各不相同。具体参考下文中对应的消息描述。
(2)下行消息(业务平台向车载终端设备下发的消息):
{
"messageId":"8000",
"gatewayId":"网关id",
"exchangeId":"平台消息流水号",
"message":"{消息体定义}"
}
注意:messageId固定为"8000"。其中消息体定义格式(同上行消息格式一致):
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
{
"messageHeader":{
消息头
},
"messageBody":{
消息体
}
}
其中消息体定义(message)的消息头(messageHeader)参数是固定的,消息头格式(同上行消息格式一致):
{
"protocol":"gb32960", "protocolVersion":"2016", "deviceSn":"440465321201", "messageId":"01", "messageSeq":159
}
其中消息体定义(message)的消息体(messageBody)则根据协议定义各不相同。具体参考下文中对应的消息描述。
(3)车联网网关(中间件)应答消息车联网网关应答业务平台下行消息的处理结果(注意只有平台下行消息中传递了“exchangeId”,网关才会应当该消息),其中messageId固定"0001"。消息格式:
字段名
类型
描述
result
String
-1:未知错误
0:成功
1设备不在线
2:消息有误
3:不支持该消息
desc
String
结果描述
messageId
String
对应下行消息的消息id
消息样例:
{ "messageId":"0001", "gatewayId":"网关id", "exchangeId":"平台消息流水号(平台记录id", "message":{
"messageId":"消息id", "result":"消息处理结果", "desc":"消息处理结果描述" }}
(4)设备状态消息, 其中messageId固定为"0002",消息体描述见下文。
{
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
"messageId":"0002", "gatewayId":"网关id", "exchangeId":"", "message":{
"state":"0 or 1", "deviceSn":"013800000000"
}}
(5)流量异常消息, 如果车联网网关配置了流量控制策略,当车载终端设备的发送消息的频率异常时会触发流量告警,其中messageId固定为"0008",消息体描述见下文。
{ "messageId":"0008", "gatewayId":"网关id", "exchangeId":"", "message":"{消息体定义}"}
(6)解除黑名单消息, 如果车联网网关配置了流量控制策略,当车载终端设备的发送消息的频率异常时会触发流量告警,其中messageId固定为"110",消息体描述见下文。
{ "messageId":"110", "gatewayId":"网关id", "exchangeId":"", "message":"{消息体定义}"}
(7)网关重启消息,车联网网关程序重启后会发送消息通知业务平台,其中messageId固定"0009",消息体描述见下文。
{ "messageId":"0009", "gatewayId":"网关id", "exchangeId":"", "message":"{消息体定义}"}
(8)平台应答终端鉴权消息,业务平台接收到车载终端设备的鉴权消息后,按照该消息格式应答车联网网关,其中messageId固定为"8102",消息体描述见下文。
{ "messageId":"8102", "gatewayId":"网关id", "exchangeId":"", "message":"{消息体定义}"}
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
3.4 车载终端设备状态消息
消息概述
(1) 消息名称:车载终端设备状态消息
(2) 消息id:0x0002
(3) 消息方向:车联网网关->业务平台
(4) 业务逻辑
(1)当车载终端设备连接平台通过鉴权之后,车联网网关向业务平台发布车载终端设备上线消息;
(2)当车载终端设备与网关的链接断开后,车联网网关向业务平台发布车载终端设备下线消息。
消息体定义
字段名
类型
描述
deviceSn
String
终端sim卡号
state
int
0:下线
1:上线
消息示例
{ "exchangeId":"", "messageId":"0002", "gatewayId":"elink-device-gateway", "message":{ "state":1, "deviceSn":”LCF1696G1NF100308” }, "createTime":1540916223639, "dataLength":0}
3.5 车联网网关应答消息
消息概述
(1) 消息名称:车联网网关应答消息
(2) 消息描述业务平台对车载终端设备发送下行消息,车联网网关处理消息后,向业务平台发送应答消息,告知业务平台消息处理结果。
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
(3) 消息方向:车联网网关->业务平台
(4) 业务逻辑业务平台该消息之后,可根据自身业务需要处理该消息,如改变下行消息的状态等。
消息体定义
字段名
类型
描述
result
String
-1:未知错误
0:成功
1设备不在线
2:消息有误
3:不支持该消息
desc
String
结果描述
messageId
String
对应下行消息的消息id
消息示例
{ "messageId":"0001", "gatewayId":"elink-device-gateway", "exchangeId":"000fa0641df04b2ca7d0b1a040844584", "message":{
"messageId":"8500", "result":0, "desc":"处理成功" }}
3.6 网关重启消息通知
消息概述
(1) 消息名称:车联网网关重启消息通知
(2) 消息描述:当车联网网关程序关闭重启之后,向平台发送消息通知网关已重启。
(3) 消息方向:车联网网关->业务平台
(4) 业务逻辑业务平台接收到车联网网关的网关重启通知后,可根据自身业务进行处理,如把连接该网关的车载终端设备状态设置为下线状态消息。
消息体定义
字段名
类型
描述
消息示例
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
{ "exchangeId":"", "messageId":"0008", "gatewayId":"elink-device-gateway", "message":{ }, "createTime":1540916223639, "dataLength":0}
3.7 平台应答车辆登入消息
消息概述
(1) 消息名称:平台应答车辆登入消息
(2) 消息描述:业务平台向车联网网关发送车辆登入应答消息
(3) 消息方向:业务平台 ->车联网网关
(4) 业务逻辑业务平台接收到车联网网关的车辆登入消息(“01”消息)后,对车载终端设备的信息进行校验之后,需要按照规定格式应答,消息格式见下文。
消息体定义
字段名
类型
描述
result
int
鉴权结果,0是通过鉴权,1鉴权失败
protocolVersion
String
协议版本,可选值:2016
messageHeader
Map
应答消息头
messageHeader.protocol
string
协议名称,可选值:gb32960
messageHeader .deviceSn
String
终端设备id,messageId不为空时必须
messageHeader .protocolVersion
String
协议版本,可选值:2016
messageHeader . messageId
String
消息id,可选值:“01”
messageHeader . attributes
Map
消息头属性
attributes. flag
int
0x01 成功(鉴权成功);
0x02 错误(鉴权失败);
messageBody
Map
应答消息体
messageBody.time
int
对应0x01消息体的“time”值
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
消息示例
{ "messageId":"8102", "message":{ "result":0, "messageHeader":{ "protocol":"gb32960", "deviceSn":"LCF1696G1NF100308", "protocolVersion":"2016", "messageId ":"01", "attributes":{ "flag":1 } }, "messageBody":{ "time":1540916071108 } }}
3.8 车辆登入0x01
消息概述
(1) 消息名称:车辆登入
(2) 消息Id:0x01
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑车载设备TBox向服务端上报车辆状态信息前进行登入认证。业务平台接收到鉴权消息之后,对终端信息(校验deviceSn即可)进行鉴权校验,并且回复车联网网关“平台应答车辆登入”消息。
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
messageSeq
Integer
登入流水号
iccId
String
ICCID
subsystem
Integer
可充电储能子系统数
codeList
List<String>
可充电储能系统编码
消息示例
{
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
"exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"01", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "messageSeq":1, "iccId":"1234565", "subsystem":100, "codeList":[ "01", "02" ] } }, "createTime":1540916071108, "dataLength":150}
3.9 实时信息上报0x02
消息概述
(1) 消息名称:实时信息上报
(2) 消息Id0x02
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑车载设备TBox定时向车辆网网关上报实时信息,数据包括整车数据、驱动电机数据等7类数据。业务平台接收到该消息之后,可根据自身业务进行处理。
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,
0x01:整车数据
0x02: 驱动电机数据,
0x03: 燃料电池数据,
0x04: 发动机数据,
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
0x05: 车辆位置数据,
0x06: 极值数据,
0x07: 报警数据,
infoList.其他属性
其他属性见下文
消息示例
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"02", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "infoList":[ { "type":1, "其他属性":"见下文" }, { "type":2, "其他属性":"见下文" } ] } }, "createTime":1540916071108, "dataLength":150}
3.10 补发信息上报0x03
消息概述
(1) 消息名称:补发信息上报
(2) 消息Id 0x03
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑车载设备TBox向车辆网网关上报补发信息,数据包括整车数据、驱动电机数据等7类数据。业务平台接收到该消息之后,可根据自身业务进行处理。
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,
0x01:整车数据
0x02: 驱动电机数据,
0x03: 燃料电池数据,
0x04: 发动机数据,
0x05: 车辆位置数据,
0x06: 极值数据,
0x07: 报警数据,
infoList.其他属性
其他属性见下文
消息示例
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"03", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "infoList":[ { "type":1, "其他属性":"见下文" }, { "type":2, "其他属性":"见下文" } ] } }, "createTime":1540916071108, "dataLength":150}
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
3.11 整车数据上报0x02-01
消息概述
(1) 消息名称:整车数据上报
(2) 消息Id:0x02
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑车载设备TBox向车辆网网关上报整车信息,业务平台可根据自身业务进行处理。
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,0x01:整车数据
infoList. state
Integer
车辆状态
0xO1:车辆启动状态;
0x02:熄火;
0x03:其他状态;
OxFE:表示异常,
0xFF:表示无效
infoList. charging
Integer
充电状态
0x01:停车充电;
0x02:行驶充电;
0x03:未充电状态;
0x04:充电完成;
OxFE:表示异常,
0xFF:表示无效
infoList. type
Integer
运行模式
0x01:纯电;
0x02:混动;
0x03燃油;
OxFE:表示异常
0xFF:表示无效
infoList. speed
Double
车速
有效值范围:0~~2200(表示0 km/h~-220 km/h),
最小计量单元:0.1km/h,
"oxFF,0xFE”表示异常,
“oxFF,0xFF"表示无效
infoList. mileage
Double
累计里程
有效值范围:0~9 999 999(表示 km~g99 999.9 kn),最小计量单元:0.1 km.
“OxFF,0xFF,OxFF,OxFE”表示异常,
"OxFF,0xFF,0xFF,0xFF”表示无效
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
infoList. voltage
Double
总电压
有效值范围:0~10 000(表示0v~1000 V),
最小计量单元:0.1V,
“OxFF,oxFE”表示异常,
“OxFF,0xFF”表示无效
infoList. current
Double
总电流
有效值范围:-1000~10 000(表示-1 000 A~+1000A),
最小计量单元:0.1A,
“oxFF,OxFE”表示异常,
“OxFF,0xFF”表示无效
infoList. soc
Integer
SOC
有效值范围;0~10O(表示0%~100%),最小计量单元:1%,
“xFE”表示异常,
“OxFF”表示无效
infoList. dc
Integer
DC-DC状态
0x01:工作;
0x02:断开,
"OxFE”表示异常,
“OxFF”表示无效
infoList. gear
Integer
挡位
infoList. resistance
Integer
绝缘电阻
有效范围0~60000(表示0千欧~60000千欧),
最小计量单元:1千欧
infoList. gasPedal
Integer
加速踏板行程值
有效值范围:0-100(表示0 -100%),
最小计量单元:1%,
"OxFE”表示异常,
"OxFF”表示无效
infoList. gasPedal
Integer
制动踏板状态
有效值范围:0-100(表示0 -100%),
最小计量单元:1%,
“0’,表示制动关的状态;
在无具体行程值情况下,“0x65” "101”表示制动有效状态,
"OxFE”表示异常,
"oxFF”表示无效
消息示例
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"03", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "infoList":[ { "type":1, "其他属性":"见上文" } ] } }, "createTime":1540916071108, "dataLength":150}
3.12 驱动电机数据上报0x02-02
消息概述
(1) 消息名称:驱动电机数据
(2) 消息Id:0x02
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑车载设备TBox向车辆网网关上报驱动电机数据,业务平台接收到该消息之后,可根据自身业务进行处理。
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,
0x02: 驱动电机数据,
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
infoList. motorList
List<Object>
驱动电机总成信息列表
motorList. seq
Integer
驱动电机序号
驱动电机顺序号,有效值范围1~253
motorList. state
Integer
驱动电机状态
0x01:耗电;
0x02:发电;
0x03,关闭状态;
0x04:准备状态
“xFE”表示异常,
“OxFF”表示无效
motorList. temperature1
Integer
驱动电机控制器温度
有效值范围: -40 ℃~~+210 ℃,最小计量单元:1 ℃,
"oxFE”表示异常,
“OxFF”表示无效
motorList. rotation
Integer
驱动电机转速
有效值范围: -20000 r/ min~45 531 r/ min,最小计量单元: 1 r/ rnin,“xFF,OxFE"表示异常,
“OxFF,0xFF"表示无效
motorList.torque
Integer
驱动电机转矩
有效值范围: -2 000 Nm~4 553.1 N- m,最小计量单元:0.1 N m,
OxFF.oxFE”表示异常,
“oxFF,OxFF”表示无效
motorList. temperature2
Integer
驱动电机温度
有效值范围:-40 ℃~+210 ℃,最小计量单元: 1 ℃,
"oxFE”表示异常,
“OxFF”表示无效
motorList. voltage
Double
电机控制器输人电压
有效值范围:O~60 000(表示0 V~6000 V),最小计量单元:0.1v,
“OxFF,OxFE”表示异常
“OxFF ,0xFF”表示无效
motorList. current
Double
电机控制器直流母线电流
有效值范围:-1000 A~+1000 A),最小计量单元:0.1A,
“OxFF,0xFE”表示异常,
“OxFF,OxFF”表示无效
消息示例
{
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
"exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"02", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "infoList":[ { "type":2, "motorList":[ { "其他属性":"见上文" } ] } ] } }, "createTime":1540916071108, "dataLength":150}
3.13 燃料电池数据0x02-03
消息概述
(1) 消息名称:燃料电池数据
(2) 消息Id:0x02
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑车载设备TBox向车辆网网关上报燃料电池数据。业务平台接收到该消息之后,可根据自身业务进行处理。
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,
0x03: 燃料电池数据
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
infoList. voltage
Integer
电机控制器输人电压
有效值范围;0~20 000(表示0 V~2 o00 V),最小计量单元:0.1 v,“0xFF,0xFE”表示异常,
“OxFF,0xFF”表示无效
infoList. current
Integer
电机控制器直流母线电流
有效值范围:0~20000《表示0A~+2 000A),最小计量单元:0.1A,“OxFF.OxFE”表示异常,“oxFF,0xFF”表示无效
infoList. sfoc
Integer
燃料消耗率
效值范围:0~ 60 000(表示o kg/100 km ~600kg/100 km),最小计量单元:0.01 kg/100 km ,
"oxFF,OxFE”表示异常“OxFF,OxFF”表示无效
infoList. temperatureList
List<Integer>
探针温度值
N个燃料电池温度探针,有效值范围:0~65531 ,
"oxFF,0xFE”表示异常,
"OxFF,oxFF"表示无效
infoList. maxTemperature
Double
氢系统中最高温度
有效值范围;-40 ℃~+200℃),最小计量单元:1 ℃
infoList. maxProbeSeq
Integer
氢系统中最高温度探针代号
有效值范围;1~252,
"0xFE”表示异常,
“OxFF”表示无效
infoList. maxConcentration
Integer
氢气最高浓度
有效值范围;0~6000(表示0mg/ kg~-5000mg/kg),最小计量单元: 1 mg/ kg ,
“oxFF,oxFE”表示异常,
“0xFF,0xFF”表示无效
infoList. maxSensorSeq1
Integer
氢气最高浓度传感器代号
有效值范围;1~252,
"0xFE”表示异常,
“OxFF”表示无效
infoList. maxPressure
Double
氢气最大压力
有效值范围;0~100(表示0 MPa~~ 100 MPa),最小计量单元:0.1 MPa
infoList. maxSensorSeq2
Integer
氢气最高压力传感器代号
有效值范围;1~252,
"0xFE”表示异常,
“OxFF”表示无效
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
infoList.dc
Integer
高压DC/DC状态
0x01,工作;
0x02:断开;
“OxFE"表示异常,
“OxFF”表示无效
消息示例
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"02", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "infoList":[ { "type":3, "其他属性":"见上文" } ] } }, "createTime":1540916071108, "dataLength":150}
3.14 发动机数据0x02-04
消息概述
(1) 消息名称:发送机数据
(2) 消息Id:0x02
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑车载设备TBox向车辆网网关上报发送机数据。业务平台接收到该消息之后,可根据自身业务进行处理。
消息体定义
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,
0x04: 发动机数据,
infoList. state
Integer
发动机状态
0x01 :启动状态;
0x02:关团状态,
“OxFE”表示异常,
“OxFF”表示无效
infoList. rotation
Integer
曲轴转速
有效范围:0~60000(表示0 r/ min~60000 r/rmin),最小计量单元:1 r/ min,
"OxFF,OxFE”表示异常,
OxFF,0xFF”表示无效
infoList. sfoc
Double
燃料消耗率
有效值范围: 0L/100 km~600 L/100 km,最小计量单元:0.01 L/100 km,
"oxFF,0xFE”表示异常,“OxFF,0xFF”表示无效
消息示例
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"02", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "infoList":[ { "type":4, "其他属性":"见上文" }, { "type":2, "其他属性":"见上文" } ]
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
} }, "createTime":1540916071108, "dataLength":150}
3.15 车辆位置数据0x02-05
消息概述
(1) 消息名称:车辆位置数据
(2) 消息Id:0x02
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑车载设备TBox向车辆网网关上报车辆位置数据。业务平台接收到该消息之后,可根据自身业务进行处理。
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,
0x05: 车辆位置数据,
infoList. state
Integer
定位状态
bit0:有效定位;1:无效定位(当数据通信正常,而不能获取定位信息时,发送最后一次有效定位信息,并将定位状态置为无效.)
bit1:0:北纬:1:南纬
bit2:0:东经;1:西经
infoList.lat
纬度
infoList.lng
经度
消息示例
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"02", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
"time":1540916071108, "infoList":[ { "type":5, "其他属性":"见上文" } ] } }, "createTime":1540916071108, "dataLength":150}
3.16 极值数据0x02-06
消息概述
(1) 消息名称:极值数据
(2) 消息Id:0x02
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑:车载设备TBox向车辆网网关上报极值数据。业务平台接收到该消息之后,可根据自身业务进行处理。
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,
0x06: 极值数据
infoList. maxSystemSeq
Integer
最高电压电池子系统号
有效值范围;1~250 ,
“OxFE”表示异常,
“OxFF”表示无效
infoList. maxMonomerSeq
Integer
最高电压电池单体代号
有效值范围:.1~250,
“oxFE”表示异常,
“oxFF”表示无效
infoList. maxVoltage
Double
电池单体电压最高值
有效值范围; 0v~15 V ,
“oxFF,OxFE”表示异常,“oxFF,0xFF”表示无效
infoList. minSystemSeq
Integer
最低电压电池子系统号
有效值范围:1~250,
"OxFE”表示异常,
“OxFF”表示无效
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
infoList. minMonomerSeq
Integer
最低电压电池单体代号
有效值范围:1~250,
"OxFE"表示异常,
“OxFF”表示无效
infoList. minVoltage
Double
电池单体电压最低值
有效值范围: 0 v~15 Vv,
“oxFF,OxFE”表示异常,
“OxFF,0xFF”表示无效
infoList. maxTemperatureSeq
Integer
最高温度子系统号
有效值范围:1一250 ,
"OxFE”表示异常,
"OxFF”表示无效
infoList. maxProbeSeq
Integer
最高温度探针序号
有效值范围:1~~~250,
"oxFE”表示异常,
"OxFF"表示无效
infoList. maxTemperature
Integer
最高温度值
有效值范围: -40 ℃~+210 ℃
"oxFE”表示异常,
“OxFF”表示无效
infoList. minTemperatureSeq
Integer
最低温度子系统号
有效值范围:1~250,
“OxFE”表示异常,
“OxFF”表示无效
infoList. minProbeSeq
Integer
最低温度探针序号
有效值范围:1~250,
“OxFE"表示异常,
“OxFF”表示无效
infoList. minTemperature
Integer
最低温度值
有效值范围;-40 ℃~+210 ℃
"OxFE”表示异常,
“OxFF”表示无效
消息示例
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"02", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108,
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
"infoList":[ { "type":6, "其他属性":"见上文" } ] } }, "createTime":1540916071108, "dataLength":150}
3.17 报警数据0x02-07
消息概述
(1) 消息名称:报警数据
(2) 消息Id:0x02
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑:车载设备TBox向车辆网网关上报报警数据。业务平台接收到该消息之后,可根据自身业务进行处理。
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,
0x07: 报警数据,
infoList. level
Integer
最高报警等级
为当前发生的故障中的最高等级值,有效值范围:0~~3,
“0”表示无故障;
“1"表示1级故障,指代不影响车辆正常行驶的故障;
“2”表示2级故障,指代影响车辆性能,需驾驶员限制行驶的故障;
“3"表示3级故障,为最高级别故障,指代驾驶员应立即停车处理或请求救援的故障;具体等级对应的故障内容由厂商自行定义;
“OxFE”表示异常,
“OxFF”表示无效
infoList. alarm
Integer
通用报警标志
见下图,每bit表示一个告警
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
infoList. batteryFaultList
List<Long>
可充电储能装置故障代码列表
N个可充电储能装置故障
infoList. motorFaultList
List<Long>
驱动电机故障代码列表
N个驱动电机故障
infoList. engineFaultList
List<Long>
发动机故障列表
N个发动机故障
infoList. otherFaultList
List<Long>
其他故障代码列表
N个其他故障代码
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
消息示例
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
"messageHeader":{ "messageId":"02", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "infoList":[ { "type":7, "level":1, "alarm":7, "batteryFaultList":[ 1, 2, 3 ], "motorFaultList":[ 5, 6, 7 ], "engineFaultList":[ 8, 9, 10 ], "otherFaultList":[ 12, 13 ] } ] } }, "createTime":1540916071108, "dataLength":150}
3.18 可充电储能装置电压数据0x02-08
消息概述
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
(1) 消息名称:可充电储能装置电压数据
(2) 消息Id:0x02
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑车载设备TBox向车辆网网关上报可充电储能装置电压数据。业务平台接收到该消息之后,可根据自身业务进行处理。
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,
0x08: 可充电储能装置电压数据
infoList. voltageList
List<>
可充电储能子系统电压信息列表
voltageList. systemSeq
Integer
可充电储能子系统号
有效值范围:.1~250,
“oxFE”表示异常,
“oxFF”表示无效
voltageList. voltage
Double
可充电储能装置电压
有效值范围: 0 V~1 000 V,
“OxFF,0xFE"表示异常,
“OxFF,0xFF"凝示无效
voltageList. current
Double
可充电储能装置电流
有效值范围:-1000A~ + 1 000 A
“0xFF,0xFE”表示异常,
“OxFF,0xFF"表示无效
voltageList. totalCell
Integer
单体电池总数
N个电池单体,有效值范围:1~65531,
"OxFF,0xFE”表示异常,"OxFF,0xFF"表示无效
voltageList. frameStartCellSeq
Integer
本帧起始电池序号
当本帧单体个数超过200时,应拆分成多帧数据进行传输,有效值范围,1~65531
voltageList. cellVoltageList
List<Double>
单体电池电压
有效值范围; 0 V~60.000V,
单体电池电压个数等于本帧单体电池总数m,
“oxFF,OxFE”表示异常,“OxFF,0xFF”表示无效
消息示例
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway",
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
"message":{ "messageHeader":{ "messageId":"02", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "infoList":[ { "type":8, "voltageList":[ { "systemSeq":1, "voltage":10, "current":100, "totalCell":10, "frameStartCellSeq":[ 1, 2, 3 ] } ] } ] } }, "createTime":1540916071108, "dataLength":150}
3.19 可充电储能装置温度数据0x02-09
消息概述
(1) 消息名称:可充电储能装置温度数据
(2) 消息Id:0x02
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑车载设备TBox向车辆网网关上报可充电储能装置温度数据。业务平台接收到该消息之后,可根据自身业务进行处理。
消息体定义
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
字段名
类型
描述
time
Long
数据采集时间戳
infoList
List<String>
信息体列表
infoList.type
Integer
类型编码,
0x09: 可充电储能装置温度数据
infoList. temperatureList
List<>
可充电储能子系统温度信息列表
temperatureList. systemSeq
Integer
可充电储能子系统号
有效值范围:.1~250,
“oxFE”表示异常,
“oxFF”表示无效
temperatureList. temperatureList
List<Double>
可充电储能子系统各温度探针检测到的温度值
N个温度探针, 有效值范围:-40 ℃~+210 ℃,
"oxFE”表示异常,
“OxFF”表示无效
消息示例
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"02", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "infoList":[ { "type":9, "temperatureList":[ { "systemSeq":9, "temperatureList":[ 25, 32 ] } ]
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
} ] } }, "createTime":1540916071108, "dataLength":150}
3.20 车辆登出0x04
消息概述
(1) 消息名称:车辆登出
(2) 消息Id:0x04
(3) 消息方向:车载终端设备->车联网网关->业务平台
(4) 业务逻辑:业务平台接收到该消息之后,可根据自身业务进行处理。
消息体定义
字段名
类型
描述
time
Long
数据采集时间戳
messageSeq
Integer
登出流水号
消息示例
{ "exchangeId":"0", "messageId":"0000", "gatewayId":"elink-device-gateway", "message":{ "messageHeader":{ "messageId":"01", "deviceSn":"LCF1696G1NF100308", "protocol":"gb32960", "protocolVersion":"2016" }, "messageBody":{ "time":1540916071108, "messageSeq":1 } }, "createTime":1540916071108, "dataLength":150}
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
4.二次开发
4.1二次开发准备
一、了解java基础,熟悉搭建java环境
二、熟悉RabbitMQ/Kafka的使用,包括部署、开发、运维监控等
三、熟悉gb32960协议消息的相关业务流程
4.2数据交换流程
4.3消息处理demo
elink-iov-message-processor以责任链方式处理消息,详细逻辑在代码中有注释。代码下载地址:
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
4.4快速测试程序
为了快速完成测试,业务平台在部署RabbitMQ时,可开启web管理端,通过web管理端发送对应消息到相关队列中,即可与车载终端设备进行通讯,如下图所示:
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
4.5应用程序部署
4.5.1依赖环境
操作系统:建议使用linux,centOS 7以上版本。
Java环境:建议安装jdk 1.8。
Rabbitmq:建议安装rabbitmq最新版本。
4.5.2应用程序
elink-iov-gb32960-2016-message-gateway,为java应用程序,运行在java环境上,依赖rabbitmq
4.5.3配置文件
车联网网关配置文件application.properties,存放目录为应用程序根目录下的conf文件夹该文件夹下所有的文件必须,不能删除)。其中application.properties文件修改rabbitmq配置以下两项配置(红色部分),其他的默认配置即可:
#rabbitmq配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
#rabbitmq登陆用户名
spring.rabbitmq.username=admin
#rabbitmq登陆密码
spring.rabbitmq.password=admin
注意其中配置“elink.*.server.port =6030,为车载终端设备连接网关的tcp端口,注意操作系统配置防火墙开放该端口。
4.5.4程序运行
elink-iov-gb32960-2016-message-gateway应用程序复制到安装有java环境的操作系统中即可,应用程序的启动脚本文件放在应用程序根目录下的bin文件夹中。注意启动应用程序前需检查端口是否已被其他应用程序占用(linux下执行命令:netstat -ano|grep 6030)。
windows操作系统
方式一双击 bin/startup.bat执行文件启动应用程序,以该方式启动,命令窗口关闭之后,程序也将停止,不建议以该方式启动。
方式二:以后台服务形式运行,操作步骤
1双击bin/installAppService.bat执行文件把应用程序注册成为win后台服务。注册成功之后,会在win服务列表中有一个名字为
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
elink-iov-gb32960-2016-message-gateway”的服务,该服务为开机自动启动;
2、可以在命令窗口中使用命令或者在服务列表中手动启动或者停止。命令方式:
启动程序:net start elink-iov-gb32960-2016-message-gateway
停止程序:net stop elink-iov-gb32960-2016-message-gateway
3、双击bin/uninstallAppService.bat执行文件,则卸载elink-iov-gb32960-2016-message-gateway已经注册的win后台服务。程序卸载时可双击该执行文件。
linux操作系统
bin/startup.shlinux下启动脚本(需要赋予该文件执行权限:chmod 777 startup.sh)。
启动程序命令:./startup.sh start
停止程序命令:./startup.sh stop
linux命令注解:
console
启动并显示控制台信息
start
作为一个守护进程后台启动
stop
停止程序
restart
重启程序
condrestart
重启已经运行的程序,与前者区别是程序必须已经在运行
status
查看该程序状态
install
将程序安装为自启动服务,即随系统启动而启动
remove
卸载自启动服务
dump
报告运行时的Java thread dump(thread dump百度百科:http://baike.baidu.com/view/5111187.htm)
注意事项:
a启动前需要检查车联网网关所使用的端口是否被占用,linux下命令netstat -ano|grep 6030
b、查看程序是否启动linux命令:ps -aux | grep elink-iov-gb32960-2016-message-gateway
c、若需要重启车联网网关应用,在停止程序之后,需要查看程序所监听端口(如:netstat -ano|grep 6030一般等待一两分钟就能完全释放,取决于操作系统的socket timeout配置)否完全释放在重新启动应用,否则程序启动会报错。
4.5.5日志管理
logback-spring.xml为日志配置文件,通过修改该配置文件可以配置输出日志的级别,台默认级别为info”。当平台已经进入稳定运行阶段,接入的车辆数量比较大时,为了减少打印日志对系统的性能影响,建议把日志级别调整为“error”级别。见以下标红部分:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日志级别 -->
<property name="log.level" value="INFO"/>
<logger name="com.legaoyi.iov.gateway.mq" level="INFO" additivity="false">
<appender-ref ref="mqAppender" />
<appender-ref ref="errorAppender" />
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
</logger>
<!-- 设备上行消息日志 -->
<logger name="com.legaoyi.iov.protocol.server.LoggerChannelInboudHandler" level="INFO" additivity="false">
<appender-ref ref="inboundAppender" />
<appender-ref ref="errorAppender" />
</logger>
<!-- 设备下行消息日志 -->
<logger name="com.legaoyi.iov.protocol.server.LoggerChannelOutboudHandler" level="INFO" additivity="false">
<appender-ref ref="outboundAppender" />
<appender-ref ref="errorAppender" />
</logger>
<root level="${log.level}">
<appender-ref ref="fileAppender" />
<appender-ref ref="errorAppender" />
<appender-ref ref="consoleAppender" />
</root>
</configuration>
8.3.1 elink-iov-gb32960-2016-message-gateway.log
日志文件放在应用程序根目录下的logs文件夹中,默认保留最近7天的日志,默认日志级别为“info”。该日志主要存放了中间件程序运行异常日志.
8.3.2 downstream-message.log
日志文件放在应用程序根目录下的logs文件夹中,默认保留最近7天的日志,默认日志级别为“warn”。该日志存放了业务平台发送到MQ消息日志。
8.3.3 inbound.log
日志文件放在应用程序根目录下的logs文件夹中,默认保留最近7天的日志,默认日志级别为“info”。该日志存放了车载终端设备发送给业务平台的原始消息。
8.3.4 outbound.log
日志文件放在应用程序根目录下的logs文件夹中,默认保留最近7天的日志,默认日志级别为“info”。该日志存放了业务平台发送给车载终端设备的原始消息。
8.3.5 online.log
日志文件放在应用程序根目录下的logs文件夹中,默认保留最近7天的日志。该日志存放了车载终端设备上下线日志。
乐高易软件 乐高易车联网网关中间件 技术支持:78772895QQ
8.3.6 error.log
日志文件放在应用程序根目录下的logs文件夹中,默认保留最近7天的日志。该日志存放了网关处理消息的错误日志。
4.5.6性能优化
一、linux操作系统网络参数优化
修改/etc/sysctl.conf文件,添加以下参数(修改文件之后远行命令/sbin/sysctl -p使配置生效):
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
vm.swappiness = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
net.nf_conntrack_max=6553600
二、linux修改TCP连接数
centos下使用命令ulimit -n-u可以查看linux的最大进程数和最大文件打开数。
修改/etc/security/limits.conf文件,添加以下配置,保存之后重启操作系统。
root soft nofile 204800
root hard nofile 204800
* soft nofile 204800
* hard nofile 204800