MQTT协议分析—对接华为云体验整个通信流程

举报
樊心昊 发表于 2020/07/30 14:50:54 2020/07/30
【摘要】 本章带领大家使用MQTT.fx作为客户端采用MQTT协议连接华为IoT中的IoTDA服务,体验整个MQTT的使用流程。一、创建产品进入控制台,选择“设备接入IoTDA”服务。点击左侧“产品”。点击右上角“创建创建产品”。我们创建一个名为MQTT_TEST的产品,协议类型选择“MQTT”,数据格式选择“JSON”,设备类型是传感器“Sensor”,填写完点击右下角“立即创建”,即可看到如下图所...

本章带领大家使用MQTT.fx作为客户端采用MQTT协议连接华为IoT中的IoTDA服务,体验整个MQTT的使用流程。

一、创建产品

image.png

进入控制台,选择“设备接入IoTDA”服务。

image.png

点击左侧“产品”。

image.png

点击右上角“创建创建产品”。

image.png

我们创建一个名为MQTT_TEST的产品,协议类型选择“MQTT”,数据格式选择“JSON”,设备类型是传感器“Sensor”,填写完点击右下角“立即创建”,即可看到如下图所示的产品。

image.png

       点击上图产品名称“MQTT_TEST”,选择“模型定义”,点击自定义模型,如下图

image.png

我们新建一个Sensor名称的服务,如下图,点击“确认”。

image.png

在Sensor服务中添加一个Temperature名称的属性,数据类型为小数,勾选“必选”,待会我们通过MQTT.fx客户端模拟上传,如下图。

image.png

添加一个名为“Power_Control”的命令,新增一个名为Status的参数,数据类型为字符串,长度为3,添加ON和OFF两个枚举值,用,隔开,点击“确认”即可完成添加

image.png 

二、注册设备

image.pngimage.png

点击左侧“设备”,选择右上角“注册设备”,如上图。

 

image.png

选择刚才创建产品使用的资源空间及产品,任意填写标识码,在产品中我们一般使用设备的MAC地址、IMEI号、串码等独一无二的信息作为设备的标识码,这里随意填写,只要记得就行,设备名称可以随意填写,密钥为了方便我这里填写123456,填写完成之后点击“确定“出现如下图所示的信息界面。

image.png

三、使用MQTT.fx作为客户端连接

MQTT协议规定进行连接或者通讯时需要的“接入地址”、“端口”、“Client ID“、“用户名”、“密码”等信息,这些信息的获取方法每个平台都不一样,具体如何获取取决于平台的要求,华为云IoTDA对“Client ID“、“用户名”、“密码”等信息的详细要求可以查阅下面这个帮助文档:https://support.huaweicloud.cn/api-iothub/iot_06_v5_3009.html,这三项信息主要用于鉴权,我们可以通过根据下面的文档将需要的数据手动计算出来或者使用一个小工具直接生成,这个小工具的下载地址:https://developer.obs.cn-north-4.myhuaweicloud.com/hub/mqttClientIdGenerator-19.2.0.zip

image.png

打开下载好的“mqttClientIdGenerator-19.2.0”,填入之前我们设置和系统生成的信息:

设备ID   5f223ea2f958e402cae7c76e_1023405741

密钥       12345678

点击“Generate”,即可得到鉴权所需的clientID、username和password

image.png

打开安装好的MQTT.fx软件,点击“设置”,如下图:

image.png

 

image.png

根据IoTDA中“总览”界面的接入域名、非加密端口1883和上面的三个鉴权信息填写,注意这里的Password是那个软件生成的并不是直接填写12345678,最终如下图:

image.png

点击ok,然后点击“connect”,可以在IoTDA设备中看到刚才我们的设备的状态由“未激活”变为“在线”,如下图:

image.png

image.png

到这一步说明连接成功了!

四、观察数据上报和命令下发

在IoTDA服务中MQTT的topic被划分为如下:

设备消息:设备向该topic发布一些消息,例如传感器异常等

设备属性:设备向该topic发布自身属性。例如温湿度。

命令下发:设备订阅了该topic可以收到服务器下发的命令。

自定义topic:我们可以自定义一些topic以满足不同的需求。

 

要如何上报数据呢?这就是MQTT中的发布机制,我们需要查看IoTDA的帮助文档,从而确定Temperature这个属性需要发布到哪一个topic中以及JSON数据的格式,详细文档可以参考:

https://support.huaweicloud.cn/api-iothub/iot_06_v5_3010.html 设备属性上报格式。https://support.huaweicloud.cn/api-iothub/iot_06_v5_3004.html topic定义

主要信息:

image.png

我们需要将{device_id}字段替换为5f223ea2f958e402cae7c76e_1023405741,最终使用的topic为:$oc/devices/5f223ea2f958e402cae7c76e_1023405741/sys/properties/report。

数据格式为:

image.png

根据以上信息组成一个JSON格式的数据,Services为一个列表,可以在其中存放我们在产品中定义的全部属性,例如:service_id为Sensor的这个服务,其中由名为Temperature的属性,最终效果如下图:

image.png

       在MQTT.fx软件中填写topic和JSON数据格式,点击publish发布,如下图:

image.png

这时可以看到IoTDA设备界面中收到了数据,如下图:

image.png

       如何收到服务器下发的命令呢?使用MQTT协议的订阅机制,根据topic定义和如下文档:https://support.huaweicloud.cn/api-iothub/iot_06_v5_3014.html

image.png

我们可以订阅一个topic,因为每次命令下发时topic中最后一级字符串是指request_id,代表每次请求的编号是独一无二的,还可以用于向服务器request_id对应的命令执行,我们无法提前预知其内容,所以使用*通配符,无论什么request_id都能收到,我们订阅:$oc/devices/5f223ea2f958e402cae7c76e_1023405741/sys/commands/#,如下图:

image.png

在文本框内填入topic点击Subscribe即可订阅,这时打开IoTDA设备界面选择MQTT_TEST设备,点击“命令下发”,发送一个ON指令,如下图:

image.png

立马可以在MQTT.fx中看到如下信息,说明下发成功了:

image.png

体验到这里就算结束了!



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。