
# 使用mqttfx模拟物联网设备
#### 操作步骤
1. 访问智能设施云平台管理控制台，选择"设备管理 \> 产品"，在对应产品分类下创建一个产品，**注意产品** **ID要唯一，协议类型必须为MQTT** 。
   
   图1创建产品   
   ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002496208041.png "点击放大")
   
   
2. 创建产品成功后单击详情页面，在该页面下添加服务ID，一般默认固定填写为InfoService。 
   图2添加服务   
   ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002463169066.png "点击放大")
   
   
3. 添加服务成功后可以为该服务添加对应的设备属性，具体属性名称和属性类型根据实际的设备属性来，操作如下： 
   图3添加属性   
   ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002496208113.png "点击放大")
   
   
4. 接着在"设备"菜单注册对应设备，设备所属产品要选择上面创建的产品，设备类型为物联网设备，设备鉴权密码填写一个好记住的密码（后面连接mqtt需要用到），操作如下： 
   图4注册物联网设备   
   ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002496368157.png "点击放大")
   
   
5. 注册成功后会弹出关闭保持框，单击确认后就会下载一个DEVICES-KEY.txt的文件，该文件记录好了该设备的secret值（对应的就是设备鉴权密码）。同时去设备详情里面查看设备id并记录下来。
6. 进入下面url下载安装MQTT.fx工具后进行安装： 
   <https://iotda-document.obs.cn-north-4.myhuaweicloud.com/mqttfx-1.7.1-windows-x64.exe>
   
   
7. 访问[https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com](https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/)这个地址，填写步骤4的设备ID（DeviceId）和设备的设备鉴权密码，密码签名类型为密钥认证，密码签名类型为不校验时间戳，生成连接信息（ClientId、Username、Password）。
   
   图5clientID生成工具   
   ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002463328706.png "点击放大")
   
   
8. 打开MQTT.fx软件，单击设置图标。 
   图6设置按钮   
   ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002463328734.png "点击放大")
   
   
9. 参考下表配置鉴权参数，然后单击"Apply"。 
   图7mqtt连接配置   
   ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002463328742.png "点击放大")
   表1mqtt连接参数 
   | 参数名称           | 说明                                                                                                                                |
   |:---|:---|
   | Broker Address | 设备对接地址，此地址为域名信息。北京四伙伴POC测试环境可以使用 e6aeb02b19.st1.iotda-device.cn-north-4.myhuaweicloud.com |
   | Broker Port    | 默认使用1883                                                                                                                          |
   | CliendID       | 设备cliendID，请参考步骤7中获取。                                                                                                             |
   | User Name      | 即设备ID，请参考步骤7中获取。                                                                                                                  |
   | Password       | 加密后的设备密钥，请参考步骤7中获取。                                                                                                               |
      
   
   
10. 单击"Connect"，设备鉴权成功后，在设施云平台"设备"界面可以看到对应物联网设备处于在线状态就说明模拟设备连接成功了。
11. 连接成功后就可以通过发布消息到对应设备的url就能上报该设备的点位数据，对应url如下： 
    "$oc/devices/{device_id}/sys/properties/report"为例，如"$oc/devices/5e4e2e92ac-164aefa8fouquan1/sys/properties/report"。
    图8上报点位   
    ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002496208085.png "点击放大")
    
    
12. 填写上报的数据格式如下： 
    ```
    {
        "services": [
            {
                "event_time": "20240914T081438Z",
                "properties": {
                    "ElecQualitity": 10.1
                },
                "service_id": "InfoService"
            }
        ]
    }
    ```
    表2表1 设备服务数据列表 
    | 字段名      | 必选/可选 | 类型                      | 参数描述                                 |
    |:---|:---|:---|:---|
    | services | 必选    | List\<ServiceProperty\> | 设备服务数据列表（具体结构参考下表ServiceProperty定义表） |
       
    表3表2 ServiceProperty定义表 
    | 字段名        | 必选/可选 | 类型     | 参数描述                                                                                                                            |
    |:---|:---|:---|:---|
    | service_id | 必选    | String | 设备服务的ID。固定填写为InfoService.                                                                                                       |
    | properties | 必选    | Object | 设备服务的属性列表，具体字段在设备关联的产品模型中定义。                                                                                                    |
    | eventTime  | 可选    | String | 设备采集数据UTC时间（格式：yyyyMMddTHHmmssZ），如：20161219T114920Z。 设备上报数据不带该参数或参数格式错误时，则数据上报时间以平台时间为准。 |
       
    
    
13. 单击"Publish"，可以在设施云设备详情界面上查看设备是否成功上报数据。 
    图9物联网设备点位   
    ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002496368165.png "点击放大")
    
    
14. 如果要模拟设置点位，在mqtt.fx模拟工具打开订阅功能，订阅的topic为$oc/devices/{device_id}/sys/properties/set/#，如下图所示： 
    图10订阅点位设置   
    ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002463169030.png "点击放大")
    
    
15. 接着在机电设备详情页面对应的属性管理页面，单击对应点位设置按钮来设置这个设备的点位进行下发： 
    图11设定点位值   
    ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002463328674.png "点击放大")
    
    
16. 设置成功后就可以监听到一个消息了，如下所示，可以看到一个后面有个request_id参数，获取这个参数值后，接着发布一个消息来响应设置点位成功。 
    图12监听点位设置信息   
    ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002496368149.png "点击放大")
    
    
17. 发布的topic为$oc/devices/{device_id}/sys/properties/set/response/request_id={request_id}，速度要快，不然就容易响应超时导致设置失败了。 
    图13响应点位设置   
    ![](https://support.huaweicloud.com/devg-ocsmartcampus/zh-cn_image_0000002496368053.png "点击放大")
    
    
18. 如果需要进行其他IOTDA和设备的交互，IOTDA提供的基础topic可参照如下表格（仅适用于MQTT协议设备）。 
    表4topicy定义表 
    |                                  **Topic**                                  | **发布者** | **订阅者** |           **用途**            |
    |---|---|---|---|
    | $oc/devices/{device_id}/sys/messages/up                                     | 设备      | 平台      | 设备消息上报                      |
    | $oc/devices/{device_id}/sys/messages/down                                   | 平台      | 设备      | 平台下发消息给设备                   |
    | $oc/devices/{device_id}/sys/commands/request_id={request_id}                | 平台      | 设备      | 平台下发命令给设备                   |
    | $oc/devices/{device_id}/sys/commands/response/request_id={request_id}       | 设备      | 平台      | 设备返回命令响应                    |
    | $oc/devices/{device_id}/sys/properties/report                               | 设备      | 平台      | 设备上报属性数据                    |
    | $oc/devices/{device_id}/sys/gateway/sub_devices/properties/report           | 设备      | 平台      | 网关批量上报属性数据                  |
    | $oc/devices/{device_id}/sys/properties/set/request_id={request_id}          | 平台      | 设备      | 平台设置设备属性                    |
    | $oc/devices/{device_id}/sys/properties/set/response/request_id={request_id} | 设备      | 平台      | 属性设置的响应结果                   |
    | $oc/devices/{device_id}/sys/properties/get/request_id={request_id}          | 平台      | 设备      | 平台查询设备属性                    |
    | $oc/devices/{device_id}/sys/properties/get/response/request_id={request_id} | 设备      | 平台      | 属性查询响应结果，这个结果不会对设备属性和影子产生影响 |
    | $oc/devices/{device_id}/sys/shadow/get/request_id={request_id}              | 设备      | 平台      | 设备侧主动获取平台的设备影子数据            |
    | $oc/devices/{device_id}/sys/shadow/get/response/request_id={request_id}     | 平台      | 设备      | 设备侧主动获取平台设备影子数据的响应          |
    | $oc/devices/{device_id}/sys/events/up                                       | 设备      | 平台      | 设备事件上报                      |
    | $oc/devices/{device_id}/sys/events/down                                     | 平台      | 设备      | 平台事件下发                      |
       
    
    
 
