批量上线子设备¶
开始前准备¶
- 需要确保子设备身份已经在 EnOS Cloud 中注册。
- 在网关设备中添加拓扑关系。
Topics¶
上行:
- 请求 TOPIC:
/ext/session/{productKey}/{deviceKey}/combine/login/batch
- 响应 TOPIC:
/ext/session/{productKey}/{deviceKey}/combine/login/batch_reply
请求数据格式¶
{
"id":"1",
"params":{
"clientId":"Lx5Q1X6M",
"subDevices":[
{
"sign":"c14fc21231e6c44849683ccfb7a2089895a278b37a30c33ccb58d3b8690d16e1",
"deviceKey":"xGKFwfkEXz",
"productKey":"x4jwTsoz"
},
{
"sign":"1fbf0cd0903a9405d567fe5909a1aae75012df5465211db367c7666c0ae33bf2",
"deviceKey":"cS9MdVJwO9",
"productKey":"x4jwTsoz"
},
{
"sign":"480869163c85777c9fcb9fe53340fb13d38ef19e644df82927fcd2393b3819c4",
"deviceKey":"viWaBURIDm",
"productKey":"x4jwTsoz"
}
],
"signMethod":"sha256",
"timestamp":"1564988853275"
},
"version":"1.1",
"method":"combine.login.batch"
}
响应数据格式(分三种情况)¶
a) 子设备全部登入成功¶
{
"id":"1",
"code":200,
"data":{
"loginedSubDevices":[
{
"assetId":"LhBLfxpG",
"deviceKey":"cS9MdVJwO9",
"productKey":"x4jwTsoz"
},
{
"assetId":"kAHwVbyl",
"deviceKey":"viWaBURIDm",
"productKey":"x4jwTsoz"
},
{
"assetId":"AkHJvoqN",
"deviceKey":"xGKFwfkEXz",
"productKey":"x4jwTsoz"
}
],
"failedSubDevices":[]
},
"message":""
}
b) 部分子设备登入失败¶
{
"id":"1",
"code":723,
"data":{
"loginedSubDevices":[
{
"assetId":"LhBLfxpG",
"deviceKey":"cS9MdVJwO9",
"productKey":"x4jwTsoz"
},
{
"assetId":"kAHwVbyl",
"deviceKey":"viWaBURIDm",
"productKey":"x4jwTsoz"
}
],
"failedSubDevices":[
{
"deviceKey":"xGKFwfkEXz",
"productKey":"x4jwTsoz"
}
]
},
"message":"x4jwTsoz&xGKFwfkEXz has error: Device is disable;"
}
c) 请求格式存在错误¶
{
"id":"1",
"code":1220,
"data":{
"loginedSubDevices":[],
"failedSubDevices":[]
},
"message":"payload format error, ..."
}
正确处理响应¶
当相应数据的 code 为 200 时,这表明子设备全部登入成功。否则,这表明子设备全部或者部分登入失败。当请求存则格式错误(或者其他内部服务错误)时,响应中 loginedSubDevices 和 failedSubDevices 将为空。因此,当响应中 code 不为 200 时,用户不能简单地通过 failedSubDevices 判断哪些子设备登入失败。因此,响应的正确处理方式应为:
if (code == 200) {
// 所有的子设备登入成功
} else {
if (loginedSubDevices.isEmpty() && failedSubDevices.isEmpty()) {
// 存在格式错误或内部服务错误
} else {
if (loginedSubDevices.isNotEmpty()) {
// 处理登入成功的子设备
}
if (failedSubDevices.isNotEmpty()) {
// 处理登入失败的子设备
}
}
}
参数说明¶
参数 | 类型 | 是否必需 | 描述 |
id | String | 可选 | 消息 ID 号,保留值。 |
params | List | 必需 | 子设备上线的参数。 |
deviceKey | String | 必需 | 子设备的 deviceKey。 |
productKey | String | 必需 | 子设备的 productKey。 |
sign | String | 必需 | 子设备签名,规则与网关相同。 |
signmethod | String | 必需 | 签名方法,支持 hmacSha1。 |
timestamp | String | 必需 | 时间戳 |
version | 必需 | String | 版本号。 |
method | String | 必需 | 请求方法。 |
clientId | String | 必需 | 设备端标识,可以为任意标志(建议用网关的 productKey 或者 deviceKey)。 |
message | String | 必需 | 结果返回信息。 |
code | Integer | 必需 | 结果返回码,200 代表请求成功执行。 |
data | JSON | 必须 | 返回的详细信息。JSON 格式。 |
loginedSubDevices | Array | 必须 | 登入成功的子设备。 |
failedSubDevices | Array | 必须 | 登入失败的子设备。 |
结果返回码¶
返回码 | 错误信息 | 释义 |
---|---|---|
705 | It failed to query device, not existed this device | 子设备不存在 |
723 | Device is disable | 子设备被禁用 |
770 | Dynamic activate is not allowed | 该产品未启用动态激活 |
771 | Sub device cannot connect to mqtt broker directly | 子设备不能与 EnOS Cloud 直连 |
740 | Sub device not belong the gateway | 该设备并非该网关的子设备 |
742 | Sign check failed | Hash 签名验证失败 |
746 | The device must login by ssl | 该产品启用了证书双向认证 |