拓扑关系管理

最近更新时间:2023-07-31 15:38:42

我的收藏

功能概述

网关类型的设备,可通过与云端的数据通信,对其下的子设备进行绑定与解绑操作。实现此类功能需利用如下两个 Topic:
数据上行 Topic(用于发布):$gateway/operation/${productid}/${devicename}
数据下行 Topic(用于订阅):$gateway/operation/result/${productid}/${devicename}

绑定设备

网关类型的设备,可以通过数据上行 Topic 请求添加它和子设备之间的拓扑关系,实现绑定子设备。请求成功之后,云端通过数据下行 Topic 返回子设备的绑定结果信息。
网关绑定子设备请求数据格式:
{
"type": "bind",
"payload": {
"devices": [
{
"product_id": "CFC******AG7",
"device_name": "subdeviceaaaa”,
"signature": "signature",
"random": 121213,
"timestamp": 1589786839,
"signmethod": "hmacsha256",
"authtype": "psk"
}
]
}
}

网关绑定子设备响应数据格式:
{
"type": "bind",
"payload": {
"devices": [
{
"product_id": "CFC******AG7",
"device_name": "subaaa",
"result": -1
}
]
}
}

请求参数说明:
字段
类型
描述
type
String
网关消息类型。绑定子设备取值为:bind
payload.devices
Array
需要绑定的子设备列表。
product_id
String
子设备产品 ID。
device_name
String
子设备名称。
signature
String
子设备绑定签名串。 签名算法:
1. 签名原串,将产品 ID 设备名称,随机数,时间戳拼接:text=${product_id}${device_name};${random};${timestamp}
2. 使用设备 Psk 密钥,或者证书的 Sha1 摘要,进行签名:base64_encode(hmac_sha1(device_secret, text))
random
Int
随机数。
timestamp
Int
时间戳,单位:秒。
signmethod
String
签名算法。支持 hmacsha1、hmacsha256。
authtype
String
签名类型。
psk:使用设备 psk 进行签名。
certificate:使用设备公钥证书签名。
响应参数说明:
字段
类型
描述
type
String
网关消息类型。绑定子设备取值为:bind
payload.devices
Array
要绑定的子设备列表。
product_id
String
子设备产品 ID。
device_name
String
子设备名称。
result
Int
子设备绑定结果,具体 错误码 见下表。

解绑设备

网关类型的设备, 可以通过数据上行 Topic 请求解绑它和子设备之间的拓扑关系。请求成功之后,云端通过数据下行 Topic 返回子设备的解绑信息。
网关解绑子设备请求数据格式:
{
"type": "unbind",
"payload": {
"devices": [
{
"product_id": "CFC******AG7",
"device_name": "subaaa"
}
]
}
}

网关解绑子设备响应数据格式:
{
"type": "unbind",
"payload": {
"devices": [
{
"product_id": "CFC******AG7",
"device_name": "subaaa",
"result": -1
}
]
}
}

请求参数说明:
字段
类型
描述
type
String
网关消息类型。解绑子设备取值为:unbind
payload.devices
Array
需要解绑的子设备列表。
product_id
String
子设备产品 ID。
device_name
String
子设备名称。
响应参数说明:
字段
类型
描述
type
String
网关消息类型。解绑子设备取值为:unbind
payload.devices
Array
需要解绑的子设备列表。
product_id
String
子设备产品 ID。
device_name
String
子设备名称。
result
Int
子设备绑定结果,具体 错误码 见下表。

通知网关开启搜索状态

在应用端小程序或app需要进入某个子设备绑定流程内,平台会通知网关开启和关闭搜索子设备功能,协议如下:
数据上行 Topic(用于发布): $gateway/operation/${productid}/${devicename}
数据下行 Topic(用于订阅): $gateway/operation/result/${productid}/${devicename}
平台下发数据格式:
{
"type": "search_devices",
"payload": {
"status": 0 //0-关闭 1-开启
}
}
请求参数说明:
字段
类型
描述
type
String
网关消息类型。通知网关开启搜索状态取值为:search_devices。
status
Int
网关搜索状态:
0:关闭。
1:开启。
网关回复数据格式:
{
"type": "search_devices",
"payload": {
"status": 0, //0-关闭 1-开启
"result": 0
}
}
字段
类型
描述
type
String
网关消息类型。通知网关开启搜索状态取值为:search_devices。
status
Int
网关搜索状态:
0:关闭。
1:开启。
result
Int
网关响应处理结果:
0:成功。
1:失败。

查询拓扑关系

网关类型的设备, 可以通过该 Topic 上行请求查询子设备的拓扑关系。
网关查询子设备拓扑关系请求数据格式:
{
"type": "describe_sub_devices"
}

请求参数说明:
参数
类型
描述
type
String
网关消息类型。查询子设备取值为:describe_sub_devices
网关查询子设备拓扑关系响应数据格式:
{
"type": "describe_sub_devices",
"payload": {
"devices": [
{
"product_id": "XKFA****LX",
"device_name": "2OGDy7Ws8mG****YUe"
},
{
"product_id": "XKFA****LX",
"device_name": "5gcEHg3Yuvm****2p8"
},
{
"product_id": "XKFA****LX",
"device_name": "hmIjq0gEFcf****F5X"
},
{
"product_id": "XKFA****LX",
"device_name": "x9pVpmdRmET****mkM"
},
{
"product_id": "XKFA****LX",
"device_name": "zmHv6o6n4G3****Bgh"
}
]
}
}

响应参数说明:
参数
类型
描述
type
String
网关消息类型。查询子设备取值为:describe_sub_devices
payload.devices
Array
网关绑定的子设备列表。
product_id
String
子设备产品 ID。
device_name
String
子设备名称。

拓扑关系变化

网关类型的设备, 可以通过该数据下行 Topic 订阅平台对子设备的拓扑关系变化。
子设备被绑定或解绑,网关将收到子设备拓扑关系变化,数据格式如下:
{
"type": "change",
"payload": {
"status": 0, //0-解绑 1-绑定
"devices": [
{
"product_id": "CFCS****G7",
"device_name": "****ev",
}
]
}
}

请求参数说明:
参数
类型
描述
type
String
网关消息类型。拓扑关系变化取值为:change。
status
Int
拓扑关系变化状态。
0:解绑。
1:绑定。
payload.devices
Array
网关绑定的子设备列表。
product_id
String
子设备产品 ID。
device_name
String
子设备名称。
网关响应,数据格式如下:
{
"type": "change",
"result": 0
}

响应参数说明:
参数
类型
描述
type
String
网关消息类型。拓扑关系变化取值为:change。
result
Int
网关响应处理结果。

错误码

错误码
描述
0
成功。
-1
网关设备未绑定该子设备。
-2
系统错误,子设备上线或者下线失败。
801
请求参数错误。
802
设备名非法,或者设备不存在。
803
签名校验失败。
804
签名方法不支持。
805
签名请求已过期。
806
该设备已被绑定。
807
非普通设备不能被绑定。
808
不允许的操作。
809
重复绑定。
810
不支持的子设备。