批量上线子设备¶
前提条件¶
需要确保子设备身份已经在 EnOS 云端中注册。
在网关设备中添加拓扑关系。
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 云端直连 |
740 |
Sub device not belong the gateway |
该设备并非该网关的子设备 |
742 |
Sign check failed |
Hash 签名验证失败 |
746 |
The device must login by ssl |
该产品启用了证书双向认证 |