批量上线子设备

开始前准备

  1. 需要确保子设备身份已经在 EnOS Cloud 中注册。

  2. 在网关设备中添加拓扑关系。

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

该产品启用了证书双向认证