阿里云MQTT报文--2

  • 14.DISCONNECT-------断开连接
    E0 00
    在这里插入图片描述

发送后断开连接,设备呈现离线状态

  • 12.PING:
    C0 00
    之前连接报文中00 64 是100秒的保护时间,在100秒时间内没有有效数据要发送,防止被服务器踢下来就要在100秒时间内发送一个PING包
    在这里插入图片描述
    在这里插入图片描述
    回复D0 00
  • 8.SUBSCRIBE -------订阅主题
    等级0:
    82 35 00 0A 00 30 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 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 00
    等级1:
    82 35 00 0A 00 30 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 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 01
    在这里插入图片描述
    82 ?? 00 0A
    报文标识符相当于一个ID,以便服务器确定身份。
    在这里插入图片描述
    在这里插入图片描述
    把对应的设备名字改好之后转换为16进制表示。前面在加上16进制的长度
    /sys/grioBm0cRmf/D001/thing/service/property/set

/sys/grioBm0cRmf/D001/thing/service/property/set
00 30 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 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

82 ?? 00 0A 00 30 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 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
SUBSCRIBE 等级0----------------后面添00
82 ?? 00 0A 00 30 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 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 00
SUBSCRIBE 等级1----------------后面添01
82 ?? 00 0A 00 30 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 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 01
在求出剩余长度
注意:0A相当于身份,改成1C服务器返回相应的也是1C
允许的返回码值:
0x00 - 最大QoS 0
0x01 - 成功 - 最大QoS 1
0x02 - 成功 - 最大QoS 2
0x80 - Failure 失败
在这里插入图片描述

  • 10.UNSUBSCRIBE-------取消订阅
    A2 34 00 0A 00 30 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 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
    取消没有等级(没有最后一个字节),所以对应前面剩余长度改为34
    取消为A2

  • 调试

在这里插入图片描述
点击设置后发送指令
在这里插入图片描述
8E 01是剩余长度
00 30是长度,十进制为48个字节。数48个字节为2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 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
再转换成16进制后为
/sys/grioBm0cRmf/D001/thing/service/property/set
剩下的就是数据7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 36 33 33 32 31 34 37 37 36 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 4F 4E 22 3A 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
转换为16字符串为
{“method”:“thing.service.property.set”,“id”:“633214776”,“params”:{“ON”:0},“version”:“1.0.0”}
方法就在产品功能定义的物模型里面
在这里插入图片描述
在这里插入图片描述
一会我们要给服务器上报的方法应该是
thing.event.property.post
id可以改变位数一样
{“method”:“thing.event.property.post”,“id”:“000000001”,“params”:{“ON”:0},“version”:“1.0.0”}
这个属于上报,比如服务器让你关,我要post上报我已经关了

以下为开始构建:

  • 3.PUBLIC--------------发布 等级0
    30 8C 01 00 2F 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 4F 4E 22 3A 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
    在这里插入图片描述
    固定包头30 剩余长度先用?? ??表示

30 ?? ??
在这里插入图片描述
接着是post发布
/sys/grioBm0cRmf/D001/thing/event/property/post
转化为16进制再在前面加上长度
00 2F 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74
后面紧跟着数据
{“method”:“thing.event.property.post”,“id”:“000000001”,“params”:{“ON”:0},“version”:“1.0.0”}
转换为16进制
7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 4F 4E 22 3A 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
合并起来为
30 ?? ?? 00 2F 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 4F 4E 22 3A 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
再计算出剩余长度,?? 后面的长度为140,对128取余为12,所以?? ?? 为1000 1100 0000 0001为8C 01

  • 观测

此时发送过去后观察运行状态
开关为关
在这里插入图片描述

在这里插入图片描述
如果此时将数据改为31发送后开关状态改变为开
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结:下发数据按三段来解析,上报也按照三段来整理。格式要按照固定格式。

相同的如果要post其他数据可以一起,再参数里面增加对应的键值对(注意值的精度)
{“method”:“thing.event.property.post”,“id”:“000000001”,“params”:{“ON”:1,“curr”:8,“volt”:230,“electric_fr”:49.90},“version”:“1.0.0”}
在这里插入图片描述
前面的报文不用改变(除了剩余长度)
30 ?? ?? 00 2F 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74
把后面的数据进行转化
7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 4F 4E 22 3A 31 2C 22 63 75 72 72 22 3A 38 2C 22 76 6F 6C 74 22 3A 32 33 30 2C 22 65 6C 65 63 74 72 69 63 5F 66 72 22 3A 34 39 2E 39 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
合并后计算除剩余长度:
30 B4 01 00 2F 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 4F 4E 22 3A 31 2C 22 63 75 72 72 22 3A 38 2C 22 76 6F 6C 74 22 3A 32 33 30 2C 22 65 6C 65 63 74 72 69 63 5F 66 72 22 3A 34 39 2E 39 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
再进行发送,这样就可以发布多个参数。
如果是等级1
首字节改为32 后面多个报文标识符00 0A
32 B4 01 00 0A 00 2F 2F 73 79 73 2F 67 72 69 6F 42 6D 30 63 52 6D 66 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 4F 4E 22 3A 31 2C 22 63 75 72 72 22 3A 38 2C 22 76 6F 6C 74 22 3A 32 33 30 2C 22 65 6C 65 63 74 72 69 63 5F 66 72 22 3A 34 39 2E 39 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
其他内容可以进行补充。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MQTTClient-C是一个基于C语言开发的MQTT客户端库。MQTT是一种轻量级的消息传输协议,被广泛应用于物联网等场景中。MQTTClient-C可以方便地实现MQTT客户端的开发,提供了一套简洁易用的接口。 首先,使用MQTTClient-C可以快速实现MQTT客户端的开发,无需从头开始设计和实现MQTT协议的通讯细节。库中封装了MQTT协议的各种细节,包括连接、订阅、发布等操作,开发者只需调用相应的接口即可完成。 其次,MQTTClient-C提供了多种不同层次的应用编程接口,可满足不同开发需求。开发者可以根据自身需求选择合适的API进行开发,使得代码更加简洁易读。 此外,MQTTClient-C还提供了丰富的可配置选项,可以根据实际需求灵活配置客户端参数。比如可以设置重连间隔、心跳频率、最大重试次数等,以适应各种网络环境和设备限制。 最后,MQTTClient-C具备良好的可移植性和跨平台性。它可以在不同的操作系统和硬件平台上运行,包括嵌入式设备和服务器等。这使得开发者能够更加灵活地选择合适的平台进行开发和部署。 综上所述,应用MQTTClient-C可以方便地实现MQTT客户端的开发,并且具备灵活的可配置性和跨平台性,是一种非常实用的工具。无论是在物联网领域还是其他场景中,MQTTClient-C都可以帮助开发者快速搭建稳定可靠的MQTT系统。 ### 回答2: MQTTClient-C是一个用于C语言的MQTT客户端库,用于与MQTT代理服务器进行通信。该库提供了一组API,使开发者能够轻松地建立与MQTT服务器的连接,发布和订阅消息。 使用MQTTClient-C,可以实现以下功能: 1. 建立与MQTT服务器的连接:使用MQTTClient-C,可以通过提供MQTT服务器的地址和端口号来建立与服务器的连接。 2. 发布消息:通过调用MQTTClient-C提供的API,可以向MQTT服务器发布消息。可以指定消息的主题,质量、消息内容等参数。 3. 订阅消息:使用MQTTClient-C,可以通过提供订阅的主题来订阅特定的消息。可以指定消息的质量等级。 4. 处理消息回调:MQTTClient-C允许开发者为接收到的消息注册回调函数。当接收到订阅的消息时,会调用注册的回调函数进行处理。 5. 支持SSL连接:MQTTClient-C支持通过SSL加密来建立与MQTT服务器的安全连接。 6. 消息持久化:MQTTClient-C支持消息持久化,即当未成功发送的消息被储存在本地,直到成功发送为止。 7. 支持遗嘱消息:MQTTClient-C支持发布遗嘱消息,即当客户端异常断开连接时,会自动发布指定的遗嘱消息。 总结来说,MQTTClient-C是一个功能强大的MQTT客户端库,适用于C语言开发者。它提供了一组API,使开发者能够轻松建立与MQTT服务器的连接,发布和订阅消息,并支持SSL连接和消息持久化等功能,有助于开发者构建可靠和安全的MQTT应用程序。 ### 回答3: MQTTClient-C 是一种用于在C语言环境下进行MQTT通信的开源客户端库。它基于MQTT协议实现了与MQTT代理服务器进行数据交互的功能。 MQTTClient-C 提供了一套简单易用的API,使开发人员能够快速地在C语言项目中实现MQTT通信功能。使用MQTTClient-C,我们可以轻松地订阅主题、发布消息以及处理订阅消息的回调。 MQTTClient-C 的特点包括: 1. 轻量级:MQTTClient-C 代码库非常小巧,可以轻松地嵌入到各种资源有限的嵌入式系统中,适用于各种物联网设备。 2. 跨平台:MQTTClient-C 支持各种主流操作系统,如Windows、Linux、FreeRTOS等,可以在不同平台上无缝地进行移植和集成。 3. 稳定可靠:MQTTClient-C 实现了MQTT 3.1.1版本的协议,支持QoS级别0、1和2,可以确保消息的可靠传输及交付。 4. 灵活可扩展:MQTTClient-C 提供了多样化的配置选项,可以根据需要进行灵活的参数设置,从而满足不同场景的需求。 使用MQTTClient-C,我们可以快速地实现物联网设备与服务器之间的即时通信和数据交换。例如,我们可以将传感器数据通过MQTTClient-C发布到MQTT代理服务器上,并通过订阅机制实现实时数据的传输和处理。同时,我们也可以通过MQTTClient-C订阅特定主题,实时接收服务器发送的指令或控制信息。 总而言之,MQTTClient-C 是一个功能强大且易于使用的C语言MQTT客户端库,使我们能够快速地开发出高效可靠的物联网应用程序。无论是开发嵌入式设备还是服务器端应用,MQTTClient-C 都是一个非常有价值的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值