场景

场景实体是可以恢复一组实体状态的实体。 场景可以是用户定义的,也可以通过集成提供。

Note

构建模块集成

这个 场景 是一个构建模块集成,无法直接添加到你的 Home Assistant 中,但可以被其他集成使用和提供。

构建模块集成不同于典型的与设备或服务连接的集成。相反,其他将设备或服务集成到 Home Assistant 中的集成使用这个 场景 构建模块来提供实体、服务和其他你可以在自动化或仪表板中使用的功能。

如果你的某个集成具有这个构建模块,这个页面记录了 场景 构建模块所提供的功能。

场景的状态

场景实体是无状态的,也就是说,它不能像正常的开关实体那样具有 onoff 状态。

每个场景实体都跟踪最后一次通过 Home Assistant UI 调用或通过某个操作调用场景实体的时间戳。

显示开发者工具中的场景实体状态的截图 显示开发者工具中的场景实体状态的截图。

此外,实体可以有以下状态:

  • 不可用:实体当前不可用。
  • 未知:状态尚不明确。

由集成创建的场景

一些集成,如 Philips HueMQTTKNX,提供场景。您可以从 Home Assistant UI 或通过动作激活它们。在这种情况下,集成提供恢复的首选状态。

创建场景

您可以创建场景来捕获您希望某些实体具有的状态。例如,一个场景可以指定灯 A 应该打开,灯 B 应该是鲜红色。

场景可以通过用户界面使用 场景编辑器 创建和管理。它们也可以通过 configuration.yamlconfiguration.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"

Configuration Variables

name string Required

场景的友好名称。

icon string (Optional)

场景的图标。

entities list Required

要控制的实体及其所需状态。

如您所见,有两种方法可以定义每个 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.applyscene.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_identitiessnapshot_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