创建自动化蓝图
创建自动化蓝图
在本教程中,我们将创建一个基于运动传感器控制灯光的自动化蓝图。我们将通过采集已有的自动化并将其转换成蓝图来实现此操作。
先决条件
- 本教程假设您具备以下主题的知识:
- 编辑配置文件
- YAML,特别是 在自动化中使用的 YAML
- 脚本
创建自动化
要创建蓝图,我们首先需要有一个可工作的自动化。 对于本教程,我们使用一个简单的自动化。转换复杂的自动化的过程没有不同。
我们将在本教程中使用的自动化是基于运动传感器控制灯光的:
triggers:
- trigger: state
entity_id: binary_sensor.motion_kitchen
actions:
- action: >
{% if trigger.to_state.state == "on" %}
light.turn_on
{% else %}
light.turn_off
{% endif %}
target:
entity_id: light.kitchen
可以与 trigger
对象一起使用的选项列在 自动化触发器变量 下。在此示例中,使用了 状态触发器。
turn_on
和 turn_off
是 homeassistant
动作。它们不特定于某个域。您可以在灯光、开关和其他域上使用它们。
创建蓝图文件
自动化蓝图是 YAML 文件(扩展名为 .yaml
),存放在 <config>/blueprints/automation/
文件夹中。您可以在该文件夹内创建任意多个子目录。
要开始编写我们的蓝图,我们将复制上述自动化 YAML 并以 motion_light_tutorial.yaml
的名称保存在该目录中。
添加基本的蓝图元数据
Home Assistant 需要了解蓝图。这是通过添加 blueprint:
部分实现的。它应包含其对应集成的 domain
(本例中为 automation
)和您的蓝图的 name
。可选地,您还可以为您的蓝图添加 description
。
将以下内容添加到文件顶部:
blueprint:
name: 运动光教程
description: 根据检测到的运动打开灯光
domain: automation
将可配置部分定义为输入
现在我们必须决定要 make 可配置的步骤。我们希望尽可能使其可重复使用,同时不失去根据运动传感器打开灯光的原始意图。
蓝图中的可配置部分称为 inputs。为了使运动传感器实体可配置,我们将实体 ID 替换为自定义 YAML 标签 !input
。此 YAML 标签必须与输入的名称组合:
triggers:
- trigger: state
entity_id: !input motion_sensor
对于灯光,我们可以提供更多的灵活性。我们希望允许用户能够将任何设备或区域定义为目标。操作中的 target
属性可以包含指向区域、设备和/或实体的引用,因此我们将使用这一点。
输入不仅限于字符串。它们也可以包含复杂对象。因此在此情况下,我们将整个 target
标记为输入:
actions:
- action: >
{% if trigger.to_state.state == "on" %}
light.turn_on
{% else %}
light.turn_off
{% endif %}
target: !input target_light
将输入添加到元数据
所有标记为输入的部分需要添加到元数据中。最少的要求是我们按照自动化中使用的名称添加它们:
blueprint:
name: 运动光教程
description: 根据检测到的运动打开灯光
domain: automation
input:
motion_sensor:
target_light:
有关蓝图输入的更多信息,请参考 蓝图架构 的文档。
通过 configuration.yaml 使用您的蓝图
添加基本的元数据后,您的蓝图已准备好使用。
打开您的 configuration.yaml
configuration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 并添加以下内容:
automation tutorial:
use_blueprint:
path: motion_light_tutorial.yaml
input:
motion_sensor: binary_sensor.kitchen
target_light:
entity_id: light.kitchen
重新加载自动化,您的新自动化应会出现。由于我们配置了与原始自动化相同的确切值,它们应完全相同地工作。
改进输入
蓝图更易于使用如果每个字段的用途清晰可见。
为输入添加用户友好的名称
通过为我们的输入添加名称和描述,我们可以改善这种体验:
blueprint:
name: 运动光教程
description: 根据检测到的运动打开灯光
domain: automation
input:
motion_sensor:
name: 运动传感器
description: 本传感器将与灯光同步。
target_light:
name: 灯光
description: 需要同步的灯光。
描述输入
我们的蓝图当前并未描述输入应包含的内容。没有这些信息,Home Assistant 将向用户提供一个空文本框。
为了让 Home Assistant 提供更多帮助,我们将使用 选择器。选择器描述一种类型,并用于帮助用户选择匹配的值。
运动传感器实体的选择器应描述我们想要来自二进制传感器域的设备类为 motion
的实体。
目标灯光的选择器应描述我们想要选择灯光实体。
blueprint:
name: 运动光教程
domain: automation
input:
motion_sensor:
name: 运动传感器
description: 本传感器将与灯光同步。
selector:
entity:
filter:
- domain: binary_sensor
device_class: motion
target_light:
name: 灯光
description: 需要同步的灯光。
selector:
target:
entity:
- domain: light
通过将我们的蓝图限制为灯光和运动传感器,我们解锁了一些好处:用户界面将能够限制建议值为灯光和运动传感器,而不是所有设备。它还将允许用户选择一个区域来控制灯光。
最终蓝图
在添加所有步骤后,我们的蓝图将如下所示:
blueprint:
name: 运动光教程
description: 根据检测到的运动打开灯光
domain: automation
input:
motion_sensor:
name: 运动传感器
description: 本传感器将与灯光同步。
selector:
entity:
filter:
- domain: binary_sensor
device_class: motion
target_light:
name: 灯光
description: 需要同步的灯光。
selector:
target:
entity:
- domain: light
triggers:
- trigger: state
entity_id: !input motion_sensor
actions:
- action: >
{% if trigger.to_state.state == "on" %}
light.turn_on
{% else %}
light.turn_off
{% endif %}
target: !input target_light
通过用户界面使用蓝图
- 要通过用户界面配置您的蓝图,请转到 设置 > 自动化与场景 > 蓝图。
- 找到 运动光教程 蓝图并选择 创建自动化。
在对蓝图进行更改后,请不要忘记重新加载自动化,以使用户界面和自动化集成获取最新的蓝图更改。
视频教程
本视频教程解释了如何创建一个在光照值低于某个阈值时切换灯光的蓝图。
分享爱心
最后一步是与他人分享此蓝图。对于本教程,我们将在 GitHub Gists 上分享它。
非正式分享
对于本教程,我们将在 GitHub Gists 上分享它。如果您不想将蓝图库发布给更大的受众,这是一个不错的选择。
- 转到 GitHub Gists
- Gist 描述: 蓝图教程
-
文件名(包括扩展名):
motion_light_tutorial.yaml
- 内容 是蓝图文件的内容。
- 选择 创建 Gist。
- 要与其他人分享您的蓝图,请复制新 Gist 的 URL。他们可以通过转到 设置 > 自动化与场景 > 蓝图 并选择 导入蓝图 来导入。
- 庆祝!向您致敬。您创建了第一个蓝图,并帮助了社区中的某人。
在蓝图交换中分享
如果您遵循 发布规则和格式,可以在 Home Assistant 蓝图交换论坛上分享您的蓝图。此选项对一般 Home Assistant 社区开放,但仅推荐用于您原创的蓝图。请不要将本教程发布到蓝图交换中,而是记住这是一种发布您真正蓝图的选择。