Mastering Home Assistant Blueprints: Crafting Reusable and Robust Automations
- #Home_Assistant
- #Automation
- #Blueprints
- #Smart_Home
- #YAML
- #Templating

Introduction to Home Assistant Blueprints
Home Assistant is renowned for its powerful automation capabilities, allowing users to orchestrate complex sequences of actions based on various triggers and conditions. While standard automations are excellent for one-off scenarios, the concept of Blueprints takes this to the next level. Blueprints are essentially automation templates, designed to be reusable and shareable. Imagine you have a common automation pattern – for instance, turning on a light when motion is detected and turning it off after a delay. Instead of recreating this logic for every light and every motion sensor in your home, a Blueprint allows you to define it once and then easily create multiple instances (automations) from it, simply by selecting the relevant devices.
The primary advantages of using Blueprints include:
- Reusability: Define common automation logic once and apply it across many devices or scenarios.
- Shareability: Easily share your custom automations with the broader Home Assistant community or import others' creations.
- Consistency: Ensure a uniform approach to similar automations throughout your smart home.
- Simplicity: For end-users, creating an automation from a Blueprint is a simple form-filling exercise, abstracting away the complex YAML.
While powerful external automation engines like Node-RED and AppDaemon offer immense flexibility, Blueprints are a native Home Assistant feature, deeply integrated into the UI, making them highly accessible for a wide range of users and scenarios.
Anatomy of a Blueprint
A Home Assistant Blueprint is defined in a YAML file, typically stored in your <config_dir>/blueprints/automation/
folder. It comprises several key sections:
blueprint:
name: My Awesome Automation Blueprint
description: This blueprint does amazing things.
domain: automation
source_url: https://github.com/yourusername/blueprints/my_blueprint.yaml
input:
# Define variables that users will configure
motion_sensor_entity:
name: Motion Sensor
selector: entity # Allows selection of an entity from the UI
domain: binary_sensor
light_entity:
name: Target Light
selector: entity
domain: light
delay_seconds:
name: Delay Before Off
selector: number
min: 1
max: 600
unit_of_measurement: seconds
mode: slider
default: 120
trigger:
# Triggers for the automation
- platform: state
entity_id: !input motion_sensor_entity # Use !input to reference variables
from: 'off'
to: 'on'
condition:
# Optional conditions that must be met
- condition: time
after: '06:00:00'
before: '23:00:00'
action:
# Actions to perform when triggered and conditions met
- service: light.turn_on
target:
entity_id: !input light_entity
- delay: "{{ !input delay_seconds | int }}"
- service: light.turn_off
target:
entity_id: !input light_entity
blueprint:
: Contains metadata about the Blueprint, including itsname
(displayed in the UI), a descriptivedescription
, thedomain
it applies to (e.g.,automation
), and an optionalsource_url
if you want to share it.input:
: This is where you define the variables that a user will configure when creating an automation from your Blueprint. Each input has aname
and aselector
. Selectors are crucial for providing a user-friendly interface in the Home Assistant UI, allowing users to pick entities, numbers, times, or other specific types of values. You can also define adefault
value.trigger:
,condition:
,action:
: These sections mirror those of standard Home Assistant automations. The key difference is the use of!input <variable_name>
to reference the values provided by the user in theinput
section. Templating with Jinja2 (e.g.,"{{ !input delay_seconds | int }}"
) is essential for dynamic values.
Step-by-Step Blueprint Creation (Motion-Activated Light with Brightness Control)
Let's create a practical Blueprint for a motion-activated light that also allows setting a specific brightness.
1. Create the Blueprint File:
In your Home Assistant configuration directory, create a new file: <config_dir>/blueprints/automation/my_motion_light.yaml
2. Define the Blueprint Structure:
blueprint:
name: Motion-Activated Light with Brightness
description: Turns on a light when motion is detected and off after a delay, with optional brightness control.
domain: automation
input:
motion_sensor:
name: Motion Sensor
selector:
entity:
domain: binary_sensor
device_class: motion
target_light:
name: Target Light
selector:
entity:
domain: light
delay_off:
name: Delay Before Off (seconds)
selector:
number:
min: 5
max: 600
unit_of_measurement: seconds
mode: slider
default: 120
brightness_pct:
name: Brightness Percentage (Optional)
selector:
number:
min: 1
max: 100
unit_of_measurement: '%'
mode: slider
default: 100
required: false # This input is optional
trigger:
- platform: state
entity_id: !input motion_sensor
from: 'off'
to: 'on'
action:
- choose:
- conditions: "{{ !input brightness_pct is defined and !input brightness_pct is not none }}"
sequence:
- service: light.turn_on
target:
entity_id: !input target_light
data:
brightness_pct: "{{ !input brightness_pct | int }}"
default:
- service: light.turn_on
target:
entity_id: !input target_light
- delay: "{{ !input delay_off | int }}"
- service: light.turn_off
target:
entity_id: !input target_light
Explanation of Key Elements:
input:
Section: We've addedbrightness_pct
as an optional input (required: false
) with a number selector for easy adjustment.action:
Section - Thechoose
Block: This is a powerful automation feature. It allows us to perform different sequences of actions based on conditions. Here, we check ifbrightness_pct
has been defined by the user. If it has, we turn on the light with the specified brightness; otherwise, we turn it on without specifying brightness (which typically defaults to the light's last state or full brightness).- Templating: Notice
"{{ !input brightness_pct | int }}"
and"{{ !input delay_off | int }}"
. The| int
filter ensures the input, which comes as a string, is converted to an integer, which is required by thelight.turn_on
service.
3. Reload Automations or Restart Home Assistant:
After saving the Blueprint file, go to Settings > Automations & Scenes, click the three dots menu in the top right, and select Reload Automations. Your new Blueprint should now appear under the 'Blueprints' tab.
4. Create an Automation from the Blueprint:
Go to Settings > Automations & Scenes > Blueprints. Find "Motion-Activated Light with Brightness" and click "Create Automation". Fill in the inputs for your specific motion sensor and light, set your desired delay and brightness, and save.
Best Practices for Blueprint Design
Crafting effective and reliable Blueprints involves more than just writing YAML:
- Clear Naming and Description: Use descriptive names and detailed descriptions so users (and your future self) understand the Blueprint's purpose immediately.
- Leverage Selectors: Always use the most appropriate
selector
for each input. This makes your Blueprint incredibly user-friendly and helps prevent invalid input errors. Common selectors includeentity
(with optionaldomain
ordevice_class
filters),number
,text
,boolean
,time
, andaction
. - Master Jinja2 Templating: Blueprints become truly dynamic with templating. Understand how to access `!input` variables, use filters (like
| int
,| float
,| default
), and leverage Home Assistant's state object (e.g.,states('sensor.temperature_outside')
,state_attr('light.living_room', 'brightness')
) for more complex logic. - Provide Sensible Defaults: For optional inputs or common scenarios, set reasonable
default
values to reduce configuration burden for users. - Handle Edge Cases and Robustness: Use
condition:
blocks wisely. For example, ensure a light is already off before attempting to turn it on (though many services handle this gracefully). Consider usingchoose:
blocks for conditional logic within actions, as shown in our example. - Testing and Debugging: After creating an automation from your Blueprint, always test it thoroughly. Home Assistant's Automation Trace (accessible from the automation's details page) is an invaluable tool for debugging, showing exactly which steps executed, which conditions passed/failed, and the state of variables.
- Version Control: If you're building a collection of Blueprints, consider storing them in a Git repository. This allows for version control and easy sharing via the
source_url
field. - Community Sharing: The Home Assistant Community Forum has a dedicated Blueprints section where you can find and share Blueprints. Including a
source_url
in your Blueprint's metadata facilitates direct import from URLs.
Integrating and Using Blueprints
Once you've saved a Blueprint YAML file in the correct directory, Home Assistant automatically discovers it. To use a Blueprint:
- Navigate to Settings > Automations & Scenes.
- Click on the Blueprints tab.
- You'll see a list of available Blueprints. Click on the Blueprint you wish to use.
- Click the "Create Automation" button.
- A form will appear, populated with the inputs you defined in the Blueprint. Fill in the required entities, numbers, or other values.
- Give your new automation a descriptive name.
- Click "Save". Your automation is now active!
You can manage automations created from Blueprints just like any other automation – enable/disable them, view their trace, or delete them from the main Automations list.
Conclusion
Home Assistant Blueprints are a cornerstone for building a scalable, maintainable, and user-friendly smart home automation system. By abstracting complex YAML into reusable templates, they empower both advanced users to share their creations efficiently and novices to implement sophisticated logic with ease. Embracing Blueprints will not only streamline your automation workflow but also foster a more reliable and consistent smart home ecosystem. Dive in, experiment with creating your own, and explore the vast library of community-contributed Blueprints to unlock new possibilities for your Home Assistant setup.

NGC 224
Author bio: