ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Home Assistant 场景清理指南:使用 scene.delete 动作删除临时场景

Home Assistant 场景清理指南:使用 scene.delete 动作删除临时场景 Home Assistant 场景清理指南使用 scene.delete 动作删除临时场景【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.ioscene.delete是 Home Assistant 场景scene集成中用于按需删除运行时动态创建场景的动作。它与 Create scenescene.create配合使用专门清理那些通过自动化或脚本在运行期临时生成的场景避免场景列表被无用的临时项污染。读完本文你将掌握scene.delete的 UI 操作步骤、YAML 调用方式、目标target选择规则以及它与scene.create、scene.reload之间的生命周期关系从而写出更干净、更可靠的场景自动化。scene.delete 是什么在 scene 集成文档 中Home Assistant 支持“on the fly”运行时创建场景通过scene.create动作可以在不修改configuration.yaml的情况下于自动化或脚本执行时即时生成一个场景。这类场景被称为临时场景temporary scene它们只存在于内存中不会写入任何配置文件会在执行scene.reload或重启 Home Assistant 后自动消失可以通过scene.delete动作在任意时刻主动删除。scene.delete的作用就是“手动回收”这类动态场景这正是 source/_actions/scene.delete.markdown 所定义的核心用途Deletes a scene that was created on the fly——删除一个运行时创建的场景。临时场景的完整生命周期理解scene.delete必须先理解临时场景的生命周期它由三个动作共同管理动作职责文档scene.create运行时创建临时场景可指定状态列表、快照或两者结合Create scenescene.delete按需主动删除某个临时场景Delete scenescene.reload从 YAML 重新加载场景同时清除所有临时场景Reload scenes从源码文档可以看出scene.create创建的场景disappears when you reload the scenes or restart Home Assistantsource/_integrations/scene.markdown#L171。而scene.delete提供了不等待重启或重载、立即清理的手段适用于临时场景只用一次或临时场景需要提前回收的场景。在 UI 中使用 scene.delete按照 source/_actions/scene.delete.markdown 的说明在自动化或脚本的 UI 编辑器中删除一个场景的步骤如下打开设置Settings 自动化与场景Automations scenes。打开一个已有的自动化或脚本如果是新建选择创建自动化Create automation 创建新自动化Create new automation。如果是新建自动化在当...时When部分添加一个触发器。脚本scripts不需要触发器——它们在被其他内容调用时才会运行。在然后执行Then do部分选择添加动作Add action。在通过目标By target下详见下方Targets 目标选择一节选择你要删除的场景。在该目标显示的动作列表中选择删除场景Delete scene。点击保存Save。UI 中的选项该动作在 UI 中没有目标target之外的任何附加选项界面简洁只需指定要删除哪个场景实体。在 YAML 中使用 scene.delete如果你直接编写 YAML或希望精确控制 Home Assistant 的底层行为可以参考 source/_includes/actions/yaml_header.md 中的技术参考YAML 中该动作名称为scene.delete且必须提供 target即目标场景的entity_id。基本示例来自 source/_actions/scene.delete.markdownaction: scene.delete target: entity_id: scene.my_scene执行后scene.my_scene这个临时场景会被移除。YAML 中的选项与 UI 一致scene.delete在 YAML 中同样只有 target 一个必填维度没有任何额外的数据字段data可配置。Targets目标选择规则根据 source/_includes/actions/targets.md 的说明scene.delete是一个**必须有目标target**的动作。目标即动作的作用对象你可以把动作指向单个实体、设备、区域、楼层或标签Home Assistant 会对目标背后所有匹配的 scene 实体执行该动作实体Entity某个具体的 scene 实体例如scene.living_room设备Device某台设备下所有 scene 实体区域Area某个房间或区域中的所有 scene 实体楼层Floor某个楼层中的所有 scene 实体标签Label拥有同一标签的所有 scene 实体。你还可以在一次动作中混合不同类型的目标例如同时添加一个具体实体和一个区域让动作一次性作用于两者。⚠️特别注意目标与创建参数的差异scene 集成文档 明确指出scene.delete的目标实体 ID 必须包含scene域前缀如scene.my_scene这与scene.create中传入的裸scene_id如my_scene是不同的写法两者不能混用。实战示例窗口开合场景中的清理scene.delete最常见的实战场景是配合scene.create的快照snapshot机制在状态改变前把实体当前状态存为临时场景状态恢复后再主动删除该临时场景。下面是一个完整的自动化对来自 source/_integrations/scene.markdown#L224-L249窗口打开时保存快照并关闭相关设备窗口关闭后恢复状态automation: - alias: Window opened triggers: - trigger: window.opened target: entity_id: binary_sensor.window actions: # 1. 保存当前状态为临时场景 scene.before - action: scene.create data: scene_id: before snapshot_entities: - climate.ecobee - light.ceiling_lights # 2. 关闭灯光 - action: light.turn_off target: entity_id: light.ceiling_lights # 3. 关闭空调 - action: climate.set_hvac_mode target: entity_id: climate.ecobee data: hvac_mode: off - alias: Window closed triggers: - trigger: window.closed target: entity_id: binary_sensor.window actions: # 4. 恢复之前保存的状态 - action: scene.turn_on target: entity_id: scene.before # 5. 临时场景用完后立即删除保持场景列表整洁 - action: scene.delete target: entity_id: scene.before在这个例子中第 5 步的scene.delete让临时场景scene.before在完成使命后立刻被回收。即使不加这一句scene.reload或重启也会清除它但显式删除可以让场景列表在自动化运行期间始终保持干净也避免了后续同名场景被覆盖时的歧义。关于覆盖行为需要留意scene.create的覆盖规则source/_integrations/scene.markdown#L175如果同 ID 的场景之前由scene.create创建再次创建时会直接覆盖如果同 ID 的场景来自 YAML 配置则创建动作不生效并在日志中出现警告。这意味着如果你在自动化中固定使用某个场景 ID如before且未及时删除下次窗口打开时会静默覆盖上一次保存的快照——这正是用完即删配合scene.delete值得成为习惯的原因。注意事项与常见误区根据 source/_actions/scene.delete.markdown 的 Good to know 部分使用时有两点必须牢记只对动态创建的场景生效scene.delete仅能删除由scene.create在运行期创建的场景。如果你把它指向 YAML 配置中定义的场景动作会执行失败并在日志中报错。YAML 场景的正确删除方式要删除 YAML 中定义的场景正确做法是把它从配置中移除然后执行 Reload scenesscene.reload让配置变更生效而不是使用scene.delete。相关动作速查scene.delete通常与以下动作搭配使用来自 source/_actions/scene.delete.markdown 的关联动作声明Create scene创建临时场景是scene.delete的作用来源Turn on scene激活场景例如在清理前恢复快照状态Reload scenes重载 YAML 场景同时会清除所有临时场景。另外若你需要在删除前先查看scene.create的完整参数scene_id、entities、snapshot_entities及其类型与必填性可参考 source/_actions/scene.create.markdown 中的 Options 表格它列出了每个字段的required与type定义。小结scene.delete是 Home Assistant 临时场景生命周期管理的回收站按钮它与scene.create一建一删、与scene.reload一主动一被动共同构成了完整的临时场景管理闭环。掌握它的关键在于两点目标必须使用带scene域前缀的实体 ID以及它只对scene.create创建的动态场景有效。在快照-恢复类自动化中养成用完即删的习惯可以让你的场景实体列表始终保持整洁、可预期。【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表