当前位置:首页 > > 21ic电子网
[导读]给大家分享一下连接OneNet的MQTT的方法(TCP层)。


出品 21ic论坛 小叶三千

网站:bbs.21ic.com

由于项目上用到了中移云OneNet平台,现在对OneNet也算是比较了解,给大家分享一下连接OneNet的MQTT的方法(TCP层)。

OneNet上有两种MQTT协议,一种是多协议里面的MQTT(旧版),一种是MQTT物联网套件(新版)。现在平台主推MQTT新版的,也就是MQTTS协议,协议层上面基本没有变化,都是基于MQTT标准协议来的,但是一些参数有了很大的变化。

工程师项目经验:网络调试助手-TCP方式连接实践

先说一下MQTT的连接的协议,一个MQTT数据包由:固定头、可变头、消息体三部分构成。固定报文头就是固定的参数,具体代表什么意思网上有很多,就不说了。可变报文头是一些协议版本啊,标识等等,用不到的话一般也当作固定的就行。消息体就是一个参数的长度,后面再跟上参数的内容,例如:02(消息体长度) 31 31(2个长度的消息体”1””1”)等等,后续有具体的内容赋值。

   首先,先在OneNet上面创建MQTT物联网套件产品,之后再产品里面添加一个设备。

工程师项目经验:网络调试助手-TCP方式连接实践工程师项目经验:网络调试助手-TCP方式连接实践

    下载一个网络调试助手,我用的是NetAssist.exe,附件有,大家可以去下载。选择TCP客户端,填写好OneNet平台MQTTS的IP地址:183.230.40.96,端口号:1883  (此IP和端口号为不加密的,加密的为183.230.40.16  ::8883)OK,接下来需要发连接的报文了。

工程师项目经验:网络调试助手-TCP方式连接实践

平台MQTTS规定的参数是有3个,分别为设备名称、产品ID、token密钥,设备名称和产品ID就是你创建产品的ID,和设备的名称。Token的话就需要计算一下了,使用附件里的小程序。

工程师项目经验:网络调试助手-TCP方式连接实践

小程序计算token,也需要3个参数。Res:设备名称。Et:unix时间。Key:设备的access_key。

设备名称就是填写你对应的设备名称即可。Et大概讲一下,unix时间,就是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

国际ISO 8601规定的。可以上网找一些在线转化的工具。填写你想鉴权的有效时间,比如现在是2021-09-28 21:37:25,你Et写个2021-09-28 22:37:25,那么到22:37:25的时候就过期了,授权时间过了。

你想授权连接多长时间就写到多长时间。不过要注意的一点是:32位的变量只能到2038年,64位的系统就不存在这个问题了,需要注意一下。

计算unix时间网址:https://tool.chinaz.com/Tools/unixtime.aspx

   工程师项目经验:网络调试助手-TCP方式连接实践

Key:设备的access_key,在设备的详情页中找到。

工程师项目经验:网络调试助手-TCP方式连接实践

将这3个参数,对应填写到小程序里面,method选择sha1(别的也行吧,没试过),version:填写2018-10-31(这个是固定的,不用管它),这样点击Generate就可以生成出来计算好的token了。

  res:products/378414/devices/0A(378417是产品ID,0A是设备的名称)  Et:1625445017(2021-07-05 08:30:17 Unix时间)  key:L2o5bW8ic2A7ITBEVTJlW3RITiteSl1ic3h9Um8mbSE=(设备的Key)

工程师项目经验:网络调试助手-TCP方式连接实践

将计算完成的Token复制保存,等下需要用到。

这个算法很简单,大家有兴趣的可以按照官网的计算方法自己写程序算一下。我这里使用C 已经可以算出来了。Token计算完成后,就需要填写MQTT报文了,我们这里使用TCP发送。打开网络助手软件。

首先要先了解一下MQTT的报文结构:(详细的解释直接百度吧,这里只是我需要填写的报文)

0x10  -固定

0x91  -整个报文的长度145

0x01  -貌似是上一个值的进位,0x91超过了7F,这里就是1,如果没有就是0

0x00  -固定 “MQTT“的长度低位

0x04  -固定 “MQTT“的长度高位0x0004

0x4d  -’M’

0x51  -’Q’

0x54  -’T’

0x54  -’T’

0x04  -MQTT的版本04版本

0xC2  -QoS level 固定就行

0x00  -Keep Alive时间低位

0x3C  -Keep Alive时间高位0x003C  (60秒)

0x00  -Client ID Length低位

0x02  -Client ID Length高位 (设备的名称长度:2)

0x30  -Client ID:0

0x41  -Client ID:A (设备的名称:0A,名称根据自己的来,对应上面的长度也要改)

0x00  -User Name Length低位

0x06  -User Name Length高位 (产品ID的长度:6)

.......  -User Name  (产品ID:378414,也是根据自己的写)

0x00  -Password Length低位

0x79  -Password Length高位 (Token的长度:121,也是根据自己的长度写)

.......  -Password  (Token的具体十六进制值填写,根据自己的Token填写)

到这里就报文就解析结束了,将上面的内容整理成十六进制的值,填写到网络助手中

之前遇到的一个问题,就是报文中的第3位的“0x01”,我填写的是0x00,但是有的Token就可以正常连接,有的Token却不可以正常连接。后来找到问题,Token有的很长,这一位就会变成0x01,应该是长度有进位吧,大家一定要注意。

工程师项目经验:网络调试助手-TCP方式连接实践

TCP建立连接后,输入内容,点击发送,就可以看到有返回ACK的值是20 02 00 00,说明发送的内容正确,MQTT平台返回接入成功,之后再看看我们OneNet平台的设备,显示“在线”,接入成功!

工程师项目经验:网络调试助手-TCP方式连接实践

之后我们还可以使用Wireshark软件,进行原始报文的验证,或者监控。打开软件,选择监控的网络通道。

工程师项目经验:网络调试助手-TCP方式连接实践

在这里输入mqtt,进行网络报文过滤,这里只让其显示MQTT的报文。

工程师项目经验:网络调试助手-TCP方式连接实践

之后我们在网络助手里发送刚才的内容,重新发一次,就可以看到Wireshark出现了MQTT的报文,分别是发送的和接收到的ACK。

  工程师项目经验:网络调试助手-TCP方式连接实践

双击点击报文还可以具体分析报文的结构和内容。   工程师项目经验:网络调试助手-TCP方式连接实践

附件附上计算Token的小工具(点击阅读原文,进入原贴下载),大家也可以根据官方的文档的自己计算。

大家根据TCP报文格式的MQTT报文,可以自己开发上位机去通信了。

21ic电子网

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭