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

news2024/11/24 1:20:35

基础资料

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

简介:AT开发

探讨重点

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

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

实现功能

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

硬件准备

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

软件版本

Revision: AirM2M_780E_V1108_LTE_AT

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

1、新建项目

阿里云物联网平台入口

编辑

编辑

编辑

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"}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动硬盘怎么恢复数据?怎么恢复硬盘删除的数据

移动硬盘可以随时插上或拔下,小巧而便于携带的硬盘存储器,以较高的速度与系统进行数据传输。由于其存储空间较大,性价比较高,存储和传输数据快速简便,是很多职场人士必备的外置设备之一。移动硬盘怎么恢复数据&#xf…

cuda代码高效策略--b站看课的笔记

1.1 高效公式 要么增大数据量,要么减少每个线程的内存(每个线程读取的数据量变少,每个线程的读取数据的速度变快(转变存储方式,对读取慢的地方做优化–合并全局内存)) 1.2 合并全局内存 一个线…

电子台账:模板制作之二——行过滤(垂直过滤)

1 简介大部分情况下,企业数据源表格中,只有部分行的数据可用于电子台账。例如,一共100行数据,我们只要取得其中20行即可。如果所有数据一股脑全部导入到台账中,再手工删除不需要的行,太麻烦了,有…

js变量和函数提升

1、变量提升 变量提升是JavaScript 中比较“奇怪”的现象,它允许在变量声明之前即被访问 (仅存在于var声明变量) 注意: 1.变量在未声明即被访问时会报语法错误 2.变量在var声明之前即被访问,变量的值为 undefined 3.let/const声明的变量不存在变量提升…

sqli-labs通关lesson36-40

1.lesson36 union select判断注入:为单引号注入?id1%df-- 查数据库:?id-1%df union select 1,2,database()-- 2.lesson-37 报错注入判断注入:为单引号注入通过下方判断password为单引号注入unamez&passwdg%df -- &submitSubmit查数…

神经网络之反向传播算法(自适应梯度算法Adagrad)

文章目录自适应梯度算法(Adagrad)1、算法原理2、算法实现2.1 训练过程2.2 测试过程及结果3、参考源码及数据集自适应梯度算法(Adagrad) 自适应梯度算法(Adaptive gradient algorithm,Adagrad)与…

惊!初中生也来卷了……

大家好,我是良许。 前两天在抖音直播的时候,突然来了一位不速之客…… 他自称是初中生,一开始我还有点不太相信,直到跟他连麦,听到他还略带一些稚嫩的声音,我才知道,他没有骗我…… 他说他想学…

Dynamic Movement Primitives (DMP) 学习

Dynamic Movement Primitives (DMP) 学习 【知乎】Dynamic Movement Primitives介绍及Python实现与UR5机械臂仿真 1. DMP的建模过程 链接:Dynamic Movement Primitives介绍及Python实现与UR5机械臂仿真 - 知乎 (zhihu.com) 沙漏大佬!!&am…

转行软件测试需要学习哪些知识点?来来来,都给你汇总在这里啦!

都说IT互联网行业吃香,那么如何才能高效转行,习得一技之长换取心仪offer? 一般来说,0基础小白想转行到软件测试行业,按照如下学习逻辑肯定是错不了的: 1.零基础小白入门篇(学前扫盲&#xff09…

ThinkBook15电脑开机后马上蓝屏不能使用怎么办?

ThinkBook15电脑开机后马上蓝屏不能使用怎么办?最近有用户使用的ThinkBook15电脑出现了开机之后屏幕蓝屏的情况。出现这个问题,是系统底层的故障,一般用户很难找出问题进行彻底解决。但是我们可以通过以下重做系统的方法来恢复电脑系统的使用…

阶段二11_面向对象高级_学生管理系统案例3

主要功能: 完成学生信息添加,修改和删除功能。 一.查看学生 思路: 图片:5_查看学生思路图.png 代码: StudentController[客服类中] //查找学生 private void findAllStudent() {//1.方法内部创建StudentService业…

Nacos 使用Postgresql数据库制作镜像

构建前提在 Nacos 2.2.0支持postgresql数据库基础上进行构建github地址:个人仓库编译打包源码mvn -Prelease-nacos clean package install -Dmaven.test.skiptrue若想跳过pmd和checkstyle检查请使用mvn -Prelease-nacos clean package install -Dmaven.test.skiptru…

Vue 3.0 组合式API 介绍 【Vue3 从零开始】

提示 在阅读文档之前,你应该已经熟悉了这两个 Vue 基础和创建组件。 在 Vue Mastery 上观看关于组合式 API 的免费视频。 通过创建 Vue 组件,我们可以将接口的可重复部分及其功能提取到可重用的代码段中。仅此一项就可以使我们的应用程序在可维护性和…

SAP ERP系统PP模块计划策略2050详解

SAP/ERP系统中面向订单生产的计划策略主要有20和50两个策略,这两个策略都是面向订单生产的计划策略,也是离散制造行业应用比较广泛的策略。它们之间最大差异就是在于20策略完全是由订单驱动,而50策略是预测加订单驱动,本文主要介绍…

【Leetcode 剑指Offer】第 14 天 搜索与回溯算法(中等)

文章目录剑指 Offer 12. 矩阵中的路径DFS剪枝面试题13. 机器人的运动范围剑指 Offer 12. 矩阵中的路径 典型矩阵搜索题 DFS剪枝 深度优先搜索: 可以理解为暴力法遍历矩阵中所有字符串可能性。DFS 通过递归,先朝一个方向搜到底,再回溯至上…

实现迭代回声服务器端/客户端

文章目录1.迭代服务器端/客户端2.迭代回声服务器端/客户端2.1 echo_server.c2.2 echo_client.c3.回声客户端存在的问题4.回声客户端问题解决方法1.迭代服务器端/客户端 之前讨论的 HelloWorld 服务器端处理完 111 个客户端连接请求即退出,连接请求等待队列实际没有…

唯品会盈利十年:韧性有余,冲劲不足

配图来自Canva可画唯品会在电商市场是一个特殊的存在,从2012年第四季度首次盈利至今,唯品会已经连续十年保持盈利。这十年,电商产业逐渐走向成熟,电商玩家新老接替成层出不穷,曾经家喻户晓的蘑菇街、聚美优品、苏宁易购…

Vue2.0开发之——购物车案例-Goods组件封装-商品数量的加减及总数量(53)

一 概述 Goods点击加减实现修改数量的原理Goods点击增加实现实例Goods点击-减少实现实例Footer计算商品总数量 二 Goods点击加减实现修改数量的原理 点击Counter组件里面的加减,修改Counter组件里面的数量Counter组件的数量变化时,Goods商品的数量相应…

leetcode-每日一题-807(中等,数组)

正常情况第一眼看这道题,看懂意思的话很简单就可以解出来。给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑。给你一个下标从 0 开始的 n x n 整数矩阵 grid ,其中 grid[r][c] 表示坐落于 r 行 c 列的建筑物的 高度 。城市的…

C++各类设计模式及实现详解

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书&#xff0…