功能概述
网关类型的设备,可通过与云端的数据通信,对其下的子设备进行绑定与解绑操作。实现此类功能需利用如下两个 Topic:
数据上行 Topic(用于发布):
$gateway/operation/${productid}/${devicename}
数据下行 Topic(用于订阅):
$gateway/operation/result/${productid}/${devicename}
绑定设备
网关类型的设备,可以通过数据上行 Topic 请求添加它和子设备之间的拓扑关系,实现绑定子设备。请求成功之后,云端通过数据下行 Topic 返回子设备的绑定信息。
网关绑定子设备请求数据格式:
{"type": "bind","payload": {"devices": [{"product_id": "CFCS****G7","device_name": "****ev","signature": "signature","random": 121213,"timestamp": 1589786839,"signmethod": "hmacsha256","authtype": "psk"}]}}
请求参数说明:
参数 | 类型 | 描述 |
type | String | 网关消息类型。绑定子设备取值为: bind 。 |
payload.devices | Array | 需要绑定的子设备列表。 |
product_id | String | 子设备产品 ID。 |
device_name | String | 子设备名称。 |
signature | String | 子设备绑定签名串。 签名算法: 1. 签名原串,将产品 ID 设备名称,随机数,时间戳拼接: text=${product_id}${device_name};${random}${expiration_time} 。2. 使用设备 Psk 密钥,或者证书的 Sha1 摘要,进行签名: sign = hmac_sha1(device_secret, text) 。 |
random | Int | 随机数。 |
timestamp | Int | 时间戳,单位:秒。 |
signmethod | String | 签名算法。支持 hmacsha1、hmacsha256。 |
authtype | String | 签名类型。 psk:使用设备 psk 进行签名。 certificate:使用设备公钥证书签名。 |
网关绑定子设备响应数据格式:
{"type": "bind","payload": {"devices": [{"product_id": "CFCS****G7","device_name": "****ev","result": -1}]}}
响应参数说明:
参数 | 类型 | 描述 |
type | String | 网关消息类型。绑定子设备取值为: bind 。 |
payload.devices | Array | 要绑定的子设备列表。 |
product_id | String | 子设备产品 ID。 |
device_name | String | 子设备名称。 |
result | Int | 子设备绑定结果,具体错误码见下表。 |
解绑设备
网关类型的设备, 可以通过数据上行 Topic 请求解绑它和子设备之间的拓扑关系。请求成功之后,云端通过数据下行 Topic 返回子设备的解绑信息。
网关解绑子设备请求数据格式:
{"type": "unbind","payload": {"devices": [{"product_id": "CFCS****G7","device_name": "****ev"}]}}
请求参数说明:
参数 | 类型 | 描述 |
type | String | 网关消息类型。解绑子设备取值为: unbind 。 |
payload.devices | Array | 需要解绑的子设备列表。 |
product_id | String | 子设备产品 ID。 |
device_name | String | 子设备名称。 |
网关解绑子设备响应数据格式:
{"type": "unbind","payload": {"devices": [{"product_id": "CFCS****G7","device_name": "****ev","result": -1}]}}
响应参数说明:
参数 | 类型 | 描述 |
type | String | 网关消息类型。解绑子设备取值为: unbind 。 |
payload.devices | Array | 需要解绑的子设备列表。 |
product_id | String | 子设备产品 ID。 |
device_name | String | 子设备名称。 |
result | Int |
查询拓扑关系
网关类型的设备, 可以通过该Topic上行请求查询子设备的拓扑关系。
数据上行Topic:
$gateway/operation/${productid}/${devicename}
数据下行Topic:$gateway/operation/result/${productid}/${devicename}
网关查询子设备拓扑关系请求数据格式:
{"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 订阅平台对子设备的拓扑关系变化。
数据下行 Topic:
$gateway/operation/result/${productid}/${devicename}
子设备被绑定或解绑,网关将收到子设备拓扑关系变化,数据格式如下:
{"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 | 不支持的子设备。 |