关于蓝图架构
蓝图架构
蓝图的配置架构由两个部分组成:
- 蓝图的高层元数据:名称、描述、用户所需的输入。
- 蓝图所描述内容的架构。
第一部分称为 蓝图架构。它包含了蓝图的元数据。
蓝图的唯一要求是一个名称。在其最基本的形式下,蓝图如下所示:
blueprint:
name: 示例蓝图
domain: automation
虽然这是一个有效的蓝图,但并不是很有用。
第二部分依赖于蓝图的使用案例。例如,如果你为自动化创建一个蓝图,那么适用 自动化 的完整架构。
你可以添加关于蓝图使用案例和用户输入的描述。
这是完整的蓝图架构:
Configuration Variables
蓝图的描述。虽然是可选的,但强烈推荐填写此字段。描述蓝图的功能,并描述蓝图提供的输入。描述可以包含 Markdown
此蓝图使用的领域。目前,仅支持 automation
、script
和 template
。
使用蓝图成功的 Home Assistant 要求。
蓝图输入
如上所述,蓝图可以接受来自蓝图用户的一个(或多个)输入。
这些输入可以是任何类型(字符串、布尔值、列表、字典)。它们可以有默认值,并且可以提供一个 选择器,以确保在用户界面中有一个匹配的输入字段。
蓝图输入具有以下配置:
每个输入字段都可以在蓝图元数据之外,通过 !input
自定义 YAML 标签进行引用。
以下示例显示了一个具有单个输入的最小蓝图:
blueprint:
name: 示例蓝图
description: 示例展示输入
input:
my_input:
name: 示例输入
在上述示例中,my_input
是输入的标识符。可以使用 !input my_input
自定义标签进行引用。
在此示例中,没有提供 选择器
。在用户界面中,用户将看到一个文本输入字段。然后由用户决定在该字段中输入什么内容。附带 选择器 的蓝图更易于使用。
蓝图可以有任意数量的输入。
蓝图输入部分
可以在主要的 input
键下添加一个或多个输入部分。每个部分在视觉上对该部分的输入进行分组,允许可选描述,并可选择性地允许折叠这些输入。请注意,部分仅影响用户在填写蓝图时如何显示输入。输入必须具有唯一名称,并直接通过名称进行引用;而不是通过部分和名称进行引用。
部分通过在该部分内存在额外的 input
键来区分于输入。
输入部分是 2024.6.0 版本中的新功能。如果使用输入部分,则应将蓝图的 min_version
设置为至少此版本。否则,蓝图将在较旧版本上生成错误。有关更多详细信息,请参见 此部分。
部分的完整配置如下:
Configuration Variables
此部分的可选描述,将显示在部分的顶部。 描述可以包含 Markdown
如果为 true
,则部分将在默认情况下折叠。对可选或不太重要的输入很有用。所有折叠的输入也必须在隐藏之前定义默认值。
以下示例显示了一个具有一些输入的蓝图中的部分:
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: