基于开放API实现IoT平台设备动态注册方案
0.背景(设备无需烧录IoT三元组)
IoT场景需要每个设备有唯一身份标识,
- 如果设备产线不具备针对设备烧录三元组能力。
- 已出货设备从自建平台,或三方平台(极光IoT,aws,华为云IoT,百度天工)迁移到阿里云IoT物联网平台
运行时动态注册方案允许设备固件可以无差别烧录,在设备售卖给消费者手上后,第一次使用时动态注册三元组,然后再与IoT平台建立网络连接。
步骤
1.设备端固件升级
- 固件烧录如下三元组获取逻辑
涉及到系统交互如下
1. 应用服务器API设计
企业业务服务器提供IotDeviceRegister 接口
入参:
字段 | 描述 |
---|---|
deviceId | 由设备唯一标识根据规则生成的字符串。比如mac,序列号sn等 |
返回数据:
字段 | 描述 |
---|---|
productKey | 产品Id |
deviceName | 设备name |
deviceSecret | 设备秘钥 |
endpointURL | 接入点域名 |
业务逻辑:
-
根据deviceId查询OTS表,如果查不到设备,返回设备非法
-
如果有设备,有三元组,直接返回三元组
-
如果有设备,无三元组,去IoT动态注册设备,存储三元组,并返回三元组和域名
2. 表格存储OTS库设计参考
字段列 | 描述 | 备注 |
---|---|---|
deviceId | 由mac地址根据规则生成的字符串 | 主键 |
registerTime | 设备注册时间 | |
activateTime | 设备激活时间 | |
productKey | 三元组productKey(设备所属产品) | |
deviceName | 三元组deviceName | |
deviceSecret | 三元组deviceSecret | |
endpointURL | 接入点域名 | . |
3. IoT设备动态注册POP API
RegisterDevice API文档 https://help.aliyun.com/document_detail/69470.html
请求参数
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
Action | String | 是 | 要执行的操作,取值:RegisterDevice。 |
ProductKey | String | 是 | 指定要为其注册设备的产品的Key。 |
DeviceName | String | 否 | 为要注册的设备命名。设备名称应包含4-32个字符 |
返回参数
名称 | 类型 | 描述 |
---|---|---|
RequestId | String | 阿里云为该请求生成的唯一标识符。 |
Success | Boolean | 是否调用成功。ture表示调用成功,false表示调用失败。 |
ErrorMessage | String | 调用失败时,返回的出错信息。 |
Data | DeviceInfo | 调用成功时,返回注册的设备信息。详情参见DeviceInfo。 |
DeviceInfo 名称 | 类型 | 描述 |
---|---|---|
ProductKey | String | 设备隶属的产品Key。 |
DeviceName | String | 设备名称。 |
DeviceSecret | String | 设备密钥。 |
IotId | String | IoT平台为该设备颁发的设备ID,作为该设备的唯一标识符。 |
{
"RequestId":"57b144cf-09fc-4916-a272-a62902d5b207",
"Success": true,
"Data": {
"DeviceName": "CqXL5h5ysRTA4NxjABjj",
"ProductKey": "a1ysRTA4N0",
"DeviceSecret": "tXHf4ezGEHcwdyMwoCDHGBmk9a"
}
}
这样我们设备激活时,先访问企业服务器业务API,获取IoT平台的三元组身份后,发起MQTT的长连接建立,最终实现设备上云的目的。