## 1. 前言
在设备上云之后,为了能方便管理设备,方便用户设备入网,都需要开发一款手机app或者微信小程序、桌面软件等,进行数据交互,设备管理。
华为云iot提供了应用侧开发的api对接接口,这里就介绍一下使用应用侧开发的流程。这个api接口里常用的接口包括:产品创建、设备创建、设备属性获取、设备删除、查询设备等管理接口,可以通过api主动获取产品下面某个设备的属性,要求设备上报最新的数据过来。整个开发过程,都是基于http协议的api接口进行交互,不依赖开发环境,不依赖开发语言。 不管是桌面软件,还是手机app、微信小程序、web网页等,核心代码基本都是一样,都是http协议交互。下面的例子里,我是采用c 编写的,采用qt框架库完成整个开发,了解了整个思路,你就可以采用自己熟悉的语言完成相同的功能。
我这里开发的demo软件主要功能是获取设备属性,得到设备的数据进行显示,获取设备列表等功能。
**下面是软件的运行效果图:**
软件获取设备端记录的心率、运动步数、体温等信息,点击更新设备属性,可以从设备获取最新数据进行显示。
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645414625698507577.png)
**下面是联网设备硬件实物图**
联网的设备采用移远的nbiot模块-bc20。通过stm32控制bc20连接华为云物联网服务器。
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645414423200586465.png)
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645414445111751298.png)
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645414464907221723.png)
## 2. 应用侧软件开发demo
### 2.1 官方的帮助文档
官方帮助文档: https://support.huaweicloud.com/usermanual-iothub/iot_01_0045.html
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645414809413229003.png)
### 2.2 查询设备属性接口
设备属性就是设备上传的传感器状态数据信息,应用侧提供了api接口,可以主动向设备端下发请求指令;设备端收到指令之后需要按照约定的数据格式上报数据;所以,要实现应用层与设备端的数据交互,需要应用层与设备端配合才能完成。
下面分别介绍应用测和设备测的实现流程。
**(1)应用层下发的指令**
帮助文档地址: https://support.huaweicloud.com/api-iothub/iot_06_v5_0034.html
接口的在线调试地址: https://apiexplorer.developer.huaweicloud.com/apiexplorer/debug?product=iotda&api=listproperties
如果请求参数和返回值不清楚,写代码前,先使用在线调试接口体验一下,验证数据交互是否ok。
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645414926523485156.png)
请求参数里比较总要的两个必填参数,是设备id和服务id,在产品页面创建自定义属性时可以看到服务id。
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645414959885706632.png)
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645414987621137748.png)
**请求接口总结:**
```json
请求方法 get
uri地址 /v5/iot/{project_id}/devices/{device_id}/properties
传输协议 https
拼接好的地址:
https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/0e5957be8a00f53c2fa7c0045e4d8fbf/devices/61df9a6bc7fb24029b0c160d_1126626497/properties?service_id=1126626497
其中的project_id和device_id需要根据自己的设备信息修改。
请求头:
{
"user-agent": "api explorer",
"x-auth-token": "******", 这个是鉴权用的token
"content-type": "application/json"
}
响应体(设备上传的数据)
{
"response": {
"services": [
{
"service_id": "healthy",
"properties": {
"heartrate": 127
}
},
{
"service_id": "healthy",
"properties": {
"motion": 2000
}
},
{
"service_id": "healthy",
"properties": {
"temperature": 36.2
}
}
]
}
}
```
**(2)设备上传数据**
应用层向设备端请求`查询设备属性`时,设备端会收到如下的消息:
```cpp
$oc/devices/61df9a6bc7fb24029b0c160d_1126626497/sys/properties/get/request_id=336bcb57-0e0a-44d0-90f7-31386cb54a3c{"service_id":"1126626497"}
```
这个消息里有一个主要参数`request_id`请求id,设备端需要解析出这个参数,给应用层响应数据时,需要带上这个id。
这个请求属性详细帮助文档看这里: https://support.huaweicloud.com/api-iothub/iot_06_v5_3011.html
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645415083188544451.png)
**设备响应的数据格式:**
```cpp
主题格式: $oc/devices/{device_id}/sys/properties/get/response/request_id={request_id}
示 例:
$oc/devices/61df9a6bc7fb24029b0c160d_1126626497/sys/properties/get/response/request_id=336bcb57-0e0a-44d0-90f7-31386cb54a3c
响应的数据格式:
{"services": [{"service_id": "healthy","properties":{"heartrate":127}},{"service_id": "healthy","properties":{"motion":2000}},{"service_id": "healthy","properties":{"temperature":36.2}}]}
```
响应的数据格式可以看这里的介绍: https://support.huaweicloud.com/api-iothub/iot_06_v5_3010.html
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645415106705327500.png)
## 2.3 在线api调试结合设备模拟
下面使用mqtt客户端与在线api接口联合模拟一下接口效果:
**(1)先打开调试页面:** https://apiexplorer.developer.huaweicloud.com/apiexplorer/debug?product=iotda&api=listproperties
**然后填好设备di和服务id:**
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645415160476822107.png)
**(2)、打开mqtt客户端,登录华为云物联网平台(也就是模拟设备上线):**
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645415199320976624.png)
**(3)、打开在线api调试页面,点击调试:**
点击后可以看到页面上已经在等待客户端的响应了。
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645415222536995258.png)
**(4)、mqtt客户端响应详细**
按照前面说的响应格式,拼接好接口,数据。然后发布主题。
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645415241328652901.png)
**(5)、应用层收到客户端响应,调试成功**
调试成功后,响应体里收到的就是设备端上传的设备属性数据。
![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20222/21/1645415260759747404.png)
感谢分享
大神、膜拜膜拜
感谢分享
感谢分享
感谢分享
学习了
学习了
感谢分享
学习了,感谢分享