前言
事先说明,本文依然是小白系列,大佬请绕过。
关于红外遥控的问题,论坛里很多帖子,我此前比较关注魅族遥控器的帖子,目前最火的帖子如下:
https://bbs.hassbian.com/thread-8083-1-1.html
https://bbs.hassbian.com/thread-7976-1-1.html
其实无论使用 ESP8266 / 32,还是魅族遥控器来实现空调遥控或电视遥控,都有一个非常大的坑,那就是没有状态反馈。因为这也是把传统家电智能化的过程中的一个痛点。当然,你可以使用类似“空调伴侣”之类的设备来接入HA,也可以用可以检测电流电量的智能插座来接入HA,配合红外来实现状态反馈的条件判断。但这显然要增加硬件成本和接入成本。
今天我提供的这个也许仅仅是个思路,希望能帮助到各位如我一样的小白,当然大佬们如果有更好的方案,也欢迎参加讨论,为论坛添砖加瓦。
介绍
其实逻辑非常简单,主角就是:
input_boolean
通过Boolean(布尔值)的非假即真的特性来创建一个虚拟开关,并将该虚拟开关以条件的形式加入到空调或电视控制开关的状态状态参数中,当执行“开”的状态时,虚拟开关打开,并持续保持状态,当执行“关”的操作时,虚拟开关也同时关闭,等同于将你的每一次 on / off 的操作都用虚拟开关来进行记录,它相当于一个记录器,这样你的每一次操作都有了记录,没有操作变化,虚拟开关则保持原状不变,从 0 和 1 的逻辑上保证了你不会重复执行无效的操作,也就顺便另类的实现了状态反馈的需求,当然这不算一个100%的真状态,只是一个操作逻辑上的状态,但目前经过我的个人使用感受,在不增加任何接入成本的情况下,我认为足够。
根据官方文档的介绍:https://www.home-assistant.io/integrations/input_boolean/
input_boolean
的参数十分简单,示例如下:
input_boolean:
notify_home:
name: Notify when someone arrives home
其中 initial 参数决定了你的虚拟开关的初始状态,on打开,off关闭,但我们为了能实现各种情况下的状态反馈,我们在实际使用中,将不会手动定义 initial 的值,因为这涉及到了一个官方组件的策略,就是“当你不手动定义 initial 参数时,在HA重启之后,会恢复到重启之前的状态“ 这点很重要,这是可以持续记录当前操作状态的基础。
小提示:目前在0.112.3最新版本里,应该存在bug,不定义 initial 的情况下,重启以后还是会恢复到系统默认值,即 off (或是false),等待官方修复。
实战
我们拿大佬的帖子为例来介绍如何增加虚拟开关,来实现空调遥控的状态反馈。
原帖:https://bbs.hassbian.com/thread-8083-1-1.html
步骤如下:
- 先定义一个
input_boolean
到我们的配置文件里:
input_boolean:
bedroom_ac_state:
name: 卧室空调状态
没写错,就这么简单即可。
- 空调遥控器的配置:
climate:
- platform: mqtt
name: bedroom
initial: 24
min_temp: 20
max_temp: 28
modes: ["off", "cool"] # 可按官方说明添加其他选项,学码量相应翻倍
mode_command_topic: "myHASS/bedroom/ac/mode/set"
temperature_command_topic: "myHASS/bedroom/ac/temperature/set"
current_temperature_topic: "myHASS/bedroom/ac/temperature/state"
swing_modes: ["数显", "强劲"] #这是个人空调数显和强劲功能按键,绕下弯,添加到了摆页的模式选项
swing_mode_command_topic: "myHASS/bedroom/ac/swing_mode/set"
mode_state_template: >
{% if is_state('input_boolean.bedroom_ac_state', 'off') %}off
{% else %}on
{% endif %}
小提示:其中 mode_state_template
(后面用 > 号替换 & g t; ,论坛没解析出来) 是当前空调或电视的开关状态配置参数,它下面的部分是该参数下的逻辑条件。条件里的语句的意思也就是当执行 关闭 off 操作时,input_boolean.bedroom_ac_state
同时关掉(off),否则就是打开(on)。
这个例子是基于 mqtt switch
的,官方文档在此:https://www.home-assistant.io/integrations/switch.mqtt/ 其他的开关形式,大家可以到官方文档里去查找对于你使用的开关 state 是如何定义的,参数是如何写的即可,其实非常简单。
同理,如果你用 ping 组件,或其他可以触发on 或 off 的组件来配合一些无法获取状态反馈的开关也是可以的,这些基本上可以作为辅助条件任意发挥,关键点是在一定要对开关的 state 进行定义的基础上。