ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MQTT客户端(基于mosquitto库)上报温度到腾讯云

2022-01-01 14:34:44  阅读:248  来源: 互联网

标签:影子 上报 MQTT 文档 腾讯 mosquitto 客户端 设备


Linux C MQTT上报温度到腾讯云(基于mosquitto库)

一、创建产品

1.进入腾讯云官网,登陆或注册账号
在这里插入图片描述
2.进入控制台
在这里插入图片描述
3.鼠标滑到云产品,进入物联设备服务中的物联网通信
在这里插入图片描述
4.点击创建新产品,现在我们来创建一个上报温度产品
在这里插入图片描述
5.产品创建信息如下,点击确定
在这里插入图片描述

二、创建设备

1.我们已经创建好了一个产品,如下,现在来创建设备。(设备是产品的实例,一个产品下可以有多个设备。)
在这里插入图片描述

2.进入产品页面后点击设备列表,此时该产品下还没有任何设备,点击添加新设备,我们来创建一个设备来实现温度上报的功能
在这里插入图片描述

3.设备创建信息如下,点击保存,点击开始管理设备
在这里插入图片描述
在这里插入图片描述

三、获取MQTT连接信息

1.设备已经创建好了,现在我们收集一下MQTT连接腾讯云的信息。将红线框住的信息保存在txt文件中。
在这里插入图片描述

2.现在我们已经知道了Client ID、MQTT Username和MQTT Password还需要知道腾讯云MQTT服务端口、服务器地址、消息通信的topic。在Topic列表中选择图中的topic(选择这个topic的原因有关设备影子,下面会解释)同样保存到刚才的txt文件中
在这里插入图片描述

3.在右上角物联网通信帮助文档中有服务器地址选择,文档链接:https://cloud.tencent.com/document/product/634/61228,将替换后的地址:FQ87P6RD9P.iotcloud.tencentdevices.com保存在刚才的txt文件中
在这里插入图片描述
在这里插入图片描述

4.同样根据腾讯云提供的文档:https://cloud.tencent.com/document/product/634/32546,由于我们创建产品时选择的是密钥认证,故连接端口应为1883,将端口保存在刚才的txt文件中
在这里插入图片描述

5.现在我们txt文件中的内容如下,有了这些信息,我们的MQTT客户端已经可以连接上腾讯云,激活设备了,但要想腾讯云正确解析我们上报的消息还需要了解消息主体格式。
在这里插入图片描述

四、消息主体

先了解一下设备影子文件,帮助文档“设备影子详情”:https://cloud.tencent.com/document/product/634/11918。设备影子文档是服务器端为设备缓存的一份状态和配置数据。

1.如下图,左边部分就是我们可以配置的设备文档,可以向其中添加设备状态,desired是期待的设备状态,reported是设备上报的状态。现在预备向设备文档中添加temperature属性来记录设备上报的温度,每次上报都会更新该文档。

现在文档版本是0,每次更新该文档版本都会自增1。
在这里插入图片描述
在这里插入图片描述

2.更改后的设备影子文档如下
在这里插入图片描述

3.根据帮助文档“设备影子数据流”:https://cloud.tencent.com/document/product/634/14072

我们可以知道,如果要将temperature属性值由初设的21.5更改为10,则消息主体应该如下

{
	"type": "update",
	"state": {
		"reported": {
			"temperature": 27
		}
	},
	"version": 2,
	"clientToken": "clientToken"
}

clientToken是用来标识这个消息会话的id,可以由我们自己设为任意值。

五、连接腾讯云

现在我们在Linux下运行我们的C程序客户端来修改设备影子文件。

1.这里展示MQTT客户端相关登录数据传递和消息上报的Linux C代码

char    *hostname = "FQ87P6RD9P.iotcloud.tencentdevices.com";
char    *topic = "$shadow/operation/FQ87P6RD9P/TGT-DS18B20-1";
char    *clientId = "FQ87P6RD9PTGT-DS18B20-1";
char    *username = "FQ87P6RD9PTGT-DS18B20-1;12010126;BEWMO;1677010298";
char    *password = "259854990dbf546fbf48d57841b5f1a6b4d759511b39522dbc05b7cfb87e45bb;hmacsha256";
int     port = 1883;
char	*payload = "{\"type\": \"update\",\"state\": {\"reported\": {\"temperature\": %.2f}},\"version\": 1,   
    \"clientToken\": \"clientToken\"}";

mosq = mosquitto_new(clientId, ture, NULL);
mosquitto_username_pw_set(mosq, username, password);
mosquitto_connect(mosq, serv_ip, port, 60);//serv_ip是经过hostname的DNS解析所得
mosquitto_publish(mosq, NULL, topic, strlen(payload)+1, payload, 0, 0);

在这里插入图片描述
在这里插入图片描述

查看设备影子文件,temperature的值已修改成功,版本自增1证明温度上报已成功
在这里插入图片描述

注意:当设备影子服务端收到此消息时,首先判断消息中的 version 是否与设备影子服务端中的 version 一致。如果一致,设备影子服务端才会执行更新设备影子流程。

标签:影子,上报,MQTT,文档,腾讯,mosquitto,客户端,设备
来源: https://blog.csdn.net/weixin_51281362/article/details/122267275

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有