概述

智能家居目前有小米和阿里两大生态,小米从2015年就起步,依托性价比,还有手机出货量取胜。miui系统可以连通全屋米家设备,实现类似:

  1. 对小米的小爱音箱喊“晚安”,关闭所有灯。
  2. 天气预报下雨,主动提醒带伞。
  3. 人来开灯开空调,人走关空调熄灯

等等类似情景。IF This Then That 这种简单而实用的逻辑成就了国外网站ifttt.com,正如git成就了github.com。

引入物联网技术,走入智能家居生活

之前折腾过树莓派,稍微涉及一点物联网平台相关词汇。这次因为一个项目,彻底了解了国外国内物联网企业格局,历史发展,还有各种专业技术名词。

IOTMCUEPS模块,HomeAssistant,HomeBridge,HomeKit,TTSIFTTTMQTT,ZigBee等。

其中以第一个链接最有启发性:“走,带你进入新世界。”

《物联网相关开源项目整理》 https://zhuanlan.zhihu.com/p/65734851

IOT 各大平台研究》https://www.jianshu.com/p/11bca5042af3

《入门智能家居,从 IFTTT 到 HomeKit 自动化(二)》https://www.cnblogs.com/mnstar/p/8178365.html

IFTTT使用测试教程》 https://blog.csdn.net/m0_38129431/article/details/88566603

值得一提小米开放平台和IOT开放平台不同,开发IOT物联网相关的也需要用到开放平台。

https://dev.mi.com https://iot.mi.com

基于小米生态的开发

小米的文档很多,大很难全。这次成为小米开发者,走了些弯路,事后总结起来,吃一鉴,长一智。

开发流程:

  1. 手上有一个已安装小米wifi+蓝牙模块的智能灯具开发板。(小米生态的硬件)
  2. 注册并认证成为小米开发者,帐号需被授权成为该灯具企业项目开发测试人员。(新企业需注册)
  3. 开发过程需要开发版的米家:米家智能家庭(mijia)开发工具库https://github.com/zzyss86/mi-aqara-sdk, 安装app后才能把开发版加入米家app。

效果需求:

将小米生态硬件赋能,使其能听懂除米家app/小爱音箱之外的其他指令来源。

假设需要接入有甲app/甲音箱控制。

场景: 1. 用户家中有甲app/甲音箱,然而某次购物买回米家硬件。 1. 由于该硬件属于小米生态,一般用户必须注册或登录米家app,先绑定设备才能联网。(极客除外) 1. 设备上线了,但不能被甲app控制。把小米云和甲云相互对接,让其能被甲app控制。

问题产生过程如上,因此用户一般入坑小米后,都会惯性再买小米家的,而不买其他。因为买其他家的硬件,还需下载他们家的app才能让设备上线。

留给开发要解决的问题就是接收其他平台的指令,经转化适配成小米家的指令。

首先:需要绑定其他平台的设备,而设备不能单独取,因为被绑定在用户下,先得到用户oauth2授权,再进行取出和绑定。 用户添加其他平台的硬件,实际上是通过oauth2协议登录其他平台,进而授权后,才能获取其他平台帐号下的设备列表,然后进行绑定。

便看文档边测试OAUTH2的问题,掉坑半天时间:

总结下来,最核心问题是个人处理oauth2经验不足:

oauth的回调地址没有事先进行设置,也就是没在使用前获得平台的注册允许,是怎样也不会成功的。

小米的问题:

  1. 提示不够友好,按照文档构造url在浏览器GET测试。 小米的出错信息永远是“invalid redirect uri”。对比gitee上的oauth2微信部分,接口微信做得错误提示很友好。会告诉你那个http参数错了。反观小米提示比较挫,还很丑。

https://account.xiaomi.com/oauth2/authorize?client_id=2882303761518024195&response_type=code&redirect_uri=https%3A%2F%2Fwww.1r1g.com%2Fhuayi%2Fauth%2Fxiaomi&userId=176301467&nonce=kLzSe8%2BUtQABjMYG&confirmed=false&from_login=false&sign=lwu14Y7qzkz%2BdNCxRpHt%2F25ZlSQ%3D

https://open.weixin.qq.com/connect/qrconnect?appid=wx63d402790645b7e6&redirect_uri=https%3A%2F%2Fgitee.com%2Fauth%2Fwechat%2Fcallback&response_type=code&scope=snsapi_login&state=cb84768221cd3509a1bcc29af7c6be2a8bb099fafbf043a2#wechat_redirect

  1. 文档中没有注明需要先注册回调地址。更没有说明要默认不开启帐号oauth2服务,而且“帐号接入服务“非常难找到。(我通过网上找了很多轮,测试很多次后,甚至都怀疑是refer导致失败,最后对比gitee发散了思路才摸索出来)


原文出自发表的//blog.pythonwood.com/2019/06/小米物联网开发者:接入测试oauth2/