入坑智能家居是因为逛苹果在线商店时看到了飞利浦 Hue 灯泡套装,感觉还挺新奇的就买了(然后被吐槽花一千多买了三个灯泡...)。实际使用后,感觉灯泡本身还是不错的,发光、颜色都非常的顺眼,而且能感觉到 Hue 团队确实是在用心地做 app(可惜能力不足做得一般般),也有开放 API 使得我可以写程序来控制灯泡。

玩了几天后,我意识到只有三个灯泡的话基本做不了什么事情,需要扩展使用场景的话就要增加更多的控制外设,而飞利浦 Hue 自家的控制器、传感器长得又丑又笨重而且价格死贵。又看了国外其他几家支持 HomeKit 的智能家居厂商的产品,也都是价格死贵,而且必须搭配自家的 Bridge 使用(又是一笔支出)。转而回头看小米的产品,米家这块的产品已经初具规模,基础的控制器、传感器都有;相比国外普遍三位数价格的配件,米家50元上下的产品显得有吸引力得多。可是米家不支持 HomeKit 怎么办?价格虽然便宜,但是无法与飞利浦Hue联动的话,也是缺憾,总不能再买三个米家的灯泡吧,要知道当时支持米家网关的灯泡只有那么一两种,远不如现在这般连飞利浦和宜家也都出了支持米家的硬件。于是搜索了一下,果然已经有人搞过联动的方案了,通过 HomeBridge 的 homebridge-mi-aqara 插件可以把米家网关虚拟成一个支持 HomeKit 的网关使用,问题迎刃而解,感谢开发者。

既然米家网关可以和 HomeKit 联动,那就只剩下买买买了。入了几个米家的开关、传感器,先在米家App添加配件,然后是 iOS 的家庭App配置了自动化程序,居然就这么运行起来了。深夜回家开门的一瞬间,灯了起来,这是现代科技带给加班狗的一丝温暖。 为了能让这一套东西稳定地运行,正好可以用上闲置的树莓派来专门运行 HomeBridge,避免因为重启等原因导致的服务中断,更是为了保留住加班狗仅剩的一片慰籍。

作为懒癌患者,每天进出卫生间都要开灯、关灯实在是麻烦了点,希望能做到自动开关。为了改造这个照明控制,我用上了 Aqara 的墙壁和无线开关。Aqara 就是生产小米智能配件的绿米联创这家公司自己的品牌,两者放一块儿一比,米家的这些开关就是小孩儿玩具。

卫生间的镜灯、顶灯结构都不太适合让我直接安装 Hue 灯泡,如果把几个顶灯都换成智能灯泡倒是可行,飞利浦也确实出了支持米家网关的此类射灯,但不管是价格还是拆装成本都有点高。换个角度思考,换不了灯泡就换开关嘛,正好 Aqara 的墙壁开关支持米家网关,可以直接替换原来的开关,买来一试咯。原有4个开关(三键+一键)分别控制顶灯(×4)、镜灯、淋浴间顶灯和排风扇,计划把其中一个替换成 Aqara 开关用于控制顶灯;为了协调 Aqara 开关的白色(目前只有白色,希望绿米能多出些颜色)和原有开关的香槟色,另购了一个白色的公牛开关替换;因为排风扇其实是有遥控器控制的,再弄个电源开关反而搞得状态混乱,早就看它不爽了,这次顺便把它干掉。

改造后的 Aqara 开关可以直接通过米家App控制,搭配人体感应器,配置一下「有人移动时打开开关」,就可以做到自动开灯的效果,解放了懒癌的双手。再增加一个「两分钟没人移动就关闭开关」的配置,就做到了人走灯关。如果长时间呆在卫生间,人又没有移动怎么办?我额外加了一个『打开/关闭「两分钟没人移动就关闭开关」』的开关在马桶旁边,你懂的~ 最后,因为对卫生间墙壁开关的位置不满意,我在按起来更舒服更方便的位置又增加了一个 Aqara 无线开关来控制 Aqara 墙壁开关,大大地满足了我的强迫症心理。

Feb 11, 2019 更新

使用了 HomeBridge 之后,自动化的工作就只能在 iOS 家庭 app 中进行配置了,这就要保证家里必须有个持续运行的家庭中枢。我没有也不打算购买新版AppleTV 或者 HomePod,只能使用 iPad Pro 作为家庭中枢,这就要承担如果 iPad 没电关机了之后整个自动化就挂掉的风险。而且,家庭 app 本身的自动化功能弱得不能更弱,如果需要稍微高级点的功能——比如记录一个按钮的Boolen状态——就得购买价格高达 $14.99 的 App 来实现,不愧是苹果用户人傻钱多。

如此我就放弃了用 HomeKit 的方案,转而使用强大的 Home Assistant(hass)。Hass 安装起来非常方便,跑在 docker 容器里完全不用关心具体的依赖,我让它也跑在树莓派上。Hass 已经集成了小米 IoT 设备的支持,只要在配置文件中增加 xiaomi_aqara 配置项即可启用,hass 找到 米家网关后,米家 IoT 设备就会出现在 hass 的实体列表(entries)中。其他 hass 支持的设备如 Philips Hue、Plex、Chromecast 等也都可以进行绑定。默认的设备名都是从 id 生成的,为了方便管理,我给部分 IoT 设备设置了 friendly_name 自定义项,这样在列表中比较容易一目了然地看到要找的设备。

Hass 虽然有图形化的 web ui,但是大部分配置还是要写配置文件来实现,好在hass文档都比较清楚,一般都能搜到想要的信息。Configutor 插件提供了 web 编辑器来修改配置文件,或者安装 samba 插件提供远程文件访问服务来方便本地编辑。以及,如果你有一些写配置文件设置软件的经验的话一定会知道,当你配置不生效或者未按预期运行时,查看日志是最快的定位问题的方法。所以,当你配得一头雾水的时候,不要忘了看日志;web ui 上可能只显示最新的n条日志,不妨 ssh 到机器上用 docker logs 来查看更多的日志,一定能找到问题所在。

同样的,即使在 web ui 中可以用图形化界面进行配置自动化,但具体数据还是要以 JSON 形式输入,不如直接改 yaml配置文件。自动化任务分成触发器(trigger)、条件(condition)和动作(action)。我在配置无线开关、传感器和 Hue 灯泡或 Aqara 开关的关联时,需要知道 Aqara 无线开关、各种传感器的触发事件、状态取值和执行开关动作的服务调用light.on|off|toggle)。Aqara 墙壁开关(Aqara Wall Switch)的文档没有什么有价值的内容,我试下来其实只要使用 switch.on|off|toggle 服务调用就可以控制。Hass web ui 左侧栏下方有实体、服务、事件调试工具的入口,可以方便调试。配置-通用 里可以点击重载配置,不用反复重启服务。

这样自动化就脱离了 Homekit 独自运行,通过 hass 使得更多的设备能互联互通,毕竟支持 HomeKit 的设备少的可怜。最后我通过 Hass 的 Homekit 配置 暴露了几个必要的设备出来,而不用像 HomeBridge 那样一股脑儿地全都露出来搞得 Home App 一团糟。Tip:启用后 HomeKit 的绑定 pin 会在 hass 通知中显示,我傻傻地在日志里找也找不到,搜了才知道(我不是一个人~)。