智宇物联 专注于提供高稳定、高速率的三网物联网卡

忠中国移动OneNet物联网平台使用心得(3)MQTT协议后台命令下发

  • 作者:佚名
  • 发表时间:2022年10月13日上午7:30
  • 来源:未知


中国移动OneNet物联网平台使用心得(3)MQTT协议后台命令下发

题目

大家好,超子又和大家见面了,超子我能力有限,技术不高,有什么错误的地方,欢迎板砖。今天我们测试一下中国移动云OneNet物联网平台下发命令功能,也就是分析一下服务器推送的PUBLISH报文命令。超子在前面介绍阿里云物联网平台的时候,详细介绍了MQTT协议报文的构成,这里就不赘述了,我们直接操作。

中国移动OneNet物联网平台使用心得(3)MQTT协议后台命令下发

首先我们进入开发者中心,然后进入我们的产品中,点击左侧导航栏,进入设备列表。然后再对应的设备内,找到更多操作,然后选择下发命令,在下发命令之前,一定要先发送CONNECT报文,等设备在线后,才能发送,不然设备不在线,发了命令也收不到。

中国移动OneNet物联网平台使用心得(3)MQTT协议后台命令下发

进入下发命令的页面后,点击靠近右上角的下发命令按键。

中国移动OneNet物联网平台使用心得(3)MQTT协议后台命令下发

我们可以发送字符串格式或16进制格式的数据,这里我们就选择发字符串吧,然后命令框中输入abc123,然后页面往下看,点击发送按键,再提醒一下大家,点击发送之前,一定要先发送CONNECT报文,让设备在线。

中国移动OneNet物联网平台使用心得(3)MQTT协议后台命令下发

我们用网络调试助手软件,测试一下,首先是发送CONNECT报文,我们看到服务器正确的回复了我们,说明设备在线了,然后在点击OneNet服务器后台发送命令的按键后,红圈中就是接收到的PUBLISH报文命令。我们复制下来分析一下。

30 32 00 2A 24 63 72 65 71 2F 62 66 62 62 32 30 63 37 2D 34 35 62 65 2D 35 30 66 62 2D 62 65 34 65 2D 34 61 65 63 64 38 35 66 31 65 65 64 61 62 63 31 32 33

以上是服务器发给我们的数据,都是16进制的数据,简化书写,去掉了0x。开头是30表示是等级0的PUBLISH报文,发送方向是S->C,也就是服务器推送给我们的命令。再看第2个字节是0x32,十进制就是50,表示可变报头和负载一共50个字节,因为是等级0的PUBLISH报文,所以可变报文就是topic字符串再加上2个字节的长度表示。负载就是我们在后台下发的命令数据,负载数据不需要2个字节的长度表示,所以命令是多少字节,负载数据就是多少字节。

接下来的两个字节0x00 0x2A ,换成16进制是42,表示topic长度是42个字节,然后再加上0x00 0x2A这两个字节本身,长度就是44,也就是可变报头的长度。然后我们从0x00 0x2A 往后数42个字节,就是topic字符串名称数据 ,截取出来如下所示:

24 63 72 65 71 2F 62 66 62 62 32 30 63 37 2D 34 35 62 65 2D 35 30 66 62 2D 62 65 34 65 2D 34 61 65 63 64 38 35 66 31 65 65 64

以上42个字节就是topic,都是16进制,我们换成字符串就是:$
creq/bfbb20c7-45be-50fb-be4e-4aecd85f1eed,这个就是服务器下发命令中使用的topic。

最后还剩下6个字节0x61 0x62 0x63 0x31 0x32 0x33,就是负载数据了,我们换成字符串,因为我们刚才下发的时候,用的是字符串形式,换成字符串后的结果是abc123,和我们刚才从后台下发的命令一样,说明整个下发命令的流程正确。

最新资讯
最热资讯