Skip to content

物联网平台设备接入

设备接入物联网平台的协议是MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)。要完成设备的接入需要做以下步骤

1. 项目注册

业务侧提供项目信息,包括项目名称和所属场景。物联网平台运营人员为业务侧创建调用OPENAPI时的Accesskey和访问密码,在获取JWT时使用,创建Accesskey时需要提供企业ID,例如:思特奇是10000;11位手机号码或者客户标识号(可以自动生成);创建时输入的密码,可以是业务侧提供或客户标识号的后6位;项目的ID

2. 设备注册

确认设备的类别,型号,联网方式,是否满足业务需要。产品既是设备的类别,联网方式主要确定设备是接入边缘网关,还是直接接入物联网平台,接入边缘网关的通信协议等

产品注册

产品等同于设备的类别,产品名称,产品类别,用在哪个行业、产品型号、联网方式等,创建产品实例,生成产品唯一标识ProductKey。根据产品的属性和提供的服务,创建物模型

添加设备

添加设备时生成设备的唯一标识ProductKey + DeviceName。添加成功后返回连接MQTT服务器的参数clientid,username,password,这些参数供设备连接物联网平台使用

# MQTT服务器地址
broker = "tcp://mqtt.thingshub.com.cn:1883"
# ${ProductKey}:${DeviceName}
username = ""
# 添加设备时生成的secret
password = ""
# ${ProductKey}:${DeviceName}
clientid = ""

3. 设备端开发

若设备的联网协议不是MQTT,需要做设备端开发,完成数据传输协议的转换,由设备自身联网协议转换成MQTT

4. 业务侧开发

业务侧接收设备上报数据接口开发,数据上行(设备→业务应用)

物联网平台调用业务侧接口推送设备上报的属性数据和事件数据。参考实现如下:

请求URL

业务侧定义

请求方法

POST

Content-Type

application/json

请求参数

参数 数据类型 是否必填 说明
productKey string ProductKey
deviceName string DeviceName
method string 消息类型
timestamp int64 请求时间戳。单位毫秒
nonce string 一次性随机数
signature string 消息签名

消息类型 method

事件。thing.event.${identifier} ,其中identifier标识事件标识,用于区分事件种类

属性。thing.event.property.post

请求体

参数 数据类型 是否必须 说明
id string 消息ID
productKey string ProductKey
deviceName string DeviceName
method string 消息类型
version string 消息版本。默认1.0
timestamp int64 时间戳。单位毫秒
params object 消息内容

响应参数

参数 数据类型 是否必须 说明
code int 返回码
msg string 返回消息

返回码

成功。200

失败。500

URL样例

http://host:port/device/message?productKey=${productKey}&deviceName=${deviceName}&method=${method}&timestamp=${timestamp}&nonce=${nonce}&signature=${signature}

请求样例

{
  "id": "1",
  "productKey": "a",
  "deviceName": "b",
  "method": "thing.event.property.post",
  "version": "1.0",
  "timestamp": 0,
  "params": {
      "temperature": 36.5
  }
}

响应样例

{
  "code": 200,
  "msg": "success"
}

安全性

提供消息验证和完整性服务

# productKey 是请求参数中 productKey 的值
# deviceName 是请求参数中 deviceName 的值
# method 是请求参数中 method 的值
# timestamp 是请求参数中 timestamp 的值
# nonce 是请求参数中 nonce 的值
# content是请求体内容
# 密钥是accesskey
# HmacSHA256 算法

HmacSHA256(${productKey}${deviceName}${method}${timestamp}${nonce}${content})

业务侧通过调用物联网平台提供的OPENAPI完成设备的远程控制,数据下行(业务应用→设备)

Thingshub OPENAPI

https://www.thingshub.com.cn/openapi/v2/function/InvokeCustomizedService

见附件

设备上报属性消息样例

// 实时上报
{
    "id": "", // UUID
    "productKey": "", // 注册产品时返回的ProductKey
    "deviceName": "", // 添加设备时的DeviceName
    "method": "thing.event.property.post", // 设备属性上报
    "version": "1.0", // 固定值1.0
    "timestamp": 0, // 消息时间戳
    "params": {
        "temperature": 36.50
    }
}

设备上报事件消息样例

// 事件触发后上报
{
    "id": "", // UUID
    "productKey": "", // 注册产品时返回的ProductKey
    "deviceName": "", // 添加设备时的DeviceName
    "method": "thing.event.${identifier}", // 设备事件上报。
    "version": "1.0", // 固定值1.0
    "timestamp": 0, // 消息时间戳
    "params": {
        "temperature": 38.20
    }
}