前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AIoT应用创新大赛- 学习腾讯连连的使用

AIoT应用创新大赛- 学习腾讯连连的使用

原创
作者头像
忙碌的死龙
修改2022-03-15 10:48:32
6120
修改2022-03-15 10:48:32
举报
文章被收录于专栏:RT1060开发RT1060开发

以前使用过阿里云和华为云,对MQTT上云有一些经验。对很多没有使用过MQTT的同学,有可能会被几个知识点给卡住。

设备上云的数据流转形式

首先我们来看一下MQTT在上云时扮演的角色。请看下图:

从图片上不难看出,MQTT扮演的角色是设备和物联网平台之间的信息交互。也就说,MQTT只负责与物联网平台交换信息,并不负责对应的数据处理和指令执行。

举个例子,智能RGB灯的案例中,设备的状态是通过上报数据操作,将数据发送到物联网平台来完成的。物联网平台在接到上报的数据后,再根据配置流转到业务服务器上(大部分不需要存储数据记录的应用就没有这一步)。物联网平台上保存的内容只有最后一次的数据(也就是设备影子),这对不少智能家居应用来说已经足够。然后App如果要控制设备,也是通过物联网平台,物联网平台接到调用后,向设备下行指令,设备接到指令后执行操作并更新设备数据上报给物联网平台。大致的流程就是这样。

设备上云的第一个拦路虎:鉴权

设备鉴权,说白了就是物联网平台根据什么内容,识别到这个设备是什么设备,是否合法,同时设备是否有足够的权限进行对应的操作。我们看一下官方给的python脚本。

代码语言:javascript
复制
product_id = input("product id:")
dev_name = input("device name:")
passwd = input("password:")
sub = input("subscribe topic:[default:control]")
if sub == "":
    sub = "control"
pub = input("publish topic:[default:event]")
if pub == "":
    pub = "event"

client_id = product_id + dev_name
# expire time: 2^32 - 1 = 4294967295
username = client_id+";21010406;12365;{}".format(4294967295)

def hmacsha1(content, passwd):
        passwd_byte = base64.b64decode(passwd)
        return hmac.new(passwd_byte, content, digestmod=hashlib.sha1).hexdigest()

username = username.encode("utf-8")
passwd = passwd.encode("utf-8")
sign = hmacsha1(username, passwd)

从上面的脚本可以看出,设备鉴权主要是用到client_id 、usernamepasswd 这三个属性。

其中client_id 是物联网平台创建设备时直接产生的product_id和dev_name字符串连接,而后面两个是需要计算得出的。例如username就是由product_id加上;21010406;12365;然后加上超时时间的字符串组成。而passwd的计算就更复杂一些,需要先将设备秘钥进行base64编码,然后再用hmac.sha1加密方式对编码后的秘钥,以及前面得出的username进行加密后得到加密的秘钥,最后加上;hmacsha1字符串形成最终的passwd。

然后物联网服务器根据对应的client_id 、usernamepasswd 这三个属性,来查找设备,并判断是否已过期超时(过期秘钥不允许操作)。

一般情况下MQTT连接失败,就是设备鉴权有问题。这时候需要检查三元组是否正确配置,以及秘钥时间是否超时。

腾讯连连H5开发

跟着官方文档做,很容易就能实现mqtt的数据上报,以及手机app端的数据显示。对于像少了DIY界面的客户来说,腾讯还提供了iot-panlel组件给大家使用,很容易实现以下的效果。

布尔模型开关,以及开关的DIY属性控制内容。

面板组件

滑动条组件。

可以看到官方其实在物联网的小程序开发上,提供了非常多的便利组件。使用标准组件可以实现常规的智能开关,智能家居设备,以及实现一些场景化功能。但是如果想制作PCB加热台,缺少了一个监控数据的组件(需要实现加热台的升温曲线记录功能),如下图的示例。

梳理了一下内容,我突然想到,官方没提供这样的组件是很正常的。因为物联网平台本身并不提供数据服务,数据存储需要物联网平台转发到应用服务器上,再由应用服务器存储相关数据。物联网平台只提供一个简单的设备影子功能,仅保存最新的设备属性数据。也就是说,在本次案例中,物联网平台仅保存最新的温度信息,如果要实现升温曲线,就必须做好应用服务器,并转发对应数据和存储,然后由app直接访问应用服务器获取曲线。

总结:本次尝试mqtt,学到了设备鉴权的相关知识,也意识到自己项目功能选择的一些错误。如果要实现PCB加热台的升温曲线功能,可能使用web socket和本地GUI显示,更快捷一些。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设备上云的数据流转形式
  • 设备上云的第一个拦路虎:鉴权
  • 腾讯连连H5开发
  • 总结:本次尝试mqtt,学到了设备鉴权的相关知识,也意识到自己项目功能选择的一些错误。如果要实现PCB加热台的升温曲线功能,可能使用web socket和本地GUI显示,更快捷一些。
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档