智能家居
全屋智能场景模式中枢实战:用 input_select + scene 编排离家/回家/睡眠/就餐一键模式
2026年10月26日
用 input_select 状态机加 scene 快照,把离家回家睡眠就餐做成一键协同模式。
全屋智能场景模式中枢实战:用 input_select + scene 编排离家/回家/睡眠/就餐一键模式
零散的"开门亮灯""到点关灯"只是自动化雏形。真正好用的全屋智能,是一套"模式中枢"——离家、回家、睡眠、就餐一键切换,所有设备按预设快照协同。本文用 Home Assistant 的 input_select + scene + script 搭一套可复用的模式引擎。
一、为什么需要"模式"而不是零散自动化
你肯定遇到过:自动化的灯和手动的灯打架、离家后扫地机触发了"有人"误报、夜里上厕所被全亮模式闪瞎。根因是每个动作彼此孤立,没有"当前处于什么状态"这个全局认知。模式(Mode)就是给全屋一个状态机:同一时刻只有一个主导模式,所有自动化围绕它决策。
二、中枢设计:input_select 作为状态机
在 configuration.yaml 里定义:
input_select:
home_mode:
name: 全屋模式
options:
- 居家
- 离家
- 睡眠
- 就餐
- 影院
initial: 居家
这个实体就是中枢的"当前状态"。前端放一个卡片,点一下就能切换;语音助手说"我回家了"也调用同一个 service。所有其他自动化都先读 states('input_select.home_mode') 再决定动作。
三、用 scene 定义每个模式的设备快照
scene 是"某一刻设备该有的样子"。为"睡眠"模式建一个场景:主灯关、夜灯开 10%、空调 26℃、窗帘合、摄像头布防。
scene:
- name: 睡眠模式
entities:
light.主灯: off
light.夜灯: {brightness_pct: 10}
climate.客厅: {temperature: 26}
cover.窗帘: closed
同理建"就餐""影院""离家"各自的 scene。注意 scene 只记录你列出来的实体,没列的保持原状——这正是它比"一键全关"灵活的地方。
四、触发与编排:script 顺序执行
切换模式不要直接 call scene,而是包一层 script,保证顺序与延迟可控:
script:
切换离家:
sequence:
- service: scene.turn_on
target: {entity_id: scene.离家模式}
- delay: 3
- service: lock.lock
target: {entity_id: lock.大门}
- service: notify.wechat
data: {message: "已离家布防"}
把五个模式的切换都做成 script,再在 input_select 的自动化里根据新值调用对应 script。这样切换逻辑集中、好改。
五、条件自动化:回家模式只在"离家"后触发
防止误触:地理围栏"某人到家"只在当前模式是"离家"时才执行回家 script,否则忽略。HA 用 condition: state 卡住。同样,"睡眠"模式下的入户人体感应只开夜灯,绝不触发"回家"全亮。
六、防冲突与恢复
冲突来源主要是"手动改了某个设备"和"模式快照"不一致。解法是:模式切换优先于手动,任何手动操作 30 秒后若仍属该模式应有状态,由一条 automation 周期性校正(仅在校验开关开启时)。断电复位:HA 重启后 input_select 会回到 initial"居家",若你其实离家了,地理围栏会在手机重连时自动纠正——所以离家/回家一定要绑可信的位置源,别只靠按钮。
七、进阶:三入口统一
把"模式切换"暴露成三个入口并且指向同一底层:① 墙面智能开关的一个按键(用 MQTT/Zigbee 绑定 script);② 语音助手意图;③ HA 前端卡片。三地调同一个 service,状态天然一致。再叠加毫米波存在感应做"微模式":人在沙发区→"休闲",人离开客厅→回到"居家",模式之间形成层级。
八、小结
模式中枢把"一堆开关"升级为"一个会思考的家":input_select 当状态机,scene 存快照,script 管编排,condition 防误触。离家/回家/睡眠/就餐一键切换,所有设备协同而不打架。搭好这套骨架,后续加任何新设备,只要补进对应 scene 即可,扩展成本极低。