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


出品 21ic论坛 小叶三千

网站:bbs.21ic.com

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

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

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

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

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

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

小程序计算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

   

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

将这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)

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

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

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

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

  

双击点击报文还可以具体分析报文的结构和内容。   

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

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

21ic电子网

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

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

据韩媒《朝鲜日报》消息,三星集团已确认已决定将适用于三星电子等部分关联公司的“高管每周工作 6 天”扩大到整个集团。三星子公司的人力资源团队直接通过口头、群聊和电子邮件向高管传达了这一新政,而非正式信函的形式。

关键字: 三星

4月23日,深圳传音控股股份有限公司发表了2023年年度报告。数据显示,2023年,该公司手机整体出货量约1.94亿部。

关键字: 传音 智能手机

最新消息,美国参议院以 79 票赞成、18 票反对的压倒性多数,通过了一项可能导致 TikTok 在美国被禁的法案,该法案要求字节跳动公司出售 TikTok,否则将面临禁令。TikTok 最多有 12 个月的时间从母公司...

关键字: 美国 TikTok 字节跳动

业内消息,近日数码博主@手机晶片达人在社交媒体发文表示,苹果公司正在研发自家的 AI 服务器芯片,采用台积电的 3nm 工艺,预估将于 2025 年下半年量产。台积电是苹果最重要的合作伙伴,目前苹果的大部分 3nm 产能...

关键字: 苹果 AI服务器芯片 台积电 3nm

业内消息,近日苹果公司公布了2023财年供应链名单。其中,中国大陆地区新进8家企业,有4家企业被剔除;中国台湾地区供应商新进2家企业,同样有4家企业被剔除。

关键字: 苹果 供应链

业内消息,上周第 21 届华为分析师大会在深圳开幕,大会期间华为云核心网产品线总裁高治国表示,华为携手浙江移动完成了全球首个 5G-A(5.5G)核心网智能差异化体验保障方案的预商用部署。

关键字: 华为 5.5G

业内消息,上周国务院新闻发布会介绍了2024年一季度工业和信息化发展情况。工业和信息化部新闻发言人、总工程师赵志国在发布会上表示,一季度中国 5G 手机出货量达 5643 万部,同期占比 83.7%,反映出高端或者智能...

关键字: 工信部 手机

业内消息,近日供应链大厂群光电子(Chicony Electronics)在官网披露报告声称于 4 月 15 日遭到黑客组织 Hunters International 攻击,据称超过 1.2TB 内部数据(共计 414...

关键字: 供应链 群光电子 黑客入侵

业内消息,上周谷歌公司解雇了28名员工,原因是这些员工在谷歌纽约和加州森尼维尔的办公室静坐10小时,抗议谷歌与以色列签订的价值12亿美元的云计算合同。

关键字: 云计算 谷歌

业内消息,全球第二大电信设备制造商诺基亚正在重组供应链,近几个月减少了长期供应商工业富联的订单。传闻称,在地缘政治风险不断加大的情况下,该电信巨头正在加紧努力减少其供应链对中国大陆的依赖,甚至大幅削减了来自在中国大陆上市...

关键字: 供应链 诺基亚 工业富联 电信
关闭
关闭