The album entity uses 'last_updated_at' not 'updated_at' for the
last update timestamp attribute.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added {album_created} and {album_updated} placeholders to album-related
templates, using the existing date_format for formatting:
- periodic_album_template: reads from entity attributes
- scheduled_assets_message: reads from entity attributes (per_album/random mode)
- message_assets_added: looks up entity by event_album_id
- message_assets_removed: looks up entity by event_album_id
- message_asset_image/video: added placeholders
For combined mode, album dates are empty (no single album).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added guards to event data variables (event_hub_name, event_album_name,
etc.) to check if trigger.event is defined before accessing it.
Previously, these variables would error when the trigger was time_pattern
(hourly_timer) since trigger.event doesn't exist for non-event triggers,
causing the entire automation to fail silently.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Renamed the shared time_pattern trigger from "periodic_summary" to
"hourly_timer" since it serves both periodic summary and scheduled
assets features. This makes the trigger's purpose clearer.
Updated all references in should_send_periodic_summary,
should_send_scheduled_assets, and the condition block.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Applied the same inline computation fix to {video_warning} placeholder
that was previously done for {common_date} and {common_location}.
Computes video_warning_text inline using {%- set -%} syntax instead of
storing as a separate HA variable, which strips leading whitespace.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Videos without a playback_url are now filtered out in all contexts:
- Realtime event notifications
- Scheduled assets (per_album/random mode)
- Scheduled assets (combined mode)
This prevents sending video entries that cannot be played back.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Compute common_date and common_location inline using {%- set -%} syntax
instead of as separate HA variables, which strips leading whitespace
- Fix CASE 3 (Changed) handler missing common_date/common_location support
- Remove unused global common_date and common_location variable definitions
- Apply fix to all message templates: scheduled assets (per_album, combined),
realtime notifications (assets_added, changed), and Telegram messages
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add location template inputs (common_location_template, location_if_unique_template, location_format)
- Display common location in header when all assets share the same location
- Show per-asset location when locations differ using {location_if_unique}
- Location only shown when all three fields (city, state, country) are present
- Fix TypeError on NoneType length check when asset.created_at is null
- Add defensive checks for date parsing to prevent template errors
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Each blueprint now has its own folder containing:
- blueprint.yaml: The automation code with a short header
- README.md: Detailed documentation extracted from headers
Updated CLAUDE.md with repository structure guidelines.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add support for album renamed and deleted events with notification templates
- Fix missing response_variable for all telegram service calls
- Enhance debug notifications with formatted sections and Telegram diagnostics
- Add reply_to_message_id debug logging for troubleshooting
- Update version to 1.14.8
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- CONTRIBUTING.md with blueprint submission guidelines
- Issue templates for bugs and feature requests
- Pull request template
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Change power_sensor input from single entity to multiple selector with
empty list default. This allows the trigger to gracefully handle the
case when no power sensor is configured (empty list = trigger skipped).
Updated all power_sensor checks from "is not none" to "length > 0".