参考过官方的流程和步骤,也在网上搜索过各种BLOG、日志类文章,里面介绍的内容不尽详细,有些省略了关键的步骤和说明,稍有理解偏差,就会导致各种BUG或掉进各种坑,使本就陌生的概念变得杂乱无章或难以理解。经过自己的多次尝试和修改,总结以下要点以供参考:
1、从官方指导文件入手(毕竟不同的平台有差异,先看官方文档,了解怎么开始),链接地址:https://cloud.tencent.com/document/product/634/14442,进入下图所示的网页界面,首先从“控制台使用手册”-“设备接入准备”这一节内容开始:
官方使用手册-控制台2、创建产品的各种设置:
(1)、由于使用的是ESP 8266硬件,通过TCP/IP协议接入互联网,再接入云服务器,所以下面的“节点类型”选择“设备”;“产品类型”选择“普通产品”。
(2)、“产品名称”按照命名规则自定义。
(3)、由于需要在ESP 8266硬件里进行二次开发,自定义控制功能,所以“认证方式”选择“密钥认证”,方便后续在程序里添加。
(4)、“数据格式”建议选择“自定义格式”,这里的“数据格式”设定和后续的程序编写和控制台中的“规则引擎”设置有关系,如果熟悉JSON格式,且程序有这个需求,可以选“JSON”;“自定义格式”的设定,在后续程序编写时,可以不受数据格式的约束,处理起来比较容易和自由,“规则引擎”也可以简化设置。
(5)、产品描述为可选项。
3、创建设备
(1)、这里的设备就是指实际相互传递消息的终端硬件,如ESP 8266,手机客户端APP等。
(2)、创建设备的界面如下图所示,根据命名规则填一个设备名称,“密钥”选择“使用自定义”,在下方输入属于该设备的密钥(注意备份记录,以免忘记),然后点击右侧的“转换成Base64”,最后“保存”:
(手动创建新设备)(3)、在设备列表中,点击对应的设备“操作”栏下方的“管理”,可以查看该设备的相关信息,如下图所示,在“设备密钥”栏,里面的“clientid”、“mqtt username”、“mqtt password”这三项信息在后续的程序编写时会用来作为接入服务器的验证信息,编写程序时直接将这里的信息分别复制到程序中,该信息产生的算法:官方的python代码(在“开发者手册”-“设备接入协议”-“设备基于MQTT接入”栏目中),按照服务器指定的格式自动生成这三项信息。
(设备密钥信息) (用于生成接入验证信息的官方python代码)4、上述python代码可移植到自己的程序中,这样就不用复制控制台里面的三个密钥信息了。由于我使用的是Python3,官方代码是Python2下写的,所以这里进行了一些改动,主要是#5步,生成token:
原始代码:token = hmac.new(devicePsk.decode("base64"), username.encode('utf-8'), digestmod=hashlib.sha256).hexdigest()
修改后的:token= hmac.new(devicePsk, username.encode('utf-8'), digestmod=hashlib.sha256).hexdigest()
对应的,改函数IotHmac的三个入口参数格式如下:
productID:当我在控制台里面创建了产品“TEST”后,平台自动生成了一个产品ID(如:0BC7M86BMJ),将这个ID作为productID。
devicename:设备名,即创建设备时自定义的名字,如ESP 8266。
devicePsk:设备密钥,原程序中对应一个Base64编码的密钥,由于修改了程序代码,这里可以输入普通字符的代表的密钥,如密码为pa123,则输入b'pa123'。
IotHmac(“0BC7M86BMJ”,“ESP 8266”,b'pa123')。
5、第4步函数返回的数据格式是一个python字典(dict),里面包含了clientid,username,password,用于后续代码的mqtt连接。
dict_info= IotHmac("0BC7M86BMJ", "esp8266", b"pa123")
for keyin dict_info.keys():
print(dict_info[key] + '\n')
网友评论