Inline periodic_albums_list computation into periodic_summary_formatted
using {%- -%} whitespace control to prevent unwanted whitespace in the
formatted output. Add documentation about this Jinja2 pattern to CLAUDE.md.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.1 KiB
Home Assistant Automation Blueprints
This repository contains automation blueprints for Home Assistant OS.
Code Review Guidelines
When reviewing or refactoring blueprint files:
- Code Quality - Improve overall structure and readability
- Bug Fixes - Identify and fix obvious or critical bugs and mistakes
- Spelling & Grammar - Correct any spelling or grammatical errors
- Documentation - Add comments to make the code easier to read and understand
- User-Friendly Messages - Use entity friendly names instead of entity IDs in notification messages
Versioning
After any change to repository content (blueprints, documentation, or other files), update the version field in manifest.json using semantic versioning:
- Major (X.0.0) - Breaking changes or major new features
- Minor (0.X.0) - New features, enhancements, or significant improvements
- Patch (0.0.X) - Bug fixes, typos, small tweaks, or documentation updates
Repository Structure
Each blueprint is organized in its own folder:
Common/
Blueprint Name/
blueprint.yaml # The automation blueprint
README.md # Detailed documentation
Zigbee/
Blueprint Name/
blueprint.yaml
README.md
Working with Blueprints
When modifying a blueprint:
- Edit
blueprint.yamlfor code changes - Update
README.mdif the change affects features, configuration, or behavior - Keep the blueprint header short (4-5 lines) - detailed docs go in README.md
When creating a new blueprint:
- Create a new folder named after the blueprint (e.g.,
Common/My New Blueprint/) - Add
blueprint.yamlwith a short header referencing README.md - Add
README.mdwith full documentation (features, how it works, configuration)
Blueprint header format:
# Blueprint Name
# One-line description of what it does.
# See README.md for detailed documentation.
#
# Author: Alexei Dolgolyov (dolgolyov.alexei@gmail.com)
When any blueprint file is moved ask if I need to update the link somewhere else.
Jinja2 Whitespace Issue
Home Assistant evaluates all blueprint variables before conditions are checked. When a variable's Jinja2 template contains whitespace (newlines, indentation), that whitespace gets included in the output even if the template logic produces an empty string.
Problem: Using a variable like {{ my_variable }} in string replacements will include unwanted whitespace.
Solution: Compute complex values inline where they're used, with {%- -%} whitespace control:
# BAD - whitespace from my_list variable will be included
my_list: >
{% for item in items %}
{{ item }}
{% endfor %}
result: "{{ template | replace('{items}', my_list) }}"
# GOOD - inline computation with whitespace control
result: >
{%- set ns = namespace(items = '') -%}
{%- for item in items -%}
{%- set ns.items = ns.items ~ item -%}
{%- endfor -%}
{{ template | replace('{items}', ns.items) }}
This pattern is used throughout the Immich Album Watcher blueprint for common_date, common_location, video_warning, and periodic_albums_list.