124 Commits

Author SHA1 Message Date
alexei.dolgolyov e3b9b123f2 fix: derive Dreame Vacuum name from device to avoid doubled friendly_name
The Dreame integration names the vacuum entity ' <device name>' (leading space),
so HA composes the entity friendly_name as the device name twice (e.g.
'Z10 Pro  Z10 Pro'). Derive vacuum_name from the device's name_by_user/name
instead, falling back to friendly_name then entity_id. Bump blueprint_version
to 1.2.1 and manifest to 2.14.2.
2026-06-22 15:54:57 +03:00
alexei.dolgolyov b7006c5f41 chore: add vex code-search config 2026-06-21 21:04:41 +03:00
alexei.dolgolyov 3355f0dda8 fix: harden Washing Machine remaining-time parsing for unavailable states
Treat 'unavailable'/'none'/'-'/'' remaining-time values as not-running and
parse with int(0) defaults so a partially invalid sensor value degrades to 0
instead of raising. Bump manifest to 2.14.1.
2026-06-21 21:04:41 +03:00
alexei.dolgolyov c8ab66caf3 feat: translate Dreame Vacuum operation codes and add localization
- Render cleaning_mode/status as friendly labels instead of raw UPPER_SNAKE enum names
- Add optional label_overrides / code_label_overrides inputs and a Russian starter table (localization.ru.yaml)
- Add {code_name} placeholder for warning/error codes (override -> integration text -> empty)
- Fix non-functional information filter (match the information type id, not an absent code)
- Suppress the spurious replace_temporary_map clear warning; humanize bare snake-id warnings
- Remove dead device_id matching branch; strip empty '(label: )' parenthetical (any language)
- Robustness: queue max 10, task_completed bool coercion, notify target via !input, if/then actions
2026-06-21 21:02:10 +03:00
alexei.dolgolyov fafcf116be feat: add Presence Scene Controller and Time Of Day Selector blueprints
- Presence Scene Controller: per-room presence-aware time-of-day scenes
  with vacant/sleep scenes and Motion Light coexistence
- Time Of Day Selector: event-driven state machine that sets an
  input_select when a configured time entity fires
- List both blueprints in the root README
- Bump version to 2.13.0
2026-05-27 13:10:03 +03:00
alexei.dolgolyov 3d15f481a0 feat: add debug mode and clarify docs in MQTT Button Control
- Add optional debug notifications for trigger and light-branch decisions
- Document index-based action/entity mapping and two-topic support
- Add configuration reference table and debug-mode section to README
2026-05-27 13:09:59 +03:00
alexei.dolgolyov ad6f30ce3c feat: add unload reminder to Washing Machine
- Send a reminder N minutes after cycle completion, with optional repeats
- Auto-cancel reminders when a new cycle starts or a door/lid sensor opens
- Gate the completion timestamp on configured door sensors being closed
- Track completion time (cct) and reminder count (urc) in persistent state
2026-05-27 13:09:55 +03:00
alexei.dolgolyov 34cf5b1f7a feat: harden Motion Light manual-override and turn-off recovery
- Add motion-off debounce to filter PIR drop-outs
- Treat pre-emptive manual turn-on (from idle) as MANUAL mode
- Recover from external turn-off while motion still active
- Run enable/disable callbacks before turn-on/off for mode:restart safety
- Document brightness-threshold interaction and input_text max_length
2026-05-27 13:09:50 +03:00
alexei.dolgolyov a52cffa062 fix: remove notification title from Dreame Vacuum to avoid duplicated device name
The `notification_title` input defaulted to `{vacuum_name}`, which caused the
device name to appear twice (once in the title, once in the message body that
already starts with `{vacuum_name}`). Drop the title input and revert to
message-only notifications, matching the original behavior.
2026-05-07 22:11:21 +03:00
alexei.dolgolyov 3e98e14882 Add debug mode and harden notify flow in Alarm Notification
- Add `debug_enabled` input that surfaces per-stage persistent
  notifications ([1/4] trigger, [1.5/4] conditions, [2/4] message,
  [2.25/4]/[2.75/4] around the service call, [3/4] result,
  [3.5/4] post-branch checkpoint, [4/4] alarm control).
- Include a `blueprint_version` stamp in [1/4] so it's obvious
  when a stale cached copy is still running.
- Gate the notify branch on `trigger.id == 'sensor_on'` so clearing
  a sensor no longer fires a stray notification when another sensor
  is still active.
- Replace `binary_sensors.index()` (sandbox-restricted) with a
  namespace loop and drop the `sensor_index.__class__` reference
  that broke the [2/4] render.
- Drop `response_variable` from the notify call — it could abort
  the script past `continue_on_error` when the service didn't
  declare response support.
- Add `continue_on_error` on notify and alarm service calls so one
  misconfigured step doesn't cancel the whole automation.
- Tighten `has_notify_target`/`has_alarm_switch` to also reject
  whitespace, '[]', and 'None' string forms.

Version bumped 2.5.2 → 2.6.4.
2026-04-23 20:34:13 +03:00
alexei.dolgolyov 24f89e57b8 Replace deprecated target with chat_id in Telegram bot service calls
Fixes deprecation warning for HA 2026.9.0 where telegram_bot.send_message
`target` parameter is being removed in favor of `chat_id`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 00:46:17 +03:00
alexei.dolgolyov a6ac4f4257 Add debug logging input and skip redundant on/off commands in Climate Device Controller
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 13:42:02 +03:00
alexei.dolgolyov 584c970044 Make power_sensor optional in Climate Device Controller
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 13:27:48 +03:00
alexei.dolgolyov 4c03bc849e Several minor updates to the existing blueprints 2026-02-28 22:10:11 +03:00
alexei.dolgolyov eefc8993e3 Add min_brightness setting to Light Color Mapper
Adds a minimum brightness floor (default: 5) that prevents lights from
becoming too dim. Applied to both sensor brightness and default color paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 00:51:03 +03:00
alexei.dolgolyov 9d19dfa8d3 Fix multiple mode:restart state machine bugs in Motion Light
- Fix brightness threshold falsely resetting state to NONE during light
  transition ramp-up (brightness temporarily below threshold != light off)
- Fix false manual override from Zigbee attribute-only updates (on→on)
  by requiring meaningful state change (on→off or off→on)
- Fix disable guard to also accept ENABLING state (not just ENABLED)
- Move state updates before service calls to survive mode:restart cancellation
- Add ENABLING sub-case handler for motion-cleared-during-enable scenario
- Add CASE 1 default handler for restart recovery disable path
- Add comprehensive debug logging at automation entry and CASE 1 entry
- Change default timeout_delay to 0 and grace_period to 2s
- Remove unused is_debug/is_base_debug variables

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 01:57:45 +03:00
alexei.dolgolyov e98df855d9 Fix false manual override detection and brightness threshold guard in Motion Light
- Add configurable grace period (default 10s) to prevent false manual
  override detection from delayed device state reports (e.g., Zigbee)
- Fix any_device_on guard to respect brightness_threshold so lights
  below the threshold don't block the automation from triggering

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:28:16 +03:00
alexei.dolgolyov 29b1044d63 Add Light Color Mapper blueprint
Maps color sensor states to lights in real-time with index-based pairing.
Supports FPS throttling, brightness override, configurable behavior when
sensors are unavailable, and a post-update callback action.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:28:07 +03:00
alexei.dolgolyov 006f9e532c Add {year} variable to asset templates in Immich Album Watcher
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:27:59 +03:00
alexei.dolgolyov 9383f957b6 Add Dreame Vacuum Notifications blueprint
Sends customizable notifications for Dreame vacuum events (cleaning
status, consumable alerts, warnings, errors, and informational messages).
Requires the Dreame Vacuum integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:27:51 +03:00
alexei.dolgolyov 6848c3f903 BREAKING: Replace hour/interval inputs with flexible time lists in Immich Album Watcher
Replace interval-based scheduling with explicit time lists for more flexibility:
- Periodic Summary: Replace interval_hours + start_hour with notification_times
- Scheduled Assets: Replace interval_hours + start_hour with notification_times
- Memory Mode: Replace start_hour with notification_times

Changes:
- Remove `periodic_interval_hours` and `periodic_start_hour` inputs
- Remove `scheduled_assets_interval_hours` and `scheduled_assets_start_hour` inputs
- Replace `memory_mode_start_hour` with `memory_mode_notification_times`
- Add three new time text inputs accepting comma-separated HH:MM format
- Replace hourly time_pattern trigger with three template triggers
- Update trigger logic to match current time against configured times
- Update documentation to reflect new time-based scheduling

Users can now specify any times (e.g., "09:00, 14:30, 21:00") instead of
calculating intervals. Times must use 24-hour format with leading zeros.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 12:50:23 +03:00
alexei.dolgolyov 06177cb9f0 Make Start Date and Control Flag inputs optional in Periodic Notification
- Start Date: when empty, day interval is ignored and notifications fire daily
- Control Flag: when empty, notifications always fire (no toggle control)
- Update documentation to reflect optional inputs
- Fix markdown linting issues

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 12:42:59 +03:00
alexei.dolgolyov 5da986867d Add Periodic Notification blueprint
Sends notifications at specified times every N days when a control
flag is enabled. Supports multiple notification targets, flexible
time scheduling, and optional day interval with configurable start date.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 03:41:35 +03:00
alexei.dolgolyov cbd21df0f0 Change execution mode of Immich Album Watcher blueprint 2026-02-08 13:09:34 +03:00
alexei.dolgolyov d60ff11e04 Add telegram_media_delay between consecutive messages
Add delays between text and media messages within each notification,
and between periodic summary, scheduled assets, and memory mode
when they trigger at the same hour.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 12:26:47 +03:00
alexei.dolgolyov e041f468ca Rename urls to assets in send_telegram_notification calls
Service parameter was renamed from 'urls' to 'assets'.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 02:41:12 +03:00
alexei.dolgolyov 27ff2ae8f0 Remove telegram_notify_targets from Immich Album Watcher
Simplify Telegram recipient configuration to only use input_text
entities for chat IDs. Removes the notify entity friendly name
parsing which was complex and error-prone.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 02:18:36 +03:00
alexei.dolgolyov ba34d6f677 Add git workflow note to CLAUDE.md
Always ask before committing or pushing changes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 02:15:39 +03:00
alexei.dolgolyov 67a31b320d Add allowed chat IDs filter to Telegram Commands
New input `allowed_chat_ids` restricts which Telegram chats can trigger
the automation. Leave empty to allow all chats (no filtering).
Useful for security-sensitive commands.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 02:12:22 +03:00
alexei.dolgolyov 383ec9afd6 Fix periodic summary image type and default URL
- Use 'photo' type (not 'IMAGE') to match service format
- Update default to immich-logo-inline-light.png

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:10:01 +03:00
alexei.dolgolyov cfe050dcf3 Fix periodic summary image URL format
URLs must be list of dicts with 'url' and 'type' keys, not plain strings.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:00:44 +03:00
alexei.dolgolyov 7818390bee Fix periodic summary image URL parameter
Use `urls` parameter (list) instead of `image_url`. Pass empty list
when image URL is not configured.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 15:59:31 +03:00
alexei.dolgolyov 9189c5a07d Add image URL option for periodic summary notifications
New input `periodic_summary_image_url` allows customizing the image
attached to periodic summary Telegram messages. Defaults to official
Immich logo. Set empty for text-only notifications.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 15:56:51 +03:00
alexei.dolgolyov 498c1ac6dc Document transcoded asset usage for Telegram media
Note that the service uses transcoded/optimized versions of assets
when available, not the original files.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 12:29:54 +03:00
alexei.dolgolyov 03df890737 Fix max asset size minimum value validation error
Change telegram_max_asset_size input minimum from 0 to 1 (service
requires at least 1 byte). Set default to 50 MB for no extra filtering.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 12:29:24 +03:00
alexei.dolgolyov 5c98657e05 Add maximum asset size filter for Telegram media
- Add telegram_max_asset_size input (0-50 MB slider)
- Pass max_asset_data_size parameter to send_telegram_notification
- Allows filtering out large files before sending to Telegram
- Set to 0 for no filtering (default Telegram 50 MB limit)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 03:40:46 +03:00
alexei.dolgolyov 12bbbe8fd8 Update README for chat action and memory mode changes
- Document chat action indicator feature for Telegram
- Update memory mode to reflect fixed daily schedule

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 02:49:08 +03:00
alexei.dolgolyov e526a54130 Add Telegram chat action and simplify memory mode schedule
- Add chat_action parameter to all Telegram notifications
- Support typing, upload_photo, upload_video, upload_document actions
- Make memory mode interval fixed at 24h (daily notifications)
- Remove configurable interval input for memory mode

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 02:48:09 +03:00
alexei.dolgolyov dce47a9f75 Add asset sorting and favorites-only filter for notifications
New notification settings for "assets added" events:
- Sort Assets By: date, rating, name, or original order
- Sort Direction: ascending or descending
- Notify Favorites Only: filter to only favorite assets

Rating sort handles null values by placing unrated assets last
(descending) or first (ascending).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 14:54:36 +03:00
alexei.dolgolyov b48d78a188 Add Memory Mode as separate feature with independent schedule
Replace the previous memory order_by option with a dedicated Memory Mode
feature that has its own enable toggle, schedule (interval/start hour),
and settings. Users can now run both Scheduled Assets and Memory Mode
independently at different times.

Memory Mode fetches photos taken on today's date in previous years using
the memory_date parameter, sorted by date ascending (oldest first).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 14:23:57 +03:00
alexei.dolgolyov 9bb7824a38 Add Memory mode for On This Day scheduled assets
Add new "Memory (On This Day)" option to scheduled assets Order By
selector. When selected, fetches photos taken on today's date in
previous years using the on_this_day parameter from get_assets service.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:27:23 +03:00
alexei.dolgolyov 7b1ede89a3 Fix whitespace in periodic summary by inlining albums list
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>
2026-02-02 12:06:17 +03:00
alexei.dolgolyov 678cdafc39 Add link to Immich Album Watcher integration in README
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 00:33:53 +03:00
alexei.dolgolyov 4fad85ebe9 Fix album updated attribute name to last_updated_at
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>
2026-02-02 00:30:31 +03:00
alexei.dolgolyov 29158b8b07 Update README with album date placeholders documentation
Added {album_created} and {album_updated} to:
- Message Template Variables
- Asset Item Template Variables
- Album Item Template Variables (also added {album_id})
- Scheduled Assets Message Template Variables

Also added missing {common_date} and {common_location} to
Scheduled Assets documentation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 00:11:21 +03:00
alexei.dolgolyov 94ca8273b1 Add album created and updated date placeholders
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>
2026-02-01 23:51:20 +03:00
alexei.dolgolyov 39f780b46c Fix event data variables for time_pattern triggers
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>
2026-02-01 22:53:49 +03:00
alexei.dolgolyov 369ffe3fb7 Rename time_pattern trigger to hourly_timer
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>
2026-02-01 22:29:45 +03:00
alexei.dolgolyov d8df567d02 Fix whitespace stripping in video warning template
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>
2026-02-01 21:28:12 +03:00
alexei.dolgolyov 330026a44a Skip videos without playback URL
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>
2026-02-01 21:13:44 +03:00