一、功能概述
·数据上行 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 | 不支持的子设备。 |