最近终于入手了 HomePod mini,HomeKit 的家居中枢有了着落。之前用过 iPad、Apple TV 做中枢,时间虽然都不长,大体亮点槽点还是比较了解。有几个问题让我始终对 HomeKit 始终不满意:其一,HomeKit 能接入光线传感器,但是不能作为事件触发器。第二,类似米家无线开关这样的设备居然不能设置按一下切换开 / 关?只能开绑定一个动作,关绑定另一个动作这样。第三,苹果的 HomeKit 服务器连接不敢恭维。有时候外网打开甚至要更新十多秒甚至几十秒的状态。第四,没有日志,在排查时不太方便。

看起来 HomeKit 不堪大用,但是通过这几天的摸索以及偶然的发现,我找到了前两个问题的解决办法,扩展 HomeKit 的事件(events)、条件(conditions)、动作(actions),使其达到接近 Home Assistant 的自动化自由程度。

因为很多平常使用硬件自家 App 做自动化的用户没有接触过这三个概念,我简略的做下介绍,如果使用过 Home Assistant 做自动化的可以跳到下一段。在 Home Assistant 中把自动化分为三个部分即:事件(events)、条件(conditions)、动作(actions)。在许多三方 App 中常把事件和条件混在一起,厘清区别有助于理解和创建更直观的自动化。自动化事件负责触发自动化,条件负责判断触发这个事件时环境的条件是否满足,动作负责具体控制设备。举个例子:如果我需要开门时环境亮度低于 30 Lux 时开灯。那么开门门窗传感器检测到开门的这个动作则进入条件判断,然后光照传感器检查目前的环境亮度符合较低的条件就执行开灯的动作。一般说来事件是一个变化状态(关变为开),条件是一个持续状态(小于 30 Lux),动作是对设备具体的控制行为(开灯)。 

扩展 HomeKit 的两个工具:Hesperus 和快捷指令。Hesperus 扩展事件,快捷指令扩展条件和动作。

从开始我吐槽的两个问题着手了解这两个工具能帮我们如何改造 HomeKit,结束后我以我的实际需求创建几例自动化。先解决光线传感器不能作为事件的问题:Hesperus 是个免费 App,App Store 可以直接下载。打开 Hesperus 会请求家庭访问权限,需要允许。然后有一个提示删除“Permission Check Home”。可删可不删,不删会多一个 Hesperus 创建用于检查的家庭。点击第四个底栏图标再点右上角 +。名字随便取,If 这里添加找到光线传感器,点击 Ambient Light Level 然后选择 Any Changes(这里不建议直接做判断,Hesperus 也是把事件和条件混在一起的思路。但就我测试发现会导致不可预知的 Bug。),再点击 Add,然后Save。再回到家庭 App 可以发现 Hesperus 已经在自动化添加了一个光线传感器更时的自动化。继续在家庭完成条件和动作就创建了一个光线传感器触发的自动化。

Hesperus

快捷指令在 iOS 14 中把自动化分为个人和家庭,在家庭的控制中也多了快捷指令的入口,在其中多了一个非常重要的功能如果(if),而且这个如果的输入条件可以是家庭配件(开始我认为跟个人自动化中的如果一样,都没点开这个如果去看。)!解决米家无线开关这样的设备不能按一下切换开 / 关的问题,以无线开关开 / 关(toggle)台灯为例,理解可能需要有一定的编程基础,如果没接触过看完应该也能按自己的思路创建快捷指令:在家庭 App 中选择米家无线开关 - 操作 - 按一下 - 添加 - 转换为快捷指令。添加如果:输入 改为 选择家庭配件 - 台灯,名称 改为 已打开。添加控制家:拖拽到紧跟如果,场景和配件 - 台灯 - 关闭。添加控制家:拖拽到紧跟否则,场景和配件 - 台灯 - 打开。现在再按米家无线开关,就能打开的时候关闭,关闭的时候打开了。

快捷指令

示例一:白天(根据不同时间的日出到日落定义)如果卧室亮度低于 30 Lux 时,卧室人体传感器检测到有人移动,就把台灯开成冷光灯。家庭 - 自动化 - + -添加自动化 - 感应器检测到变化 - 卧室人体传感器 - 检测到动作 -时间 - 白天 - 转换为快捷指令,添加如果:输入 改为 选择家庭配件 - 光线传感器 - 名称 改为 当前照明级别 - 条件 改为 小于 - 数字 改为 30 - 弧分 改为 勒克斯,添加控制家:拖拽到紧跟如果,场景和配件 - 台灯 - 打开 - 色温设置。

示例一

示例二:如果我开门进屋,屋内亮度低于 30 Lux,开灯。家庭 - 自动化 - + -添加自动化 - 感应器检测到变化 - 门窗传感器 - 打开 - 转换为快捷指令,添加如果:输入 改为 选择家庭配件 - 光线传感器 - 名称 改为 当前照明级别 - 条件 改为 小于 - 数字 改为 30 - 弧分 改为 勒克斯,添加控制家:拖拽到紧跟如果,场景和配件 - 台灯 - 打开。

示例二

示例三:如果屋内亮度高于 50 Lux,关闭台灯,这里偏个题,个人建议将光线传感器放在人造光源的死角,但是自然光源可以照射到的地方。需要编辑前面 Hesperus 创建的光线传感器变化的事件 - 选择场景和配件 - 转换为快捷指令,添加如果:输入 改为 选择家庭配件 - 光线传感器 - 名称 改为 当前照明级别 - 条件 改为 大于 - 数字 改为 50 - 弧分 改为 勒克斯,添加控制家:拖拽到紧跟如果,场景和配件 - 台灯 - 关闭。

尾巴:两个工具帮助我们丰富了苹果自动化的各个环节,搭配使用体验很好。此文只对扩展 HomeKit 作出引导,更多使用的自动化需要自己有好的想法。目前我已经把所有 App 的自动化转移到 HomeKit,因为我有 Aqara 和米家两个平台,虽然他们大部分配件可以互相添加,但是诸如 Aqara P3 等不能互通,造成了实际上的割裂。不过我所有设备都支持 HomeKit 为我整合自动化提供了便利。希望未来各个平台都有统一的标准,设备能随便接入平台,不再被厂商绑架,用户选择自己喜欢的平台。希望未来以上这些需求不用这么复杂就能实现,人人都可编辑家庭自动化。希望 HomeKit 的外网状态秒更新设备秒控制。

谢谢你看到这里,GLHF!