Air780E

2023-10-28

目录

基础资料

探讨重点

参考阅读:

实现功能

硬件准备

软件版本

腾讯云物理网平台接入

1、新建项目

2、新建产品

3、添加设备

4、接入方式选择

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

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

结果输出:

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


基础资料

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

简介:AT开发

探讨重点

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

参考阅读:

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

实现功能

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

硬件准备

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

软件版本

Revision: AirM2M_780E_V1108_LTE_AT

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

腾讯云物理网平台接入

1、新建项目

腾讯云的物联网开发平台登录 - 腾讯云
腾讯云—腾讯倾力打造的云计算品牌,以卓越科技能力助力各行各业数字化转型,为全球客户提供领先的云计算、大数据、人工智能服务,以及定制化行业解决方案和提供可靠企业上云服务,​​​​​​​​​​​​​​

新建项目

2、新建产品

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

3、添加设备

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

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

记录设备信息:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Air780E 的相关文章

  • 利用pygame写星球大战小游戏

    前段时间学了pygame 这两天写一个星球大战小游戏 今天准备分享出来 开发工具 python3 8 pycharm 代码注释超级详细 在这里就废话不多说了 请看代码 导入相关模块及库 import pygame import sys im
  • 6. 从0开始学ARM-异常及中断处理、异常向量表、swi

    七 异常及中断处理 异常向量表 swi 一 异常 Exception 异常是理解CPU运转最重要的一个知识点 几乎每种处理器都支持特定异常处理 中断是异常中的一种 有时候我们衡量一个操作系统的时候实时性就是看os最短响应中断时间以及单位时间
  • 第17课 微信小程序通过node获取用户openid:

    第17课 微信小程序通过node获取用户openid 调用 wx login 获取 临时登录凭证code 并回传到开发者服务器 调用 auth code2Session 接口 换取用户唯一标识 OpenID 和 会话密钥 session k
  • 11款常用的安全测试工具

    1 AppScan 一款安全漏洞扫描工具 支持Web和移动 现在安全测试做漏洞扫描非常适用 它相当于是 探索 和 测试 的过程 最终生成很直观的测试报告 有助于研发人员分析和修复通常安全测试工具用这个 扫描一些安全漏洞 用起来比较方便 网上
  • php request instance,TP5学习笔记 请求(request)变量

    可以通过Request对象完成全局输入变量的检测 获取和安全过滤 支持包括 GET POST REQUEST SERVER SESSION COOKIE ENV等系统变量 以及文件上传信息 检测变量是否设置 可以使用has方法来检测一个变量
  • linux 挂载磁盘 普通用户读写 --chatGPT

    问 mount 挂载共享磁盘 指定用户fly可以读写 gpt 要将共享磁盘挂载并授予用户 fly 读写权限 您可以使用 mount 命令结合合适的挂载选项 首先 您需要确保磁盘已经连接到系统上 然后 按照以下步骤进行操作 1 创建一个目标目
  • CPU 与 GPU 之间数据转换 cudaMemcpy

    显存上分配空间 CUDA SAFE CALL cudaMalloc void Dst d sizeof float3 totalPNum 显存上传输数据 CUDA SAFE CALL cudaMemcpy Dst d Srcdata0 h

随机推荐

  • HAProxy--理论--02--配置文件

    HAProxy 理论 02 配置文件 1 配置文件组成 1 global 设置全局配置参数 2 defaults 设置的默认参数 3 frontend 接收请求的前端虚拟节点 Frontend可以直接指定具体使用后端的backend 4 b
  • anaconda 激活环境 并 安装相关包 torch 安装matplotlib

    1 管理员身份 运行 anaconda prompt 2 激活环境 查看python版本 activate 环境名称 3 查看已经安装的包 4 安装所需的包 方法1 pip install matplotlib 如果太慢建议更换国内镜像源
  • vue中给dom元素绑定js原生onclick事件并获取data中定义的数据和调用函数

    onclick 执行的是 window 环境中的方法 所以 将 this 中的方法或data中定义的字段关联到 window 上即可 vue代码 mounted window customMethods this customMethods
  • MariaDB+SpringBoot 报错 Caused by: java.sql.SQLException: GSS-API authentication exception

    最近在搭建springboot mybatis mariadb 项目的时候遇到了如题的问题 搜索了一圈没找到合适的解决方法 因此记录下我的解决方案 希望对后来者有帮助 先说结论 重装MariaDB即可 1 环境和配置信息 开发环境 win1
  • 排序基础算法(一)—— 堆排序

    堆排序 前言 1 完全二叉树 2 大根堆和小根堆 3 堆排序原理 一 调整堆 二 建初堆 三 堆排序算法的实现 Java代码 前言 堆排序是一种树形选择排序 在排序过程中 将待排序的记录r 1 n 看成是一棵完全二叉树的顺序存储结构 利用完
  • ffmpeg基础(五) I帧B帧P帧

    一 I帧 关键帧 属于帧内压缩 你可以理解为这一画面的完整保留 解码的时候只需要本帧的数据就可以完成 因为它包含的是完整信息 特点 1 它是一个全帧压缩编码帧 将全帧图像进行JPEG压缩以及传输 2 解码的时候只需要通过I帧的数据就可以得到
  • C++primer Plus 第三章复习题

    1 为什么C 有多种整型 有多种整型 可以根据输出结果选择最合适的类型 比如年龄可以使用short 存储容量用long 2 声明与下述描述相符的变量 a short整型 值为80 short num 80 b unsigned int 整型
  • python时间相减_python 计算时间差,时间加减运算代码

    1 方便的计算两个时间的差 如两个时间相差几天 几小时 import datetime d1 datetime datetime 2009 3 23 d2 datetime datetime 2009 10 7 dayCount d1 d2
  • MsSQL数据备份与恢复---完全备份与增量备份

    文章目录 1 数据备份 1 1 数据备份的重要性 1 2 数据备份的分类 1 2 1 从物理与逻辑的角度分类 1 2 2 从数据库的备份策略角度分类 1 2 3 备份方式的比较 1 3 常见的备份方法 2 MySQL完全备份与恢复 2 1
  • 扩容 磁盘、pv、lv

    因虚似机上的磁盘空间不够了 试了下偏门的扩展方法 root hdss7 21 df h Filesystem Size Used Avail Use Mounted on devtmpfs 1 9G 0 1 9G 0 dev tmpfs 1
  • Datawhale&Git-Model:假设检验2-多元数值向量的检验

    作业 为研究东 中 西部各省市规模以上的企业发展状况 我们收集了各城市企业的主要经济指标 包括 总资产贡献率 资产负债率 流动资产周转次数 工业成本费用利润率 产品销售率 我们用变量 类别 定义了各类城市 其中1为东部城市 2为中部城市 3
  • openwrt单网口进不了登录界面

    图一 图二 图一是刷完固件后 图二是网线直连电脑的IP配置 进不了登录界面 也ping 不通 请教是什么原因
  • 使用命令恢复postgres数据库报错psql: FATAL: role "root" does not exist 解决方案

    因为是从其他地方备份出来的sql文件 如果直接用pgAdmin4因为格式问题报错input file appears to be a text format dump Please use psql 所以换用命令行执行 但是出现psql F
  • 如何使用vant库的loading组件

    第一步 main js文件引入下载的loading 全局引入ui组件 import Vant from vant import vant lib index css Vue use Vant 第二步 在vuex中定义全局变量loading
  • Java Utils工具类大全

    源码和jar见 https github com evil0ps utils Java Utils 封装了一些常用Java操作方法 便于重复开发利用 另外希望身为Java牛牛的你们一起测试和完善 欢迎入群263641914 一起封装和完成常
  • 鉴权大全(cookie、session、token、jwt、单点登录),深入理解和搞懂鉴权

    先从状态说起吧 众所周知http是无状态的协议 也就是说 HTTP 请求方和响应方间无法维护状态 都是一次性的 它不知道前后的请求都发生了什么 是不是可以单纯的理解为它是一个超级无敌健忘的协议 但有的场景下 我们需要维护状态 最典型的 一个
  • 关于mipi camera 传输速率的计算

    假设图片的分辨率是 1600x1200 帧率按照 30HZ来计算 在理想状态下 未包含 RGB 信号的前后肩宽度 总传输速率为 1600x1200x24x30 1024 1024 1318 4Mbps 如果是单通道传输 则每通道数据传输速率
  • C++:内存管理

    目录 学习目标 1 C C 内存分布 2 C C 动态内存管理 2 1 C动态内存管理 2 2 C 动态内存管理 3 operator new与operator delete函数 4 new和delete的实现原理 5 定位new表达式 学
  • linux fdisk的分区和格式化和挂载相关操作说明

    注意 分区的时候要umount磁盘之后才能分区 在Ubuntu用fdisk分析需要root用户权限 第一步 先把设备卸载掉 解除占用 caizd ubuntu home share lsblk 查看大小空间 caizd ubuntu hom
  • Air780E

    目录 基础资料 探讨重点 参考阅读 实现功能 硬件准备 软件版本 腾讯云物理网平台接入 1 新建项目 2 新建产品 3 添加设备 4 接入方式选择 5 官方密钥认证设备接入指引 6 示例 采用Python实现 HMAC SHA1 算法 结果