# 路灯通过微信小程序接入到平台
#### 场景说明
平台支持基于WebSocket的MQTT协议，使基于浏览器的应用程序或者小程序可以快速接入到物联网平台。本文以"智慧路灯"为示例，通过微信小程序模拟设备，带您体验设备通过MQTT over WebSocket协议连接到物联网平台、上报数据和接收命令的全过程。
假设：
路灯设备上报一条包含光照强度（luminance）的消息；路灯支持远程控制开关状态的命令（switch），路灯上报的数据格式为JSON格式。
#### 前提条件
- 已注册华为云官方账号。未注册可单击[注册页面](https://reg.huaweicloud.com/registerui/public/custom/register.html#/register)完成注册。
- 已完成实名制认证。未完成可在华为云上单击[实名认证](https://account.huaweicloud.com/usercenter/#/accountindex/realNameAuth)完成认证，否则无法使用设备接入功能。
- 已开通设备接入服务。未开通则访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"立即使用"后开通该服务。
 
#### 业务流程
具体步骤如下：
**步骤1：[创建产品]**。创建一个MQTT协议的产品。
**步骤2：[开发产品模型]**。通过定义产品模型，在物联网平台构建一款路灯设备，支持上报光照强度、下发路灯开关状态命令。
**步骤3：[注册设备]**。注册一个MQTT协议的设备，体验数据上报业务。
**步骤4：** **[使用微信小程序接入]**。使用微信小程序将设备连接到物联网平台。
 #### 创建产品
产品是设备的合集，您可以将相同能力或特征的设备归属在同一个产品下。
1. 登录[管理控制台](https://console.huaweicloud.com/iotdm/?locale=zh-en#/dm-portal/home)，单击左侧导航栏"产品"，单击页面左侧的"创建产品"。
2. 根据页面提示填写参数，然后单击"立即创建"。 
   
   |                                                                                             **基本信息**                                                                                              ||
   |---|---|
   | 所属资源空间 | 平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下，下拉选择所属的资源空间。如无对应的资源空间，请先创建[资源空间](https://support.huaweicloud.com/usermanual-iothub/iot_01_0006.html)。 |
   | 产品名称      | 自定义，如Streetlight。支持字母、数字、下划线（_）、连字符（-）的字符组合。                                                                                             |
   | 协议类型       | 选择MQTT。                                                                                                                                  |
   | 数据格式      | 选择JSON。                                                                                                                                   |
   | 设备类型选择   | 选择自定义类型                                                                                                                                   |
   | 设备类型      | Streetlight                                                                                                                               |
      
   
   
 
 #### 开发产品模型
1. 找到[创建产品]章节新增的产品，单击产品进入产品界面。
2. 在产品详情"基本信息"页面，单击"自定义模型"，配置产品的服务。
3. 添加服务"BasicData"。 
   1. 在"添加服务"页面，填写"服务ID"、"服务类型"和"服务描述"，单击"确定"。
      - "服务ID"：BasicData
      
      - "服务类型"：建议和服务ID保持一致
      
      - "服务描述"：上报路灯数据
       
   
   2. 在"BasicData"的下拉菜单下单击"添加属性"，填写相关信息后，单击"确定"。
      - "属性名称"：luminance
      
      - "数据类型"：int（整型）
      
      - "访问权限"：可读、可写
      
      - "取值范围"：0\~65535
      
      - "步长"：0
      
      - "单位"：不填写
       
   
   
   
   
4. 添加服务类型"LightControl"。 
   1. 在"基本信息"下单击"添加服务"，填写"服务ID"、"服务类型"和"服务描述"，单击"确定"。
      - "服务ID"：LightControl
      
      - "服务类型"：建议和服务ID保持一致
      
      - "服务描述"：路灯开关控制
       
   
   2. 在"LightControl"的下拉菜单下单击"添加命令"，输入命令名称"Switch"。
   
   3. 在"新增命令"页面，单击"新增输入参数"，填写相关信息后，单击"确定"。
      图1新增命令参数-value   
      ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001981469745.png "点击放大") 
   
   
   
   
 
 #### 注册设备
1. 在管理控制台页面，选择左侧导航栏"设备 \> 所有设备"，单击"注册设备"。
2. 根据页面提示信息填写参数，然后单击"确定"。 
   
   | 参数名称                    | 说明                                                               |
   |:---|:---|
   | 所属资源空间               | 确保和创建的产品归属在同一个资源空间。                                            |
   | 所属产品                  | 选择步骤[2]创建的产品。 |
   | 设备标识码                | 即nodeID，设备唯一物理标识。可自定义，由英文字母和数字组成。                                |
   | 设备名称                 | 即device_name，可自定义，如streetlight。                                  |
   | 设备认证类型                  | 选择"密钥"。                                                        |
   | 密钥 | 此处不填写，物联网平台会自动生成。                                              |
      
   成功注册设备后，平台会自动生成设备ID和密钥，请妥善保管好设备ID（deviceId）和密钥（deviceSecret），用于设备接入。
   图2设备-注册设备成功   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001981487333.png "点击放大")
   
   
 
 #### 使用微信小程序接入
1. 下载[微信小程序示例工程](https://iot-developer.obs.cn-north-4.myhuaweicloud.com/IOTDA-websocket-demo.zip)。
2. 下载并安装[微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html)，使用微信开发者工具打开微信小程序示例工程，如下图所示。
   
   图3微信小程序示例工程   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001166565771.png "点击放大")
   小程序提供了界面显示，填写Server地址、设备ID、设备密钥。请根据实际创建的设备信息填写。
   - Server地址：即服务器域名，参考[平台对接信息](https://support.huaweicloud.com/devg-iothub/iot_02_1004.html#section0)获取"MQTT over WebSocket"协议对应的域名；
     ![](https://support.huaweicloud.com/bestpractice-iothub/public_sys-resources/note_3.0-zh-cn.png)
     基础版实例"MQTT over WebSocket"协议对应的域名为：iot-mqtts.cn-north-4.myhuaweicloud.com
     
   
   - 设备ID和设备密钥：在[这里](https://support.huaweicloud.com/bestpractice-iothub/iot_bp_00016.html#ZH-CN_TOPIC_0000001084799901__section696445616559)获取。
    
   
   
3. 微信小程序连接到物联网平台 
   开发者通过传入设备信息，将设备连接到物联网平台。
   ![](https://support.huaweicloud.com/bestpractice-iothub/public_sys-resources/note_3.0-zh-cn.png)
   真机调测时请在微信开发者工具-详情-本地设置-不校验合法域名，将其取消勾选，再在微信公众平台-小程序管理员界面-开发管理-服务器域名中添加socket合法域名（'wss://'+MQTT接入地址）。
   图4连接到平台   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001993187141.png "点击放大")
   单击连接到平台按钮，在域名、设备ID和密钥正确的情况下，可以看到日志设备连接成功，可在平台查看设备状态，如下图：
   图5设备列表-设备在线   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001950367902.png "点击放大")
   
   
4. 发布Topic 
   发布Topic是指设备主动向平台上报自己的属性或消息，详细见[设备属性上报接口](https://support.huaweicloud.com/api-iothub/iot_06_v5_3010.html)文档。
   在微信小程序中实现了上报属性数据的功能。
   发布Topic后，Demo界面显示如下：
   图6上报数据   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001993190329.png "点击放大")
   设备上报属性成功后可在[设备详情](https://console.huaweicloud.com/iotdm/#/dm-portal/device/all-device)页面查看到上报的属性：
   图7查看上报数据-MQTT   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001981489749.png "点击放大")
   
   
5. 订阅Topic 
   订阅某topic的设备才能接收平台发布的关于该topic的消息，关于平台预置topic可参考[Topic定义](https://support.huaweicloud.com/api-iothub/iot_06_v5_3004.html)。
   建链后，如果成功订阅Topic，主界面日志栏显示如下信息：
   图8订阅topic界面   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001993071253.png "点击放大")
   
   
6. 接收下发命令 
   小程序支持接收平台下发命令的功能，在MQTT建链完成并成功订阅Topic后，可以在[控制台](https://console.huaweicloud.com/iotdm/#/dm-portal/home)设备详情中对该设备进行同步命令下发。下发成功后，在MQTT的回调函数中接收到平台下发给设备的命令。
   例如下发参数名为LightControl: Switch，参数值为ON的命令。
   图9命令下发-MQTT   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001981577861.png "点击放大")
   同步命令下发成功后，Demo界面显示如下
   图10接收命令界面   
   ![](https://support.huaweicloud.com/bestpractice-iothub/figure/zh-cn_image_0000001993072341.png "点击放大")
   
   
 
