前言
近些年,随着物联网产业的快速发展,市面上出现的很多IoT智能硬件,涵盖了家用电器、可穿戴设备等。而这里所谓的“智能硬件”却往往并没有那么智能,大部分时候我们都还得通过专属的APP人为地进行控制。另外若这些硬件都属于同一公司还好,硬件间也许还能够进行互联互通,比如检测温度、湿度等室内环境智能设备检测到温度偏低、湿度偏高,同时摄像头检测到室内有人员活动,这时候就开启空调的制热和除湿功能。 但从目前来看厂商所提供的互联互通功能还有一定局限性,自定义程度不高。更何况用户家里面往往存在着不同硬件厂商的智能设备,这就更难将它们连接起来。
综上作者认为目前智能硬件还是不够’智能’,存在着以上两个局限性。针对这两个局限性,我们可以通过调用智能设备的开放接口,自己DIY一些想要实现的功能。
但这存在着一个前提,能否能够找到这些硬件的开放接口。假如所有硬件厂商都能够开放这些接口,那么对于用户而言,智能硬件的可玩性就能大大提升。
今天我要分享的是小米空气净化器的自动化控制,那么由谁来控制呢?既然自动化了嘛,自然是机器控制机器了。这里的控制端就是之前搭建为linux服务器的闲置手机(详见闲置安卓手机再利用(一)之搭建Linux服务器)。
系统已使用一年了,期间未有过需要人为控制的情况,运行较为稳定。其实系统本身没什么技术含量,自己记录的同时也分享出来给喜欢折腾的朋友提供一个思路。
准备
需要实现的功能:
通过室内AQI指数检测、人员活动检测来控制空气净化器的开启、关闭、模式控制等,以实现空气净化器的自动化运行。
总体流程图:
需用到的工具和python库:
IP摄像头APP——由于是利用choot的原理在安卓上搭建了一个linux系统,在Linux系统里面无法直接调用安卓的摄像头硬件,利用这个APP就可以通过IP/TCP协议获取到摄像头画面。
python-miio——小米智能设备开放接口的python3封装库,支持各种小米智能设备。
yagmail——电子邮箱的python库,当净化器状态发生变化时以发送邮件通知。
OpenCV——视频图像处理库,用于检测人员活动。
开始
首先需要取得小米空气净化器的token授权码,这样才能在官方APP外取得净化器的控制权。具体方法参照python-miio的github地址。
python-miio封装得很好,用法也很简单。比如miio.airpurifier.aqi,miio.airpurifier.is_on分别获取空气净化器AQI指数和开启状态。具体可阅读官方文档。
部分检测逻辑代码:
运动物体检测,原理很简单,比较视频前后两帧间的差别,有运动物体时前后两帧画面差别很大。这里用到python的opencv库,实现动态检测的同时框选出运动物体。代码如下:
其他部分代码:
运行效果
运行日志:
开启空气净化器后会收到的邮件通知,包含开启时的AQI信息、时间、以及检测到的运动物体图像。这里是检测到了电视在播放,根据这个可以判断室内有人员活动。
改进思路:
1、与其他更多智能硬件协同连接起来。(目前没有其他设备。。。)
2、实现人脸检测和抓拍,更准确地判断人员活动,但这需要更高的像素和更大的硬件运算能力。
3、暂无,待后续补充。
Hello. And Bye.