周界设备接入

更新时间:2023-02-27 03:14:21下载pdf

本文介绍了涂鸦智慧行业周界设备接入方案。

方案架构

涂鸦提供了接入方案,帮助周界设备快速接入 涂鸦 IoT 开发平台。方案架构如下图所示:

周界设备接入

周界系统在涂鸦 IoT 开发平台被抽象为三种元素:周界主机、周界分区和周界防区。

  • 周界主机:直连涂鸦边缘网关的周界报警主机,处理探测器的信号。

  • 周界防区:报警触发器、探测器等直连周界主机的检测点。

  • 周界分区:防区的逻辑分区,可将防区进行分组划分。布防/撤防等操作是以分区为粒度进行。如果对接系统无分区概念且整个主机统一布撤防,则可将整个主机做为一个防区进行操作。但如果主机支持单个防区单独布撤防,则可将每个防区抽象为一个分区进行操作。

    周界设备接入

    周界防区主机采用 MQTT 协议接入涂鸦边缘网关并进行通信。

业务流程

周界设备接入

功能点列表

reqType 功能 描述 消息类型
1 主机设备数据上报请求指令下发 涂鸦边缘网关向周界主机主动发起设备的信息同步请求。 下发
2 主机设备数据上报 主机设备收到协议 1 同步请求进行数据上报,也可定时数据上报。 上报
3 分区数据上报请求指令下发 涂鸦边缘网关向周界主机发送分区信息同步请求。 下发
4 分区数据上报 主机设备收到协议 3 同步请求,进行分区数据上报,也可定时上报数据。 上报
5 布撤防下发 涂鸦边缘网关向周界主机下发布撤防消息。主机收到消息后,按分区执行布撤防。 下发
6 分区消音下发 涂鸦边缘网关向周界主机下发分区消音消息。主机收到消息后,按分区消音。 下发
7 防区设备数据上报请求指令下发 涂鸦边缘网关向周界主机下发防区设备数据上报请求指令。 下发
8 防区设备数据上报 主机设备收到协议 7 的防区设备数据上报请求,进行防区设备数据上报,也可定时上报。 上报
9 防区旁路/取消旁路下发 涂鸦边缘网关向周界主机主动发起某一防区的旁路/取消旁路请求。收到消息后,主机控制防区设备进入旁路状态/取消旁路。 下发
10 防区消音下发 涂鸦边缘网关向周界主机主动发起某一防区的防区消音请求。收到消息后,主机控制防区设备对正在告警的防区进行消音。 下发
1001 主机/防区设备上下线信息上报 主机/防区设备上下线信息上报,可定时上报。 上报

连接认证方式

  • ip:MQTT Broker 设备的 IP 地址。与涂鸦 IoT 开发平台联调时,由涂鸦提供。

  • port:MQTT Broker 设备的端口。与涂鸦 IoT 开发平台联调时,由涂鸦提供。

  • clientId:周界主机 ID,最大长度 32 个字符。

  • username:周界厂商标识。与涂鸦 IoT 开发平台联调时,由涂鸦提供。

  • passwordsub(md5(cid + username), 0, 16)

  • password 生成示例:

    clientId: abcd1234***
    username: tu***
    password: sub(md5(cid + username), 0, 16)-> c88ba730489ed678
    

    ipportclientIdusername 需要提前配置到周界本地网关,便于周界本地网关每次启动都能读取到这些参数,从而连上涂鸦边缘网关。

周界主机上报消息 Topic

推送:gateway/perimeter/out/{gatewayID}
Payload:base64.Encode(aes.encrypt(Msg, password))

加密示例

password := "c88ba730489ed***"
payload := "{\"t\":1598010614***,\"reqId\":\"1231231***\",\"cid\":\"123122***\",\"reqType\":2,\"data\":{\"devName\":\"东大门消防区***\",\"devInstallAddr\":\"东大门***\",\"ipAddr\":\"127.0.0.1\"}}"
secPayload: "mEtVf8YFr1SvlzgWDdLaef4jSL0olvsfdk9W7mpDSof961PQOdL0J784WFuGeHj9L25sdhcXSg4lZRdUnyfmhNSMXiie5WdbeK7R5fkc/OzL3NNvOnxi8mI2R2Bq24K3AnmGEkAjFtxNa2+6XmMSgSFNAHJlZBg8H4TACvpQxXYlj2R550KKRXLEXuE8X4khLQp1VhtvIhXEimGujz8T8uBdNLCb8o2CzRquRvjosZM1DKwSxNzc5oRFyrFz****"

周界主机订阅消息 Topic

推送:gateway/perimeter/in/{gatewayID}
Payload:base64.Decode(aes.decrypt(Msg, password))

解密示例

password := "c88ba730489ed***"
secPayload: "mEtVf8YFr1SvlzgWDdLaef4jSL0olvsfdk9W7mpDSof961PQOdL0J784WFuGeHj9L25sdhcXSg4lZRdUnyfmhNSMXiie5WdbeK7R5fkc/OzL3NNvOnxi8mI2R2Bq24K3AnmGEkAjFtxNa2+6XmMSgSFNAHJlZBg8H4TACvpQxXYlj2R550KKRXLEXuE8X4khLQp1VhtvIhXEimGujz8T8uBdNLCb8o2CzRquRvjosZM1DKwSxNzc5oRFyrFz****"
payload := "{\"t\":1598010614***,\"reqId\":\"1231231***\",\"cid\":\"123122***\",\"reqType\":2,\"data\":{\"devName\":\"东大门消防区***\",\"devInstallAddr\":\"东大门***\",\"ipAddr\":\"127.0.0.1\"}}"

消息加密

  • 设备推送和接收的消息都要进行 AES 加密及解密。
  • 消息体使用 JSON 进行序列化和反序列化。
  • 加密解密方式:AES-ECB
  • 加密解密密码:采用连接认证时使用的密码 {password}

加密或解密代码示例

   	password := "c88ba730489ed***"
	payload := "{\\\"t\\\":1598010614***,\\\"reqId\\\":\\\"1231231231***\\\",\\\"cid\\\":\\\"123122***\\\",\\\"reqType\\\":2,\\\"data\\\":{\\\"devName\\\":\\\"东大门消防区***\\\",\\\"devInstallAddr\\\":\\\"东大门***\\\",\\\"ipAddr\\\":\\\"127.0.0.1\\\"}}"
	data, err := aes_ecb_psk5.Encrypt([]byte(payload), []byte(password))
	t.Log(err)
	base64str := base64.StdEncoding.EncodeToString(data)
	t.Log(base64str)

	dataE, err := base64.StdEncoding.DecodeString(base64str)
	t.Log(err)
	dataD, err := aes_ecb_psk5.Decrypt(dataE, []byte(password))
	t.Log(err)
	t.Log(string(dataD))

功能点及消息内容

控制消息

主机设备数据上报请求指令下发

涂鸦边缘网关向周界主机主动发起设备的信息同步请求。主机收到后,上报主机信息。

请求参数

参数 类型 描述 是否必传
t Long 推送时间。
reqId String 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 1,主机设备数据上报请求指令下发。
cid String 主机设备 ID。建议采用设备端可读取的唯一标识作为 cid,例如设备的 SN 号、MAC 地址和 IMEI 号等。最大长度为 64 个字符。
data Object 业务数据。

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 1,
	"data": {}
}

上报执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 1,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}

主机设备数据上报

主机设备收到协议 1 同步请求进行数据上报,也可定时数据上报。

上报参数如下:

参数 类型 描述 是否必传
t Long 推送时间。
reqId String 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 2,主机设备数据上报。
cid String 主机设备 ID。建议采用设备端可读取的唯一标识作为 cid,例如设备的 SN 号、MAC 地址和 IMEI 号等。最大长度为 64 个字符。
data Object 业务数据。
+ devName String 设备名称。最大长度为 64 个字符。
+ devInstallAddr String 设备安装地址。最大长度为 64 个字符。
+ ipAddr String 设备安装地址。最大长度为 64 个字符。

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 2,
	"data": {
		"devName": "东大门消防区***",
		"devInstallAddr": "东大门***",
		"ipAddr": "127.0.0.1"
	}
}

返回执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 2,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}

分区数据上报请求指令下发

涂鸦边缘网关向周界主机发送分区信息同步请求。主机收到后,上报分区信息。

请求参数如下:

参数 类型 描述 是否必传
t Long 推送时间。
reqId String 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 3,分区数据上报请求指令下发。
cid String 主机设备 ID。建议采用设备端可读取的唯一标识作为 cid,例如设备的 SN 号、MAC 地址和 IMEI 号等。最大长度为 64 个字符。
data Object 业务数据。

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 3,
	"data": {}
}

上报执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 3,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}

分区数据上报

主机设备收到协议 3 同步请求进行分区数据上报,也可定时上报数据。

上报参数如下:

参数 类型 描述 是否必传
t Long 推送时间。
reqId String 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 4,分区数据上报。
cid String 主机设备 ID。建议采用设备端可读取的唯一标识作为 cid,例如设备的 SN 号、MAC 地址和 IMEI 号等。最大长度为 64 个字符。
data Object 业务数据。
+ areas Array 分区数据。
++ areaId String 分区 ID。最大长度为 64 个字符。
++ areaName String 分区名称。最大长度为 64 个字符。
++ pointCids []String 分区包含的防区设备的 cid 列表。单个 cid 最大长度为 64 个字符。

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 4,
	"data": {
		"areas": [{
				"areaId": "a_1",
				"areaName": "小区东区***",
				"pointCids": [
					"11112***",
					"11113***",
					"11114***"
				]
			},
			{
				"areaId": "a_2***",
				"areaName": "小区西区***",
				"pointCids": [
					"11114***",
					"11115***",
					"11116***"
				]
			}
		]
	}
}

返回执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 4,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}

分区布撤防下发

涂鸦边缘网关向周界主机下发布撤防消息。主机收到消息后,按分区执行布撤防。

请求参数如下:

参数 类型 描述 是否必传
t Long 推送时间。
reqId String 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 5,分区布撤防下发。
cid String 主机设备 ID。建议采用设备端可读取的唯一标识作为 cid,例如设备的 SN 号、MAC 地址和 IMEI 号等。最大长度为 64 个字符。
data Object 业务数据。
+ areaId String 布撤防的分区 ID。
+ armed Boolean true:布防,false:撤防

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 5,
	"data": {
		"areaId":"a-1",
		"armed": true
	}
}

上报执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 5,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}

分区消音下发

涂鸦边缘网关向周界主机下发分区消音消息。主机收到消息后,按分区消音。

请求参数如下:

参数 类型 描述 是否必传
t Long 推送时间。
reqId String 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 6,分区消音下发。
cid String 主机设备 ID。建议采用设备端可读取的唯一标识作为 cid,例如设备的 SN 号、MAC 地址和 IMEI 号等。最大长度为 64 个字符。
data Object 业务数据。
+ areaId String 布撤防的分区 ID。

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 6,
	"data": {
		"areaId":"a-1",
	}
}

返回执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 6,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}

防区设备数据上报请求指令下发

涂鸦边缘网关向周界主机下发防区设备数据上报请求指令。主机收到消息后,会上报防区信息。

请求参数如下:

参数 类型 描述 是否必传
t Long 推送时间。
reqId String 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 7,主机设备数据上报请求指令下发。
cid String 防区设备 ID。建议采用设备端可读取的唯一标识作为 cid,例如设备的 SN 号、MAC 地址和 IMEI 号等。最大长度为 64 个字符。
data Object 业务数据。

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 7,
	"data": {}
}

上报执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 7,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}

防区设备数据上报

主机设备收到协议 7 的防区设备数据上报请求进行防区设备数据上报,也可定时上报。

上报参数如下:

参数 类型 描述 是否必传
t Long 推送时间。
reqId String 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 8,主机设备数据上报。
cid String 主机设备 ID。建议采用设备端可读取的唯一标识作为 cid,例如设备的 SN 号、MAC 地址和 IMEI 号等。最大长度为 64 个字符。
data Object 业务数据。
+ points Array 业务数据。
++ pointCid String 防区设备 cid。最大长度为 64 个字符。
++ devName String 设备名称。最大长度为 64 个字符。
++ devInstallAddr String 设备安装地址。最大长度为 64 个字符。
++ ipAddr String 设备安装地址。最大长度为 64 个字符。

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 8,
	"data": {
		"points": [{
				"pointCid": "p-1",
				"devName": "东大门消防区***",
				"devInstallAddr": "东大门***",
				"ipAddr": "127.0.0.1"
			},
			{
				"pointCid": "p-2",
				"devName": "东大门消防区***",
				"devInstallAddr": "东大门***",
				"ipAddr": "127.0.0.1"
			}
		]
	}
}

返回执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 8,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}

防区旁路下发

涂鸦边缘网关向周界主机主动发起某一防区的旁路/取消旁路请求。收到消息后,主机控制防区设备进入旁路状态/取消旁路。

请求参数如下:

参数 类型 描述 是否必传
t Long 推送时间。
reqId String (最大 64 字符) 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 9,防区旁路下发。
cid String (最大 64 字符) 防区设备 ID。建议采用设备端可读取的唯一标识作为 cid,例如设备的 SN 号、MAC 地址和 IMEI 号等。最大长度为 64 个字符。
data Object 业务数据。
+ byPass Boolean true:旁路,false:取消旁路。

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 9,
	"data": {
		"byPass":true,
	}
}

返回执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 9,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}

防区消音下发

涂鸦边缘网关向周界主机主动发起某一防区的防区消音请求。收到消息后,周界主机控制防区设备对正在告警的防区进行消音。

请求参数如下:

参数 类型 描述 是否必传
t Long 推送时间。
reqId String 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 10,防区消音下发。
cid String 防区设备 ID。建议采用设备端可读取的唯一标识作为 cid,例如设备的 SN 号、MAC 地址和 IMEI 号等。最大长度为 64 个字符。
data Object 业务数据。

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 10,
	"data": {}
}

返回执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"cid": "123***",
	"reqType": 10,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}

设备管理

设备上下线上报

主机/防区设备上下线信息上报,可定时上报,将设备的 cid 填充入 onlineoffline 参数中。

上报参数如下:

参数 类型 描述 是否必传
t Long 推送时间。
reqId String 请求流水号,推荐 UUID 生成。访客机可以根据 reqId 监听本次推送的结果。最大长度为 64 个字符。
reqType Integer reqType = 1001,设备上下线数据上报。
data Object 业务数据。
+ online []String 主机/防区设备 cid 列表。单个 cid 最大长度为 64 个字符。
+ offline []String 主机/防区设备 cid 列表。单个 cid 最大长度为 64 个字符。

Msg 消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"reqType": 1001,
	"data": {
			"online": ["h-1","p-1"],
			"offline": []
		}
}

返回执行结果消息格式:

{
	"t": 1598010614***,
	"reqId": "1231231***",
	"reqType": 1001,
	"data": {
		"success": true,
		"msg": "sucess",
		"code": 200
	}
}