# MQTT.fx模拟智慧路灯与平台通信
#### 场景说明
本文以"智慧路灯"为示例，通过MQTT.fx设备模拟器模拟智慧路灯，给您介绍基于IoTDA平台实现一款智慧路灯连接到平台、上报光照强度数据、以及平台下发开灯命令给智慧路灯三个场景。
图1模拟智慧路灯与平台通信流程图   
![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000002246214969.png "点击放大")
#### 前提条件
- 已注册华为云官方账号。未注册可单击[注册页面](https://reg.huaweicloud.com/registerui/public/custom/register.html#/register)完成注册。
- 已完成实名制认证。未完成可在华为云上单击[实名认证](https://account.huaweicloud.com/usercenter/#/accountindex/realNameAuth)完成认证，否则无法使用设备接入功能。
- 已开通设备接入服务。未开通则访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"控制台"后开通该服务。
 
#### 业务流程
基于MQTT.fx体验平台功能是指使用MQTT.fx模拟器工具，进行数据上报、命令下发等业务的体验。您可单击此处下载[MQTT.fx](https://iotda-document.obs.cn-north-4.myhuaweicloud.com/mqttfx-1.7.1-windows-x64.exe)（默认是64位操作系统，如果是32位操作系统，单击此处下载[MQTT.fx](https://iotda-document.obs.cn-north-4.myhuaweicloud.com/mqttfx-1.7.1-windows.exe)），安装MQTT.fx工具。整体的业务流程如下：
1. 创建产品。在控制台上创建一个MQTT协议的智慧路灯产品。通过定义产品模型，构建一款路灯设备，支持上报光照强度、下发路灯开关状态命令。
2. 注册设备。在控制台上注册一个MQTT协议的智慧路灯设备。
3. 设备建链。使用MQTT.fx模拟智慧路灯，完成连接鉴权，激活在物联网平台上注册的设备。
4. 数据上报。使用MQTT.fx模拟智慧路灯向物联网平台上报路灯光照强度数据。
5. 命令下发。在管理控制台下发路灯开关命令，远程控制MQTT.fx模拟智慧路灯。
 
#### 流程介绍与设备注册视频指导
<video controls="controls" preload="none" id="object157211915123810" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/support/iothub-video/1751858670725721190.mp4" title="流程介绍与设备注册" poster="https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000002346908262.jpg" style="width:80%;height:auto;max-width:1000px"></video>
#### 模拟路灯与平台通信视频指导
<video controls="controls" preload="none" id="object19249654202712" class="idp-external-video" src="https://res-video.hc-cdn.com/cloudbu-site/china/zh-cn/support/iothub-video/1751856920207866209.mp4" title="模拟路灯与平台通信" poster="https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000002346722484.jpg" style="width:80%;height:auto;max-width:1000px"></video>
#### 创建产品
1. 访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"管理控制台"进入设备接入控制台。选择您的实例，单击实例卡片进入。
2. 单击左侧导航栏"产品"，单击页面左侧的"创建产品"。 
   图2产品-创建产品   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000002358714305.png "点击放大")
   
   
3. 创建一个协议类型为MQTT协议、自定义设备类型为StreetLamp的产品，参考页面提示填写参数后，单击"确定"。 
   图3创建产品-MQTT   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981306829.png "点击放大")
   
   
 
 #### 开发产品模型
1. 找到新增的产品，单击产品进入产品界面。
2. 在产品详情"基本信息"页面，单击"自定义模型"，配置产品的服务。 
   图4自定义模型-MQTT   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981309873.png "点击放大")
   
   
3. 新增服务类型"BasicData"。 
   1. 在"添加服务"页面，根据页面提示填写"服务ID"、"服务类型"和"服务描述"，单击"确定"。
      图5添加服务-BasicData   
      ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981469753.png "点击放大") 
   
   2. 在"BasicData"服务列表右侧区域，单击"新增属性"，填写相关信息后，单击"确定"。
      图6新增属性-luminance   
      ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981470853.png "点击放大") 
   
   
   
   
4. 新增服务类型"LightControl"。 
   1. 在"基本信息"下单击"添加服务"，根据页面提示填写后，单击"确定"。
      - "服务ID"：LightControl
      
      - "服务类型"：建议和服务ID保持一致
      
      - "服务描述"：路灯开关控制
       
   
   2. 在"LightControl"的下拉菜单下单击"新增命令"，输入命令名称"Switch"。
      图7新增命令-Switch   
      ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981311005.png "点击放大") 
   
   3. 在"新增命令"页面，单击"新增下发参数"，填写相关信息后，单击"确定"。
      图8新增命令参数-value   
      ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981469745.png "点击放大") 
   
   
   
   
 
#### 注册设备
1. 访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"管理控制台"进入设备接入控制台。选择您的实例，单击实例卡片进入。
2. 选择左侧导航栏"设备 \> 所有设备"，单击"注册设备"。 
   图9所有设备-注册设备   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981487325.png "点击放大")
   
   
3. 根据页面提示信息填写参数，然后单击"确定"。 
   
   | 参数名称                    | 说明                                                                                       |
   |:---|:---|
   | 所属资源空间               | 确保和所属产品归属在同一个资源空间。                                                                     |
   | 所属产品                  | 选择对应产品。                                                                                  |
   | 设备标识码                | 即nodeID，设备唯一物理标识。设备标识码长度为4至64个字符，只允许字母、数字、下划线（_）、连接符（-）的组合。 |
   | 设备名称                 | 即device_name，可自定义。                                                                       |
   | 设备认证类型                  | 选择"密钥"。                                                                                |
   | 密钥 | 此处如不填写，物联网平台会自动生成。                                                                     |
      
   图10单设备注册-MQTT   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981327497.png "点击放大")
   
   
4. 成功注册设备后，平台会自动生成设备ID和密钥，请妥善保管好设备ID（deviceId）和密钥（deviceSecret），用于设备接入。 
   图11设备-注册设备成功   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981487333.png "点击放大")
   
   
 
#### 通过MQTT.fx模拟智慧路灯连接平台
使用MQTT.fx工具激活在物联网平台上注册的设备。
1. 下载[MQTT.fx](https://iotda-document.obs.cn-north-4.myhuaweicloud.com/mqttfx-1.7.1-windows-x64.exe)（默认是64位操作系统，如果是32位操作系统，单击此处下载[MQTT.fx](https://iotda-document.obs.cn-north-4.myhuaweicloud.com/mqttfx-1.7.1-windows.exe)），安装MQTT.fx工具。
2. 进入设备详情页面，找到"MQTT连接参数"，单击"查看"，查看其中的clientId、username、password和hostname。
   
   图12设备-设备详情   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981489741.png "点击放大")
   图13设备-设备详情-MQTT连接参数   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000002127228254.png "点击放大")
   
   
3. 打开MQTT.fx软件，单击设置图标。 
   图14MQTT.fx设置   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000002602781403.png "点击放大")
   
   
4. 单击"User Credentials"，参考下表配置鉴权参数。 
   图15配置鉴权参数   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001993256088.png "点击放大")
   表1参数说明 
   | 参数名称          | 说明                                                                                                                                                          |
   |:---|:---|
   | Broker Address | 即hostname，请参考[2]中获取。此接入地址为域名信息。不能通过域名接入的设备，通过在cmd命令框中执行"ping 域名"获取IP地址，用IP地址接入平台。由于IP地址不固定，您需要将IP地址做成可配置项。 |
   | Broker Port   | 8883，本次快速入门实践采用8883安全连接port。                                                                                                                                 |
   | Client ID     | 设备clientID，请参考[2]中获取。                                                                                        |
   | User Name      | 即设备ID，请参考[2]中获取。                                                                                           |
   | Password      | 加密后的设备密钥，请参考[2]中获取。                                                                                          |
      
   
   
5. 单击"SSL/TLS"，然后单击"Enable SSL/TLS"，"Protocol"推荐选择"TLSv1.2"。选择"CA certificate file"，前往[证书资源](https://support.huaweicloud.com/devg-iothub/iot_02_1004.html#section3)下载您对应Region和实例版本的证书文件，将证书文件的完整本地路径填入栏目中。最后单击"Apply"，再单击"Cancel"退出配置界面。
   
   图16配置SSL/TLS参数   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000002054909809.png "点击放大")
   
   
6. 单击"Connect"，看到MQTT.fx界面右上角圆圈转为绿色，即说明设备模拟器鉴权连接成功。设备连接成功后，在物联网平台可以看到设备处于在线状态。 
   图17设备模拟器连接成功   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000002029655901.png "点击放大")
   图18设备在线   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981327513.png "点击放大")
   
   
 
#### 光照强度数据上报
使用MQTT.fx工具向物联网平台上报光照强度数据。设备若通过MQTT通道上报数据，需要发给指定的topic，上报消息的topic格式为：$oc/devices/**{device_id}**/sys/properties/report，其中对于一机一密设备，使用deviceId接入时需填写为设备注册成功后返回的deviceId值。
1. 填写topic名称，此处以$oc/devices/**{device_id}** /sys/properties/report为例。
   
   图19填写topic名称   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000002029735437.png "点击放大")
   
   
2. 在工具中间的空白处填写上报的数据后，单击"Publish"。 
   表2设备服务数据列表 
   | 字段名      | 必选/可选 | 类型                            | 参数描述                                       |
   |:---|:---|:---|:---|
   | services | 必选       | List\<ServiceProperty\> | 设备服务数据列表（具体结构参考下表ServiceProperty定义表） |
      
   表3ServiceProperty定义表 
   | 字段名        | 必选/可选 | 类型      | 参数描述                                                                                                                                                                      |
   |:---|:---|:---|:---|
   | service_id | 必选       | String  | 设备服务的ID。                                                                                                                                                                 |
   | properties | 必选       | Object | 设备服务的属性列表，具体字段在设备关联的产品模型中定义。                                                                                                                                              |
   | eventTime  | 可选         | String | 设备采集数据UTC时间（格式：yyyyMMddTHHmmssZ），如：20161219T114920Z。 设备上报数据不带该参数或参数格式错误时，则数据上报时间以平台时间为准。 |
      
   请求示例如下：
   ```
   {
       "services": [{
               "service_id": "BasicData",
               "properties": {
                   "luminance": 30
           }
         }
      ]
   }
   ```
   
   
3. 可以在设备详情页中查看设备是否成功上报数据。 
   图20查看上报数据-MQTT   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981489749.png "点击放大")
   
   
 
#### 远程下发开灯命令
在管理控制台下发开灯命令，远程控制智慧路灯。
1. 选择"设备 \> 所有设备"，找到新建的设备，单击"详情"进入设备详情页面。
2. 单击"云端下发"页签，单击"命令下发"，选择命令为LightControl: Switch，value为ON，下发开灯命令。 
   图21命令下发-同步命令下发   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981553705.png "点击放大")
   图22命令下发-LightControl   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001981497713.png "点击放大")
   ![](https://support.huaweicloud.com/qs-iothub/public_sys-resources/note_3.0-zh-cn.png)
   MQTT协议设备仅支持同步命令下发，NB-IoT设备仅支持异步命令下发。
   
   
3. MQTT.fx模拟器中选择"Subscribe"，输入命令下发Topic，订阅后则可以查看到下发的命令参数。命令下发Topic格式为：$oc/devices/**{device_id}** /sys/commands/#。如下图所示，MQTT.fx模拟器成功收到command_name为Switch的命令，value为ON。
   
   图23查看下发的命令参数   
   ![](https://support.huaweicloud.com/qs-iothub/figure/zh-cn_image_0000001993096320.png "点击放大")
   ![](https://support.huaweicloud.com/qs-iothub/public_sys-resources/note_3.0-zh-cn.png)
   如果Console界面提示命令请求超时，是因为下发的同步命令需要设备侧及时回报响应消息，而MQTT.fx并无自动上报命令响应消息的功能。命令响应内容请参考[平台命令下发](https://support.huaweicloud.com/api-iothub/iot_06_v5_3014.html)。
   
   
