拓扑关系如何管理?

在设备对接涂鸦的云端过程中,一部分设备由于自身资源或硬件配置,无法直接连接云端。而是需要通过网关进行中转,由网关代理实现和云端进行数据交互,间接实现设备接入云端。这样的设备也称为子设备。

要想实现网关代理子设备接入云端,子设备和网关需要先建立关联关系,也称为 拓扑关系

方式对比

建立拓扑关系有三种方式,您可以根据实际情况,选择其中一种,并且注意不要混用。

名称适用场景接口特点
动态发现
  • 无法事先获取子设备信息,无法提前在云端注册子设备和烧录注册信息。
  • 网关能发现子设备,动态向云端注册子设备并建立拓扑。
网关绑定子设备全自动
网关建立拓扑
  • 事先获取子设备信息,并在云端注册子设备。
  • 拿到子设备注册信息后,烧录到子设备或者网关里面。
  • 网关发现子设备,调用云端接口建立拓扑关系
建立拓扑关系半自动
平台管理
  • 事先获取子设备信息,并在云端注册子设备。
  • 在云端上建立拓扑关系
建立拓扑关系全手动

本文主要介绍用于网关设备侧管理拓扑关系的协议内容,并详细说明每个协议。

网关绑定子设备(动态发现)

网关动态发现子设备,请求云端注册子设备并建立拓扑关系,云端返回请求结果。这对应方式对比章节的 动态发现 方式。

交互流程

<a class=拓扑关系管理" height="334" src="https://img-blog.csdnimg.cn/img_convert/4bf29f11e69758e2c1d33adec03c94f2.png" width="574" />

设备发送消息

设备检测到子设备连接,主动向云端发送绑定子设备消息。

topic: tylink/${deviceId}/device/sub/bind

{
    "msgId":"45lkj355123****",
    "time":1626197189600,
    "version":"1.0",
	"data":[
      {
        "productId":"a123b456****",
        "clientId":"123455asdf****"
      },
      {
        "productId":"a123b457****",
        "clientId":"453455asdf****"
      }
    ]
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID发起子设备绑定的网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
dataArray子设备参数列表多个子设备绑定参数,子设备数量不超过 100 个。
data[].productIdString子设备的产品 ID需要绑定在子设备的产品 ID。
data[].clientIdString设备端唯一 ID此处主要用于子设备硬件的唯一标识,可以是设备的 MAC、SN 等,至少保证产品下唯一,将显示在 设备管理 > 注册 ID 字段。

设备接收消息

设备订阅接收绑定子设备消息回复。

topic: tylink/${deviceId}/device/sub/bind_response

{
    "msgId":"45lkj3551234****",
    "time":1626197189640,
    "version":"1.0",
    "code":0,
	"data":[
      {
        "productId":"a123b456****",
        "clientId":"123455****",
        "deviceId":"6c828cba434ff40c07****"
      },
      {
        "productId":"a123b457****",
        "clientId":"123456****",
        "deviceId":"6c828cba434ff40c07****"
      }
    ]
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID发起子设备绑定的网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
codeNumber响应状态码
  • 0 代表成功,默认值。
  • 非 0 代表失败。
dataArray子设备绑定结果列表-
data[].productIdString产品 ID子设备的产品 ID。
data[].clientIdString子设备硬件的唯一表示 ID子设备的唯一标识,需保证产品下唯一。
data[].deviceIdString云端分配的唯一设备 ID同一个 clientId、同一个网关设备 ID,多次绑定只会生成同一个设备 ID,否则会重新生成一个新的设备 ID。

状态码说明

状态码说明
0默认状态,代表成功。
1001服务异常。
1002请求参数校验不合法。
1004设备不存在。
2401产品不存在。
2402网关绑定了多个设备组。
2403拓扑信息存在,子设备信息不存在。
2404授权码数量不足, 获取授权码失败。
2405获取网关设备组异常。
2406子设备重新注册时,必须先解绑。
2410同一个网关绑定子设备的数量,不能超过 2000 个。

网关删除子设备

网关通过动态发现注册的子设备,可支持网关请求云端删除对应的子设备。云端接收到该请求后,会校验并删除该子设备,同时删除网关和子设备的拓扑关系。由于是设备端发起的删除操作,针对已绑定家庭或资产的子设备,支持网关直接删除子设备。

交互流程

<a class=拓扑关系管理" height="334" src="https://img-blog.csdnimg.cn/img_convert/124b9f0c497d1183b644acbba277ea11.png" width="977" />

设备发送消息

Topic:tylink/${deviceId}/device/sub/delete

消息内容

{
    "msgId":"45lkj355123****",
    "time":1626197189600,
    "version":"1.0",
	"data":[
      "devId123455as****",
      "devId123456ty****"
    ]
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID发起删除子设备的网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
dataArray待删除的子设备 ID 列表子设备 ID 列表,设备数量不超过 10。

设备接收消息

Topic:tylink/${deviceId}/device/sub/delete_response

消息内容

{
    "msgId":"45lkj355123****",
    "time":1626197189640,
    "version":"1.0",
  	"code":0,
	"data":[
      "devId123455as****",
      "devId123456ty****"
    ]
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID发起删除拓扑关系网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
codeNumber响应状态码0 代表成功,非 0 代表失败,默认 0
dataArray被删除的子设备 ID 列表。/

状态码说明

状态码说明
0默认状态,代表成功。
1001服务异常。
1004设备记录不存在。
2407子设备列表为空。
2408子设备数量超限。

建立拓扑关系

对于已经在云端注册的子设备,拿到子设备注册信息后烧录到子设备。网关运行后动态发现子设备,请求云端建立拓扑关系,云端返回请求结果。这对应方式对比章节中的 网关建立拓扑 方式。

交互流程

<a class=拓扑关系管理" height="376" src="https://img-blog.csdnimg.cn/img_convert/a87c9479ec465a3efe243224472d8c1a.png" width="580" />

设备发送消息

topic:tylink/${deviceId}/device/topo/add

{
    "msgId":"45lkj355123****",
    "time":1626197189600,
    "version":"1.0",
	"data":[
      {
        "productId":"a123b456****",
        "deviceId":"123455asdf****",
        "sign":"adstewq35324ds****",
        "signMethod":"HmacSHA256",
        "timestamp":"16067836521"
      },
      {
        "productId":"a123b457****",
        "deviceId":"123456****",
        "sign":"adstewq35324ds****",
        "signMethod":"HmacSHA256",
        "timestamp":"16067836521"
      }
    ]
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID发起建立拓扑关系网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
dataArray子设备参数列表多个子设备拓扑参数, 子设备数量不能超过 100 个。
data[].productIdString子设备的产品 ID-
data[].deviceIdString子设备的设备 ID注册设备时,获取的设备 ID,云端分配的唯一 ID。
data[].signMethodString签名算法签名算法, 当前仅支持 HmacSHA256。
data[].timestampString时间戳签名时间戳,10 位秒级或 13 位毫秒级。
data[].signString签名使用 signMethod 对内容进行签名。例如,HmacSHA256(content, deviceSecret)content 的内容如:productId= a123b456****|deviceId=123455asdf****|timestamp=${签名时间戳}deviceSecret 为 涂鸦 IoT 开发平台 设备管理中展示的 DeviceSecret 字段。

设备接收消息

topic:tylink/${deviceId}/device/topo/add_response

{
    "msgId":"45lkj355123****",
    "time":1626197189640,
    "version":"1.0",
  	"code":0,
	"data":[
      {
        "productId":"a123b456****",
        "deviceId":"6c828cba434ff40c07****"
      },
      {
        "productId":"a123b457****",
        "deviceId":"6c828cba434ff40c07****"
      }
    ]
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID发起建立拓扑关系网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
codeNumber响应状态码
  • 0 代表成功,默认值。
  • 非 0 代表失败。
dataArray建立拓扑关系成功的结果列表。-
data[].productIdString子设备的产品 ID。-
data[].deviceIdString子设备的设备 ID。-

状态码说明

状态码说明
0默认状态,代表成功。
1001服务异常。
1004设备记录不存在。
2407子设备列表为空。
2408子设备数量超限。
2409签名验证失败。
2410同一个网关绑定子设备的数量,不能超过 2000 个。

删除拓扑关系

网关请求云端删除与指定子设备的拓扑关系,云端返回请求结果。该请求不会删除子设备。删除拓扑关系后,子设备还能和该网关或其它网关再次建立拓扑关系

交互流程

<a class=拓扑关系管理" height="234" src="https://img-blog.csdnimg.cn/img_convert/a2294f693a39f32d4caea7c3ffe44d6c.png" width="576" />

设备发送消息

topic:tylink/${deviceId}/device/topo/delete

{
    "msgId":"45lkj355123****",
    "time":1626197189600,
    "version":"1.0",
	"data":[
      "devId123455as****",
      "devId123456ty****"
    ]
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID发起删除拓扑关系网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
dataArray待删除的子设备 ID 列表子设备 ID 列表, 设备数量不超过 100 个。

设备接收消息

topic:tylink/${deviceId}/device/topo/delete_response

{
    "msgId":"45lkj355123****",
    "time":1626197189640,
    "version":"1.0",
  	"code":0,
	"data":[
      "devId123455as****",
      "devId123456ty****"
    ]
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID发起删除拓扑关系网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
codeNumber响应状态码
  • 0 代表成功,默认值。
  • 非 0 代表失败。
dataArray被删除的子设备 ID 列表-

状态码说明

状态码说明
0默认状态,代表成功。
1001服务异常。
1004设备记录不存在。
2407子设备列表为空。
2408子设备数量超限。

查询拓扑关系

网关请求云端查询拓扑关系,云端返回请求结果。

交互流程

<a class=拓扑关系管理" height="234" src="https://img-blog.csdnimg.cn/img_convert/ab6f237612bb0c54f57226dd85557761.png" width="440" />

设备发送消息

topic:tylink/${deviceId}/device/topo/get

{
    "msgId":"45lkj355123****",
    "time":1626197189600,
    "version":"1.0",
	"data":{
      "startId": 0,
      "pageSize": 20, 
      "devIds":[
        "devId123455as****",
        "devId123456ty****"
      ]
    }
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID发起查询拓扑关系网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
codeNumber响应状态码
  • 0 代表成功,默认值。
  • 非 0 代表失败。
data.startIndexIdNumber本次查询子设备列表起始值默认为 0,从第一条开始查询。如果查询第二页, 则该值为第一页查询结果最后一条记录的索引 ID。第三页及以后,以此类推。
data.pageSizeNumber每次查询的设备数量默认及最大查询数量均为 100 个。
data.devIdsArray本次查询子设备 ID 列表子设备 ID 列表,设备数量不超过 100 个。

设备接收消息

topic:tylink/${deviceId}/device/topo/get_response

{
    "msgId":"45lkj355123****",
    "time":1626197189640,
    "version":"1.0",
  	"code":0,
	"data":[
      {
        "productId":"a123b456****",
        "deviceId":"6c828cba434ff40c074***",
        "indexId": 1
      },
      {
        "productId":"a123b457****",
        "deviceId":"6c828cba434ff40c074***",
        "indexId": 2
      }
    ]
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID发起拓扑关系查询的网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,上报和订阅消息通过该值建立应答关系。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
codeNumber响应状态码
  • 0 代表成功,默认值。
  • 非 0 代表失败。
dataArray子设备列表-
data[].productIdString子设备的产品 ID-
data[].deviceIdString子设备的设备 ID-
data[].indexIdNumber索引 ID每页最后一条记录的索引 ID,作为下一页查询的 startIndexId

状态码说明

状态码说明
0默认状态,代表成功。
1001服务异常。
1004设备不存在。
2408子设备数量超限。

通知拓扑关系变更

云端变更拓扑关系,如往拓扑关系中新增子设备,或把子设备从拓扑关系中删除,发送消息通知网关

交互流程

<a class=拓扑关系管理" height="189" src="https://img-blog.csdnimg.cn/img_convert/3db2df48b06dee3037387c91959ff523.png" width="491" />

设备接收消息

topic:tylink/${deviceId}/device/topo/change

{
    "msgId":"45lkj355123****",
    "time":1626197189600,
	"data":{
      "addDevIds":[
           "devId123asdf****",
           "devId456tyiy****"
        ],
       "delDevIds":[
           "devId789****",
           "devIdyiy****"
        ]
    }
}

参数说明

参数类型说明必选备注
${deviceId}String设备 ID拓扑关系发生变更的网关设备 ID。
versionString协议版本默认 1.0,当前仅支持 1.0。
msgIdString消息 ID总长度不超过 32 位的字符,消息的唯一 ID。
timeNumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
dataobject业务数据-
data.addDevIdsArray新增的子设备 ID 列表子设备数量不超过 100 个。
data.delDevIdsArray删除的子设备 ID 列表子设备数量不超过 100 个。

http://www.niftyadmin.cn/n/5037937.html

相关文章

【前端面试题】浏览器面试题

文章目录 前言一、浏览器面试问题1.cookie sessionStorage localStorage 区别2.如何写一个会过期的localStorage&#xff0c;说说想法2.如何定时删除localstorage数据2.localStorage 能跨域吗2.memory cache 如何开启2.localstorage的限制2.浏览器输入URL发生了什么2.浏览器如何…

2023护网行动面试题目汇总

目录 一、常用的外围打点工具有哪些&#xff1f; 二、描述一下外围打点的基本流程&#xff1f; 三、怎么识别CDN? 四、怎么判断靶标站点是windows系统还是Linux系统&#xff1f; 五、举常见的FOFA在外网打点过程中的查询语句&#xff1f; 六、常见的未授权访问漏洞有哪些…

建立表使用约束

1.建立表 二、使用约束 1.NOT NULL 非空约束&#xff0c;规定某个字段不能为空&#xff0c;NOT NULL 约束强制列不接受 NULL 值。 NOT NULL 约束强制字段始终包含值。这意味着&#xff0c;如果不向字段添加值&#xff0c;就无法插入新记录或者更新记录。下面的 SQL 强制表&qu…

一些动态规划dp简单基础题

背包基础&#xff1a; 01背包&#xff1a;每样东西只能选一个 模板&#xff1a;滚动数组优化 #include <iostream> using namespace std;const int N 1010; int v[N], w[N]; // 存第i个物品的体积和价值 int n, m; int f[N]; // f存状态&#xff0c;行表示物品&#xff…

深度解剖数据在队列的应用

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大一&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 望小伙伴们点赞&#x1f44d;收藏✨加关注哟&#x1f495;&#x1…

R语言-关于颜色

目录 颜色 示例 R 颜色板 参考&#xff1a; 颜色 什么场景会用到颜色&#xff1f;比如在绘图过程中&#xff0c;为了让图更好看&#xff0c;有的时候&#xff0c;需要选择使用不同的颜色进行绘制或者填充。本文提供了R颜色的相关参数。 在R中&#xff0c;可以通过颜色下标…

Redis 面霸篇:从高频问题透视核心原理

Redis 为什么这么快&#xff1f; 很多人只知道是 K/V NoSQl 内存数据库&#xff0c;单线程……这都是没有全面理解 Redis 导致无法继续深问下去。 这个问题是基础摸底&#xff0c;我们可以从 Redis 不同数据类型底层的数据结构实现、完全基于内存、IO 多路复用网络模型、线程…

滚雪球学Java(25):动态代理

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…