模板锁

template 平台创建结合组件的锁。

例如,如果您有一个车库门,带有一个操作电机的切换开关和一个传感器,该传感器可以让您知道门是打开还是关闭,您可以将这些组合成一个知道车库门是打开还是关闭的锁。

这可以简化 GUI 并使编写自动化更容易。

在乐观模式下,锁将在每次命令后立即更改状态。否则,锁将等待模板的状态确认。如果遇到锁操作不正确的问题,请尝试启用它。

配置

要在您的安装中启用模板锁,请将以下内容添加到您的 configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件中:

# 示例 configuration.yaml 条目
lock:
  - platform: template
    name: 车库门
    value_template: "{{ is_state('sensor.door', 'on') }}"
    lock:
      action: switch.turn_on
      target:
        entity_id: switch.door
    unlock:
      action: switch.turn_off
      target:
        entity_id: switch.door

Configuration Variables

name string (Optional, default: 模板锁)

在前端使用的名称。

unique_id string (Optional)

唯一标识此锁的 ID。设置为唯一值以允许通过 UI 自定义。

value_template template Required

定义用于设置锁状态的模板。

availability_template template (Optional, default: true)

定义用于获取实体 available 状态的模板。如果模板渲染失败或返回 True"1""true""yes""on""enable" 或非零数字,实体将为 available。如果模板返回任何其他值,实体将为 unavailable。如果未配置,实体将始终为 available。注意字符串比较不区分大小写;"TrUe""yEs" 是允许的。

code_format_template template (Optional, default: None)

定义用于获取实体 code_format 属性的模板。此模板必须评估为有效的 Python 正则表达式None。如果评估为非 None 值,用户在与锁交互时会被提示输入代码。代码将与正则表达式匹配,只有匹配时,锁/解锁操作才会执行。代码的实际有效性必须在这些操作中验证。如果模板中存在语法错误,实体将不可用。如果模板因其他原因渲染失败或正则表达式无效,则不会接受任何代码,锁/解锁操作将永远不会被调用。

lock action Required

定义锁定时运行的操作。

unlock action Required

定义解锁时运行的操作。

open action (Optional)

定义打开锁时运行的操作。

optimistic boolean (Optional, default: false)

定义锁是否以乐观模式工作的标志。

模板和操作变量

基于状态的模板实体在其模板和操作中具有特殊的模板变量 this 可用。this 变量有助于 自引用 实体的状态和属性。

注意事项

如果您使用的某个平台的状态需要额外的加载时间,则模板锁在启动时可能会获得 unknown 状态。这会导致日志文件中出现错误消息,直到该平台完成加载。如果您在模板中使用 is_state() 函数,可以避免这种情况。例如,您可以将 {{ state('switch.source') == 'on') }} 替换为以下等效内容,该内容返回 true/false 并且永远不会产生未知结果:{{ is_state('switch.source', 'on') }}

示例

在本节中,您可以找到一些如何使用此锁的实际示例。

从开关创建锁

此示例显示了一个从开关复制数据的锁。

lock:
  - platform: template
    name: 车库门
    value_template: "{{ is_state('switch.source', 'on') }}"
    lock:
      action: switch.turn_on
      target:
        entity_id: switch.source
    unlock:
      action: switch.turn_off
      target:
        entity_id: switch.source

乐观模式

此示例显示了一个处于乐观模式的锁。此锁将在命令后立即更改状态,而不会等待来自传感器的状态更新。

lock:
  - platform: template
    name: 车库门
    value_template: "{{ is_state('sensor.skylight.state', 'on') }}"
    optimistic: true
    lock:
      action: switch.turn_on
      target:
        entity_id: switch.source
    unlock:
      action: switch.turn_off
      target:
        entity_id: switch.source

传感器和两个开关

此示例显示了一个从传感器获取状态的锁,并使用两个瞬时开关来控制设备。

lock:
  - platform: template
    name: 车库门
    value_template: "{{ is_state('sensor.skylight.state', 'on') }}"
    lock:
      action: switch.turn_on
      target:
        entity_id: switch.skylight_open
    unlock:
      action: switch.turn_on
      target:
        entity_id: switch.skylight_close

带动态代码的开关锁

此示例显示了一个从开关复制数据的锁。它需要一个定义为 secret 的 PIN 码来解锁,而锁定时不需要代码。请注意,代码的实际有效性检查是 unlock 操作的一部分,并且应始终在这些操作中或在从这些操作调用的脚本中进行验证。通过这种方式,您不仅可以对静态值执行代码检查,还可以对动态值(例如 TOTPs)执行代码检查。

lock:
  - platform: template
    name: 车库门
    value_template: "{{ is_state('switch.source', 'on') }}"
    code_format_template: "{{ '\\d{4}' if is_state('switch.source', 'on') else None }}"
    lock:
      - action: switch.turn_on
        target:
          entity_id: switch.source
    unlock:
      - variables:
          pin: !secret garage_door_pin
      - condition: "{{ code == pin }}"
      - action: switch.turn_off
        target:
          entity_id: switch.source

secrets.yaml 中:

garage_door_pin: "1234"