Connecting Sub-devices to EnOS Cloud in Batch


UpStream

  • Request TOPIC: /ext/session/{productKey}/{deviceKey}/combine/login/batch
  • Reply TOPIC: /ext/session/{productKey}/{deviceKey}/combine/login/batch_reply

Prerequisite

  • Create the sub-device instances on EnOS Cloud.
  • Add the instances as sub-devices to a gateway device instance.

Sample Request Format

{
    "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"
}

Sample Response Format

a) All sub-devices logged in successfully

{
    "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) Some of the sub-devices failed to log in

{
    "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) Invalid request format

{
    "id":"1",
    "code":1220,
    "data":{
        "loginedSubDevices":[],
        "failedSubDevices":[]
    },
    "message":"payload format error, ..."
}

Handling the Response

When the return code code is 723, loggedinSubDevices lists the sub-devices that successfully logged in and failedSubDevices lists those that failed to log in.


When the code is 1220 or if there is an internal server error, no sub-devices will be listed for loggedinSubDevices and failedSubDevices.


The following is a sample on how to handle a reply.

if (code == 200) {
  // All sub-devices logged in successfully.
} else {
  if (loginedSubDevices.isEmpty() && failedSubDevices.isEmpty()) {
    // Invalid format or internal server error
  } else {
    if (loginedSubDevices.isNotEmpty()) {
      // Sub-devices that logged in
    }
    if (failedSubDevices.isNotEmpty()) {
      // Sub-devices that failed to log in
    }
  }
}

Request Parameter Description

Parameter Type Mandatory/Optional Description
id String Optional The message ID. It is a reserved parameter that is reserved for future use.
params Struct Mandatory The parameters used for connecting the sub-device to EnOS Cloud.
deviceKey String Mandatory The device key of the sub-device.
productKey String Mandatory The product key of the sub-device.
version String Mandatory The version No.
method String Mandatory The request method.
sign String Mandatory The signature of the sub-device. Sub-devices use the same signature rules as the gateway device.
signmethod String Mandatory The signing method. The supported method is hmacSha1.
timestamp String Mandatory The timestamp.
clientId String Mandatory The identifier of the device. The value can be its productKey or deviceName.

Response Parameter Description

Parameter Type Mandatory/Optional Description
message String Mandatory The response message.
code Integer Mandatory The return code. “200” indicates that the request operation is executed successfully.
data JSON Mandatory The detailed returned information in JSON format.
loginedSubDevices Array Mandatory The devices that successfully logged in.
failedSubDevices Array Mandatory The devices that failed to log in.

Return Code

Return Code Error Message Explanation
705 Failed to query device, this device does not exist The sub-device does not exist.
723 Device is disabled The sub-device is disabled.
770 Dynamic activate is not allowed Dynamic activation is not allowed for this product.
771 Sub device cannot connect to mqtt broker directly Sub-devices cannot be directly connected to EnOS Cloud.
740 Sub device does not belong to the gateway The device is not a sub-device of this gateway.
742 Sign check failed Hash signature verification failed.
746 The device must login by ssl Certificate-based authentication is required for this product.