关于蓝图架构

蓝图架构

蓝图的配置架构由两个部分组成:

  1. 蓝图的高层元数据:名称、描述、用户所需的输入。
  2. 蓝图所描述内容的架构。

第一部分称为 蓝图架构。它包含了蓝图的元数据。

蓝图的唯一要求是一个名称。在其最基本的形式下,蓝图如下所示:

blueprint:
  name: 示例蓝图
  domain: automation

虽然这是一个有效的蓝图,但并不是很有用。

第二部分依赖于蓝图的使用案例。例如,如果你为自动化创建一个蓝图,那么适用 自动化 的完整架构。

你可以添加关于蓝图使用案例和用户输入的描述。

这是完整的蓝图架构:

Configuration Variables

name string Required

蓝图的名称。保持简短且具有描述性。

description string (Optional)

蓝图的描述。虽然是可选的,但强烈推荐填写此字段。描述蓝图的功能,并描述蓝图提供的输入。描述可以包含 Markdown

domain string Required

此蓝图使用的领域。目前,仅支持 automationscripttemplate

author string (Optional)

蓝图作者的名称。

homeassistant map (Optional)

使用蓝图成功的 Home Assistant 要求。

min_version string (Optional)

使用蓝图所需的最小 Home Assistant 版本,格式为 major.minor.patch(所有部分均为必填)。例如,2022.4.0。如果蓝图使用了最近版本引入的任何功能,设置此项非常重要,以防止出现问题。

input map (Optional)

定义的用户输入或部分的字典。这些是蓝图消费者可以使用 YAML 定义提供的输入字段,或通过 UI 的配置表单提供的输入字段。部分提供了以视觉方式分组相关输入的方式(见下文)。

蓝图输入

如上所述,蓝图可以接受来自蓝图用户的一个(或多个)输入。

这些输入可以是任何类型(字符串、布尔值、列表、字典)。它们可以有默认值,并且可以提供一个 选择器,以确保在用户界面中有一个匹配的输入字段。

蓝图输入具有以下配置:

Configuration Variables

name string (Optional)

输入字段的名称。

description string (Optional)

输入字段的简短描述。保持简短且具有描述性。 描述可以包括 Markdown

selector selector (Optional)

用于此输入的 选择器。选择器定义了输入在前端 UI 中的显示方式。

default any (Optional)

此输入的默认值,以防蓝图用户未提供输入。

每个输入字段都可以在蓝图元数据之外,通过 !input 自定义 YAML 标签进行引用。

以下示例显示了一个具有单个输入的最小蓝图:

blueprint:
  name: 示例蓝图
  description: 示例展示输入
  input:
    my_input:
      name: 示例输入

在上述示例中,my_input 是输入的标识符。可以使用 !input my_input 自定义标签进行引用。

在此示例中,没有提供 选择器。在用户界面中,用户将看到一个文本输入字段。然后由用户决定在该字段中输入什么内容。附带 选择器 的蓝图更易于使用。

蓝图可以有任意数量的输入。

蓝图输入部分

可以在主要的 input 键下添加一个或多个输入部分。每个部分在视觉上对该部分的输入进行分组,允许可选描述,并可选择性地允许折叠这些输入。请注意,部分仅影响用户在填写蓝图时如何显示输入。输入必须具有唯一名称,并直接通过名称进行引用;而不是通过部分和名称进行引用。

部分通过在该部分内存在额外的 input 键来区分于输入。

Caution

输入部分是 2024.6.0 版本中的新功能。如果使用输入部分,则应将蓝图的 min_version 设置为至少此版本。否则,蓝图将在较旧版本上生成错误。有关更多详细信息,请参见 此部分

部分的完整配置如下:

Configuration Variables

name string (Optional)

部分的名称。如果省略,则使用部分的键。

icon string (Optional)

显示在部分名称旁边的图标。

description string (Optional)

此部分的可选描述,将显示在部分的顶部。 描述可以包含 Markdown

collapsed boolean (Optional, default: false)

如果为 true,则部分将在默认情况下折叠。对可选或不太重要的输入很有用。所有折叠的输入也必须在隐藏之前定义默认值。

input map Required

此部分内定义的用户输入的字典。

以下示例显示了一个具有一些输入的蓝图中的部分:

blueprint:
  name: 示例部分蓝图
  description: 示例展示部分
  input:
    base_input:
      name: 不在部分中的输入
    my_section:
      name: 我的部分
      icon: mdi:cog
      description: 这些选项控制此蓝图的特定功能
      input:
        my_input:
          name: 示例输入
        my_input_2:
          name: 第二个示例输入

蓝图输入在模板中的使用

输入以自定义 YAML 标签的形式可用,但不是作为模板变量。 要在模板中使用蓝图输入,首先需要将其暴露为 脚本级变量 或在 变量脚本步骤 中。

variables:
  # 将输入 my_input 作为脚本级变量可用
  my_input: !input my_input

示例蓝图

[内置蓝图][blueprint-built-in] 是了解蓝图如何工作的极佳示例。

以下是内置的运动灯自动化蓝图:

blueprint:
  name: 动态感应灯
  description: 当检测到运动时打开灯光。
  domain: automation
  input:
    motion_entity:
      name: 动作传感器
      selector:
        entity:
          filter:
            device_class: motion
            domain: binary_sensor
    light_target:
      name: 灯光
      selector:
        target:
          entity:
            domain: light
    no_motion_wait:
      name: 等待时间
      description: 在检测到最后的运动后保持灯光开启的时间。
      default: 120
      selector:
        number:
          min: 0
          max: 3600
          unit_of_measurement: seconds

# 如果在延迟内检测到运动,
# 我们将重启脚本。
mode: restart
max_exceeded: silent

triggers:
  - trigger: state
    entity_id: !input motion_entity
    from: "off"
    to: "on"

actions:
  - action: light.turn_on
    target: !input light_target
  - wait_for_trigger: