Air780E|腾讯云|AT命令|物联网|三元组|鉴权|算法|密钥生成|(2)-腾讯云物联网手动接入步骤

基础资料

基于Air780E开发板:Air780E文档中心

简介:AT开发

探讨重点

本系列主要探讨MQTT手动接入腾讯云物理网平台的基本操作及手动鉴权步骤、信息订阅及发布的基本原理。

参考阅读:物联网模组AT命令接入云平台(1)-MQTT基本原理及步骤

实现功能

MQTT手动接入腾讯云物理网平台的基本操作及手动鉴权。

硬件准备

Air780E开发板1块,SIM卡1张。

软件版本

Revision: AirM2M_780E_V1108_LTE_AT

任意串口调试工具(本文使用llcom1.1.1.9,波特率9600)

1、新建项目

腾讯云的物联网开发平台登录 - 腾讯云

Air780E|腾讯云|AT命令|物联网|三元组|鉴权|算法|密钥生成|(2)-腾讯云物联网手动接入步骤_第1张图片

新建项目

Air780E|腾讯云|AT命令|物联网|三元组|鉴权|算法|密钥生成|(2)-腾讯云物联网手动接入步骤_第2张图片

Air780E|腾讯云|AT命令|物联网|三元组|鉴权|算法|密钥生成|(2)-腾讯云物联网手动接入步骤_第3张图片

2、新建产品

点击项目名称,新建产品,名称:智能开关(1路),自定。其他参数选择如下图(这个产品已经建立过了,新建可以参考此参数)。通信方式选2G/3G/4G,其他默认。点击确定。

Air780E|腾讯云|AT命令|物联网|三元组|鉴权|算法|密钥生成|(2)-腾讯云物联网手动接入步骤_第4张图片

3、添加设备

点进我们刚新建的产品的链接,设备调试页面,点击新建设备。

填写设备名称,建议用设备imei等唯一标识,

Air780E|腾讯云|AT命令|物联网|三元组|鉴权|算法|密钥生成|(2)-腾讯云物联网手动接入步骤_第5张图片

记录设备信息:

Air780E|腾讯云|AT命令|物联网|三元组|鉴权|算法|密钥生成|(2)-腾讯云物联网手动接入步骤_第6张图片

4、接入方式选择

MQTT 协议支持通过设备证书和密钥签名两种方式接入物联网通信平台,本文介绍密钥签名方式。

接入参数如下所示:

密钥认证

MQTT 服务器连接地址与证书认证一致;端口:1883

· KeepAlive:保持连接的时间,取值范围为0-900s;


· ClientId:${productId}${deviceName};


· UserName:${productId}${deviceName};${sdkappid};${connid};${expiry},详情见下文中基于 MQTT 的签名认证接入指引 username 部分;


· PassWord:密码,详情见下文中基于 MQTT 的签名认证接入指引 password 部分。

5、官方密钥认证设备接入指引

  1. 登录 物联网通信控制台。您可在控制台创建产品、添加设备、并获取设备密钥。
  2. 按照物联网通信约束生成 username 字段,

username 字段的格式为:

${productId}${deviceName};${sdkappid};${connid};${expiry}

注意:${} 表示变量,并非特定的拼接符号。

其中各字段含义如下:

  • productId:产品 ID。
  • deviceName: 设备名称。
  • sdkappid:固定填12010126。
  • connid :一个随机字符串。
  • expiry :表示签名的有效期, 从1970年1月1日00:00:00 UTC 时间至今秒数的 UTF8 字符串。

3.用 base64 对设备密钥进行解码得到原始密钥 raw_key。

4.用第3步生成的 raw_key,通过 HMAC-SHA1 或者 HMAC-SHA256 算法对 username 生成一串摘要,简称 Token。

按照物联网通信约束生成 password 字段,password 字段格式为:

password 字段格式为:

${token};hmac 签名方法

其中 hmac 签名方法字段填写第三步用到的摘要算法,可选的值有 hmacsha256 和 hmacsha1。

6、示例,采用Python实现,HMAC-SHA1 算法。

涉及隐私信息已局部替换为*号,请按各自注册信息替换。

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()) + 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
     #用第3步生成的 raw_key,通过 HMAC-SHA1 或者 HMAC-SHA256 算法对 username 生成一串摘要,简称 Token。
     token = hmac.new(secret_key, data_to_sign, digestmod=hashlib.sha1).hexdigest()
     # 6. 根据物联网通信平台规则生成 password 字段
     password = "{};{}".format(token, "hmacsha1")
     return {
        "clientid" : clientid,
        "username" : username,
        "password" : password
     }
if __name__ == '__main__':

    productID='XJTD6I****'    //按自己的注册信息替换
    devicename='861551056*****'  //按自己的注册信息替换
    devicePsk='lgflte6w5jy/Zy********=='   //按自己的注册信息替换
    loc=productID +".iotcloud.tencentdevices.com"+":1883"
    access = IotHmac(productID, devicename, devicePsk)
    print('认证参数为:',access)
    print('链接地址为:', loc)

结果输出:

认证参数为: {'clientid': 'XJTD6I****861551056*****', 'username': 'XJTD6I****861551056*****;12010126;YERH1;1670553717', 'password': '466b5ff7515842f*******51e2768124de1eafc3;hmacsha1'}
链接地址为: XJTD6I****.iotcloud.tencentdevices.com:1883

7、AT手动连接并订阅topic示例:

[2022/12/09 11:07:52.1671] ← AT+MCONFIG="XJTD6IOCPD8615510*******,"XJTD6IOCPD86155105*******;12010126;WRY6T;1670558319","fb525bba65d246d1a9597560f573277c86661766;hmacsha1"
[2022/12/09 11:07:52.2760] → AT+MCONFIG="XJTD6IOCPD86155105******","XJTD6IOCPD8615510*******;12010126;WRY6T;1670558319","fb525bba65d246d1a9597560f573277c86661766;hmacsha1"
OK
[2022/12/09 11:07:57.1502] ← AT+MIPSTART="XJTD6IOCPD.iotcloud.tencentdevices.com",1883
[2022/12/09 11:07:57.2562] → AT+MIPSTART="XJTD6IOCPD.iotcloud.tencentdevices.com",1883
OK
[2022/12/09 11:07:57.8283] →
CONNECT OK
[2022/12/09 11:08:00.6623] ← AT+MCONNECT=1,240
[2022/12/09 11:08:00.7678] → AT+MCONNECT=1,240
OK
[2022/12/09 11:08:00.9436] →
CONNACK OK
[2022/12/09 11:08:06.6297] ← AT+MSUB="$thing/down/property/XJTD6*****/861551056******",0
[2022/12/09 11:08:06.7359] → AT+MSUB="$thing/down/property/XJTD6*****/86155105*******",0
OK
[2022/12/09 11:08:06.8859] →
SUBACK

你可能感兴趣的:(物联网模组AT命令接入云平台,物联网,腾讯云,云计算,单片机,python)