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

目录

基础资料

探讨重点

实现功能

硬件准备

软件版本

保姆级步骤

新建项目

1. MQTT连接官方说明:

2、配置文件基本模式

方式1:采用平台给定的MQTT连接参数

方式2:采用平台给定的MQTT连接工具计算相关参数

方式3:示例,采用Python实现连接参数生成

3、一型一密AT方式连接

4、接入云平台及订阅、发布主题示例


基础资料

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

简介:AT开发

探讨重点

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

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

实现功能

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

硬件准备

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

软件版本

Revision: AirM2M_780E_V1108_LTE_AT

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

保姆级步骤

新建项目

阿里云物联网平台入口

DeviceName可以自定义。

这里采用sim卡的IMEI(8615510564*****)作为DeviceName,便于后期维护。

设备的证书信息

1. MQTT连接官方说明:

连接参数说明如下,本文主要从一机一密注册认证的方式进行介绍。

2、配置文件基本模式

根据物联网模组AT命令接入云平台(1)-MQTT基本原理及步骤,首先要确定MQTT连接的配置文件,根据,官方文档,可知,基本模式为:

AT+MCONFIG="clientId|securemode=2,signmethod=加密方式,timestamp=时间戳|","DeviceName&ProductKey","passwd"

而passwd是由形如:

'clientIdi0m26pL****.861551056*****deviceName8615510564*****productKeyi0m26p*****timestamp16706417*****'的字符串通过signmethod指定的加密方式计算而的,DeviceSecret作为计算的key。

方式1:采用平台给定的MQTT连接参数

平台给定的参数中的clientId采用'clientId'+'.'+'deviceName'组合的方式确定,hmac_sha256加密方式。可以直接使用。需要注意的是,passwd大小写系统都能够认可。

按基本模式,组合出的配置参数,之后按步骤认证后建立连接。

方式2:采用平台给定的MQTT连接工具计算相关参数

平台帮助文档中给出了javascript编写password工具(MQTT_Password)。

支持hmacsha1和hmacmd5方法。这里可以采用产品名称作为clientId,该工具能够简易的计算出主要的连接参数,但该工具的时间戳字段不能够自由修改。

方式3:示例,采用Python实现连接参数生成

参考博文:python3 HMAC/SHA256/BASE64/MD5

import time
import hmac
import hashlib

#1、时间戳生成及基本注册数据

timestamp=int(time.time()*1000)+60*60 #60*60有效时间3600s,可按需延长
pk = "i0m26pL****"
dn = "861551056*****"
ds = "25dacc9ca202cf11ecda2541d7*****"
ts = timestamp
ci = "air780e"
sm1 = "hmacsha1"  #加密方式选择,不参与计算
sm5 = "hmacmd5"
sm6 = "hmacsha256"

#2、passwd计算字符串生成

contentStr='clientId'+ci+'deviceName'+dn+'productKey'+pk+'timestamp'+str(ts)
#print(contentStr)

def hmac_sha256(key, value):

    """
    hmacsha256加密
    return:加密结果转成16进制字符串形式
    """
    message = value.encode('utf-8')
    return hmac.new(key.encode('utf-8'), message, digestmod=hashlib.sha256).hexdigest()



def hmac_md5(key, value):

    """
    hmacmd5加密
    return:加密结果转成16进制字符串形式
    """
    message = value.encode('utf-8')
    return hmac.new(key.encode('utf-8'), message, digestmod=hashlib.md5).hexdigest()



def hamc_sha1(key,value):

    message = value.encode('utf-8')  # 加密内容
    # key = key.encode('utf-8')          # 加密的key
    return hmac.new(key.encode('utf-8'), message, digestmod=hashlib.sha1).hexdigest()

#3、不同加密方式下的passwd计算及AT+MCONFIG参数生成
#官方sign程序生成的passwd全部大写,实测大小写均可被系统识别,不影响鉴权。

#3.1 hmac_md5

print("hamc_md5:",hmac_md5(ds, contentStr).upper())
print("AT+MCONFIG=",'"'+ci + "|securemode=2,signmethod=" + sm5 + ",timestamp=" + str(ts) + "|\""+",\""+dn + "&" + pk+'","'+hmac_md5(ds, contentStr).upper()+'"')


#3.2 hamc_sha1

print("hamc_sha1",hamc_sha1(ds, contentStr).upper())
print("AT+MCONFIG=",'"'+ci + "|securemode=2,signmethod=" + sm1 + ",timestamp=" + str(ts) + "|\""+",\""+dn + "&" + pk+'","'+hamc_sha1(ds, contentStr).upper()+'"')


#3.2 云平台MQTT参数的验证

ci= pk+"."+dn
ts=1670641794482
contentStr='clientId'+ci+'deviceName'+dn+'productKey'+pk+'timestamp'+str(ts)
print("hamc_sha256",hmac_sha256(ds, contentStr).upper())
print("AT+MCONFIG=",'"'+ci + "|securemode=2,signmethod=" + sm6 + ",timestamp=" + str(ts) + "|\""+",\""+dn + "&" + pk+'","'+hmac_sha256(ds, contentStr).upper()+'"')

3、一型一密AT方式连接

一型一密与一机一密的主要区别在于第一次连接的时候需要根据协议请求秘钥,连接前在阿里云打开动态注册开关。具体连接方式请参考官方开发者文档。

4、接入云平台及订阅、发布主题示例

←代表串口工具发送指令,→代表串口工具接收到的指令或信息。

基本连接情况确定程序见物联网模组AT命令接入云平台(1)-MQTT基本原理及步骤

#接入云平台参数指定

[2022/12/10 18:20:08.9715] ← AT+MCONFIG= "air780e|securemode=2,signmethod=hmacsha1,timestamp=16706450*****|","861551056420391&i0m26p*****","5B4117DE87575D98D9D12364235EB76C********"
[2022/12/10 18:20:09.0793] → AT+MCONFIG= "air780e|securemode=2,signmethod=hmacsha1,timestamp=16706450*****|","861551056420391&i0m26******","5B4117DE87575D98D9D12364235EB76C4*******F"

OK

[2022/12/10 18:20:10.2153] ← AT+MIPSTART="iot-06z00gm80emf6to.mqtt.iothub.aliyuncs.com",1883
[2022/12/10 18:20:10.3217] → AT+MIPSTART="iot-06z00gm80emf6to.mqtt.iothub.aliyuncs.com",1883

OK

[2022/12/10 18:20:10.6112] →

CONNECT OK

[2022/12/10 18:20:12.4242] ← AT+MCONNECT=1,120
[2022/12/10 18:20:12.5412] → AT+MCONNECT=1,120

OK

[2022/12/10 18:20:12.7432] →

CONNACK OK

[2022/12/10 18:20:15.4216] ← AT+MSUB="/ext/ntp/i0m26p*****/8615510564*****/response",0
[2022/12/10 18:20:15.5267] → AT+MSUB="/ext/ntp/i0m26****/861551056*****/response",0

OK

[2022/12/10 18:20:15.6557] →

SUBACK

#发布NTP时间订阅

#开发板规则,AT命令中"(双引号)应由\22替代。                                     

#(由AT+MPUB="/ext/ntp/i0m26pLx83v/8615510564*****/request",0,0,{"deviceSendTime":"1670145990689"} 转写得到)

[2022/12/10 18:20:16.7899] ← AT+MPUB="/ext/ntp/i0m26p****/8615510564****1/request",0,0,{\22deviceSendTime\22:\221670145990689\22}

[2022/12/10 18:20:16.8949] → AT+MPUB="/ext/ntp/i0m26p*****/861551056*****1/request",0,0,{\22deviceSendTime\22:\221670145990689\22}

OK

[2022/12/10 18:20:17.0273] →
+MSUB: "/ext/ntp/i0m26p*****/861551056*****1/response",100 byte,{"deviceSendTime":"1670145990689","serverSendTime":"1670667616579","serverRecvTime":"1670667616579"}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值