☰
Home-AssistantConfig 中的 input_boolean 体系:用模式开关与一次性触发器驱动整套家庭自动化
2026/10/13 3:10:47 网站建设 项目流程
  • 智能家居
  • 物联网

【免费下载链接】Home-AssistantConfig

:house: Home Assistant configuration & Documentation for my Smart House. Write-ups, videos, part lists, and links throughout. Be sure to :star: it. Updated FREQUENTLY!

项目地址:https://gitcode.com/gh_mirrors/ho/Home-AssistantConfig
点击查看免费下载

导读

本篇文章以 Bear Stone Smart Home(即 Home-AssistantConfig 开源仓库)中 config/input_boolean 目录 的说明文档为核心,系统讲解这套成熟智能家居配置中「输入布尔(input_boolean)」的设计哲学与实践方式:如何用guest_mode、alert_mode等模式开关调控整体家居行为,又如何用good_night、flash、locator等**一次性触发器(one-shot triggers)**让自动化按需执行后自动复位。读完本文,你将掌握一套可复制的「开关 + 自动化 + 脚本」解耦架构,并理解每种布尔量在本仓库中对应的真实调用链。

一、为什么用 input_boolean 而不是直接写死在自动化里

在 Home Assistant 中,input_boolean是官方提供的一种「辅助实体(helpers)」类型,本质是一个可被存储、可在 UI 翻转、可被自动化/脚本/语音助手读写的人为布尔开关。它的价值在于把"决策状态"与"执行逻辑"解耦:

  • 自动化只负责监听开关变化,逻辑集中在automation/目录下的 YAML 中;
  • 用户、Alexa、App 或仪表盘只需要翻转开关,无需触碰任何配置文件;
  • 同一开关可以被多个自动化共享,形成"全局模式"。

原文档将其定位概括为一句话:"Mode and trigger toggles that drive automations (guest mode, parties, presence overrides, one-shot triggers)"——即驱动自动化的模式开关与触发器,覆盖客人模式、聚会、在场状态覆盖与一次性触发等场景。

本仓库将所有input_boolean集中放在 config/input_boolean/ 目录,并通过 configuration.yaml 中的input_boolean: !include_dir_merge_named input_boolean以"目录合并命名"方式自动加载,自动化同样通过automation: !include_dir_merge_list automation加载,因此新增一个开关文件即可全局生效,无需改动主配置。

二、三个文件的分工:模式、触发器与后台开关

原文档推荐浏览三个核心文件,它们的分工清晰:

文件定位内容
home_modes.yaml家庭模式(Guest、alert、notification 开关),被大量自动化跨文件引用guest_mode、alert_mode、speech_notifications、text_notifications
trigger_booleans.yaml一次性触发开关,常作为自动化守卫(guards)good_night、meal_time、work、flash、color_tornado、guard_dog、locator
hidden_booleans.yaml后台开关,从 UI 隐藏,仅由自动化/脚本内部使用home_stats

这种"按职责拆文件"的做法,让新增功能时能快速定位:改模式去home_modes,加一次性触发去trigger_booleans,加内部状态去hidden_booleans。

三、家庭模式开关(home_modes.yaml):全局行为的"总闸"

home_modes.yaml 定义四个模式开关,全部带 MDI 图标与明确的初始值:

guest_mode: name: Guest Mode icon: mdi:account-alert initial: off alert_mode: name: Alert Mode icon: mdi:alert-octagram initial: off speech_notifications: name: Speech Notifications icon: mdi:speaker-wireless initial: on text_notifications: name: Text Notifications icon: mdi:cellphone-wireless initial: on

注意一个细节:speech_notifications与text_notifications的initial为on,即默认启用语音与文本通知;而guest_mode与alert_mode默认关闭。这体现了"默认安全、按需开启"的设计取向。

3.1 guest_mode:客人模式与"家庭在场"联动

guest_mode是本仓库引用最广的开关之一,涉及语音反馈、晚安流程、定时任务、厨房灯光等多个自动化。它的核心逻辑在 config/automation/Speech/guest_mode.yaml:

  • 开启反馈:监听input_boolean.guest_mode从off到on,触发script.speech_engine播报"Guest Mode has been enabled. Must be a party.",并附带天气、车库与窗户检查;
  • 自动复位:当group.family从not_home变为home(家人回家)且guest_mode仍为on时,调用input_boolean.turn_off关闭并播报"Guest Mode has been disabled and normal automations will continue."——客人模式随着家人归来自动失效,无需手动复位。

guest_mode还作为条件贯穿多个自动化,典型用途是"抑制打扰性行为":

  • good_night.yaml 在触发晚安流程前要求guest_mode为off,避免客人到访时误关灯光;
  • Timed_Triggers/2200.yaml 用模板not is_state('input_boolean.guest_mode', 'on') or is_state('group.bed', 'on')判断何时执行夜间任务;
  • Timed_Triggers/night_watchdog.yaml、sunrise_turn_off.yaml、wake_up.yaml、away.yaml 均以guest_mode作为条件;
  • 灯光侧,kitchen_lights_and_accents.yaml 与 kitchen_sink_circadian.yaml 依据guest_mode决定是否执行默认场景;tv_time_on_and_off.yaml 也在监听它。

这形成一条清晰链路:UI/Alexa 翻转开关 → 状态触发自动化 → 语音播报 → 条件抑制其他自动化 → 家人回家自动复位。

3.2 alert_mode:警报模式——高风险事件的"提升通道"

alert_mode用于标记"当前处于高风险/警报状态",开启后允许夜间或非常规时段执行语音播报。其典型写入方是 High_Wind_Speed_Check.yaml:

  • 风传感器sensor.pirateweather_wind_speed分三档触发(above: 30/40/60),对应 advisory / severe / emergency 三级;
  • 在发送notify_engine推送后调用input_boolean.turn_on input_boolean.alert_mode,并让speech_engine播报风况;
  • 紧急档(wind_severity == 'emergency')还会调用script.emergency。

alert_mode的消费方是 speech_processing.yaml:语音播报的条件之一是"非休眠时段"(group.bedoff 且 08:00–22:00)或alert_mode为 on——也就是说,警报模式下任何时间都可以播报;播报完成后(第 132-136 行)会input_boolean.turn_off同时复位alert_mode与lastmsg。此外 door_opened.yaml 也会引用它。

3.3 speech_notifications / text_notifications:语音与文本推送的总开关

这两个开关分别在两条核心执行链路上充当"第一道闸门":

  • 语音通道:script.dog_bark(config/script/dog_bark.yaml)在播放狗叫音频前,要求input_boolean.speech_notifications为on,同时叠加时间(09:00–20:00)与group.bed状态条件;speech_processing.yaml 同样要求其开启才执行 TTS;
  • 文本通道:script.notify_engine(config/script/notify_engine.yaml)在发送手机推送前,第一条件就是input_boolean.text_notifications为on。

由此,住户可以在不修改任何自动化文件的前提下,一键静音全屋语音播报或手机推送——这正是"用开关替代改代码"的直观体现。

四、一次性触发器(trigger_booleans.yaml):触发—执行—自动复位

trigger_booleans.yaml 中 7 个开关全部遵循同一种one-shot 模式:自动化监听开关off → on变化并执行动作,随后立刻turn_off复位,等待下次触发。这样开关不会"卡在 on",再次触发也天然有效。

good_night: name: Good Night initial: off meal_time: name: Meal Time initial: off work: name: Work initial: off flash: name: Flash initial: off color_tornado: name: Color Tornado! initial: off guard_dog: name: Guard Dog initial: off locator: name: Locator icon: mdi:map-marker-account initial: off

逐一对应真实自动化:

开关消费自动化执行内容
good_nightgood_night.yaml触发"晚安"例行程序:关闭户外季节性灯光、厨房/主卫装饰灯、运动检测,调用script.interior_off并熄灭告警面板屏幕亮度。注意其触发源还包括 SleepIQ 双人床传感器to: 'on',即"按开关"或"上床"都能进入流程
meal_timemealtime.yaml打开餐区与厨房灯、关闭客厅灯,随即复位
workwork.yaml关闭餐区/厨房/客厅灯,打开light.office_lamp,复位——一键切换"工作环境"
flashflash_all.yamllight.turn_on entity_id: all执行flash: long,并对 20+ 个具体灯光逐一长闪(其中light.den_lamp被注释停用),完成后复位——常用于找人或通知
color_tornadocolor_tornado.yaml对light.justin_go开启 Hue 的effect: colorloop色彩循环,随即复位——聚会助兴
guard_dogguard_dog.yaml触发script.dog_bark播放狗吠音频(守卫效果),delay 10 分钟后复位;同时lock.front_door从locked到unlocked也会触发,条件是group.garage_doors处于closed
locatorlocator.yaml触发script.speech_engine播报全家人位置,随后复位。文件注释明确说明其设计用途:配合 Alexa 语音"Alexa, turn on locator"

其中guard_dog与good_night展示了一个进阶技巧:触发器布尔可以与真实传感器/实体状态"或"组合成同一触发,让"人工开关"与"物理事实"殊途同归。而flash、color_tornado则展示了"触发器作为乐子/演示开关"的玩法——它们本质上是把复杂的多步动作封装成一个语义清晰的单词开关。

五、后台开关(hidden_booleans.yaml):隐藏的内部状态

hidden_booleans.yaml 目前只有一个成员:

home_stats: name: Home Stats initial: off

它服务于 config/automation/Speech/home_stats.yaml:自动化监听group.family从not_home变为home(持续 3 分钟)或input_boolean.home_stats从off到on,随后先wait_template等待group.garage_doors全部closed(超时 5:30),再调用speech_engine播报室内外天气、垃圾日、车库与窗户检查——即"家人进门后的归家简报"。

它被归类为 hidden 是因为它通常不被手动操作:家人归来自动触发才是主路径,开关只是提供一条手动补充通道(例如按下一个实体按钮立即播报)。把这类"偶发手动、常态自动"的状态放到隐藏文件,能避免 UI 上出现过多无关开关。

六、命名与组织技巧:原文档的两条实战建议

原文档末尾给出两条 Tips,与仓库实践完全吻合:

  1. 在 UI 或通过脚本翻转布尔值来引导自动化,避免改配置文件。本仓库中,开关的翻转既可以来自 UI 实体、仪表盘按钮(如 dashboards/overview 下的卡片),也可以来自自动化自身的input_boolean.turn_off/turn_on(如 guest_mode 的自动复位、one-shot 的自动复位),还可以来自 Alexa 语音(locator的设计即为此)。这套机制让"改行为"从"改 YAML"降级为"拨开关"。
  2. 给实验性开关加上功能名前缀,保持组织清晰。观察trigger_booleans.yaml,good_night、meal_time、work、flash都是"动作语义命名",一眼可知其用途;而color_tornado、guard_dog、locator则是"特色功能命名"。结合按文件(home_modes / trigger / hidden)分组的结构,整个input_boolean空间不需要额外文档也能自解释。

七、如何接入自己的配置

要复用这套模式,只需三步:

  1. 创建开关文件:在config/input_boolean/下新建或编辑 YAML,按"模式 / 触发器 / 隐藏"分类存放,每个开关提供name、icon(可选)、initial;
  2. 挂载配置:确认主配置 configuration.yaml 含input_boolean: !include_dir_merge_named input_boolean,自动化用automation: !include_dir_merge_list automation加载;
  3. 编写自动化:用platform: state监听input_boolean.xxx的from: 'off'/to: 'on',执行动作后在 action 末尾input_boolean.turn_off复位(one-shot 模式),或在条件中引用开关(模式/守卫模式)。

本仓库的自动化还大量使用mode: single/mode: restart与max_exceeded: silent(如 good_night.yaml)避免开关高频翻转造成重复执行,这一点在自建 one-shot 时同样值得照搬。

八、小结:一套"状态与逻辑解耦"的完整样板

回顾整个 input_boolean 体系,可以看到 Bear Stone Smart Home 的核心设计脉络:

  • 模式开关(home_modes)定义"当前处于什么状态"——是否待客、是否警报、是否静音——被众多自动化作为条件引用,形成全局行为总闸;
  • 触发器开关(trigger_booleans)定义"现在执行一次什么动作"——晚安、用餐、工作、闪灯、派对、守卫、找人——由 UI/Alexa 触发后由自动化消费并自动复位;
  • 隐藏开关(hidden_booleans)承载纯内部状态,保持 UI 整洁;
  • 三者在 configuration.yaml 的统一挂载下,配合 automation 与 script 目录,构成可维护、可语音控制、可渐进扩展的自动化骨架。

对任何希望"少改配置、多控行为"的 Home Assistant 玩家来说,这套 input_boolean 组织方式是现成的、经过真实家居环境验证的参考样板:给新功能加一个语义清晰的开关,远比在多个自动化里反复堆叠条件更容易长期维护。

  • 智能家居
  • 物联网

【免费下载链接】Home-AssistantConfig

:house: Home Assistant configuration & Documentation for my Smart House. Write-ups, videos, part lists, and links throughout. Be sure to :star: it. Updated FREQUENTLY!

项目地址:https://gitcode.com/gh_mirrors/ho/Home-AssistantConfig
点击查看免费下载

相关推荐

上一篇:如何在3分钟内给React项目嵌入Web终端:wterm快速上手教程
下一篇:tgrep安装教程:Homebrew、Cargo源码构建与预编译二进制,3种方式任选其一

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询