本文发自 http://www.binss.me/blog/home-assistant-learn-ir-command-by-aqara-ac-adapter/,转载请注明出处。

最近搬家,花了一番功夫重新部署了我的 "智能家居套件" ,由于这次是整租配有电视,因此添置了一台 Apple TV 。

那么需要使用时标准操作为:打开电视 - 打开 Apple TV - enjoy ,整个过程需要操作两个遥控器。Apple TV 可以通过 iPhone 来操作,那么电视的遥控器也是否能省去呢?

理论上,支持 HDMI-CEC 的电视是能够跟随 Apple TV 的开关机而开关机的,然而出租房配的破电视肯定是不支持的。为此,我们考虑从另外一个角度入手:模拟电视遥控发出的红外指令。

捕获指令

我的 "智能家居套件" 中一个重要组件就是 Aqara 空调伴侣。其通过模拟空调遥控的红外指令来实现对空调的控制,还提供学习、重放红外指令的功能,因此我们可以利用它来模拟电视遥控、操纵电视。

我的 Aqara 空调伴侣 已接入到 home-assistant 中,通过 xiaomi_airconditioningcompanion 插件进行控制。借助于它们,我们可以很容易地对红外指令进行捕获。

首先打开 home-assistant 主页面, Developer Tools - SERVICES ,在 Service 列表里选中 climate.xiaomi_miio_learn_command 。如果找不到,表示 xiaomi_airconditioningcompanion 插件没有正确加载,请检查 HA 配置 configuration.yaml 。

点击 CALL SERVICE 按钮,随后按下电视遥控器上要模拟的按键(我这里是开机),很快在 Notifications 栏会有小黄点,点开即可找到 FE 开头的红外码。

由于捕获可能存在误差,建议重复捕获,选择出现频率最高的红外码。

验证指令

为了验证捕获的指令是否有效,只需在 Developer Tools - SERVICES ,在 Service 列表里选中 climate.xiaomi_miio_send_command ,在 Service data 中填入 json 格式的数据即可,如:

{"command": "FE000000000000000000000000070024224B003700AA00E301C60382100413884300000000000000000101010101010001010001010000000000010000010101010542065E"}

若指令正确,则将观察到如同按下遥控器上该按键的效果。

重放指令

为了方便使用,我们将该指令做成 HA 的一个按钮,并接入到 homekit 中通过语音控制。

首先确保在 home-assistant 的配置文件 configuration.yaml 中,包含有语句:script: !include scripts.yaml 。表示 HA 会去读写 scripts.yaml 的脚本。

随后打开 home-assistant 主页面,Configuration - Script ,点击右下角的加号,按照描述输入内容,如:

点击保存后,发现其已经被记录到 scripts.yaml 中。

binss@binss-NAS:/volume1/docker/homeassistant$ cat scripts.yaml
'1576897204336':
  alias: 电视机
  sequence:
  - data:
      command: FE000000000000000000000000070024224B003700A900E501C60381100413884300000000000000000101010101010001010001010000000000010000010101010542065E
    service: climate.xiaomi_miio_send_command

随后我们可以在 Overview 界面添加一个 Switch 组件:

点击该组件即可实现之前录入的开关电视机效果。

根据 HA 文档,任何 script 会被作为一个 Switch 被添加到 homekit 中,为确保生效,建议重启 HA ,随后我们就可以在 home app 中看到这个按钮:

点击即可实现电视开 / 关机,也可以通过 "Hey,Siri 打开 电视机" 来开关电视。注意,之后喊 "关闭 电视机" 是没有效果的,因为这个 Switch 为无状态按钮,触发后会复位,因此始终处于关闭状态,因此无论想打开还是关闭电视,都要喊 "打开电视机"。

至此,我们实现了一个遥控器 (iPhone),控制电视和 Apple TV 的目的。若接入 Siri ,只需呼喊 "Hey,Siri,打开电视和电视机" 即可,岂不乐乎。

参考

https://www.home-assistant.io/docs/scripts/editor/

https://www.home-assistant.io/integrations/homekit/