Appearance
子设备(非直连设备)上下线
直连设备在建连认证通过后,即认为设备已上线。
子设备不直接连接设备管理平台,而是通过网关与设备管理平台建立连接,复用网关与设备管理平台的通信通道。 开发网关设备端时,需实现网关管理与子设备的拓扑关系、代理子设备上下线、代理子设备与设备管理平台进行物模型通信等功能。
子设备(非直连设备),必须借助网关(直连设备)的联网能力,上报上线信息才能确定上线。子设备可以逐个上下线,也可以批量上下线。子设备上线之前,需在设备管理平台为子设备注册身份,建立子设备与网关的拓扑关系。子设备上线时,设备管理平台会根据拓扑关系进行子设备身份校验,以确定子设备是否具备使用网关通道的能力。
子设备上线过程
网关代理子设备上线过程如下图。
网关接入设备管理平台。
子设备接入网关。
子设备不直接连接设备管理平台,所以无需为子设备安装设备管理平台设备端SDK。子设备的设备端由厂商自行开发。
网关发现子设备、网关获取子设备的设备管理平台设备证书、发现子设备上下线和来自设备管理平台的消息发送给子设备等功能,均由网关厂商自行实现,或网关厂商与子设备厂商定义协议实现。
网关查询与当前子设备是否有拓扑关系。
如果网关与子设备间已存在拓扑关系,则忽略第5步。
(可选)网关向设备管理平台上报子设备的ProductKey和DeviceName,动态注册子设备。
此步骤仅适用于网关未获取到子设备的DeviceSecret。
(可选)网关添加与子设备的拓扑关系。
如果网关与子设备间目前不存在拓扑关系,需建立拓扑关系。
网关代理子设备向设备管理平台发起请求。
说明
一个网关下,同时在线的子设备数量不能超过50。
发送子设备批量上下线请求时,单个批次上下线的子设备数量不超过10个。
设备批量上下线请求结果为全部成功或全部失败,失败时的data响应参数中会包含具体的设备信息。
注意:当上级设备离线时,下面的全部子设备都变为离线。
子设备上线
子设备上线topic定义
topic:tlink/${productKey}/${deviceName}/sub/login
说明:因为子设备通过网关通道与设备管理平台通信,以上Topic为网关设备的Topic。Topic中变量${productKey}和{deviceName}需替换为网关设备的对应信息。
数据流向:网关设备发布消息,平台监听消息
子设备上线请求数据体格式
javascript
{
"reqid": "0020fdf71f0d491da12ba3cd38b205be",
"v": "1",
"t": 1630054074378,
"method": "tlink.${productKey}.${deviceName}.sub.login",
"data": [
{
"deviceName": "sn1234或mac1234",
"productKey": "a1234******",
"deviceId": "ca766c036ce_sn1234",
"subList": [
{
"deviceName": "sn789或mac789",
"productKey": "a789******",
"deviceId": "ca766c036ce_sn789"
},
{
"deviceName": "sn001或mac001",
"productKey": "a001******",
"deviceId": "ca766c036ce_sn001"
}
]
},
{
"deviceName": "sn456或mac456",
"productKey": "a4567******",
"deviceId": "ca766c036ce_sn456",
"subList": [
{
"deviceName": "sn789或mac789",
"productKey": "a789******",
"deviceId": "ca766c036ce_sn789"
},
{
"deviceName": "sn001或mac001",
"productKey": "a001******",
"deviceId": "ca766c036ce_sn001"
}
]
}
]
}
请求参数说明
参数名称 | 类型 | 是否必选 | 描述 |
---|---|---|---|
reqid | String | 是 | 消息ID号。全局唯一,用于系统消息追踪 |
v | String | 是 | 协议版本号,目前协议版本号唯一取值为1 |
t | Long | 是 | 消息发送时间戳 |
method | String | 否 | TCP连接时必传 |
data | List | 是 | 请求上线的数据列表,可多个设备同时上报。 |
productKey | String | 是 | 一级子设备的产品productKey。 |
deviceName | String | 是 | 一级子设备的唯一标识。 |
deviceId | String | 否 | 一级子设备id |
subList | List | 否 | 二级子设备列表。 |
productKey | String | 是 | 二级子设备的产品productKey。 |
deviceName | String | 是 | 二级子设备的唯一标识。 |
deviceId | String | 否 | 二级子设备id |
子设备上线响应topic定义
响应topic:tlink/${productKey}/${deviceName}/sub/login_reply
数据流向:平台发布消息,网关设备监听消息
子设备上线响应数据体格式
javascript
{
"reqid": "0020fdf71f0d491da12ba3cd38b205be",
"method": "tlink.${productKey}.${deviceName}.sub.login_reply",
"code": 200,
"data": [
{
"deviceName": "sn1234或mac1234",
"productKey": "a1234******",
"deviceId": "ca766c036ce_sn1234",
"subList": [
{
"deviceName": "sn789或mac789",
"productKey": "a789******",
"deviceId": "ca766c036ce_sn789"
},
{
"deviceName": "sn001或mac001",
"productKey": "a001******",
"deviceId": "ca766c036ce_sn001"
}
]
},
{
"deviceName": "sn456或mac456",
"productKey": "a4567******",
"deviceId": "ca766c036ce_sn456"
"subList": [
{
"deviceName": "sn789或mac789",
"productKey": "a789******",
"deviceId": "ca766c036ce_sn789"
},
{
"deviceName": "sn001或mac001",
"productKey": "a001******",
"deviceId": "ca766c036ce_sn001"
}
]
}
]
}
响应参数说明
参数名称 | 类型 | 是否必选 | 描述 |
---|---|---|---|
reqid | String | 是 | 消息ID号。和请求的对应 |
method | String | 否 | TCP连接时必传 |
code | Integer | 是 | 结果状态码。成功为200,其他为失败 |
data | List | 是 | 请求成功时,返回的数据。 |
productKey | String | 是 | 一级子设备的产品productKey。 |
deviceName | String | 是 | 一级子设备的唯一标识。 |
deviceId | String | 否 | 一级子设备id |
subList | List | 否 | 二级子设备列表。 |
productKey | String | 是 | 二级子设备的产品productKey。 |
deviceName | String | 是 | 二级子设备的唯一标识。 |
deviceId | String | 否 | 二级子设备id |
子设备下线
子设备下线topic定义
topic:tlink/${productKey}/${deviceName}/sub/logout
说明:因为子设备通过网关通道与设备管理平台通信,以上Topic为网关设备的Topic。Topic中变量${productKey}和{deviceName}需替换为网关设备的对应信息。
数据流向:网关设备发布消息,平台监听消息
子设备下线请求数据体格式
javascript
{
"reqid": "0020fdf71f0d491da12ba3cd38b205be",
"v": "1",
"t": 1630054074378,
"method": "tlink.${productKey}.${deviceName}.sub.logout",
"data": [
{
"deviceName": "sn1234或mac1234",
"productKey": "a1234******",
"deviceId": "ca766c036ce_sn1234",
"subList": []
},
{
"deviceName": "sn456或mac456",
"productKey": "a4567******",
"deviceId": "ca766c036ce_sn456",
"subList": [
{
"deviceName": "sn789或mac789",
"productKey": "a789******",
"deviceId": "ca766c036ce_sn789"
},
{
"deviceName": "sn001或mac001",
"productKey": "a001******",
"deviceId": "ca766c036ce_sn001"
}
]
}
]
}
请求参数说明
参数名称 | 类型 | 是否必选 | 描述 |
---|---|---|---|
reqid | String | 是 | 消息ID号。全局唯一,用于系统消息追踪 |
v | String | 是 | 协议版本号,目前协议版本号唯一取值为1 |
t | Long | 是 | 消息发送时间戳 |
method | String | 否 | TCP连接时必传 |
data | List | 是 | 请求下线的数据列表,可多个设备同时下线。 |
productKey | String | 是 | 一级子设备的产品productKey。 |
deviceName | String | 是 | 一级子设备的唯一标识。 |
deviceId | String | 否 | 一级子设备id |
subList | List | 否 | 二级子设备列表,当二级子设备列表为空时,表示下线的是一级子设备。 当二级子设备不为空时,表示下线的是二级子设备。 |
productKey | String | 是 | 二级子设备的产品productKey。 |
deviceName | String | 是 | 二级子设备的唯一标识。 |
deviceId | String | 否 | 二级子设备id |
子设备下线响应topic定义
响应topic:tlink/${productKey}/${deviceName}/sub/logout_reply
数据流向:平台发布消息,网关设备监听消息
子设备下线响应数据体格式
javascript
{
"reqid": "0020fdf71f0d491da12ba3cd38b205be",
"method": "tlink.${productKey}.${deviceName}.sub.logout_reply",
"code": 200,
"data": [
{
"deviceName": "sn1234或mac1234",
"productKey": "a1234******",
"deviceId": "ca766c036ce_sn123",
"subList": []
},
{
"deviceName": "sn456或mac456",
"productKey": "a4567******",
"deviceId": "ca766c036ce_sn456"
"subList": [
{
"deviceName": "sn789或mac789",
"productKey": "a789******",
"deviceId": "ca766c036ce_sn789"
}
]
}
]
}
响应参数说明
参数名称 | 类型 | 是否必选 | 描述 |
---|---|---|---|
reqid | String | 是 | 消息ID号。和请求的对应 |
method | String | 否 | TCP连接时必传 |
code | Integer | 是 | 结果状态码。成功为200,其他为失败 |
data | List | 是 | 请求成功时,返回的数据。 |
productKey | String | 是 | 一级子设备的产品productKey。 |
deviceName | String | 是 | 一级子设备的唯一标识。 |
deviceId | String | 否 | 一级子设备id |
subList | List | 否 | 二级子设备列表。 |
productKey | String | 是 | 二级子设备的产品productKey。 |
deviceName | String | 是 | 二级子设备的唯一标识。 |
deviceId | String | 否 | 二级子设备id |