模板锁
template
平台创建结合组件的锁。
例如,如果您有一个车库门,带有一个操作电机的切换开关和一个传感器,该传感器可以让您知道门是打开还是关闭,您可以将这些组合成一个知道车库门是打开还是关闭的锁。
这可以简化 GUI 并使编写自动化更容易。
在乐观模式下,锁将在每次命令后立即更改状态。否则,锁将等待模板的状态确认。如果遇到锁操作不正确的问题,请尝试启用它。
配置
要在您的安装中启用模板锁,请将以下内容添加到您的 configuration.yaml
configuration.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
定义用于设置锁状态的模板。
定义用于获取实体 available
状态的模板。如果模板渲染失败或返回 True
、"1"
、"true"
、"yes"
、"on"
、"enable"
或非零数字,实体将为 available
。如果模板返回任何其他值,实体将为 unavailable
。如果未配置,实体将始终为 available
。注意字符串比较不区分大小写;"TrUe"
和 "yEs"
是允许的。
定义用于获取实体 code_format
属性的模板。此模板必须评估为有效的 Python 正则表达式None
。如果评估为非 None
值,用户在与锁交互时会被提示输入代码。代码将与正则表达式匹配,只有匹配时,锁/解锁操作才会执行。代码的实际有效性必须在这些操作中验证。如果模板中存在语法错误,实体将不可用。如果模板因其他原因渲染失败或正则表达式无效,则不会接受任何代码,锁/解锁操作将永远不会被调用。
定义锁定时运行的操作。
定义解锁时运行的操作。
定义打开锁时运行的操作。
模板和操作变量
基于状态的模板实体在其模板和操作中具有特殊的模板变量 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"