今天我们测试一下腾讯云的物联网开发平台上传数据的功能,也就是构建一下发布数据的PUBLISH报文命令,上传温湿度数据。
我们接着使用前文中的D001设备,但是D001的品类是插座,并没有温度和湿度的功能属性,我们选择上图红圈中的数据模板,我们添加自定义功能。
在数据模板界面中,我们需要在自定义功能处,点击新建功能,自己添加温度和湿度的功能属性。
我们先添加一个温度的功能属性,功能名称和标识符,设置成了temp,数据类型是浮点型,温湿度数据只是用于数据监控查看,所以选择只读类型。数值范围可以根据自己的要求设置,最后点击保存即可。
然后我们接着添加湿度功能属性,功能名称和标识符设置成humi,也是浮点型数据,范围0~100,只读类型,然后点击保存即可。
建立成功后,我们可以在自定义功能列表中看到刚才建立的temp和humi功能属性。
在测试上传数据时,一点要先发送CONNECT报文,等待设备在线后,才能开始上传数据。假设我们需要上传温度数据22.2,湿度数据33.3,那么数据格式如下所示:
{"method":"report","clientToke":"123","params":{" temp ":22.2,"humi":33.3}}
注意里面的temp和humi对应刚才建立的自定义功能temp和humi 的标识符,一定记住是标识符,不能写错了,写错了数据就找不到家了。数据总长73个字节,我们换成16进制,简化书写,去掉0x的结果如下:
7B 22 6D 65 74 68 6F 64 22 3A 22 72 65 70 6F 72 74 22 2C 22 63 6C 69 65 6E 74 54 6F 6B 65 22 3A 22 31 32 33 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 74 65 6D 70 22 3A 32 32 2E 32 2C 22 68 75 6D 69 22 3A 33 33 2E 33 7D 7D
我们将要构建的是等级0的PUBLISH报文,方向是C->S,也就是发布数据到服务器后台,首先固定报头是0x30 ??,??是剩余长度,负载已经构建好了,等我们确定了可变报头之后,再计算剩余长度。可变报头是发布数据用的Topic,我们上传后台数据时,需要使用的Topic是$thing/up/property/65NJZ04A1B/D001,不同的产品设备,产品ID和设备名称不同,要注意对65NJZ04A1B/D001这部分进行替换,我们把Topic换成16进制,简化书写去掉0x的结果如下,
24 74 68 69 6E 67 2F 75 70 2F 70 72 6F 70 65 72 74 79 2F 36 35 4E 4A 5A 30 34 41 31 42 2F 44 30 30 31
长度34个字节,根据MQTT协议对格式的要求,不要忘了在Topic数据前加上2个字节表示长度34,所以可变报头最终结果如下,总共36个字节:
00 22 24 74 68 69 6E 67 2F 75 70 2F 70 72 6F 70 65 72 74 79 2F 36 35 4E 4A 5A 30 34 41 31 42 2F 44 30 30 31
可变报头和负载都确定好了,那么剩余长度=可变+负载=36+73=109,一个字节就行,16进制是0x6F,那么固定报头就是0x30 0x6F,然后我们把固定,可变和负载,3个部分连接起来,16进制,简化书写,去掉0x:
30 6D 00 22 24 74 68 69 6E 67 2F 75 70 2F 70 72 6F 70 65 72 74 79 2F 36 35 4E 4A 5A 30 34 41 31 42 2F 44 30 30 31 7B 22 6D 65 74 68 6F 64 22 3A 22 72 65 70 6F 72 74 22 2C 22 63 6C 69 65 6E 74 54 6F 6B 65 22 3A 22 31 32 33 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 74 65 6D 70 22 3A 32 32 2E 32 2C 22 68 75 6D 69 22 3A 33 33 2E 33 7D 7D
到此整个往腾讯云的物联网开发平台上传数据的,等级0的PUBLISH报文就构建好了。我们需要用网络调试助手软件,实际测试一下,一定要注意先发CONNECT报文之后再发我们的PUBLISH报文。
我们首先发送CONNECT报文,成功后,发送PUBLISH报文,因为是等级0,所以服务器不会有什么回复,我们需要到后台看一下,数据有没有上传到后台。
我们需要先点击D001,进入设备详情页面。
我们选择设备属性,可以看到22.2和33.3已经上传到后台中了,说明我们等级0的PUBLISH报文正确。