mqtt协议 阿里云物联网平台

  • MQTT报文结构
  • MQTT---CONNECT连接服务器报文
    • 固定报头
    • 可变报头
    • 有效载荷
      • 客户端ID
      • 用户名
      • 密码
      • 转换
    • 通过网络调试助手连接阿里云服务器
      • 远程主机地址
  • MQTT---PINGREQ 心跳请求
    • 固定报头
  • MQTT---PINGRESP 心跳响应
    • 固定报头
    • 实例
  • MQTT---SUBSCRIBE订阅主题
    • 固定报头
    • 可变报头
    • 有效载荷
  • MQTT---SUBACK订阅确认
  • MQTT---UNSUBSCRIBE取消订阅
    • 固定报头
    • 可变报头
  • MQTT---UNSUBACK取消订阅确认
    • 固定报头和可变报头
  • 通过网络调试助手向阿里云服务器发布消息
    • 解析来自阿里的数据
    • 发布的报文
    • 完整报文

MQTT报文结构

mqtt协议具体标准协议内容见文档
mqtt标准协议文档


MQTT—CONNECT连接服务器报文

固定报头

剩余长度暂时未知 用??代替


可变报头

byte1和byte2为 00 04
MQTT字符串通过转换为16进制发送为 4D 51 54 54
所以目前报文内容为

加入协议级别04

对应为11000010 十六进制C2
目前报文为

设置保持连接时间为100s 即 00 64
当前报文


有效载荷

填入客户端ID 用户名 密码

客户端ID :*|securemode=3,signmethod=hmacsha1|
用户名: *&#
密码:clientId*deviceName*productKey#

客户端ID

设备名称在设备中的DeviceName

用其替换

中的*

用户名

在设备中查询设备证书


*为设备名称DeviceName的名称 #为ProductKey的值 进行替换

密码

使用在线加密解密对clientId*deviceName*productKey#进行加密
注意将*替换为设备名称 #替换为ProductKey
密钥为设备证书中的

选择

得到的结果为密码

转换

将得到的客户端ID 用户名 密码 转为对应的格式
将客户端ID输入网络调试助手,并选择16进制发送


得到结果如下

选择发送后 得到对应字节数

将43转为16进制 即00 2B

在00 2B后加在刚刚的数据前面 结果如下
00 2B 44 65 76 69 63 65 30 30 31 49 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 6C
将这段加入报文中作为客户端ID

当前报文为:

前2个字节为固定报头 接下来10个字节为可变报头
客户端ID作为有效载荷加入了报文中 按照此方法 将用户名和密码转换后加在报文中作为有效载荷

转换后得到有效载荷后 将有效载荷加上可变报头的10个字节 粘贴至网络调试助手发送 得到总字节数 将这个数转换为16进制 根据固定报头协议要求填写至固定报头中的??中
这样完整的连接服务器的控制报文就完成了


通过网络调试助手连接阿里云服务器

先勾选按16进制发送后将控制报文复制至窗口

远程主机地址

阿里云服务器IP地址(华东)*.iot-as-mqtt.cn-shanghai.aliyuncs.com *为自己账号的ProductKey
*表示自己账号的ProductKey注意
华东端口1883

输入远程主机地址后 将上文最后得到的完整连接报文发送至阿里云服务器 得到响应

返回值的意义


MQTT—PINGREQ 心跳请求

固定报头


没有可变报头和有效载荷

MQTT—PINGRESP 心跳响应

固定报头

没有可变报头和有效载荷

实例

连接上阿里云服务器后
以16进制发送 C0 00
得到回复 D0 00

MQTT—SUBSCRIBE订阅主题

固定报头

剩余长度未知 用?? 代替 即82 ??

可变报头

报文标识符用于区分标记信息 可自定义 此处设为00 0A
此时报文为82 ?? 00 0A

有效载荷


有效载荷即为订阅内容

订阅内容参考Topic列表

${deviceName} 替换为设备名称 Device001 即
/sys/gvlabuKZMsF/Device001/thing/service/property/set

转换为16进制
2F 73 79 73 2F 67 76 6C 61 62 75 4B 5A 4D 73 46 2F 44 65 76 69 63 65 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74
共53个字节 转换为16进制 00 35 将00 35 加到订阅信息最前
合并后此时报文为

最后加上服务质量00


计算除了固定报头82 ?? 剩下的可变报头和有效载荷字节数 共58 16进制3A 将3A填入??
此时完整报文


MQTT—SUBACK订阅确认


连接服务器后 发送订阅报文得到返回结果

00 0A代表报文标识符00 0A成功
最后一个字节01

MQTT—UNSUBSCRIBE取消订阅

固定报头

可变报头


即取消订阅的报文步骤:将订阅的报文最后一个服务质量的字节删除
将固定报头的3A减去一个字节剩下39 即固定报头为 A2 39

MQTT—UNSUBACK取消订阅确认

固定报头和可变报头


回复内容如下:


00 0A 为标识符


通过网络调试助手向阿里云服务器发布消息

解析来自阿里的数据

通过在线调试,发送设置主灯关闭的消息

得到报文
解析数据 30 9D 01 为固定报头 00 35 为订阅信息的有效长度十进制为53

取后续53个字节 将其又16进制转换为10进制

可以得到topic

接下来 将剩下的所有字节全部字节由16进制转换为10进制

就可以解析出这样的信息

我们对此信息进行修改 便可以通过网络调试助手向阿里云服务器发布信息

发布的报文

找到属性上报的topic 将${deviceName}替换为我们的设备名称

然后转换为16进制得到

选择发送得到发送量52个字节 16进制00 34 将其加在最前 即

此为topic①

在阿里云产品的功能定义中的物理模型找到属性上报

“method”: “thing.event.property.post”,获得此条topic将其替换至报文中

将id位数不变改为0000000001 参数值发布为1 最后的1.0.0为版本号不用修改
然后将此信息转换为16进制后 得到应发送数据的16进制形式②

完整报文

将上诉报文topic①+数据②拼接结合得到

共155个字节

加上固定报头
30 9B 01
9B 01为字节数量155 按mqtt固定报头协议算出的结果 按具体情况计算

得完整报文

连接服务器后发送即可发布消息 控制led为1

用如上的方法发布温度


将此数据转为16进制 得到①


topic: /sys/gvlabuKZMsF/Device001/thing/event/property/post
转换为16进制 共52个字节 转换为16进制为00 34 加在数据最前面,得到②


②+①得到可变报文+有效载荷③


在③前加上固定报头30 A3 01得到最终报文

阿里云端收到发布的温度

mqtt协议 阿里云物联网平台相关推荐

  1. MQTT.fx客户端MQTT接入阿里云物联网平台,登录、订阅、发布消息

    目录 1. 准备 2. MQTT.fx 设置登录名.密码 3. MQTT.fx 接入阿里云,订阅Topic 4. 阿里云下发数据给 MQTT.fx 5. MQTT.fx 发布消息给服务器 相关链接:M ...

  2. 使用网络调试助手 MQTT接入阿里云物联网平台,逐字节讲解,适用单片机/ESP8266接入阿里云

    目录 1. CONNECT 连接服务器 2. CONNACK 确认连接 3. DISCONNECT 断开连接 4. PINGREQ 心跳请求 5. PINGRESP 心跳响应 6. SUBSCRIBE ...

  3. Python模拟智能开关设备MQTT接入阿里云物联网平台 - PyCharm paho.mqtt

    概要 Python 使用 paho.mqtt 库,利用阿里云物联网平台的设备证书:productKey.deviceName.deviceSecret,自动合成 userName.passWord.以 ...

  4. 001-STM32+Air724UG(4G模组)基本控制篇(阿里云物联网平台)-使用MQTT接入阿里云物联网平台

    前言 这节测试下使用STM32+Air724UG 和 Android 和 微信小程序 和 网页端 接入阿里云物联网平台 当前的各种物联网平台整体思想是提供一个网页端让用户去注册设备 这个设备就对应一个 ...

  5. MQTT系列笔记—SIM7600X 通过MQTT连接阿里云物联网平台

    序言: MQTT是基于二进制消息的发布/订阅编程模式的消息协议:由于规范很简单,非常适合需要低功耗和网络带宽有限的IoT场景,比如:智能家居.智慧城市和医疗医护:深受广大童鞋的青睐和喜爱.下面我们以S ...

  6. 中移M5310-A通过AT指令MQTT连接阿里云物联网平台并进行数据互传

    一.平台端操作 1.设备创建 进入阿里云物联网平台,选择物联网平台.然后开通公共实例,成功后依次创建产品.创建设备.设备创建成功后点击最右侧的查看->MQTT连接参数可以看到该设备接入该产品所需 ...

  7. MQTT连接阿里云物联网平台步骤

    1.注册阿里云设备信息 1)在阿里云中选择物联网平台 添加一个话题,用来发布和订阅主题 2.需要的文档在这里:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 3.以下这三个ESP8266需要 ...

  8. 微信小程序MQTT模拟器 阿里云物联网平台测试

    陈拓 chentuo@ms.xab.ac.cn 2019.09.27/2020.01.20 原文参考:微信小程序-MQTT模拟器 https://www.yuque.com/cloud-dev/iot ...

  9. http发送16进制报文_阿里云物联网平台使用心得(25)MQTT协议详解UNSUBSCRIBE报文...

    题目 大家好,超子又和大家见面了,超子我能力有限,水平不高,有什么错误的地方,欢迎板砖.超子今天给大家介绍一下UNSUBSCRIBE报文. UNSUBSCRIBE报文 从上图中可知,UNSUBSCRI ...

最新文章

  1. linux安装eclipse运行web,Linux安装Tomcat,运行Eclipse,web项目
  2. 设置更改root密码(远程,本地)、连接mysql、mysql常用命令
  3. 高级concurrent包
  4. android管理员和普通用户登录,asp登录页如何区别管理员和普通用户,登录后跳转到不同页面?...
  5. 原神服务器维护后抽奖池会更新吗,原神:更新维护一小时,补偿60原石,玩家祈求多维护几天!...
  6. springboot 上传文件解析入库_十五分钟用Spring Boot实现文件上传功能
  7. 更改TFS项目中的SharePoint网站端口
  8. Leetcode513. Find Bottom Left Tree Value找树左下角的值
  9. python培训全套免费教程百度云202
  10. 数据结构——栈与队列的异同
  11. Android传感器
  12. 清理服务器 归档日志文件,服务器归档日志模式
  13. 关于如何处理MyEclipse中struts2与Hiber 3中antlr-2.7.2.jar与antlr-2.7.6包冲突的问题
  14. 自然资源数据治理方案
  15. 安卓开发 智能农业 详细
  16. TypeScript+Vue
  17. 寡头格局稳定,PC新势力如何突围?
  18. c++gdal如何在大图像中截取小图像并获取其图像信息_盘点GAN在目标检测中的应用...
  19. 神经网络论文常见创新点思考方向
  20. 全能视频格式转换器 Leawo Video Converter

热门文章

  1. 都2022年你还不会安装系统?看我三分钟完事PE制作并进行Win11系统安装实践
  2. 史上最短命!由于BUG微软撤回Win10更新
  3. greenplum segment恢复的过程
  4. 未来科技感UI界面设计欣赏
  5. 大数据工程师常用的大数据BI工具是什么?
  6. 六度分离/HDOJ 1869
  7. 软件工程实践 Blog11
  8. IPSEC对称解密以及非对称加密
  9. identifier标签语句
  10. 新加坡基金会非盈利公司区块链ICO