Get Device Connection Info


Get Device Connection Info API 用于设备端获取设备自身、子设备或支路设备的 EnOS 三元组信息,以及 EnOS MQTT/HTTP 协议公网地址。设备端通过当前 API 获取三元组信息后,将使用 EnOS 提供的设备 SDK 尝试连接 EnOS。


Get Device Connection Info API 与 Bootstrap Device API 完全兼容,区别在于:


API 名称 功能 场景示例
Get Device Connection Info 获取已注册设备的三元组信息,包括单路设备、多路设备、网关设备和子设备。 设备获取自身、支路设备或子设备的三元组信息。
Bootstrap Device 直连设备获取设备自身的三元组信息,若该设备未注册,将同时完成设备注册。 直连设备获取自身的三元组信息,完成自身注册。

前提条件


确保该设备已完成分配和激活。如有需要,可使用 Allocate DPS Device API 分配和激活设备。

请求格式


POST http(s)://{dps-address}/2.4.0/get/conn

具体说明,参见 有关设备 API

请求参数(Body)


名称 必需/可选 数据类型 描述
self 必需 DeviceAuth 结构体 设备自身的认证信息。
signMethod 可选 String 指定签名算法,目前仅支持 sha256
sub 可选 SubDeviceAuth 结构体 子设备或支路设备的认证信息。当 sub 不为空时,self 必须是一个网关设备。常见场景示例,参见 场景示例

DeviceAuth 结构体


名称 必需/可选 数据类型 描述
sn 必需 String 设备 SN 号,系统自动生成。
timestamp 必需 Long 时间戳,用于生成 sign 校验值。
sign 必需 String 将注册组密码、sntimestamp 作为输入,使用 SHA256 算法进行哈希运算后生成的校验值。注册组密码可以在 EnOS 管理控制台 > 设备预配置 > 注册组管理 中的注册组详情中查看。

SubDeviceAuth 结构体


名称 必需/可选 数据类型 描述
branch 取决于使用场景,参见 场景示例 Integer 通道支路编号,用于指定连接通道。
sn 取决于使用场景,参见 场景示例 String 系统自动生成的设备 SN 号。
timestamp 取决于使用场景,参见 场景示例 Long 时间戳,用于生成 sign 校验值。
sign 取决于使用场景,参见 场景示例 String 将注册组密码、sntimestamp 作为输入,使用 SHA256 算法进行哈希运算后生成的校验值。注册组密码可以在 EnOS 管理控制台 > 设备预配置 > 注册组管理 中的注册组详情中查看。
createSubSnFromGw 取决于不同场景,参见 场景示例 Boolean 当传入支路编号时,是否从网关注册组生成一个虚拟的子设备 SN 号。默认为 true


下表列举常见场景下 SubDeviceAuth 结构体参数的使用方法。


场景描述 参数用法
单路设备或网关设备直连上云,需获取设备本身的三元组信息。 SubDeviceAuth 结构体所有参数为空。参见 示例 1
多路设备直连上云,需获取某一支路设备的三元组信息。 需要指定 branch 支路编号,此时 sntimestampsign 为空,createSubSnFromGw 为默认状态。参见 示例 2
网关设备下单路子设备上云,需获取子设备的三元组信息。 branch 为空,需要指定 sntimestampsign 作为子设备的验证信息。此时 createSubSnFromGw 为默认状态。参见 示例 3
网关设备下多路子设备上云,需获取某一支路子设备的三元组信息。 需要指定 branch 支路编号,sntimestampsign 为支路子设备的验证信息。此时 createSubSnFromGw 为默认状态。参见 示例 4

响应参数


名称 数据类型 描述
murl String 设备所在环境的 EnOS MQTT 协议公网地址,当 SubDeviceAuth 结构体为空时返回。
hurl String 设备所在环境的 EnOS HTTP 协议公网地址,当 SubDeviceAuth 结构体为空时返回。
pk String 设备三元组中的 product key。
dk String 设备三元组中的 device key。
ds String 设备三元组中的 device secret。

错误码

代码 错误信息 描述
10000 [{sn}] not allocated 当设备未分配,且注册组的“自动激活”开关未打开时,无法取得三元组,会返回设备未分配的错误信息。

示例


下面列出 SubDeviceAuth 结构体场景示例 中 4 种场景下的请求示例和返回示例。

示例 1


单路设备或网关设备直连上云,需获取设备本身的三元组信息时,参考以下示例。

请求示例


url: http://{dps-address}/2.4.0/get/conn
method: POST
requestBody:
{
    "self": {
        "sn": "selfsn",
        "timestamp": 1607073024438,
        "sign": "6b8335652c31738c415916a3b9eb5be2d2cfc3af876cc3ab1d9d2a8f73cd1a6a"
    }
}

返回示例


{
    "murl": "tcp://mqtt-{address}:21883",
    "hurl": "http://http-{address}",
    "pk": "selfProductKey",
    "dk": "selfDeviceKey",
    "ds": "selfDeviceSecret"
}

示例 2


多路设备直连上云,需获取某一支路设备的三元组信息时,参考以下示例。

请求示例


url: http://{dps-address}/2.4.0/get/conn
method: POST
requestBody:
{
    "signMethod":"sha256",
    "self": {
        "sn": "selfsn",
        "timestamp": 1607073024438,
        "sign": "6b8335652c31738c415916a3b9eb5be2d2cfc3af876cc3ab1d9d2a8f73cd1a6a"
    },
    "sub": {
        "branch": 2
    }
}

返回示例


{
    "pk": "branchProductKey",
    "dk": "branchDeviceKey",
    "ds": "branchDeviceSecret"
}

示例 3


网关设备下单路子设备上云,需获取子设备的三元组信息时,参考以下示例。

请求示例


url: http://{dps-address}/2.4.0/get/conn
method: POST
requestBody:
{
    "signMethod":"sha256",
    "self": {
        "sn": "selfsn",
        "timestamp": 1607073024438,
        "sign": "6b8335652c31738c415916a3b9eb5be2d2cfc3af876cc3ab1d9d2a8f73cd1a6a"
    },
    "sub": {
        "sn": "subsn",
        "timestamp": 1607073024438,
        "sign": "7197763f578fdb703134a2f9ae0145cbd865a3a60ea7742b541b5bb0db793aca"
    }
}

返回示例


{
    "pk": "subProductKey",
    "dk": "subDeviceKey",
    "ds": "subDeviceSecret"
}

示例 4


网关设备下多路子设备上云,需获取某一支路子设备的三元组信息时,参考以下示例。

请求示例


url: http://{apigw-address}/2.4.0/get/conn
method: POST
requestBody:
{
    "signMethod":"sha256",
    "self": {
        "sn": "selfsn",
        "timestamp": 1607073024438,
        "sign": "6b8335652c31738c415916a3b9eb5be2d2cfc3af876cc3ab1d9d2a8f73cd1a6a"
    },
    "sub": {
        "branch": 2,
        "sn": "subsn",
        "timestamp": 1607073024438,
        "sign": "7197763f578fdb703134a2f9ae0145cbd865a3a60ea7742b541b5bb0db793aca"
    }
}

返回示例


{
    "pk": "subProductKey",
    "dk": "subDeviceKey",
    "ds": "subDeviceSecret"
}