Air780E

2023-11-19

目录

基础资料

探讨重点

实现功能

硬件准备

软件版本

一、创建产品

1.1在onenet上创建产品

1.2创建设备

查看onenet接入协议

二、设备安全认证

1. 鉴权参数

2. Token算法

3、sign算法

示例如下:

4、参数编码

5、Token生成

Python版Token算法实现:

6. Token生成工具

三、连接onenet

3.1 MQTT直连onenet

初始化步骤参考阅读:

3.2 发布与订阅消息

发布


基础资料

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

简介:AT开发

探讨重点

本系列主要探讨MQTT手动接入OneNET(中国移动物联网开放平台)的基本操作及手动鉴权步骤、信息订阅及发布的基本原理。

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

实现功能

MQTT手动接入OneNET(中国移动物联网开放平台)的基本操作及手动鉴权。

硬件准备

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

软件版本

Revision: AirM2M_780E_V1108_LTE_AT

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

一、创建产品

1.1在onenet上创建产品

https://open.iot.10086.cn/

产品名称、所属省市、产品类别根据自己需求填写,物模型没有要求可以选择标准物模型

节点类型选择直连设备、接入协议选择MQTT、数据协议固定为OneJson、联网方式选择蜂窝

1.2创建设备

填入设备名,选择产品,这里我使用的是模块的IMEI或IMSI来做设备名称

查看onenet接入协议

MQTT设备连接_开发者文档_OneNET (10086.cn))

可以看到,登入onenet时,mqtt的clientID、username和password都有指定

clientId即为刚才创建的设备名称

username为创建的产品ID

password是需要经过加密计算得来的鉴权token

二、设备安全认证

1. 鉴权参数

设备鉴权参数(鉴权三元组)如下:

参数

描述

ProductId

产品ID,平台生成唯一ID

DeviceName

设备名称

Token

鉴权token

2. Token算法

Token由多个参数构成,如下表:

名称

类型

是否必须

参数说明

参数示例

version

string

参数组版本号,日期格式,目前仅支持"2018-10-31"

2018-10-31

res

string

访问资源 resource格式为:products/{产品id}/devices/{设备名字}

'products/ft6uTZ****/devices/4600112503*****'

et

int

访问过期时间 expirationTime,单位秒,unix时间当一次访问参数中的et时间小于当前时间时,平台会认为访问参数过期从而拒绝该访问

'1670846247510'表示:北京时间 2022-12-12 19:57:27

method

string

签名方法 signatureMethod支持hmacmd5、hmacsha1、hmacsha256

sha1(代表使用hmacsha1算法)

sign

string

签名结果字符串signature

sign_Device:ah4jKmujuN11+Edt7*****==sign_Product:lwsm/g+PrJZz/WbpP*****==

3、sign算法

参数sign的生成算法为:

sign = base64(hmac_<method>(base64decode(key), utf-8(StringForSignature)))

其中: Key为OneNET为资源分配的访问密钥(产品级、设备级均可),其作为签名算法参数之一参与签名计算,为保证访问安全,请妥善保管 Key参与计算前应先进行base64decode操作 用于计算签名的字符串 StringForSignature的组成顺序按照参数名称进行字符串排序,以'\n'作为参数分隔,当前版本中按照如下顺序进行排序:et、method、res、version StringForSignature组成示例如下:

StringForSignature = et + '\n' + method + '\n' + res+ '\n' + version

注意:每个参数均为key=value格式组成,但是仅参数中的value参与计算签名的字符串 StringForSignature的组成。

示例:'1670846247510\nmd5\nproducts/ft6uTZ****/devices/4600112503*****

2018-10-31'

用于计算签名的字符串StringForSignature为(按照et、method、res、version的顺序)

计算出sign后,将每个参数均采用key=value的形式表示,并用'&'作为分隔符,

示例如下:

'version=2018-10-31&res=products%2Fft6uTZ****%2Fdevices%2F4600112503*****&et=1670846247510&method=md5&sign=ah4jKmujuN11%2BEdt7*****%3D%3D'

4、参数编码

Token中key=value的形式的value部分需要经过URL编码,可使用quote或urlencode。需要进行编码的特殊符号如下

序号

特殊符号

URL编码

1

+

%2B

2

空格

%20

3

/

%2F

4

?

%3F

5

%

%25

6

#

%23

7

&

%26

8

=

%3D

编码后,上例中实际传输Token为:

version=2018-10-31&res=products%2F123123%2Fdevices%2Fche1&et=1537255523&method=sha1&sign=ZjA1NzZlMmMxYzIOTg3MjBzNjYTI2MjA4Yw%3D

5、Token生成

需要注意:官方文档中的Python算法示例有误,需修改后使用,注意对照文档方法自行甄别。

详见:OneNET - 中国移动物联网开放平台

基本步骤思路:将平台生成的ProductKey或DeviceKey重新编码为base64格式,按文档规则生成StringForSignature,之后就行选定算法的计算,得到sign。最后生成MQTT的AT+MCONFIG连接配置。

Python版Token算法实现:

import time
import hmac
import hashlib
import base64
from urllib.parse import urlencode

def hmac_sha256(key, value):
 """
 hmacsha256加密
 return:加密结果转成16进制字符串形式
 """
 message = value.encode('utf-8')  # 加密内容
 sign_b=hmac.new(key, message, digestmod=hashlib.sha256)
 sign = base64.b64encode(sign_b.digest()).decode('UTF-8')
 return sign

def hmac_sha1(key, value):
 """
 hmacsha1加密
 return:加密结果转成16进制字符串形式
 """
 message = value.encode('utf-8')  # 加密内容
 sign_b=hmac.new(key, message, digestmod=hashlib.sha1)
 sign = base64.b64encode(sign_b.digest()).decode('UTF-8')
 return sign

def hmac_md5(key,value):

 message = value.encode('utf-8')
 sign_b=hmac.new(key, message, digestmod=hashlib.md5).digest()
 sign_t = base64.b64encode(sign_b)
 sign=sign_t.decode('UTF-8')
 return sign



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

et=str(int(time.time()*1000)+60*60) #60*60有效时间3600s,可按需延长
version = "2018-10-31"
ProductId = "ft6uTZ****"
ProductKey=base64.b64decode("YRHzukQHuV0md3djYjiwT0zWQqB1m5qxRENkB*****=")
DeviceName = "4600112503*****"
DeviceKey =base64.b64decode("XKY7QG/xOJRjEbySZkYTdOjXnxJukxf2ObHoi/*****=")
sm1 = "sha1"  #加密方式选择,不参与计算
sm5 = "md5"
sm6 = "sha256"

#2、res及StringForSignature组成

res = "products"+"/"+ProductId+"/"+"devices"+"/"+DeviceName
StringForSignature =str(et) + "\n" + sm5+ "\n" + res+ "\n" + version

#3、sign鉴权计算
sign_Product=hmac_md5(ProductKey, StringForSignature)
sign_Device=hmac_md5(DeviceKey, StringForSignature)


#4、 token参数拼接

token_Product=urlencode([('version',version),('res',res),('et',et),('method',sm5),('sign',sign_Product)]) 
token_Device=urlencode([('version',version),('res',res),('et',et),('method',sm5),('sign',sign_Device)])


#5、MQTT的AT+MCONFIG连接配置生成

print('AT+MCONFIG="'+DeviceName+'","'+ProductId+'","'+token_Product+'"')
print('AT+MCONFIG="'+DeviceName+'","'+ProductId+'","'+token_Device+'"')

6. Token生成工具

为便于开发者开发,平台提供Token生成工具(点击下载

  • 打开生成工具 token.exe

填写对应参数,点击generate

  • 生成Token如下:

三、连接onenet

3.1 MQTT直连onenet

初始化步骤参考阅读:

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

采用产品级:
← AT+MCONFIG="4600112503*****","ft6uTZ****","version=2018-10-31&res=products%2Fft6uTZ****%2Fdevices%2F4600112503*****&et=1670846247510&method=md5&sign=lwsm%2Fg%2BPrJZz%2FWbpP*****%3D%3D"
或者采用设备级参数:
← AT+MCONFIG="4600112503*****","ft6uTZ****","version=2018-10-31&res=products%2Fft6uTZ****%2Fdevices%2F4600112503*****&et=1670846247510&method=md5&sign=ah4jKmujuN11%2BEdt7*****%3D%3D"
← AT+MIPSTART="studio-mqtt.heclouds.com",1883
→ AT+MIPSTART="studio-mqtt.heclouds.com",1883
OK
→ 
CONNECT OK
← AT+MCONNECT=1,120
→ AT+MCONNECT=1,120
OK
→ 
CONNACK OK

可以从平台上看到设备已经在线了

3.2 发布与订阅消息

onenet studio有固定的通信TOPIC,可以到官网查看,这里演示下设备属性上报与响应的主题

通信主题_开发者文档_OneNET (10086.cn)

订阅
[2022/12/12 19:45:16.9790] ← AT+MSUB="$sys/ft6uTZ****/4600112503*****/thing/property/post/reply",0
[2022/12/12 19:45:17.0845] → AT+MSUB="$sys/ft6uTZ****/4600112503*****/thing/property/post/reply",0OK
[2022/12/12 19:45:17.2683] → SUBACK

发布

向设备上报属性的主题发布消息,消息携带设备的属性,不同的产品具有不同的属性,可以在设备物模型处查看

例如:在文章开始创建的产品具有如下图所示的属性

温度、湿度和地理位置

[2022/12/12 19:45:21.7628] ← AT+MPUB="$sys/ft6uTZ****/4600112503*****/thing/property/post",0,0,"{\22id\22:\22125\22,\22params\22:{\22CurrentTemperature\22:{\22value\22:-25.0}}}"
[2022/12/12 19:45:21.8729] → AT+MPUB="$sys/ft6uTZ****/4600112503*****/thing/property/post",0,0,"{\22id\22:\22125\22,\22params\22:{\22CurrentTemperature\22:{\22value\22:-25.0}}}"OK
[2022/12/12 19:45:22.4680] → +MSUB: "$sys/ft6uTZ****/4600112503*****/thing/property/post/reply",39 byte,{"id":"125","code":200,"msg":"success"}

可以看到平台已经有数据更

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

Air780E 的相关文章

  • 【计算机毕业设计】白优校园社团网站的设计与实现

    近些年 随着中国经济发展 人民的生活质量逐渐提高 对网络的依赖性越来越高 通过网络处理的事务越来越多 随着白优校园社团网站的常态化 如果依然采用传统的管理方式 将会为工作人员带来庞大的工作量 这将是一个巨大考验 需要投入大量人力开展对社团
  • 揭秘看不见人的“黑灯工厂”

    你知道吗 未来工厂不需要人也能24小时运转 未来机器能自己配合的天衣无缝 未来工厂连一点灰尘都进不去 未来自研的智能化设备甚至几秒就能生产出一部手机 千万不要惊讶 其实这样的工厂已经在我们的身边 很可能你在元旦买到的一件衣服 一部手机就是
  • qt.qpa.plugin: Could not find the Qt platform plugin “windows“ in ““

    系统环境 Win10家庭中文版 Qt 5 12 9 链接了一些64位的第三方库 程序编译完运行后出现 qt qpa plugin Could not find the Qt platform plugin windows in 弹窗如下 网
  • 史上最全Java面试八股文(带全部答案)2024年最新版

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • 最新整理Java面试八股文,大厂必备神器

    在看这篇文章之前 我想我们需要先搞明白八股文是什么 明清科举考试的一种文体 也称制义 制艺 时文 八比文 八股文章就四书五经取题 内容必须用古人的语气 绝对不允许自由发挥 而句子的长短 字的繁简 声调高低等也都要相对成文 字数也有限制 八股
  • 计算机Java项目|基于SSM的篮球系列网上商城设计与实现

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|基于SSM的微课学习系统

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • 计算机Java项目|学生成绩管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|电影购票系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 最新整理Java面试八股文,大厂必备神器

    在此 我采访了数十名大厂的面试官和上百的的面试者 总结出了这一套Java面试八股文 这套八股文已经帮助了上百人拿到自己心仪的offer 我们先来看看这套八股文 Java基础面试八股文 操作系统中 heap 和 stack 的区别 什么是基于
  • 2024史上最全Java面试八股文(带全部答案)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • 详解Java信号量-Semaphore

    第1章 引言 大家好 我是小黑 今天 咱们一起来深入探讨一下Semaphore 在Java中 正确地管理并发是一件既挑战又有趣的事情 当谈到并发控制 大家可能首先想到的是synchronized关键字或者是ReentrantLock 但其实
  • JCMsuite应用:光学环形谐振腔模拟

    本案程演示了环形谐振腔的模拟 这种类型的集成光子器件 例如用作升 降滤波器或在传感应用中 当物质或粒子附着在环上时 通过测量其共振频率的位移来检测 对于集成光子电路中的无源光器件 s矩阵通常是研究的热点 它描述了通过端口 波导进入设备的电磁
  • 15天学会Python深度学习,我是如何办到的?

    陆陆续续有同学向我们咨询 Python编程如何上手 深度学习怎么学习 如果有人能手把手 一对一帮帮我就好了 我们非常理解初学者的茫然和困惑 大量视频 书籍 广告干扰了大家的判断 学习Python和人工智能 成为内行人不难 为此 我们推出了
  • 基于节点电价的电网对电动汽车接纳能力评估模型研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 【js学习之路】遍历数组api之 `filter `和 `map`的区别

    一 前言 数组是我们在项目中经常使用的数据类型 今天我们主要简述作用于遍历数组的api filter 和 map 的区别 二 filter和map的共同点 首先 我们主要阐述一下 filter 和 map 的共同点 api的参数都是回调函数
  • 软件测试/测试开发|给你剖析闭包与装饰器的魔力

    测试管理班是专门面向测试与质量管理人员的一门课程 通过提升从业人员的团队管理 项目管理 绩效管理 沟通管理等方面的能力 使测试管理人员可以更好的带领团队 项目以及公司获得更快的成长 提供 1v1 私教指导 BAT 级别的测试管理大咖量身打造
  • 【安全】Java幂等性校验解决重复点击(6种实现方式)

    目录 一 简介 1 1 什么是幂等 1 2 为什么需要幂等性 1 3 接口超时 应该如何处理 1 4 幂等性对系统的影响 二 Restful API 接口的幂等性 三 实现方式 3 1 数据库层面 主键 唯一索引冲突 3 2 数据库层面 乐
  • Java进阶之旅第七天

    Java进阶之旅第七天 文章目录 Java进阶之旅第七天 方法引用 介绍 代码展示 结果 方法引用的分类
  • 计算机Java项目|java游戏账号交易系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板

随机推荐

  • Vim中多行删除

    在操作虚拟机的时候 都会出错 当在vim中出现问题的时候 可以在dw普通模式下删除对应的单词 如果在vim中使用多行删除 可以使用dd vim 命令 将行数添加到该命令中 如10dd将从光标底部删除10行 包含光标行在内 删除单行 1 按
  • The Necklace 【UVA - 10054】【欧拉回路详解】

    题目链接1 题目链接2 题目求的是一串珠子 要让它们首尾相互照应才能串起来 并且 最后要连成一个环 使得最后的珠子的尾与第一个珠子的头相互对应 那么 这道题就是道求欧拉回路的题了 我们要先判断这是不是能够构成欧拉回路 这是个无向图 再对于需
  • 密码学原语如何应用?解析密文同态性的妙用

    隐私数据在密文形式下是否依旧可以加减乘除 其背后的同态性原理具体指什么 半同态性和全同态性有什么区别 单密钥和多密钥同态加密有哪些奇妙的应用场景 隐私保护方案设计 往往需要在密文状态下 对隐私数据进行特定的业务操作 以此保障数据的机密性 沿
  • Tomcat单实例安装部署

    自说 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器 属于轻量级应用服务器 主要用于处理动态web数据 部署java环境 上传jdk包 使用xftp上传 解压 tar zxvf u01 jdk 8u333 linux i58
  • 傻傻分不清楚的sort,sorted,reverse,reversed

    前言 在平常编码过程中 列表是经常用的 而常用的方法也基本就是遍历循环进行元素的append 还有很多方法不熟悉 比如有一次遇到一个问题 将一个列表进行反转 拿起百度 得到答案 方法1 列表切片 步长设置为 1 方法2 列表自带方法 lst
  • 软件测试面试经验及面试题目分享

    关于面试 不同的公司千差万别 面试bat 创业公司 外包 难度和轮数差异巨大 但是有个共同点就是都是面试造航母 工作拧螺丝 意思就是说工作起来其实很容易 但是要过面试却很难 包括每天大家学习新技能很大一部分就是为了跳槽加薪 直接一点来说 其
  • 监控程序运行状态,并根据状态启动或重启进程

    监控程序运行状态 并根据状态启动或重启进程 需求 设计思路 实现 需求 根据运行环境要求 我们所做的程序常常会在无人监管的情况下运行几个月之久 所以为了保证程序的正常运行 决定添加一个附属的监控程序 监控程序要求如下 当检测到主程序未启动时
  • @RequestMapping、@PostMapping、@GetMapping的区别

    GetMapping 用于将HTTP GET请求映射到特定处理程序方法的注释 具体来说 GetMapping是一个作为快捷方式的组合注释 RequestMapping method RequestMethod GET PostMapping
  • QT_下拉选项框_Combo Box_使用

    添加选项 第一种 UI界面静态添加 如下 第二种 代码添加 如下 1 在mainwindow h头文件中添加创建用函数 2 定义函数 void MainWindow add combobox void ui gt comboBox gt a
  • JavaCollection集合

    5 Collection集合 5 1 Collection集合概述 是单列集合的顶层接口 它表示一组对象 这些对象也称Collection元素 JDK不提供此接口的直接实现 它提供更具体的子接口 Set 和 List 实现 package
  • 取消计算机系统密钥,BitLocker驱动器被加密怎么恢复密钥 忘了密码取消删除方法...

    由于最近电脑蓝屏 我需要U盘制作启动盘 结果U盘插入到我电脑 我发现此U盘被我以前用BitLocker加密过了 BitLocker密码我也忘记了 我只好去我以前旧电脑去找 BitLocker 驱动器加密恢复密钥 还好我旧电脑以前保存过了 我
  • WordPress(6)网站侧边栏倒计时进度小工具

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 效果图 在这里插入图片描述 一 添加位置 二 主题style css文件中添加美化 1 引入库 2 添加自定义的HTML模块 效果图 提示 以下是本篇文章正文内容
  • 重要-作为Android开发者必须了解的Gradle知识

    https www jianshu com p c31513f5f550
  • 【NOI 2015】程序自动分析

    题目 传送门 题目描述 在实现程序自动分析的过程中 常常需要判定一些约束条件是否能被同时满足 考虑一个约束满足问题的简化版本 假设 x 1 x 2
  • windows10和安装linux双系统安装教程(超简单)

    windows10和安装linux双系统安装教程 超简单 一共分三步 第一步了解自己电脑的BIOS 第二步安装windows10系统 第三步在windows10中安装ubuntu系统 第一步了解自己电脑的BIOS UEFI 是新式BIOS
  • 解决C++ unordered_map“nvalid use of incomplete type ‘struct std::hash“ 问题

    问题 G 使用unordered map时候 编译报错 invalid use of incomplete type struct std hash lt 放在G 6 5交叉编译环境是OK的 但是放在ubuntu14 04报错 解决 代码
  • uni-app开发微信小程序,在onShow()中获取onLoad(option)中的option页面路径值

    onShow 获取当前小程序的页面栈 let pages getCurrentPages 数组中索引最大的页面 当前页面 let currentPage pages pages length 1 打印出当前页面中的 options cons
  • DAY1:leetcode704二分查找 27移除元素

    目录 一 二分查找 注意区间与循环中的边界点取值 二 移除元素 双指针写法 一 二分查找 注意区间与循环中的边界点取值 class Solution public int search vector
  • 实验十四:Wireshark数据抓包分析之ARP协议

    实验十四 Wireshark数据抓包分析之ARP协议 目录 一 实验目的及要求 二 实验原理 1 什么是ARP 2 ARP工作流程 3 ARP缓存表 三 实验环境 四 实验步骤及内容 实验步骤一 1 使用netsh绑定IP和MAC地址 2
  • Air780E

    目录 基础资料 探讨重点 实现功能 硬件准备 软件版本 一 创建产品 1 1在onenet上创建产品 1 2创建设备 查看onenet接入协议 二 设备安全认证 1 鉴权参数 2 Token算法 3 sign算法 示例如下 4 参数编码 5