# 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.<entity_id>', '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.
