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,这些参数供设备连接物联网平台使用

toml
# 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

请求参数

参数数据类型是否必填说明
productKeystring是ProductKey
deviceNamestring是DeviceName
methodstring是消息类型
timestampint64是请求时间戳。单位毫秒
noncestring是一次性随机数
signaturestring否消息签名

消息类型 method

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

属性。thing.event.property.post

请求体

参数数据类型是否必须说明
idstring是消息ID
productKeystring是ProductKey
deviceNamestring是DeviceName
methodstring是消息类型
versionstring是消息版本。默认1.0
timestampint64是时间戳。单位毫秒
paramsobject是消息内容

响应参数

参数数据类型是否必须说明
codeint是返回码
msgstring是返回消息

返回码

成功。200

失败。500

URL样例

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

请求样例

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

响应样例

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

安全性

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

bash
# 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

见附件

附 ​

设备上报属性消息样例 ​

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

设备上报事件消息样例 ​

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