Template Lock

The template lock platform allows you to create simple locks out of just actions and an optional value lambda. Once defined, it will automatically appear in Home Assistant as a lock and can be controlled through the frontend.

# Example configuration entry
lock:
  - platform: template
    name: "Template Lock"
    lambda: |-
      if (id(some_binary_sensor).state) {
        return LOCK_STATE_LOCKED;
      } else {
        return LOCK_STATE_UNLOCKED;
      }
    lock_action:
      - switch.turn_on: switch1
    unlock_action:
      - switch.turn_off: switch1
    open_action:
      - button.press: button1

Possible return values for the optional lambda:

  • return LOCK_STATE_LOCKED; if the lock should be reported as LOCKED.

  • return LOCK_STATE_UNLOCKED; if the lock should be reported as UNLOCKED.

  • return LOCK_STATE_JAMMED; if the lock should be reported as JAMMED.

  • return LOCK_STATE_LOCKING; if the lock should be reported as LOCKING.

  • return LOCK_STATE_UNLOCKING; if the lock should be reported as UNLOCKING.

  • return {}; if the last state should be repeated.

Note

Only LOCK_STATE_LOCKED and LOCK_STATE_UNLOCKED are supported by the MQTT component in Home Assistant

Configuration variables:

  • lambda (Optional, lambda): Lambda to be evaluated repeatedly to get the current state of the lock.

  • lock_action (Optional, Action): The action that should be performed when the remote (like Home Assistant’s frontend) requests the lock to be locked.

  • unlock_action (Optional, Action): The action that should be performed when the remote (like Home Assistant’s frontend) requests the lock to be unlocked.

  • optimistic (Optional, boolean): Whether to operate in optimistic mode - when in this mode, any command sent to the template lock will immediately update the reported state. Defaults to false.

  • assumed_state (Optional, boolean): Whether the true state of the lock is not known. This will make the Home Assistant frontend show buttons for both LOCK and UNLOCK actions, instead of hiding one of them when the lock is LOCKED/UNLOCKED. Defaults to false.

  • All other options from Lock.

lock.template.publish Action

You can also publish a state to a template lock from elsewhere in your YAML file with the lock.template.publish action.

# Example configuration entry
lock:
  - platform: template
    name: "Template Lock"
    id: template_lock1

# in some trigger
on_...:
  - lock.template.publish:
      id: template_lock1
      state: LOCK_STATE_LOCKED

  # Templated
  - lock.template.publish:
      id: template_lock1
      state: !lambda 'return LOCK_STATE_LOCKED;'

Configuration options:

  • id (Required, ID): The ID of the template lock.

  • state (Required, boolean, templatable): The state to publish.

Note

This action can also be written in lambdas, the parameter of the publish_state method denotes the state the lock should become:

id(template_lock1).publish_state(lock::LOCK_STATE_LOCKED);

See Also