Camera Notification Automation with Actionable Buttons Android IOS - Frigate LLM Vision AI

Camera Notification Automation with Actionable Buttons Android IOS - Using Frigate + LLM Vision

Home Assistant
Frigate
LLM Vision

An advanced Home Assistant automation blueprint that combines Frigate NVR, LLM Vision AI, and interactive mobile notifications to create intelligent, context-aware security alerts with actionable buttons.

:warning: IMPORTANT: Migration Notice for v0.6

:rotating_light: Breaking Changes - Manual Migration Required

Version 0.6 introduces significant structural changes that prevent automatic migration from previous versions.

If you are upgrading from v0.43/0.5-dev or earlier:

  1. :memo: Document your existing settings - Note down all your current automation configurations
  2. :wastebasket: Delete existing automations created with previous blueprint versions
  3. :inbox_tray: Import the new v0.6 blueprint (replaces the old blueprint)
  4. :new: Create new automations using the v0.6 blueprint with your documented settings
  5. :wrench: Configure new button features and filtering options

Why manual migration is required:

  • 18+ new button configuration inputs that didn’t exist in previous versions
  • Enhanced filtering system with new person/zone validation
  • Restructured template logic for button event handling
  • New variable structure for safe event processing

Migration cannot be automated because:

  • New inputs have no equivalent in old versions
  • Template logic has been fundamentally restructured
  • Button functionality requires explicit user configuration
  • Filtering options need individual setup decisions

:star2: Key Features

:dart: Interactive Notifications

  • :iphone: 3 Customizable Buttons per notification type (New Event + End Event)
  • :mute: Smart Silence Feature with custom timer input (5-120 minutes)
  • :telephone_receiver: Direct Call Action with configurable phone numbers
  • :camera_flash: Notification Actions: View Live, View Snapshot, View Clip
  • :house: Custom Actions: Execute any Home Assistant automation

:robot: Advanced AI Analysis

  • Dual Analysis: Initial snapshot + comprehensive video clip analysis
  • Multiple LLM SupportUsing LLM Vision: GPT-4, Claude, Gemini, Llama models
  • Person-Verified Detection: Handles Frigate’s enhanced person detection
  • Memory Integration: Uses LLM Vision timeline and memory features
  • Custom Prompts: Tailored AI analysis for your specific needs
  • Sub-label Support: Advanced filtering with Frigate sub-labels

:shield: Smart Filtering System

  • Zone Vacancy Detection: Only alert when specific people are away
  • Person Presence Validation: Check if family members are home/away
  • Custom Conditions: Add complex logic conditions

:wrench: Features

  • Optional Downloader: Choose between direct URLs or local file storage
  • Parallel Processing: Handle multiple camera events simultaneously
  • Enhanced Error Handling: Robust retry logic and safe template processing
  • Cooldown Management: Prevent notification spam with configurable delays

:hammer_and_wrench: Prerequisites

Required Components

  1. Frigate Integration

    # Frigate 0.13+ with MQTT setup
    # Camera zones configured
    # Object detection enabled
    
  2. LLM Vision Integration

    # Provider configured (OpenAI, Anthropic, Google, etc.)
    # API keys properly set
    # Memory/Timeline optional but recommended
    
  3. Home Assistant Companion App

    # Android/iOS app installed
    # Notification permissions enabled
    # Actionable notifications supported
    
  4. Downloader Integration (Optional)

    # Built-in HA integration
    # Directory permissions configured
    # Storage space available
    

:package: Installation & Migration

:new: New Installation (v0.6)

1. Import Blueprint

# Method 1: Direct URL Import
https://raw.githubusercontent.com/willhaggan/HA_Frigate_VLLM_Notification/main/Latest.yaml

# Method 2: HA UI
Settings → Automations & Scenes → Blueprints → Import Blueprint

2. Basic Configuration

# Minimal setup for testing
Camera: camera.front_door
Objects: ["person"]
LLM Provider: your_llm_vision_provider
Notification Devices: [your_mobile_device]
Button 1: "View Live" (VIEW_LIVE)
Button 2: "Silence" (SILENCE)

3. Test Your Setup

  1. Create automation with minimal settings above
  2. Trigger person detection at your camera
  3. Verify notification appears with working buttons
  4. Test silence functionality with custom timer

:arrows_counterclockwise: Migration from Previous Versions

Step 1: Document Current Settings

Before making any changes, document your existing automations:

# For each existing automation, note:
Camera: camera.your_camera
Objects: ["person", "car"]
Zones: ["front_porch", "driveway"] 
AI Prompts: "Your custom prompts"
Notification Devices: [your_devices]
Custom Actions: [any_custom_actions]
Downloader Settings: enabled/disabled
LLM Provider: your_provider
LLM Model: your_model

Step 2: Remove Old Automations

  1. Go to Settings → Automations & Scenes
  2. Find automations created with previous blueprint versions
  3. Document their settings (see Step 1)
  4. Delete the old automations

Step 3: Import New Blueprint

  1. Import v0.6 blueprint using the URL above
  2. Old blueprint will be replaced automatically

Step 4: Recreate Automations

  1. Create new automation from v0.6 blueprint
  2. Apply your documented settings
  3. Configure new button features:
    # New Event Buttons
    Button 1: "View Live" → VIEW_LIVE
    Button 2: "Silence" → SILENCE
    Button 3: "Call" → CALL (optional)
    
    # End Event Buttons  
    Button 1: "View Clip" → VIEW_CLIP
    Button 2: "View Live" → VIEW_LIVE
    Button 3: "Silence" → SILENCE
    
  4. Set up new filtering options (optional):
    # Advanced Filtering (Optional)
    Vacant Zone: zone.home
    Persons Away: ["person.john", "person.jane"]
    Custom Condition: "{{ now().hour >= 22 }}"  # Example
    

Step 5: Test Everything

  1. Test each recreated automation
  2. Verify notifications work with new buttons
  3. Test silence functionality
  4. Confirm AI analysis still works as expected

:control_knobs: Configuration Examples

Example 1: Basic Front Door Monitoring

# Simple person detection with interactive buttons
Frigate Camera: camera.front_door
Required Objects: ["person"]
Zones: ["front_porch"]
Severity: ["alert", "detection"]

# Interactive Buttons (New Event)
Button 1: "View Live" → VIEW_LIVE
Button 2: "Silence" → SILENCE  
Button 3: "Call Security" → CALL

# AI Analysis
Snapshot Prompt: "Describe who is at the front door and what they appear to be doing"
Clip Prompt: "Analyze the person's behavior. Are they delivering something, visiting, or suspicious?"

Example 2: Advanced Driveway Security

# Vehicle detection with person vacancy checking
Frigate Camera: camera.driveway
Required Objects: ["car", "person"]  # Requires BOTH objects
Zones: ["driveway"]

# Smart Filtering
Vacant Zone: zone.home
Persons Away: ["person.john", "person.jane"]  # Only alert when family is away
Custom Condition: "{{ now().hour >= 22 or now().hour <= 6 }}"  # Night only

# AI Analysis
Snapshot Prompt: "Vehicle and person detected in driveway while family is away. Describe the activity"
Clip Prompt: "Analyze this security event. Is this suspicious activity or legitimate?"

Example 3: Package Delivery Detection

# Smart package monitoring
Frigate Camera: camera.front_door
Required Objects: ["person"]
Zones: ["front_porch", "steps"]
Sub Labels: ["delivery", "package"]

# Notification Buttons
Button 1: "View Snapshot" → VIEW_SNAPSHOT
Button 2: "View Full Clip" → VIEW_CLIP
Button 3: "Silence 30min" → SILENCE

# AI Prompts
Snapshot Prompt: "Focus on package delivery activity. Describe what the person is doing with any packages"
Clip Prompt: "Analyze the complete delivery process. Was a package delivered or picked up?"

:iphone: Interactive Button Features

Available Button Actions

Action Description Use Case
VIEW_LIVE Open live camera feed Quick security check
VIEW_SNAPSHOT View event snapshot See what triggered alert
VIEW_CLIP View full video clip Review complete event
SILENCE Pause notifications Temporary quiet period
CALL Dial phone number Contact security/family

Smart Silence Feature

# User interaction examples:
Tap "Silence" → 5 minutes (default)
Type "30" + Send → 30 minutes
Type "120" + Send → 2 hours

# System behavior:
- Automation temporarily disabled
- Visual confirmation shown
- Automatic re-enable after timer
- Affects only that specific automation

Button Configuration

# New Event Buttons
Button 1: "View Live" → VIEW_LIVE → Opens camera entity
Button 2: "Silence" → SILENCE → Enables text input for timer
Button 3: "Call" → CALL → Dials configured number

# End Event Buttons  
Button 1: "View Clip" → VIEW_CLIP → Opens video file
Button 2: "View Live" → VIEW_LIVE → Opens camera entity
Button 3: "Silence" → SILENCE → Enables text input for timer

:dart: Advanced Template Variables

Use these in custom messages and AI prompts:

Event Information

{{input_objects}}      # Objects required: ["person", "car"]
{{objects}}            # Objects detected: ["person"]
{{camera_name}}        # Camera name: "Front Door"
{{zone_names}}         # Zones required: ["front_porch"]
{{before_zones}}       # Initial zones: ["driveway"]  
{{after_zones}}        # Final zones: ["front_porch"]
{{detections[0]}}      # Event ID: "1642095978.456789-abc123"
{{review_id}}          # Review ID for clips

Custom Logic Examples

# Time-based conditions
{{ now().hour >= 22 or now().hour <= 6 }}  # Night only
{{ now().weekday() < 5 }}                   # Weekdays only

# Person presence
{{ is_state('person.john', 'home') }}       # John is home
{{ states('zone.home') | int > 0 }}         # Anyone home

# Weather integration  
{{ states('weather.home') == 'rainy' }}     # Weather conditions

:rocket: Performance Tips

AI Model Selection

# Fast models (real-time alerts):
- gpt-4o-mini
- gemini-2.0-flash-lite  
- claude-3-5-haiku-latest

# Quality models (detailed analysis):
- gpt-4o
- claude-3-5-sonnet-latest
- gemini-2.0-flash

Token Optimization

# Snapshot Analysis: 50-100 tokens (quick description)
# Clip Analysis: 100-200 tokens (detailed analysis)
# Balance: Speed vs Detail based on your needs

Storage Management

# Optional Downloader setup:
Root Directory: "/config/www/frigate"
Sub Directory: "{{now().strftime('%Y-%m-%d')}}"  # Daily folders
Cleanup: Implement periodic deletion of old files

:handshake: Contributing

We welcome contributions! Here’s how to help:

Bug Reports

  • Use GitHub Issues with detailed error logs
  • Include Home Assistant and integration versions
  • Provide configuration examples that reproduce the issue

Feature Requests

  • Describe the use case and expected behavior
  • Consider how it integrates with existing features
  • Provide examples of how you’d configure it

Pull Requests

  • Fork the repository and create a feature branch
  • Test thoroughly with multiple scenarios
  • Update documentation for any new features
  • Follow existing code style and patterns

:pray: Acknowledgments

  • Frigate - Outstanding NVR software
  • LLM Vision - Excellent AI vision integration
  • Home Assistant Community - Continuous support and feedback
  • Beta Testers - Community members who helped refine v0.6 features

Version: v0.6
Author: whag
Last Updated: August 2025
Compatibility: Home Assistant 2024.1+, Frigate 0.13+

:books: Quick Links

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

7 Likes

Hello Whag,

Thanks for contributing to the community with a new Blueprint.
I have a suggestion for you. Many people who are not familiar with directory structures will have problems installing this without the Home Assistant MY tools.
Adding a MY link for this Blueprint to your top post would help them a lot.
Here is the link to make that.
Create a link – My Home Assistant
Note: if the original is in the forums here, only 1 code block can be in the top post ot the MY link tool will not work.

Delay time reduced before LLM video analysis

  • Added sub directory option for downloader.
  • Inputs added for delays before image and clip processing.
  • Variable description changes and spelling corrections.
  • Added Links for frigate and LLM Vision.

I can’t seem to get this to work and the traces seem to indicate that it fails on the download.
Does this require using the frigate add-on within haos, or can it use a separate frigate instance? The frigate server config input shows a default port of 8123, which is the ha default port. My frigate server is on a separate server and uses the default frigate port of 8971. Would it not also need a frigate username and password to login to the frigate server? I am not familiar with how the api works. Or, am I supposed to put in the ha server IP here?
Thanks for your work.

EDIT: I got this to work by putting my HomeAssistant server address into the frigate server configuration box. I used https with my internal FQDN and port 8123.

Hi Bobby in my instance i am using the HA frigate addon so its all on the same machine so the default value i have entered in the BP was based off my setup, although you have it sorted now anyway. thanks

Hi, I am not using the frigate addon in ha, i am using frigate in a container on proxmox but the blueprint wants a frigate camera. How do I go about this?

Hi, Are you using the frigate integration this is how the cameras are exposed to HA.

I already have frigate in a docker, do I still need to use the home assistant integration?

Yes you need to install the frigate integration which i linked previously and ensure you enable mqtt in your frigate config.

Thanks. That seemed to work, but now i’m getting a couple of warnings and no notification

Can you try the url in a browser and if possible the machine running HA to see if the url is accessible.

Regarding the zones have you added a zone in the input field.

Yes I have added a zone in the input field. also that url gives me a 404 not found. I am attaching my frigate config.

mqtt:
  host: 192.168.1.91
  port: 1883
  user: mqtt-user
  password: Looking123
  client_id: frigate
  topic_prefix: frigate

ffmpeg:
  hwaccel_args: preset-vaapi

detectors:
  ov:
    type: openvino
    device: AUTO

model:
  width: 300
  height: 300
  input_tensor: nhwc
  input_pixel_format: bgr
  path: /openvino-model/ssdlite_mobilenet_v2.xml
  labelmap_path: /openvino-model/coco_91cl_bkgr.txt

record:
  enabled: true
  retain:
    days: 7
    mode: motion
  alerts:
    retain:
      days: 30
  detections:
    retain:
      days: 30
detect:
  enabled: true

snapshots:
  enabled: true
  retain:
    default: 30

cameras:
  kitchen:
    snapshots:
      enabled: true
      retain:
        default: 10
    detect:
      width: 1280
      height: 720
      fps: 5
    ffmpeg:
      inputs:
        - path: rtsp://rafsanjani:[email protected]:554/stream1
          roles:
            - record
        - path: rtsp://rafsanjani:[email protected]:554/stream2
          roles:
            - detect
    zones:
      zone_1:
        coordinates: 0.014,0.019,0.012,0.98,0.992,0.975,0.984,0.02
        loitering_time: 0
    review:
      alerts:
        required_zones: zone_1
version: 0.15-1

Hi there I have not setup frigate on a separate machine before so I do not have a direct means of testing your issues. I can only assume you need the frigate proxy add on or port 5000 needs opened on frigate server side.

Regarding the zone_names error… Did you select a zone from the predefined list or did you manually enter it.

I selected the zone from the predefined list. That warning seems to have gone now but it seems the media is still not getting downloaded.

Okay well that’s one thing.

I would advise opening port 5000 on frigate and maybe look at installing the proxy add-on or do some research on the external access

Is it giving the same error on the trace.

Updates: Version 0.2

  • Added sections.

  • Input entry for custom zones.

  • Altered template for custom zone entry as well as the default device selector.

  • Extra models added to models default list.

  • Option to disable LLM Vision Image Analysis of initial notification, along with a custom message for the notification. should this be set to false.

  • Prompt and related options split for image and clip analysis.

  • Altered downloader directory and sub directory variables to add “/” if missing.

  • Variable spelling correction in logbook.log action.

  • Some variable names changed along with a few unused removed.

  • Minor description changes.

To do: add input option for all zones required rather then just any zone matched

Hi, i am trying to setup the automation and it triggeres. But never got the notification to fire. it starts a loop and i think when it checks if the clip exist, it does not. is ther something i am missing? I’m not sure about my downloader configuration… is there a way to access the files directly on my frigate box?