当前位置:   article > 正文

OneNet使用常见问题总结(三)_onenet随机密码时间戳

onenet随机密码时间戳

趁记忆还没遗忘的时候赶紧记一下使用OneNet的时候遇到过的问题吧!(欢迎补充~)

一、新版or老版OneNet?

可以看到下图这个界面有一个OneNET物联网开放平台,还有一个OneNET Studio。但是在开发者中心的界面却只有一个OneNET物联网开放平台。这是为什么呢?因为只有很早注册OneNet的用户才会有Studio界面(具体多早我也不知道哦),而新一批注册的用户都只有物联网开放平台。据OneNet客服说,有Studio的是老版OneNet,应该快要下线了,所以新版的OneNet用户界面就已经没有Studio了。那问题来了?区分这个有什么用呢?

很有用啊!因为我感觉哈,网上大部分关于OneNet的资料都还是老版的, 里面的一些通信主题啊、token啊啥的计算都有一点区别,然后OneNet的连接错一个字母都连不上啊!!!前期吃了好多亏,后期在做小程序API连接OneNet的时候也吃了很多亏呜呜呜呜。所以,大家要根据自己的OneNet版本选择相应的文章解决自己的问题。

二、直连设备、网关设备、子设备?

在创建产品的时候,会选择一个节点类型,里面就有直连设备、网关设备和子设备,那这三个设备有什么区别呢?我觉得哈,如果是个人做做毕设、玩儿一玩儿,区别应该不大,但是企业级的可能有区别,那我也不知道了。我把我玩儿OneNet感觉到的区别和大家说一下吧!

直连设备和网关设备的区别我感觉不是很大,尤其是网关设备单独使用的时候(也就是网关设备不连接子设备的时候),但是如果网关设备使用的时候需要挂载一个子设备,比如哈,我们需要用一个网关来控制全屋的智能设备的时候,每个设备就属于一个子设备。这时候,直连设备就不可以,因为它没有挂载子设备的功能。

三、 开发方案:标准方案or自定义方案?

同样也是创建产品的时候需要选择开发方案,那关于这俩的定义,官方是这么说的:

标准方案:平台预置的免开发方案,配套标准物模型和APP控制模板,用户无需自行定义;
自定义方案:用户自行定义产品功能及APP控制模板,适用于标准方方案无法满足的情况;

我的理解就是比如你选择了官方的网关,再选择了标准方案,那么它的物模型可能就会有好几个,但是如果你实际使用的时候你就只要一个或者两个参数,并且,你要的参数标准方案可能还没有。那咋办,就只能一个一个删,再添加自己的(当然也可以不删,但是属性面板会很乱,而且会打乱顺序)。但是选择自定义方案的话,就没有删掉这一步了,想要啥创建啥。

四、token OR authorization? 

说起这俩参数,那又是一把鼻涕一把泪啊!先简单解释一下这俩参数及它们用在何处:

token:介入安全认证,官方说明在这个文档,这个不用说,只要玩儿OneNet的就一定会用这个,因为一定要把设备接入OneNet平台嘛!就相当于密码。

authorization:安全鉴权,官方说明在这个文档,大家可以自行查看,我用下来呢,感觉就是如果你要用到API连接,那么就会涉及到authorization

然后,再把我用下来的,如何生成这两个参数也记录一下!

token

token相当于是后面连接OneNet平台要用的密码,token算法具体见官方文章:Token算法

然后给个示例:

Unix生成工具:时间戳(Unix timestamp)转换工具 - 在线工具 

(碎碎念,可不看,我最开始用OneNet的时候不知道老版新版,带我的人因为20年就注册了OneNet,所以他有Studio,然后因为新版老版token计算方式不一样(就相当于我们一直是用的Studio的信息,物联网的token计算方法来算的token),我们怎么也没办法生成正确的token,脑袋疼,后来在自己的OneNet账号下,相当于是物联网的信息,物联网的token计算方法,才生成了正确的token,连上了设备!)

authorization

在使用小程序接入OneNet平台的时候,选择了调用API的方法来操作,然后,在OneNet的官方API调试工具下,可以生成authorization信息,如下图:

但是,这个authorization是有过期时间的,而且不长,我没具体算过,大概十分钟左右!所以我们在实际用的时候不能用这里生成的authorization,而要根据官方手册来生成。

官方文档: 安全鉴权

然后给个示例:

首先是要用到的userid和user_accesskey在这个界面:用户中心/访问权限

然后是它的计算方式不是通过token.exe,而是在这个官方界面可以计算:

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

最后,我的计算方式是用python(在vscode里跑的),代码如下: (带长感叹号的是要改的部分)

  1. import base64
  2. import hmac
  3. import time
  4. from urllib.parse import quote
  5. def token(user_id,access_key):
  6. version = '2020-05-29'
  7. res = 'userid/%s' % user_id
  8. # 用户自定义token过期时间
  9. et = str(int(time.time()) + 3600000)########这里过期时间要设置长一点!!!!!
  10. # 签名方法,支持md5、sha1、sha256
  11. method = 'sha1'
  12. # 对access_key进行decode
  13. key = base64.b64decode(access_key)
  14. # 计算sign
  15. org = et + '\n' + method + '\n' + res + '\n' + version
  16. sign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)
  17. sign = base64.b64encode(sign_b.digest()).decode()
  18. # value 部分进行url编码,method/res/version值较为简单无需编码
  19. sign = quote(sign, safe='')
  20. res = quote(res, safe='')
  21. # token参数拼接
  22. token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)
  23. return token
  24. if __name__ == '__main__':
  25. user_id = '363551'######这里填自己的!!!!!!!!
  26. access_key = '**************=='######这里填自己的!!!!!!!!
  27. print(token(user_id,access_key))

最后,我感觉好像就这些问题,欢迎补充!!!之后要更的是ESP32的内容咯

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/401727
推荐阅读
相关标签
  

闽ICP备14008679号