
# 设备厂商多实例接入方案
#### 场景说明
随着厂商IoT设备的不断增加，或者厂商设备本来就面向多个销售中心（不同的销售中心有着自己的IoT接入实例），面对这样的场景，厂商在设备出厂的时候不知道设备最终需要连接到哪个IoT接入实例，设备出厂后不希望再对设备进行二次烧录。为此，华为IoT解决方案推出设备发放服务，设备出厂统一烧录设备发放的地址，通过在设备发放服务预置不同的发放策略，设备上电后自动发放到对应的IoT接入实例，并把对应的IoT接入实例地址下发给设备，设备就可以和目的接入实例实现通信。
#### 前提条件
- 已注册华为云官方账号[设备发放服务](https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/iotps/home)。未注册可单击[注册页面](https://reg.huaweicloud.com/registerui/public/custom/register.html#/register)完成注册。
- 已完成实名制认证。未完成可在华为云上单击[实名认证](https://account.huaweicloud.com/usercenter/#/accountindex/realNameAuth)完成认证，否则无法使用设备接入功能。
- 已开通设备接入服务。未开通则访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"立即使用"后开通该服务。开通设备接入服务，进入到[设备发放服务](https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/iotps/home)页面，单击"授权开通"对服务进行授权。
- 对应的设备接入服务已经上传了产品。
 
#### 整体方案
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001193800715.png "点击放大")
基于MQTT协议的上行请求引导和下行接受引导信息的业务定义如下：
| **业务场景** | **通信** **Topic**                           | **报文** **Payload**             |
|:---|:---|:---|
| 设备请求引导消息 | $oc/devices/{device_id}/sys/bootstrap/up   | /                              |
| 服务接收引导信息 | $oc/devices/{device_id}/sys/bootstrap/down | { "address": "10.0.0.1:8883" } |
   
#### 业务流程
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001148000900.png "点击放大")
1. 创建策略。其中以静态策略为例。
2. 注册设备。注册MQTT协议的设备，体验发放业务。可以注册单个，也可以批量注册设备。
3. 设备请求引导。
4. 设备接收信息，解析出IoT接入实例地址，与IoT接入实例1进行通信。
5. 动态扩容设备接入实例，创建对应实例的资源空间，在对应资源空间下上传产品。
6. 注册设备。选择对应实例的产品创建设备。
7. 新增策略。添加新实例的静态策略，以不同的关键字命名静态策略。
8. 设备请求引导。
9. 设备接收信息，解析出IoT接入实例地址，与IoT接入实例2进行通信。
10. 应用主动[设备发放控制台](https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/iotps/home)与设备侧通信。
 
#### 创建策略
有两种使用场景：[设备发放控制台](https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/iotps/home)
1. 用户预先开通了多个实例，通过设备的不同销售数据，根据对应的策略，设备上电自动发放到对应的实例。
2. 用户预先只开通一个实例，预先创建对应的策略把设备发放到当前实例。当对应实例达到上限，动态开通新的接入实例，用户删除当前策略，添加新的策略，把新上电的设备发放到新开通的实例。
本示例讲述的是第二种使用场景。
登录[设备发放控制台](https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/iotps/home)，进入到策略页面的静态策略页面，单击添加实例，根据关键字发放到指定的IoTDA实例。
图1创建静态策略   
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001836024129.png "点击放大")
图2创建静态策略详情   
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001789390626.png "点击放大")
 #### 注册设备
本次以注册单个MQTT密钥设备为示例，登录[设备发放控制台](https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/iotps/home)，进入到"设备"页面，单击"注册"，选择对应接入点的产品进行设备注册，设备名称为"Model1_001"，填写设备的密钥，发放策略选择"静态策略"，创建设备。
![](https://support.huaweicloud.com/bestpractice-iotps/public_sys-resources/note_3.0-zh-cn.png)
实际使用中，用户可以使用批量注册功能注册大量设备。下载批量注册模板，按照模板说明正确填写后上传批量注册文件以批量注册设备。建议每个设备名称的以策略的关键字开头（比如策略关键字为Model1，设备名称为Model1_XXX001）。
图3设备列表   
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001789348072.png "点击放大")
图4注册设备产品列表   
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001789188396.png "点击放大")
图5创建密钥模式静态策略设备   
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001835987553.png "点击放大")
#### 设备引导请求
**终端节点**
| 区域名称   | 区域         | 终端节点（Endpoint）                      | 端口   | 协议    |
|:---|:---|:---|:---|:---|
| 华北-北京四 | cn-north-4 | iot-bs.cn-north-4.myhuaweicloud.com | 8883 | MQTTS |
   
下载并修改华为SDK示例代码进行设备引导（这里以[java sdk代码](https://github.com/huaweicloud/huaweicloud-iot-device-sdk-java)为示例）。
![](https://support.huaweicloud.com/bestpractice-iotps/public_sys-resources/note_3.0-zh-cn.png)
用IDEA/Eclipse打开SDK代码工程，修改iot-device-demo目录下的DEMO示例"BootstrapSample"中的参数，其中deviceId和secret替换为[注册设备]中生成的设备ID和密钥即可，bootstrapUri为上述**终端节点**。
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001147841120.png "点击放大")
运行DEMO程序，看到如下日志，代表设备发放成功，并且已经收到设备发放下发的设备接入地址。如果程序运行没报错，在对应的设备接入平台可以看到设备，并已在线。
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001193800719.png "点击放大")
收到设备发放下发的设备接入地址后，需要关闭设备侧的设备发放的连接，用的新的URL地址与设备接入通信，进行相关业务。
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001148000906.png "点击放大")
#### 新增IoT接入实例
用户新增IoT接入实例，创建对应实例的资源空间，在对应资源空间下上传产品。
#### 新增策略
当新的实例扩容后，添加新实例的静态策略，通不过不同的关键字命名关联新的实例。
图6创建静态策略详情   
![](https://support.huaweicloud.com/bestpractice-iotps/figure/zh-cn_image_0000001789390626.png "点击放大")
然后按照上面的操作以新策略的名称注册设备，请求引导即可。
#### 应用主动与设备通信
多实例场景下，当应用侧需要主动与设备侧通信时，比如主动下发命令，需要应用侧知道设备是在哪个实例上，应用要规划好每批命令设备发放哪个实例，在设备发放通过查询静态策略，找到对应设备名称的设备的实例ID，调用设备接入北向API下发命令需要指定实例ID。
