本文介绍了使用腾讯云物联网开发平台 IoT Explorer 创建物联网 IoT 设备,其中包括了新建项目产品、定义产品物模型、新建设备。关于 IoT 设备端的配置和硬件可以参见这两篇文章(尚未完成)。

登录腾讯物联网平台创建设备

访问腾讯云物联网开发平台 Iot Explorer https://console.cloud.tencent.com/iotexplorer

使用腾讯云物联网 IoT Explorer 创建第一个 IoT 设备

新建项目和产品

点击 创建实例 –> 项目列表 –> 新建项目,此处需要填写项目名称和项目描述,新建项目 xdshcn_IoTE。创建完项目、进入项目之后,点击 产品开发 –> 新建产品

  • 新建产品的表单里面创建产品的名称,产品品类中选择“自定义品类”,通信方式选择“WiFi”;
  • 在认证方式中选择密钥认证(注意:密钥认证只适用于 wstcp 协议;而证书认证可以支持 wss 协议);
  • 数据协议中选择“物模型”,以方便我们之后的配置和数据转发;
  • 其他参数可参照图示填写。
创建物联网 IoT 设备产品
创建物联网 IoT 设备产品

定义产品的物模型

在新建产品之后会出现如下界面,在此处分别有5个步骤:物模型 –> 设备开发 –> 交互开发 –> 设备调试 –> 批量生产。由于在本例中仅介绍最简单的 IoT 设备产品的创建,所以其中设备开发、交互开发和批量生产在本文中将会被忽略。

首先,要在物模型中新建自定义功能,如下图所示,在本例中将新建一个可以检测环境湿度和温度的传感器设备(该设备使用 D1 miniDHT11 组成,详细内容可以查看此篇文章;有关 D1 mini 可以查看此篇文章),这里新建两个需要测量的变量,分别是温度湿度

具体的设置样例可以参见下图,数据类型均选择浮点型。由于温湿度传感器只会发送数据供我们读取,而我们并不需要将数据写入设备进行设备的控制,所以此处选择只读即可;数值范围可以自行设定,此处仅供参考;步长作为数据的显示精度,可以自行调整。

物模型 – 自定义功能

在下一步“设备开发”中,可以选择相应的 SDK,本例中我们默认跳过。可以点击 Topic列表 ,在物模型 Topic中有两条在本例中需要用到的 Topic,分别对应着发布订阅,其实也就是对应着数据的发布和数据的订阅。此处我们什么也不用做,记着有这两条即可,之后将会在设备中用到。

Topic 列表

在第三步“交互开发”中,我们可以选择接入腾讯连连官方小程序,但是如果真的需要任意一位用户在使用我们自己开发的 IoT 设备时,通过“腾讯连连”小程序激活、访问和控制该设备,那么我们所建的产品需要通过腾讯云的审核才行。所以,此处为了进一步简化流程,将该页面上的两个按钮均关闭,之后将在其他文章中详细展开。

暂时关闭交互开发

新建设备

在第四步“设备调试”中,我们需要新建设备:此处的设备就是文中提到的 IoT 设备,点击新建设备,给设备命名即可。在本例中新建两个设备,一个设备叫做Sensor1,用于读取温度和湿度数据;另一个设备叫做SerialScreen,用于显示读取的设备温湿度数据(这两个设备的详情可以查看这两篇文章:暂未完成)。此时,设备状态这一栏将会显示设备正处于未激活状态,下一步将获取设备的登录密钥以激活并上线设备。

新建设备

生成MQTT登录参数

物联网通信 设备基于 TCP 的 MQTT 接入-开发者手册-文档中心-腾讯云-腾讯云

为了获取设备的登录密钥以激活并上线设备,我们需要直接在上一步的界面中点击设备名称,在新页面中得到设备名称设备密钥产品ID(如下图所示)。将这三个参数分别填入到下方的 Python 脚本并点击运行之后,即可获得ClientID用户名设备密钥,然后将会使用这三个参数将设备接入腾讯云物联网开发平台。

将这三个参数分别填入到下方的 Python 脚本并点击运行
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import base64
import hashlib
import hmac
import random
import string
import time
import sys
# 生成指定长度的随机字符串
def RandomConnid(length):
    return  ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(length))
# 生成接入物联网通信平台需要的各参数
def IotHmac(productID, devicename, devicePsk):
     # 1. 生成 connid 为一个随机字符串,方便后台定位问题
     connid   = RandomConnid(5)
     # 2. 生成过期时间,表示签名的过期时间,从纪元1970年1月1日 00:00:00 UTC 时间至今秒数的 UTF8 字符串
     expiry   = int(time.time()) + 30*24*60 * 60
     # 3. 生成 MQTT 的 clientid 部分, 格式为 ${productid}${devicename}
     clientid = "{}{}".format(productID, devicename)
     # 4. 生成 MQTT 的 username 部分, 格式为 ${clientid};${sdkappid};${connid};${expiry}
     username = "{};12010126;{};{}".format(clientid, connid, expiry)
     # 5. 对 username 进行签名,生成token
     secret_key = devicePsk.encode('utf-8')  # convert to bytes
     data_to_sign = username.encode('utf-8')  # convert to bytes
     secret_key = base64.b64decode(secret_key)  # this is still bytes
     token = hmac.new(secret_key, data_to_sign, digestmod=hashlib.sha256).hexdigest()
     # 6. 根据物联网通信平台规则生成 password 字段
     password = "{};{}".format(token, "hmacsha256")
     return {
        "clientid" : clientid,
        "username" : username,
        "password" : password
     }
if __name__ == '__main__':
    # 参数分别填入: 产品ID,设备名称,设备密匙;下方参数为虚构,请勿使用。
    print(IotHmac("F2IXXXXXXX","ultxxxxxnic1","IvUqrHxgbixxxxxoQBs3Q=="))
获得“ClientID”、“用户名”、“设备密钥”

关于 Projet IoTE

从本文起,发现可以单独列一个 Projet IoTE 的分类来记录有关物联网硬件产品开发的一些事情,顺便可以将之前的一些文章串起来备用。

类似文章

发表回复

您的电子邮箱地址不会被公开。