HTTP连接通信

本文介绍基于HTTP协议进行接入的详细流程。

基础流程

设备通过HTTP协议接入,需要进行设备认证,以获取设备的session ID。该session ID将会被用于后续的测点数据上报。

设备认证

认证设备请求示例

POST /auth/{ProductKey}/{DeviceKey}
Host: {HTTP-Broker-URL}
Content-Type: application/json
body: {
    "signMethod":"sha256",
    "sign":"bd931ad96c9977af9aae01f17efd30e609a0fe5ed3358f7ca4a9e6a51482160b",
    "lifetime":300000
}
示例参数说明
参数 说明
POST 请求方法,仅支持POST。
/auth/{ProductKey}/{DeviceKey} 用于认证的URL地址。{ProductKey}与{DeviceKey}分别是该设备的product key和device key。这两项信息可以登陆 EnOS 管理控制台 并在 设备管理 > 设备资产 中获取。更多信息,参见 获取设备三元组信息
Host: {HTTP-Broker-URL} HTTP Broker 的地址。有关你所在 EnOS 实例的HTTP broker地址信息,登陆 EnOS 管理控制台 并在 帮助 > 环境信息 中获取。
Content-Type: application/json 设备发送给EnOS的上行数据的编码格式。在设备认证时应为application/json。
body: {“signMethod”:”sha256”,”sign”:”bd931ad96c9977af9aae01f17efd30e609a0fe5ed3358f7ca4a9e6a51482160b”,”lifetime”:”300000”} 设备认证相关信息,JSON格式。其具体说明参见下表。


设备认证相关信息的JSON结构体的参数说明,参见下表:

设备认证相关信息JSON结构体
参数 必需/可选 说明
signMethod 必需 签名算法。支持 sha256
lifetime 必需 用于判定设备端状态的时间。单位为毫秒。默认值为300000(5分钟)。如果设备端在lifetime规定的时间长度之内一直未向EnOS上报数据,EnOS会要求设备重新认证,获取新的session ID。
sign 必需 设备签名。签名计算方法,见下文说明。

设备签名计算方法

  1. 设备签名由以下字段按照下列顺序,按照 字段名 + 值 的格式拼接成一个新字段:

    • deviceKey:设备的device key。
    • lifetime
    • productKey:设备的product key。
    • method:签名算法为固定值sha256

    例如,设备的参数值如下所示:

    • deviceKey=dK987654
    • lifetime=300000
    • productKey=pK11111
    • signMethod=sha256

    则拼接得到的字符串为 deviceKeydK987654lifetime300000productKeypK11111signMethodsha256

  2. 将设备的device secret拼接至新字段的末尾。设备的device secret,可以登陆 EnOS 管理控制台, 在设备管理 > 设备资产获取。

    例如,设备的device secret为ds54321。则拼接而成的字符串为: deviceKeydK987654lifetime300000productKeypK11111signMethodsha256ds54321

  3. 使用SHA256算法对该字符串进行加密计算,再将得到的密钥中的字母转换为大写即可得到 sign

    在上述实例中,sign的计算方法可以用如下表达式表达: sign=toUpperCase(SHA256(deviceKeydK987654lifetime300000productKeypK11111signMethodsha256ds54321))

注解

在执行第2步的把device secret拼接至字符串末尾时,不需要拼接 deviceSecret 这个字段名本身,直接拼接device secret的值即可。

返回结果示例

body:
{
  "code": 200,
  "msg": "success",
  "data": {
     "sessionId": "262dc4cb-dc31-4610-b5e5-417b93e4f008"
   }
}

注解

  • 返回的 sessionId 需要被缓存在本地。每次上报数据时,都需要携带 sessionId 信息。
  • 如果 sessionId 校验失效,需要重新认证设备获取 sessionId