场景
场景实体是可以恢复一组实体状态的实体。 场景可以是用户定义的,也可以通过集成提供。
构建模块集成
这个 场景 是一个构建模块集成,无法直接添加到你的 Home Assistant 中,但可以被其他集成使用和提供。
构建模块集成不同于典型的与设备或服务连接的集成。相反,其他将设备或服务集成到 Home Assistant 中的集成使用这个 场景 构建模块来提供实体、服务和其他你可以在自动化或仪表板中使用的功能。
如果你的某个集成具有这个构建模块,这个页面记录了 场景 构建模块所提供的功能。
场景的状态
场景实体是无状态的,也就是说,它不能像正常的开关实体那样具有 on
或 off
状态。
每个场景实体都跟踪最后一次通过 Home Assistant UI 调用或通过某个操作调用场景实体的时间戳。
显示开发者工具中的场景实体状态的截图。
此外,实体可以有以下状态:
- 不可用:实体当前不可用。
- 未知:状态尚不明确。
由集成创建的场景
一些集成,如 Philips Hue、MQTT 和 KNX,提供场景。您可以从 Home Assistant UI 或通过动作激活它们。在这种情况下,集成提供恢复的首选状态。
创建场景
您可以创建场景来捕获您希望某些实体具有的状态。例如,一个场景可以指定灯 A 应该打开,灯 B 应该是鲜红色。
场景可以通过用户界面使用 场景编辑器 创建和管理。它们也可以通过 configuration.yaml
configuration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 手动配置。请注意,实体数据不是一个动作参数;它是所需状态的表示:
# 示例 configuration.yaml 条目
scene:
- name: 浪漫
icon: "mdi:flower-tulip"
entities:
light.tv_back_light: "on"
light.ceiling:
state: "on"
brightness: 200
color_mode: "xy"
xy_color: [0.33, 0.66]
- name: 电影
entities:
light.tv_back_light:
state: "on"
brightness: 125
light.ceiling: "off"
media_player.sony_bravia_tv:
state: "on"
source: HDMI 1
- name: 标准
entities:
light.tv_back_light:
state: "off"
light.ceiling:
state: "on"
brightness: 125
color_mode: "white"
如您所见,有两种方法可以定义每个 entity_id
的状态:
- 直接与实体定义
state
。请注意,必须定义state
。 - 用其属性定义复杂状态。您可以在
developer-tools -> state
下查看特定实体的所有可用属性。
可以使用 scene.turn_on
动作激活场景(没有 scene.turn_off
动作)。
# 示例自动化
automation:
triggers:
- trigger: state
entity_id: device_tracker.sweetheart
from: "not_home"
to: "home"
actions:
- action: scene.turn_on
target:
entity_id: scene.romantic
在未定义的情况下应用场景
使用 scene.apply
动作,您可以在不先通过配置定义它的情况下应用场景。相反,您将状态作为动作数据的一部分传递。数据的格式与配置中的 entities
字段相同。
# 示例自动化
automation:
triggers:
- trigger: state
entity_id: device_tracker.sweetheart
from: "not_home"
to: "home"
actions:
- action: scene.apply
data:
entities:
light.tv_back_light:
state: "on"
brightness: 100
light.ceiling: off
media_player.sony_bravia_tv:
state: "on"
source: HDMI 1
使用场景过渡
scene.apply
和 scene.turn_on
动作都支持设置过渡,这使您能够平滑过渡到场景。
这是一个设置浪漫场景的自动化示例,其中灯光将在 2.5 秒内过渡到场景。
# 示例自动化
automation:
triggers:
- trigger: state
entity_id: device_tracker.sweetheart
from: "not_home"
to: "home"
actions:
- action: scene.turn_on
target:
entity_id: scene.romantic
data:
transition: 2.5
过渡目前仅由灯光支持,而灯光本身也必须支持。然而,场景本身不必仅由灯光构成以设置过渡。
重新加载场景
每当您对场景配置进行更改时,可以调用 scene.reload
动作重新加载场景。
动态创建场景
通过调用 scene.create
动作,创建一个全新的场景,而无需配置。此场景将在重新加载配置后被丢弃。
您需要传递一个小写且用下划线而不是空格的 scene_id
。您还可能想以与配置场景时相同的格式指定实体。您还可以通过使用 snapshot_entities
参数拍摄当前状态的快照。在这种情况下,您必须指定要拍摄快照的所有实体的 entity_id
。entities
和 snapshot_entities
可以组合使用,但您必须至少使用其中之一。
如果场景是通过 scene.create
先前创建的,则将被覆盖。如果场景是通过 YAML 创建的,则不会发生任何事情,但您的日志文件中会出现一个警告。
视频教程
本视频教程解释了场景的工作原理以及如何动态利用场景。
# 示例自动化使用实体
automation:
triggers:
- trigger: homeassistant
event: start
actions:
- action: scene.create
data:
scene_id: my_scene
entities:
light.tv_back_light:
state: "on"
brightness: 100
light.ceiling: off
media_player.sony_bravia_tv:
state: "on"
source: HDMI 1
删除动态创建的场景
您可以按需使用 scene.delete
动作删除任何通过 scene.create
创建的场景。
您需要传入此类场景的 entity_id
。与创建时使用的 scene_id
不同, entity_id
还必须包含 scene
域。
如果场景之前不是通过 scene.create
创建的,则该动作将失败,并且日志中会出现错误。
# 示例自动化
automation:
triggers:
- trigger: state
entity_id: sun.sun
to: "below_horizon"
actions:
- action: scene.delete
data:
entity_id: scene.my_scene
以下示例在窗口打开时立即关闭一些实体。窗口关闭后,这些实体的状态将被恢复。
# 示例自动化使用快照
- alias: "窗口打开"
triggers:
- trigger: state
entity_id: binary_sensor.window
from: "off"
to: "on"
conditions: []
actions:
- action: scene.create
data:
scene_id: before
snapshot_entities:
- climate.ecobee
- light.ceiling_lights
- action: light.turn_off
target:
entity_id: light.ceiling_lights
- action: climate.set_hvac_mode
target:
entity_id: climate.ecobee
data:
hvac_mode: "off"
- alias: "窗口关闭"
triggers:
- trigger: state
entity_id: binary_sensor.window
from: "on"
to: "off"
conditions: []
actions:
- action: scene.turn_on
target:
entity_id: scene.before