赞
踩
趁记忆还没遗忘的时候赶紧记一下使用OneNet的时候遇到过的问题吧!(欢迎补充~)
可以看到下图这个界面有一个OneNET物联网开放平台,还有一个OneNET Studio。但是在开发者中心的界面却只有一个OneNET物联网开放平台。这是为什么呢?因为只有很早注册OneNet的用户才会有Studio界面(具体多早我也不知道哦),而新一批注册的用户都只有物联网开放平台。据OneNet客服说,有Studio的是老版OneNet,应该快要下线了,所以新版的OneNet用户界面就已经没有Studio了。那问题来了?区分这个有什么用呢?
很有用啊!因为我感觉哈,网上大部分关于OneNet的资料都还是老版的, 里面的一些通信主题啊、token啊啥的计算都有一点区别,然后OneNet的连接错一个字母都连不上啊!!!前期吃了好多亏,后期在做小程序API连接OneNet的时候也吃了很多亏呜呜呜呜。所以,大家要根据自己的OneNet版本选择相应的文章解决自己的问题。
在创建产品的时候,会选择一个节点类型,里面就有直连设备、网关设备和子设备,那这三个设备有什么区别呢?我觉得哈,如果是个人做做毕设、玩儿一玩儿,区别应该不大,但是企业级的可能有区别,那我也不知道了。我把我玩儿OneNet感觉到的区别和大家说一下吧!
直连设备和网关设备的区别我感觉不是很大,尤其是网关设备单独使用的时候(也就是网关设备不连接子设备的时候),但是如果网关设备使用的时候需要挂载一个子设备,比如哈,我们需要用一个网关来控制全屋的智能设备的时候,每个设备就属于一个子设备。这时候,直连设备就不可以,因为它没有挂载子设备的功能。
同样也是创建产品的时候需要选择开发方案,那关于这俩的定义,官方是这么说的:
标准方案:平台预置的免开发方案,配套标准物模型和APP控制模板,用户无需自行定义;
自定义方案:用户自行定义产品功能及APP控制模板,适用于标准方方案无法满足的情况;
我的理解就是比如你选择了官方的网关,再选择了标准方案,那么它的物模型可能就会有好几个,但是如果你实际使用的时候你就只要一个或者两个参数,并且,你要的参数标准方案可能还没有。那咋办,就只能一个一个删,再添加自己的(当然也可以不删,但是属性面板会很乱,而且会打乱顺序)。但是选择自定义方案的话,就没有删掉这一步了,想要啥创建啥。
说起这俩参数,那又是一把鼻涕一把泪啊!先简单解释一下这俩参数及它们用在何处:
token:介入安全认证,官方说明在这个文档,这个不用说,只要玩儿OneNet的就一定会用这个,因为一定要把设备接入OneNet平台嘛!就相当于密码。
authorization:安全鉴权,官方说明在这个文档,大家可以自行查看,我用下来呢,感觉就是如果你要用到API连接,那么就会涉及到authorization
然后,再把我用下来的,如何生成这两个参数也记录一下!
token相当于是后面连接OneNet平台要用的密码,token算法具体见官方文章:Token算法
然后给个示例:
Unix生成工具:时间戳(Unix timestamp)转换工具 - 在线工具
(碎碎念,可不看,我最开始用OneNet的时候不知道老版新版,带我的人因为20年就注册了OneNet,所以他有Studio,然后因为新版老版token计算方式不一样(就相当于我们一直是用的Studio的信息,物联网的token计算方法来算的token),我们怎么也没办法生成正确的token,脑袋疼,后来在自己的OneNet账号下,相当于是物联网的信息,物联网的token计算方法,才生成了正确的token,连上了设备!)
在使用小程序接入OneNet平台的时候,选择了调用API的方法来操作,然后,在OneNet的官方API调试工具下,可以生成authorization信息,如下图:
但是,这个authorization是有过期时间的,而且不长,我没具体算过,大概十分钟左右!所以我们在实际用的时候不能用这里生成的authorization,而要根据官方手册来生成。
官方文档: 安全鉴权
然后给个示例:
首先是要用到的userid和user_accesskey在这个界面:用户中心/访问权限
然后是它的计算方式不是通过token.exe,而是在这个官方界面可以计算:
最后,我的计算方式是用python(在vscode里跑的),代码如下: (带长感叹号的是要改的部分)
- import base64
- import hmac
- import time
- from urllib.parse import quote
-
- def token(user_id,access_key):
-
- version = '2020-05-29'
-
- res = 'userid/%s' % user_id
-
- # 用户自定义token过期时间
- et = str(int(time.time()) + 3600000)########这里过期时间要设置长一点!!!!!
-
- # 签名方法,支持md5、sha1、sha256
- method = 'sha1'
-
- # 对access_key进行decode
- key = base64.b64decode(access_key)
-
- # 计算sign
- org = et + '\n' + method + '\n' + res + '\n' + version
- sign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)
- sign = base64.b64encode(sign_b.digest()).decode()
-
- # value 部分进行url编码,method/res/version值较为简单无需编码
- sign = quote(sign, safe='')
- res = quote(res, safe='')
-
- # token参数拼接
- token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)
-
- return token
-
- if __name__ == '__main__':
- user_id = '363551'######这里填自己的!!!!!!!!
- access_key = '**************=='######这里填自己的!!!!!!!!
-
- print(token(user_id,access_key))
最后,我感觉好像就这些问题,欢迎补充!!!之后要更的是ESP32的内容咯
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。