没有家庭中枢的homekit没办法定时任务,其实有几种方法是可以达到这一目的。

原始方法

第一个方法就是crontab定时执行命令,比如之前怕忘记关空调,crontab设定11点lirc发送关机指令。因为是执行命令,要控制米家的设备的话,需要安装miio库调用,其他厂商同理。这个方法不能设定延时,而且没办法在homekit中使用,或是siri触发。

第二个方法是使用homebridge-command之类的,通过一个开关来运行命令/脚本,在脚本中可以自己设定延迟,这个操作虽然能够延时并在homekit中操作了,但是没办法在延时结束后自动关闭,也就是说它的状态是不正常的。

稍微好用的方法

最近发现一个插件叫homebridge-cmdtrigger,这个插件是生成一个开关,打开后可以在运行命令之后延时一段时间关闭自动开关,这个开关时延时了,命令没有延时。。。好在代码简单,提交了一个一个PR,加入一个execAfterDelay的选项,可以在延时之后执行命令。基本就达成我的需求了。

有一个很方便的用法就是可以添加到场景里面,比如“打开空调+延时10分钟关闭风扇”,形成一个简单的联动。

问题

有一个最大的问题就是这些方法最终都是执行命令。对于米家这种实体设备来说,homekit是可以获得它的状态的,比如延时关闭风扇以后,homekit获取风扇状态,把它更新为已关闭;而对于一些命令,比如lirc控制空调,在执行完之后,空调这个组件的状态是不会更新的,导致比较混乱。