本帖最后由 uwen 于 2020-11-21 19:22 编辑

本来觉得这么久一直在搞用Station P1去控制智能家居的实验,发表帖子的时候,肯定有写不完的东西,但是开始写的时候,发现又好像没什么写的,代码也不能公布出来,因为涉及到公司的内部接口信息,既然这样,那我就分享一下最终的效果和我想要的最终形态吧。 image.png
目录下的smart_home.py是管理app目录下的其他python脚本的运行和添加删除等,common目录为一些公用模块,app目录下,每一个python文件都是一个独立程序。
curtain.py是窗帘电机的管理程序,主要是实现了几种控制模式,早上以极慢的速度打开,其他时间以正常速度打开。
kitchen.py是厨房管理程序,实现的是厨房的有人无人判断,有人自动开灯,无人自动关灯等功能,但是为什么没有使用系统原生自带的自动化功能实现,这点放在后面说。
security.py是安全管理程序,负责监控涉及到安全的设备上报信息,并持续上报和执行一些设备控制,比如水浸传感器检测到浸水、门窗传感器在离家状态下检测到门窗被打开、温湿度传感器检测到温度过高等等。
leave_mode.py、sleep_mode.py是离家模式和睡眠模式的管理程序,在对应状态下,会管理家中设备的状态。

目前的使用感觉还可以,实现了很多目前很多智能家居实现不了的功能,下面就解释一下为什么要这么做和我想要的是什么东西。
image.jpg
这个是绿米的智能家居app AqaraHome,和大多数智能家居app一样,有快捷卡片,有设备列表,有自动化或者叫智能联动,有场景等功能。这里面我们要实现家庭自动化的,主要是靠自动化和场景这两个功能,我也配置了不少的自动化联动,如下:
image.jpg
但是这里有个问题,因为要照顾到尽可能大的用户群体,行业上这种app上的交互都会做的比较简单易懂,这样就会舍弃很多的复杂条件和配置。当然,我不是说这样有问题,毕竟用户能用起来才是好的产品,交互太复杂,就会有很多人不会用,但是这种实现的智能联动确实是比较基础,没有很好的体验,下面我拿我上面做的东西和这个进行一些对比说明。
1.窗帘控制
窗帘控制,本身是设备的简单控制,开、合、停等动作,但是在各种具体情境下,我想要的效果是不一样的。比如清晨,在我的脑中还没有响的时候,是否可以通过光自然唤醒,但是直接快速打开窗帘又会比较突兀,那我就希望是否可以缓慢的一点点打开窗帘呢?如果我有多个窗帘的情况下,在开合的过程中,是否可以运动到同一水平线后再一起上下运动呢?
2.区域管理,同我的厨房管理
一个区域的有人无人,不是靠简单的一两个传感器检测就可以的,现有的人体动作感应器,你动作过小,或者距离太远,它就检测不到了。有人无人的检测应该是结合所有的区域设备,外部环境,整体进行判断。比如,厨房有两个人体动作感应器,光照传感器,一个智能开关,一个智能插座,客厅有两个人体动作感应器,光照传感器,两个智能开关。然后晚上2点厨房的人体动作感应器感应到有动作,就触发开灯,但是客厅的人体动作感应器又什么动作都没有,你觉得是真的有人可能性大一些还是晚上风吹动了什么导致人体动作感应器检测到动作的可能性大一些。所以我重新写的厨房有人开灯、无人关灯就是结合各种传感器和控制器状态动作进行综合判断,然后得出结果再动作,减少现有设备不够精确导致的误差。
3.安全管理程序
安全管理这个感觉好像可以直接使用原生的联动功能实现,配置成水浸传感器检测到浸水,温湿度传感器检测到温度过高就上报什么消息并且关闭家里的一些电器之类的,但是我为什么要重写呢,是因为安全系统的信息是比较重要的,信息不能丢,不是说检测到什么不正常的情况就上报个消息就不管了,整个系统应该要保证信息确定传达到用户那里了,并且要动态的管理一些设备,将自己能做的事情做了并且将结果也送达给用户。
4.离家模式,睡眠模式
这个看起来也是一个平常的联动动作,进入离家模式,就关闭所有灯啊,插座啊等等的,但是动作是否执行成功,执行不成功后怎么办,以及后续某些状态被改变的时候该怎么处理,这些是简单的联动所处理不了的。我所实现的模式管理,在离家时,会关闭所有灯,打开安防监控模式,并且监测所有灯的状态,没有关掉的,每隔30秒会再次尝试关闭,在离家后可能还有一些其他自动化联动在执行,导致后续家中状态被改变,离家模式此时会上报家中状态,或者按照之前的配置,自动管理设备状态。

聊到这里,很多人会想,这不过是你想要的效果而已,你不可能要求人家公司按照你想要的效果给你开发啊!确实这只是我想要的一些方面,但是既然我想要的是这种,那肯定还有其他人想要的是其他不一样的效果,但是目前的智能家居实现的效果都是千篇一律,功能基本上都是类似的,所以我想要的就是类似于智能手机一样的效果,每个功能都是动态安装的app,由个人开发者或者公司进行开发,用户需要就下载就可以了,就像手机上的照相机一样,有各种各样的照相机可以供我挑选使用,我这次想在Station P1上这么做,就是想在这种高性能平台上,没有性能和硬件瓶颈的平台上去实现这种效果,使用Python脚本去开发独立模块化的功能。