更新时间:2024-06-19 08:20:41下载pdf
本文介绍了涂鸦智慧行业车行接入方案,通过涂鸦边缘网关实现与平台通信的能力。
涂鸦提供了接入方案,帮助车行设备快速接入涂鸦开发者平台。车行网关接入边缘网关的方案架构如下图所示:
车行网关采用 MQTT 协议接入边缘网关并进行通信。
请求类型 | 设备能力 | 功能说明 | 指令类型 |
---|---|---|---|
1 | 车场信息同步指令下发 | 同步车场信息。 | 下发 |
2 | 车场信息上报 | 车场信息上报。 | 上报 |
3 | 设备数据同步指令下发 | 边缘网关发送设备列表同步请求,车行网关同步设备列表。 | 下发 |
4 | 设备数据同步消息上报 | 车行网关收到边缘网关发送设备列表同步请求,通过该接口上报车行网关下的车行设备信息。 | 上报 |
5 | 新增固定⻋指令下发 | 新增固定⻋。 | 下发 |
6 | 修改固定⻋指令下发 | 修改固定⻋。 | 下发 |
7 | 删除固定⻋指令下发 | 删除固定⻋。 | 下发 |
8 | 无牌车通行指令下发 | 无牌车通行。 | 下发 |
9 | 新增访客车指令下发 | 新增访客车。 | 下发 |
10 | 修改访客车指令下发 | 修改访客车。 | 下发 |
11 | 删除访客车指令下发 | 删除访客车。 | 下发 |
12 | 访客车延期指令下发 | 访客车延期。 | 下发 |
13 | 生成待支付订单指令下发 | 生成待支付订单。 | 下发 |
14 | 支付结果通知指令下发 | 支付结果通知。 | 下发 |
15 | 锁车指令下发 | 锁车。 | 下发 |
16 | 解锁车指令下发 | 解锁车。 | 下发 |
17 | 新增特殊车指令下发 | 新增特殊车。 | 下发 |
18 | 删除特殊车指令下发 | 删除特殊车。 | 下发 |
19 | 校正车牌事件上报 | 校正车牌事件。 | 上报 |
20 | 数据同步指令下发 | 数据指令同步。 | 下发 |
21 | 缴费记录事件上报 | 上报缴费记录事件。 | 上报 |
22 | 通行事件上报 | 上报通行事件。 | 上报 |
23 | 设备状态上报 | 上报设备的上线、离线消息。 | 上报 |
24 | 道闸当前车辆查询指令下发 | 道闸当前车辆查询。 | 下发 |
25 | 道闸控制指令下发 | 道闸控制。 | 下发 |
车行网关用 MQTT 协议与涂鸦边缘网关进行通信,其中车行网关做客户端,涂鸦边缘网关做 MQTT 代理(Broker)。
ip
:MQTT Broker 设备的 IP 地址。与涂鸦开发者平台联调时,由涂鸦提供。
port
:MQTT Broker 设备的端口。与涂鸦开发者平台联调时,由涂鸦提供。
clientId
:表示车行网关客户端 ID。
username
:车行网关设备厂商标识,与涂鸦开发者平台联调时由涂鸦提供。
password
:sub(md5(clientId + username), 0, 16)
。password
生成示例:
clientId: abcd1234
username: tuya
password: sub(md5(clientId + username), 0, 16)-> c88ba730489ed678
ip
、port
、clientId
、username
需要提前配置到车行网关,便于您的车行网关每次启动都能读取到这些参数,从而连上边缘网关。
推送:gateway/vehicle/out/{clientId}
payload
:base64.Encode(aes.encrypt(payload, password))
消息示例
password: "f4ae303385f24fc8"
payload: `{"t":1655200901,"reqId":"1655200901125274008","reqType":2,"data":{}}`
secPayload: "WMnpAqV9Diuz9hbhb5U5zMN3jgGubWaPGT3xDbY0QnUDy6B72W9pH0Li/cRN5i17dQnWqWZKnkicTZHv0G6WkKtFoEE6dkho0FhVAXOxNiY="
推送:gateway/vehicle/in/{clientId}
payload
:base64.Decode(aes.decrypt(payload, password))
消息示例
password: "f4ae303385f24fc8"
secPayload: "WMnpAqV9Diuz9hbhb5U5zMN3jgGubWaPGT3xDbY0QnUDy6B72W9pH0Li/cRN5i17dQnWqWZKnkicTZHv0G6WkKtFoEE6dkho0FhVAXOxNiY="
payload: `{"t":1655200901,"reqId":"1655200901125274008","reqType":1,"data":{}}`
设备推送和接收的消息要进行 AES 加密及解密:
password
)。加密或解密代码示例
password := "f4ae303385f24fc8"
payload := `{"t":1655199371,"reqId":"1655199371114618671","reqType":1,"data":null}`
data, err := aes_crypto.AesECBEncrypt([]byte(payload), []byte(password))
fmt.Println(err)
base64str := base64.StdEncoding.EncodeToString(data)
fmt.Println(base64str)
dataE, err := base64.StdEncoding.DecodeString(base64str)
fmt.Println(err)
dataD, err := aes_crypto.AesECBDecrypt(dataE, []byte(password))
fmt.Println(err)
fmt.Println(string(dataD))
用于车行信息同步,在车行网关连接上涂鸦边缘网关的 MQTT 服务器后,会发送车行信息同步指令。车行网关接收到指令后上报车场信息。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 1 ,表示同步车场信息。 |
是 |
data | Object | 业务数据。 | 是 |
消息格式
{
"t": 159801061****,
"reqId": 123123****,
"reqType": 1,
"data": {}
}
车行网关上报车场信息。涂鸦边缘网关会对上报的车场信息进行新增或更新。涂鸦边缘网关更新状态后,返回操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 2 ,表示车场信息上报。 |
是 |
data | Object | 业务数据。 | 是 |
+ parkId | String | 车场 ID,最大长度为 64 字符。 | 是 |
+ parkName | String | 车场名称。 | 是 |
+ totalSpaceNum | Integer | 总车位数。 | 是 |
+ freeSpaceNum | Integer | 空闲车位数。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 2,
"data": {
"parkId": "parkId***",
"parkName": "虚拟车场",
"totalSpaceNum": 1000,
"freeSpaceNum": 910
}
}
用于设备数据同步。在车行网关连接上涂鸦边缘网关的 MQTT 服务器后,会发送设备数据同步指令。车行网关接收到指令后,上报设备数据。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 3 ,表示设备数据同步。 |
是 |
data | Object | 业务数据。 | 是 |
消息格式
{
"t": 159801061***,
"reqId": 123123***,
"reqType": 3,
"data": {}
}
车行网关上报设备数据。涂鸦边缘网关会对上报的设备数据进行新增或更新。涂鸦边缘网关更新状态后,返回操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 4 ,表示设备数据同步消息上报。 |
是 |
data | Object | 业务数据。 | 是 |
+ devs | Array | 设备列表。 | 是 |
++ cid | String | 三方设备 ID。建议采用设备端可读取的唯一标识作为 cid ,例如设备的 SN 号、MAC 地址、IMEI 号等。最大长度为 64 字符。 |
是 |
++ deviceName | String | 设备名称。最大长度为 64 字符。 | 是 |
++ installLocation | String | 设备安装地址。最大长度为 64 字符。 | 否 |
++ deviceIp | String | 设备 IP。最大长度为 64 字符。 | 否 |
++ deviceType | String | 设备操作类型。
|
是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 4,
"data": {
"devs": [
{
"cid": "vehicle***",
"parkId": "parkId***",
"deviceName": "车闸进",
"installLocation": "虚拟车行",
"deviceIp": "192.168.1.***",
"deviceType": "1"
},
...
]
}
}
上报设备的在线、离线状态。涂鸦边缘网关更新状态后,返回操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 23 ,表示设备状态上报。 |
是 |
data | Object | 业务数据。 | 是 |
+ cid | String | 三方设备 ID。建议采用设备端可读取的唯一标识作为 cid ,例如设备的 SN 号、MAC 地址、IMEI 号等。最大长度为 64 字符。 |
是 |
+ online | Integer | 设备状态。
|
是 |
响应参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 2 ,表示车场信息上报。 |
是 |
data | Object | 业务数据。 | 是 |
+ success | Bool | 请求结果。
|
是 |
+ msg | String | 响应信息。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 23,
"data": {
"cid": "vehicle***",
"online": 1
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 23,
"data": {
"success": true,
"msg": "success"
}
}
根据 cid
查询设备的当前车辆信息,车行网关收到指令后查询道闸设备当前车辆信息,然后上报结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 24 ,表示道闸当前车辆查询指令下发。 |
是 |
data | Object | 业务数据。 | 是 |
+ cid | String | 三方设备 ID。建议采用设备端可读取的唯一标识作为 cid ,例如设备的 SN 号、MAC 地址、IMEI 号等。最大长度为 64 字符。 |
是 |
响应参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 24 ,表示道闸当前车辆查询指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ success | Bool | 请求结果。
|
是 |
+ msg | String | 响应信息。 | 是 |
+ plateNo | String | 车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
+ captureTime | Long | 查询时间,13 位毫秒时间戳。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 24,
"data": {
"cid": "vehicle***"
}
}
返回结果消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 24,
"data": {
"success": true,
"msg": "success",
"plateNo": "无-B0K123",
"captureTime": 1655284422123,
}
}
车行网关收到道闸控制指令,对应道闸设备进行操作,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 25 ,表示道闸控制指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ cid | String | 三方设备 ID。建议采用设备端可读取的唯一标识作为 cid ,例如设备的 SN 号、MAC 地址、IMEI 号等。最大长度为 64 字符。 |
是 |
+ openModel | Integer | 道闸控制操作类型。
|
是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 25,
"data": {
"cid": "vehicle***",
"openModel": 1
}
}
返回结果消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 25,
"data": {
"success": true,
"msg": "success"
}
}
车行网关收到新增固定⻋指令,进行新增固定车信息,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 5 ,表示新增固定⻋指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ id | String | 固定车唯一识别 ID。 | 是 |
+ cars | Array | 固定车列表。 | 是 |
++ plateNo | String | 车牌号,格式:无-B0KPTX。 | 是 |
+ beginTime | Long | 开始时间,13 位毫秒时间戳。 | 是 |
+ endTime | Long | 结束时间,13 位毫秒时间戳。 | 是 |
+ owner | String | 授权所属用户姓名。最大长度为 64 字符。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 5,
"data": {
"id": "12***",
"cars": [
{
"plateNo": "无-B0K123",
}
],
"beginTime": 1655284422123,
"endTime": 1655284422123,
"owner": "张三"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 5,
"data": {
"success": true,
"msg": "success",
}
}
车行网关收到修改固定⻋指令,进行修改固定车信息,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 6 ,表示修改固定⻋指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ id | String | 固定车唯一识别 ID。 | 是 |
+ cars | Array | 固定车列表。 | 是 |
++ plateNo | String | 车牌号,格式:无-B0KPTX。 | 是 |
+ beginTime | Long | 开始时间,13 位毫秒时间戳。 | 是 |
+ endTime | Long | 结束时间,13 位毫秒时间戳。 | 是 |
+ owner | String | 授权所属用户姓名。最大长度为 64 字符。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 6,
"data": {
"id": "12***",
"cars": [
{
"plateNo": "无-B0K123",
}
],
"beginTime": 1655284422123,
"endTime": 1655284422123,
"owner": "张三"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 6,
"data": {
"success": true,
"msg": "success",
}
}
车行网关收到删除固定⻋指令,进行固定车信息删除,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 7 ,表示删除固定⻋指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ id | String | 固定车唯一识别 ID。最大长度为 64 字符。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 7,
"data": {
"id": "12***"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 7,
"data": {
"success": true,
"msg": "success",
}
}
车行网关收到无牌车通行指令,进行无牌车通行操作,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 8 ,表示无牌车通行指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ cid | String | 三方设备 ID。建议采用设备端可读取的唯一标识作为 cid ,例如设备的 SN 号、MAC 地址、IMEI 号等。最大长度为 64 字符。 |
是 |
+ cardNo | String | 无牌车身份标识码,可以是卡号、手机号、微信号等用户的唯一标识。最大长度为 64 字符。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 8,
"data": {
"cid": "vehicle***",
"cardNo": "156***",
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 8,
"data": {
"success": true,
"msg": "success",
}
}
车行网关收到新增访客车指令,进行新增访客车信息,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 9 ,表示新增访客车指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ id | String | 访客车唯一识别 ID。最大长度为 64 字符。 | 是 |
+ plateNo | String | 车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
+ visitorName | String | 访客名字。最大长度为 64 字符。 | 是 |
+ visitorPhone | String | 访客手机号。最大长度为 64 字符。 | 是 |
+ beginTime | Long | 开始时间,13 位毫秒时间戳。 | 是 |
+ endTime | Long | 结束时间,13 位毫秒时间戳。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 9,
"data": {
"id": "12***",
"plateNo": "无-B0K123",
"visitorName": "visitor",
"beginTime": 1655284422123,
"endTime": 1655284422123,
"visitorPhone": "156***"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 9,
"data": {
"success": true,
"msg": "success",
}
}
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 10 ,表示修改访客车指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ id | String | 访客车唯一识别 ID。最大长度为 64 字符。 | 是 |
+ plateNo | String | 车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
+ visitorName | String | 访客名字。最大长度为 64 字符。 | 是 |
+ visitorPhone | String | 访客手机号。最大长度为 64 字符。 | 是 |
+ beginTime | Long | 开始时间,13 位毫秒时间戳。 | 是 |
+ endTime | Long | 结束时间,13 位毫秒时间戳。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 10,
"data": {
"id": "12***",
"plateNo": "无-B0K123",
"visitorName": "visitor",
"beginTime": 1655284422123,
"endTime": 1655284422123,
"visitorPhone": "156***"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 10,
"data": {
"success": true,
"msg": "success",
}
}
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 11 ,表示删除访客车指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ id | String | 访客车唯一识别 ID。最大长度为 64 字符。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 11,
"data": {
"id": "12***"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 11,
"data": {
"success": true,
"msg": "success",
}
}
车行网关收到访客车延期指令,对现有访客车进行延期操作,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 12 ,表示访客车延期指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ id | String | 访客车唯一识别 ID。最大长度为 64 字符。 | 是 |
+ beginTime | Long | 开始时间,13 位毫秒时间戳。 | 是 |
+ endTime | Long | 结束时间,13 位毫秒时间戳。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 12,
"data": {
"id": "12***",
"beginTime": 1655284422123,
"endTime": 1655284422123
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 12,
"data": {
"success": true,
"msg": "success",
}
}
车行网关收到锁车指令,对车辆进行锁车操作,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 15 ,表示锁车指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ plateNo | String | 锁车车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 15,
"data": {
"plateNo": "无-B0K123"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 15,
"data": {
"success": true,
"msg": "success",
}
}
车行网关收到解锁车指令,对车辆进行解锁车操作,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 16 ,表示解锁车指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ plateNo | String | 解锁车车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 16,
"data": {
"plateNo": "无-B0K123"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 16,
"data": {
"success": true,
"msg": "success",
}
}
车行网关收到新增特殊车指令,新增特殊车辆白名单或黑名单,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 17 ,表示新增特殊车指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ plateNo | String | 车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
+ specialType | String | 特殊车辆类型。
|
是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 17,
"data": {
"plateNo": "无-B0K123",
"specialType": "WHITE_LIST"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 17,
"data": {
"success": true,
"msg": "success",
}
}
车行网关收到删除特殊车指令,删除特殊车辆的白名单或黑名单,然后上报操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 18 ,表示删除特殊车指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ plateNo | String | 车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
+ specialType | String | 特殊车辆类型。
|
是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 18,
"data": {
"plateNo": "无-B0K123",
"specialType": "WHITE_LIST"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 18,
"data": {
"success": true,
"msg": "success",
}
}
工作人员根据通行记录,校正车牌信息后,车行网关上报校正后的车牌信息。涂鸦边缘⽹关收到后更新车牌信息,然后返回操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 23 ,表示设备状态上报。 |
是 |
data | Object | 业务数据。 | 是 |
+ inParkingId | String | 入场 ID。 | 是 |
+ originalPlateNo | String | 原始车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
+ newPlateNo | String | 新车牌号,格式:无-B0KPTY。最大长度为 64 字符。 | 是 |
+ modifyTime | Long | 修改时间,13 位毫秒时间戳。 | 是 |
+ operateId | String | 操作员 ID。最大长度为 64 字符。 | 否 |
+ operateName | String | 操作员姓名。最大长度为 64 字符。 | 否 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 19,
"data": {
"originalPlateNo": "无-B0K123",
"newPlateNo": "无-B0K124",
"modifyTime": 1655284422123,
"operateId": "***",
"operateName": "***"
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 19,
"data": {
"success": true,
"msg": "success",
}
}
生成车辆的待支付订单,车行网关收到指令后,创建订单信息,然后返回信息结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 13 ,表示生成待支付订单指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ plateNo | String | 车牌号,格式:无-B0KPTY。最大长度为 64 字符。 | 是 |
响应参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 13 ,表示生成待支付订单指令响应。 |
是 |
data | Object | 业务数据。 | 是 |
+ success | Bool | 请求结果。
|
是 |
+ msg | String | 响应信息。最大长度为 255 字符。 | 是 |
+ plateNo | String | 车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
+ orderNo | String | 订单 ID。最大长度为 64 字符。 | 是 |
+ inboundTime | Integer | 入场时间,13 位毫秒时间戳。 | 是 |
+ elapsedTime | Integer | 停车时长,单位分钟。 | 是 |
+ startTime | Integer | 开始计费时间,13 位毫秒时间戳。 | 是 |
+ payableAmount | Integer | 应收金额,单位:分。 | 是 |
+ paidAmount | Integer | 实收金额,单位:分。 | 是 |
+ discountAmount | Integer | 优惠金额,单位:分。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 13,
"data": {
"plateNo": "无-B0K123"
}
}
返回结果消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 13,
"data": {
"success": true,
"msg": "success",
"plateNo": "无-B0K123",
"orderNo": "O1234***",
"inboundTime": 1655284422123,
"elapsedTime": 66,
"startTime": 1655284422123,
"payableAmount": 2000,
"paidAmount": 600,
"discountAmount": 1400
}
}
订单支付成功后,发送支付结果通知指令,车行网关收到后操作完成,然后返回操作结果。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 14 ,表示支付结果通知指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ orderNo | String | 订单 ID。最大长度为 64 字符。 | 是 |
+ paidAmount | Integer | 实收金额,单位:分。 | 是 |
+ payMethod | Integer | 支付方式。
|
是 |
+ payTime | Long | 支付时间,13 位毫秒时间戳。 | 是 |
+ payerMobile | String | 支付人手机号。最大长度为 64 字符。 | 否 |
+ payerName | String | 支付人姓名。最大长度为 64 字符。 | 否 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 14,
"data": {
"orderNo": "O1234***",
"paidAmount": 600,
"payMethod": 1,
"payTime": 1655284422123,
"payerMobile": "156***",
"payerName": "张三"
}
}
返回结果消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 14,
"data": {
"success": true,
"msg": "success"
}
}
车行网关收到数据同步指令,根据数据同步类型和参数,上报缴费记录或通行记录。收到指令后返回结果,异步上报数据。
上报规则:
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 20 ,表示数据指令同步指令。 |
是 |
data | Object | 业务数据。 | 是 |
+ dataType | Integer | 将要同步的数据类型。
|
是 |
+ plateNo | String | 车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
+ syncDataParams | Array | 数据同步参数。 | 是 |
++ totalCount | Integer | 时间段内总数。 | 是 |
++ startTime | Long | 统计开始时间,13 位毫秒时间戳。 | 是 |
++ endTime | Long | 统计结束时间,13 位毫秒时间戳。 | 是 |
++ passDirection | Integer | 通行出入类型。
|
是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 20,
"data": {
"dataType": 1,
"syncDataParams": [
{
"totalCount": 100,
"startTime": 1655284422123,
"endTime": 1655284422123,
"passDirection": 1
}
]
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 20,
"data": {
"success": true,
"msg": "success",
}
}
车行网关可以主动上报或接收到数据同步指令后,上报车场的缴费记录数据。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号。推荐 UUID 生成,网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 21 ,表示缴费记录事件上报。 |
是 |
data | Object | 业务数据。 | 是 |
+ records | Array | 缴费记录列表。 | 是 |
++ plateNo | String | 车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
++ orderNo | String | 订单 ID,最大长度为 64 字符。 | 是 |
++ startTime | Long | 开始计费时间,13 位毫秒时间戳。 | 是 |
++ endTime | Integer | 结束计费时间,13 位毫秒时间戳。 | 是 |
++ payMethod | Integer | 支付方式。
|
是 |
++ payTime | Long | 支付时间,13 位毫秒时间戳。 | 是 |
++ payableAmount | Integer | 应收金额,单位:分。 | 是 |
++ paidAmount | Integer | 实收金额,单位:分。 | 是 |
++ discountAmount | Integer | 优惠金额,单位:分。 | 是 |
++ inParkingId | String | 入场 ID,最大长度为 64 字符。 | 是 |
++ voucherType | Integer | 支付凭证。
|
是 |
++ voucherDesc | String | 支付凭证描述,可以是车牌号或卡号等。 | 是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 21,
"data": {
"records": [
{
"plateNo": "无-B0K123",
"orderNo": "O1234***",
"startTime": 1655284422123,
"endTime": 1655284422123,
"paidAmount": 600,
"payMethod": 1,
"payTime": 1655284422123,
"payableAmount": 2000,
"discountAmount": 1400,
"inParkingId": "park***"
"voucherType": 1,
"voucherDesc": "无-B0K123"
}
]
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 21,
"data": {
"success": true,
"msg": "success",
}
}
车行网关可以主动上报或接收到数据同步指令后,上报车场的通行事件数据。
请求参数
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
t | Long | 消息推送时间。 | 是 |
reqId | String | 请求流水号,推荐 UUID 生成。网关可以根据 reqId 监听本次推送的结果。最大长度为 64 字符。 |
是 |
reqType | Integer | reqType = 22 ,表示通行事件上报。 |
是 |
data | Object | 业务数据。 | 是 |
+ records | Array | 通行事件列表。 | 是 |
++ cid | String | 三方设备 ID。 | 是 |
++ plateNo | String | 车牌号,格式:无-B0KPTX。最大长度为 64 字符。 | 是 |
++ passDirection | Integer | 通行出入类型。
|
是 |
++ passTime | Integer | 通行时间,13 位毫秒时间戳。 | 是 |
++ openState | Integer | 开闸状态。
|
是 |
++ imageUrl | String | 图⽚地址,例如:http://xxx.jpg 。最⼤⻓度为 255 字符,地址要求⽀持访问下载。 |
是 |
++ inParkingId | String | 入场 ID。最大长度为 64 字符。 | 是 |
++ operateId | String | 操作员 ID。最大长度为 64 字符。 | 否 |
++ operateName | String | 操作员姓名。最大长度为 64 字符。 | 否 |
++ plateDimension | Integer | 车辆类型。
|
是 |
++ feeDimension | Integer | 收费类型。
|
是 |
++ passDimension | Integer | 通行类型。
|
是 |
消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 22,
"data": {
"records": [
{
"cid": "vehicle***",
"plateNo": "无-B0K123",
"passDirection": 1,
"passTime": 1655284422123,
"openState": 1,
"imageUrl": "http://***.jpg",
"inParkingId": "***",
"operateId": "***",
"operateName": "***",
"plateDimension": 1,
"feeDimension": 1,
"passDimension": 3
}
]
}
}
响应消息格式
{
"t": 1655275***,
"reqId": "16552757***",
"reqType": 22,
"data": {
"success": true,
"msg": "success",
}
}
MQTT 连接示例:
import (
"crypto/md5"
"encoding/hex"
"fmt"
"log"
"time"
mqtt "github.com/eclipse/paho.mqtt.golang"
)
var (
client mqtt.Client
pubTopic string
subTopic string
password string
)
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
var (
username = "tuya_vehicle_***"
clientId = "vehicle_*"
broker = "tcp://ip:port"
)
password = string(genSecKey(clientId, username))
pubTopic = fmt.Sprintf("gateway/vehicle/out/%s", clientId)
subTopic = fmt.Sprintf("gateway/vehicle/in/%s", clientId)
opts := mqtt.NewClientOptions().SetClientID(clientId).SetUsername(username).SetPassword(password)
opts = opts.SetAutoReconnect(true).SetCleanSession(true).SetKeepAlive(5 * time.Second).
SetMaxReconnectInterval(10 * time.Second).
SetConnectRetry(true).SetConnectRetryInterval(time.Second)
opts.AddBroker(broker)
opts.SetOnConnectHandler(func(client mqtt.Client) {
log.Println("connected")
client.Subscribe(subTopic, 1, onMessage)
}).SetConnectionLostHandler(func(client mqtt.Client, err error) {
log.Println("connect lost")
})
client = mqtt.NewClient(opts)
token := client.Connect()
if ok := token.WaitTimeout(time.Second * 10); !ok {
panic("connect timeout")
}
for {
}
}
func onMessage(client mqtt.Client, msg mqtt.Message) {
log.Printf("onmessage, topic:%v, messageId:%v, msg: %+v\n", msg.Topic(), msg.MessageID(), string(msg.Payload()))
// TODO 消息处理逻辑
}
// publish 消息发送
func publish(payload []byte) error {
token := client.Publish(pubTopic, 1, true, payload)
log.Println(token)
return nil
}
func genSecKey(clientID, userName string) []byte {
secKey := genMd5(clientID + userName)[:16]
return []byte(secKey)
}
func genMd5(source string) (md5str string) {
md5Ctx := md5.New()
md5Ctx.Write([]byte(source))
cipherStr := md5Ctx.Sum(nil)
md5str = hex.EncodeToString(cipherStr)
return
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈