# AI Camera Motion Automations - Optimization Session **Date:** 2026-07-24 (updated) **Automations Modified:** - Motion Backyard - AI Description - Version 2 - Motion Front Door - AI Description - Version 2 - Motion Shed - AI Description - Version 2 - Motion Garage - AI Description - Version 2 --- ## Session 1 (Earlier today) ### 1. Added Snapshot Cleanup (shell_command) **File:** `configuration.yaml` ```yaml shell_command: cleanup_blink_snapshots: "find /media -name 'blink_*.jpg' -mmin +60 -delete" ``` ### 2. Removed Duplicate Snapshot Removed the second `camera.snapshot` to `/config/www/` from all 4 automations. ### 3. Added Snapshot Cleanup Action Added `shell_command.cleanup_blink_snapshots` as first action in each automation. ### 4. Removed Empty `data: {}` from Switch Actions Cleaned up unnecessary empty `data: {}` blocks. ### 5. Added 60-Second Cooldown Condition Added rate-limiting condition using hardcoded entity references: ```yaml value_template: "{{ (now() - state_attr('automation.', 'last_triggered')).total_seconds() > 60 }}" ``` --- ## Session 2 (This session) ### 1. Fixed Spook Warnings - Hardcoded Entity References **File:** `automations.yaml` (all 4 automations) **Before:** ```yaml value_template: "{{ (now() - state_attr('automation.motion_backyard_ai_description_version_2', 'last_triggered')).total_seconds() > 60 }}" ``` **After:** ```yaml value_template: "{{ (now() - state_attr(this.entity_id, 'last_triggered')).total_seconds() > 60 }}" ``` **Reason:** Spook reported unknown entities because the automation referenced itself by hardcoded entity ID. Using `this.entity_id` resolves this. --- ### 2. Re-added Second Snapshot to `/config/www/` **File:** `automations.yaml` (all 4 automations) Reverted the Session 1 change. Added back the second `camera.snapshot` to `/config/www/` for each automation. This is needed because persistent notifications use `/local/` which maps to `/config/www/`, not `/media/`. ```yaml - action: camera.snapshot target: entity_id: camera.blink_backyard data: filename: /media/{{ snapshot_filename }} - action: camera.snapshot target: entity_id: camera.blink_backyard data: filename: /config/www/{{ snapshot_filename }} ``` --- ### 3. Updated Shell Command Cleanup **File:** `configuration.yaml` **Before:** ```yaml cleanup_blink_snapshots: "find /media -name 'blink_*.jpg' -mmin +60 -delete" ``` **After:** ```yaml cleanup_blink_snapshots: "find /media /config/www -name 'blink_*.jpg' -mmin +60 -delete" ``` **Reason:** Now that we save to both `/media/` and `/config/www/`, both directories need cleanup. Requires HA restart to take effect. --- ### 4. Created `/config/www/` Directory The directory did not exist, so `camera.snapshot` to `/config/www/` was silently failing. --- ### 5. Added Images Back to Persistent Notifications **File:** `automations.yaml` (Front Door, Shed, Garage) Added `![Snapshot](/local/{{ snapshot_filename }})` to the persistent notification message for all 3 automations. The Backyard automation already had this. --- ### 6. Fixed Front Door Persistent Notification **File:** `automations.yaml` **Before:** Used broken `notify.persistent_notification` action (with duplicate `data:` keys) AND a separate `persistent_notification.create` without image. **After:** Single `persistent_notification.create` with image in message, matching the working Backyard pattern. --- ### 7. Fixed Camera Targets (Critical Bug) **File:** `automations.yaml` | Automation | Before (WRONG) | After (CORRECT) | |---|---|---| | Front Door | `camera.blink_backyard` | `camera.blink_front` | | Shed | `camera.blink_backyard` | `camera.blink_backyard_shed` | | Backyard | `camera.blink_backyard` | `camera.blink_backyard` (correct) | | Garage | `camera.blink_backyard_tree` | `camera.blink_backyard_tree` (correct) | **Reason:** Front Door and Shed were both snapshotting the backyard camera instead of their own cameras. --- ### 8. Updated Front Door AI Task Name **Before:** `Nest Front Camera Analysis` **After:** `Blink Front Camera Analysis` **Reason:** This is a Blink camera, not a Nest camera. --- ## Final State of All 4 Automations | Automation | Camera | Filename Prefix | Snapshot Paths | Persistent Notification | |---|---|---|---|---| | Backyard | `camera.blink_backyard` | `blink_backyard_` | `/media/` + `/config/www/` | `![Snapshot]` included | | Front Door | `camera.blink_front` | `blink_Front_` | `/media/` + `/config/www/` | `![Snapshot]` included | | Shed | `camera.blink_backyard_shed` | `blink_shed_` | `/media/` + `/config/www/` | `![Snapshot]` included | | Garage | `camera.blink_backyard_tree` | `blink_Inshed_` | `/media/` + `/config/www/` | `![Snapshot]` included | --- ## System Architecture - Blink Cameras via Homebridge **Critical Context:** Blink cameras are exposed to Home Assistant via **Homebridge**, NOT the native Blink integration. **Why:** The built-in Blink integration stopped working. The user reverted to Homebridge which exposes the cameras again. However, there are 2 Homebridge plugins - one does NOT have the "force snapshot" capability. **Homebridge Plugin:** `Homebridge Blink Cameras New API F12C` (confirmed via entity `button.homebridge_blink_cameras_new_api_f12c_identify`) **Camera Entities (all via Homebridge):** - `camera.blink_backyard` - Backyard - `camera.blink_front` - Front - `camera.blink_backyard_shed` - Shed - `camera.blink_backyard_tree` - Garage (mislabeled - physically monitors garage area) - `camera.blink_garage_side` - Garage Side - `camera.blink_thermopump` - Thermopump **Refresh Snapshot Switches:** - `switch.backyard_refresh_snapshot` - `switch.front_refresh_snapshot` - `switch.backyard_shed_refresh_snapshot` - `switch.backyard_tree_refresh_snapshot` - `switch.garage_side_refresh_snapshot` - `switch.thermopump_refresh_snapshot` --- ## Known Limitations ### Homebridge Integration Limitations (CRITICAL) 1. **No Force Refresh Capability** - The Homebridge Blink integration exposes cameras as basic entities with `supported_features: 0`. This means: - No `blink.trigger_camera` service (old Blink integration feature - DISABLED in automations) - No way to force the camera to take a fresh snapshot on demand - `camera.snapshot` action simply saves whatever image is currently cached by the integration 2. **Stale Image Problem** - When automation triggers: - `switch.*_refresh_snapshot` is turned on (purpose unclear - may not actually work) - Delays (30s + 5s) are used to give Blink time to update - `homeassistant.update_entity` is called to poll - `camera.snapshot` saves the current cached image (which may be OLD) 3. **Image Cache Timing** - Blink cameras cache images and update them periodically. There's no guaranteed way to force a fresh capture through Homebridge. ### Other Limitations - Blink API throttling may cause stale snapshots when multiple automations run in quick succession - `camera.snapshot` returns success but may not write file if Blink hasn't refreshed its image cache - `shell_command` cleanup update requires HA restart to take effect - The `switch.*_refresh_snapshot` switches may be non-functional remnants from the old Blink integration --- ## Testing Results (2026-07-24) - **Front Door**: **GOLD STANDARD** - Most reliable automation. Gets the latest image almost every time. Image processing via Ollama works correctly. This is the reference implementation the others should match. - **Backyard**: Working correctly - correct image, Ollama processing successful - **Shed**: Working correctly - correct image, Ollama processing successful - **Garage**: **ISSUE** - Sometimes uses stale/old image. The Homebridge integration may not have refreshed the camera's cached image before snapshot is taken. **Note:** All 4 automations ran and captured the correct camera images. However, the **Garage automation** has been observed using old/stale images. This is a known limitation of the Homebridge integration - there's no guaranteed way to force a fresh snapshot. Long-term observation needed to determine if this is a timing issue or a hard limitation. --- ## Session 3 (Current - 2026-07-24) ### Issue Reported: Garage Automation Using Stale Image **Problem:** User ran the garage automation and it used an old/cached image from the Blink camera instead of a fresh snapshot. **Investigation Findings:** 1. The `blink.trigger_camera` action in the automation is **DISABLED** (line 2880-2884) - this is old code from when the built-in Blink integration was working 2. The built-in Blink integration **stopped working**, so the user reverted to **Homebridge** to expose cameras 3. The Homebridge Blink integration (`Homebridge Blink Cameras New API F12C`) does NOT provide a "force snapshot" capability 4. Camera entities have `supported_features: 0` - no special capabilities exposed 5. The `switch.*_refresh_snapshot` switches may not actually trigger a fresh capture **Root Cause:** This is a **hard limitation** of the Homebridge integration. The `camera.snapshot` action saves whatever image is currently cached by the integration. There's no way to force the camera to take a new photo on demand. **Resolution:** User will monitor for a few days to see if the issue persists. The 30s + 5s delays in the automation are intended to give Blink time to update its cache, but this is not guaranteed to work.