Mastering Advanced AI-Powered Object Detection: Integrating Frigate with Home Assistant for Proactive Security

NGC 224
DIY Smart Home Creator
Mastering Advanced AI-Powered Object Detection: Integrating Frigate with Home Assistant for Proactive Security
Traditional motion detection in smart homes often suffers from a critical flaw: unreliability. A shadow, a squirrel, rain, or even a tree swaying in the wind can trigger a flurry of false alarms, leading to notification fatigue and, ultimately, a less secure and more frustrating experience. This constant stream of irrelevant alerts undermines the very purpose of a security system and often leads users to disable notifications entirely, defeating their proactive intent.
The solution lies in moving beyond pixel-based motion detection to intelligent, AI-powered object recognition. Frigate, an open-source network video recorder (NVR) with real-time local object detection, leverages machine learning to accurately identify specific objects—like people, cars, and animals—in your camera feeds. By integrating Frigate with Home Assistant, you can transform your security setup from reactive and prone to false positives into a truly proactive, intelligent system that only notifies you when it matters and enables highly sophisticated, context-aware automations.
Step-by-Step Setup: Integrating Frigate with Home Assistant
1. Prerequisites for a Robust Frigate Installation
Before diving into Frigate, ensure you have these components ready:
- Docker & Docker Compose: Frigate runs best in a containerized environment. Ensure Docker and Docker Compose are installed on your host system (e.g., Ubuntu server, Raspberry Pi 4).
- MQTT Broker (Mosquitto): Frigate communicates its detections and camera status via MQTT. You'll need an MQTT broker (like Mosquitto) configured and accessible by both Frigate and Home Assistant.
- RTSP-enabled Cameras: Your IP cameras must provide an RTSP stream. Most modern IP cameras (e.g., Amcrest, Reolink, UniFi Protect) support this. Obtain the RTSP URL for each camera.
- Google Coral Edge TPU (Highly Recommended): While Frigate can run on CPU, a Google Coral USB Accelerator or M.2 variant dramatically improves performance and allows for real-time object detection without bogging down your CPU. This is crucial for multiple camera setups and high frame rates.
- Adequate Storage: Frigate records events. Plan for sufficient storage (SSD recommended) for video clips and snapshots.
Screenshot Placeholder: Image showing Google Coral USB Accelerator.
2. Installing Frigate with Docker Compose
Create a directory for Frigate (e.g., /opt/frigate
) and inside it, create a docker-compose.yaml
file:
# /opt/frigate/docker-compose.yaml
version: '3.9'
services:
frigate:
container_name: frigate
privileged: true # Required for direct hardware access, e.g., Coral
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable
volumes:
- /etc/localtime:/etc/localtime:ro
- /opt/frigate/config/config.yml:/config/config.yml:ro
- /opt/frigate/storage:/media/frigate # Persistent storage for recordings and clips
- type: tmpfs # Optional: Mount /tmp as tmpfs for better performance of detection data
target: /tmp/cache
tmpfs:
size: 1000000k # 1GB, adjust as needed
ports:
- "5000:5000" # Frigate Web UI
- "1935:1935" # RTMP (if needed for streaming)
environment:
- FRIGATE_RTSP_PASSWORD=your_rtsp_password # Only needed if your RTSP streams are password protected
devices:
- /dev/dri:/dev/dri # For Intel Quick Sync hardware acceleration (if available)
- /dev/bus/usb:/dev/bus/usb # For Google Coral USB Accelerator
shm_size: "256mb" # Required for shared memory with detection models
networks:
- frigate_network
networks:
frigate_network:
external: true # Assumes you have a 'frigate_network' already created, or define it here.
Create a Docker network if you haven't already: docker network create frigate_network
.
Then, start Frigate:
cd /opt/frigate
docker-compose up -d
3. Basic Frigate Configuration (`config.yml`)
Create /opt/frigate/config/config.yml
. This file defines your cameras, detection parameters, and MQTT settings.
# /opt/frigate/config/config.yml
mqtt:
host: 192.168.1.100 # Your MQTT broker IP/hostname
user: homeassistant # MQTT username
password: your_mqtt_password # MQTT password
detectors:
coral:
type: edgetpu
device: usb # Or 'pci' if using M.2 Coral
ffmpeg:
hwaccel_args:
- -c:v
- h264_qsv # Example for Intel Quick Sync, adjust for your hardware (e.g., 'cuda' for Nvidia, 'v4l2m2m' for RPi)
- -r
- 5 # Reduced frame rate for detection stream
objects:
track:
- person
- car
- dog
filters:
person:
min_area: 5000 # Minimum pixel area for a person to be detected
max_area: 100000 # Maximum pixel area
threshold: 0.7 # Confidence threshold (0-1.0)
car:
min_area: 15000
max_area: 200000
threshold: 0.6
record:
enabled: True
retain:
days: 7
mode: all # all, motion, active_objects
ui:
port: 5000
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://user:[email protected]:554/stream1 # Your camera's RTSP stream
roles:
- detect
- record
- path: rtsp://user:[email protected]:554/stream2 # Low-res stream for detection
roles:
- detect
output_args:
record: -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -an
detect:
enabled: True
width: 1280 # Resolution for detection (should be lower than main stream for performance)
height: 720
zones:
driveway:
coordinates:
- 0,0
- 640,0
- 640,360
- 0,360
objects:
- person
- car
threshold: 0.75
backyard:
ffmpeg:
inputs:
- path: rtsp://user:[email protected]:554/stream1
roles:
- detect
- record
detect:
enabled: True
width: 1280
height: 720
objects:
track:
- person
- dog
mqtt:
enabled: True
topic_prefix: frigate/backyard # Custom topic prefix for this camera
Restart Frigate after modifying the config: docker-compose restart frigate
. Access the Frigate UI at http://your-frigate-ip:5000
.
Screenshot Placeholder: Frigate UI showing camera feeds and detections.
4. Integrating Frigate with Home Assistant via MQTT
Frigate automatically publishes detection events and camera status to MQTT. With Home Assistant's MQTT integration configured, Frigate's entities (binary sensors for motion, object detection, camera sensors) should be automatically discovered. Ensure your Home Assistant MQTT configuration points to the same broker Frigate is using.
If not automatically discovered, check your MQTT broker logs or manually add the Frigate MQTT integration via Configuration -> Integrations -> Add Integration -> MQTT and ensure "Enable discovery" is checked.
Screenshot Placeholder: Home Assistant MQTT integration page.
5. Adding the Frigate HACS Integration (Optional but Recommended)
For an enhanced Home Assistant experience with Frigate, install the Frigate integration from HACS (Home Assistant Community Store).
- Go to HACS -> Integrations -> Explore & Download Repositories.
- Search for "Frigate" and download the integration.
- Restart Home Assistant.
- Go to Configuration -> Integrations -> Add Integration -> Search for "Frigate".
- Configure it with your Frigate host (
http://your-frigate-ip:5000
) and MQTT details if requested.
This integration provides media browsing for clips and snapshots directly within Home Assistant, along with enhanced entities and services.
Screenshot Placeholder: HACS Frigate integration in Home Assistant.
Troubleshooting Section
-
No Detections Occurring / Low FPS:
- Check Frigate Logs: Access logs with
docker-compose logs frigate
. Look for errors related to FFmpeg, Coral, or MQTT. - RTSP Stream Issues: Verify your camera's RTSP URL is correct and accessible from the Frigate container. Try playing it with VLC.
- Coral Detection: Ensure your Coral TPU is detected by Frigate. Logs should show `INFO : Detected Google Coral: usb`. If not, check USB passthrough in Docker Compose and verify the device is recognized by the host OS.
- CPU Usage: High CPU usage might indicate your Coral isn't working, or your camera's detection resolution is too high for your CPU. Consider using a lower resolution sub-stream for detection.
- `shm_size` too low: Increase
shm_size
indocker-compose.yaml
if you see `[detector] 'buffer_allocate_failed'`.
- Check Frigate Logs: Access logs with
-
Home Assistant Not Showing Frigate Entities:
- MQTT Connection: Ensure both Frigate and Home Assistant are successfully connected to the MQTT broker. Check broker logs for client connection issues.
- MQTT Discovery: Verify MQTT discovery is enabled in Home Assistant's MQTT integration settings.
- Frigate MQTT Configuration: Double-check the MQTT host, user, and password in Frigate's
config.yml
.
-
Too Many False Positives/Negatives:
- Detection Zones & Masks: Use masks in
config.yml
to exclude areas prone to false triggers (e.g., swaying trees, busy roads). - Object Filters (
min_area
,max_area
,threshold
): Adjust these parameters for each object type. Increasingthreshold
makes detection stricter (fewer false positives). Adjusting `min_area`/`max_area` helps filter out very small or very large objects. - FPS for Detection: Lowering the
detect: fps
for a camera might reduce false positives but can also miss fast-moving objects.
- Detection Zones & Masks: Use masks in
Advanced Config / Optimization
Masking Sensitive Areas
Masks are crucial for reducing false positives by telling Frigate to ignore specific regions of a camera's view. This is invaluable for areas with foliage, roads, or public spaces.
cameras:
backyard:
# ... other config ...
detect:
# ... other detect config ...
masks:
- # Example: ignore top-right corner where tree is
- 1000,0
- 1280,0
- 1280,300
- 1000,300
- # Example: ignore a busy road section
- 0,700
- 1280,700
- 1280,720
- 0,720
Use the Frigate UI's debug view to accurately draw your mask coordinates.
Event Retention and Storage Management
Frigate can consume significant storage. Optimize retention policies:
record:
enabled: True
retain:
days: 7 # Keep recordings for 7 days
mode: all # 'all' (all motion), 'motion' (only motion clips), 'active_objects' (only clips with detected objects)
# Optional: specific retention for clips and snapshots
events:
retain:
default: 10 # Keep events for 10 days by default
objects:
person: 30 # Keep person events for 30 days
car: 7
max_objects: 5 # Max simultaneous objects to track per event
snapshots:
enabled: True
timestamp: True
bounding_box: True
quality: 75
retain:
default: 7
objects:
person: 14 # Keep person snapshots for 14 days
Consider mounting a dedicated SSD for Frigate's /media/frigate
volume for better performance and longevity.
Scaling with Multiple Coral Accelerators
If you have many cameras and still experience high latency or missed detections, consider adding another Coral TPU. In config.yml
, define multiple detectors:
detectors:
coral1:
type: edgetpu
device: usb:0 # First USB Coral
coral2:
type: edgetpu
device: usb:1 # Second USB Coral
cameras:
front_door:
# ...
detect:
# ...
detector_id: coral1
backyard:
# ...
detect:
# ...
detector_id: coral2
Real-World Example: Proactive Front Door Security with Frigate and Home Assistant
Let's build an automation that only alerts us and takes action when a person is detected at the front door, differentiating from a delivery driver who just drops a package and leaves, or a family member arriving home.
Goal:
- When a person is detected at the
front_door
camera. - Turn on the porch light to 100% brightness.
- Send a rich notification to our mobile phones with a snapshot of the detection.
- If it's after dark, and the person stays for more than 30 seconds (not a quick delivery), flash the porch light as a deterrent.
- Disarm the alarm if a specific family member (e.g., via advanced facial recognition, or an NFC tag scan upon entry) is detected and verified.
# Home Assistant Automation (automations.yaml)
- alias: 'Frigate Front Door Person Detection'
id: frigate_front_door_person_detection
trigger:
- platform: mqtt
topic: frigate/events
payload: 'new'
condition:
- condition: template
value_template: "{{ trigger.payload_json.after.camera == 'front_door' and trigger.payload_json.after.label == 'person' and trigger.payload_json.after.false_positive == false }}"
action:
- service: light.turn_on
entity_id: light.porch_light
data:
brightness_pct: 100
rgb_color: [255, 255, 255]
- service: notify.mobile_app_YOUR_PHONE_NAME
data_template:
title: "Person Detected at Front Door"
message: "{{ trigger.payload_json.after.label }} detected at {{ trigger.payload_json.after.camera }} at {{ trigger.payload_json.after.start_time | timestamp_local }}"
data:
image: "{{ trigger.payload_json.after.snapshot_url }}"
tag: "frigate_front_door_person_{{ trigger.payload_json.after.id }}"
clickAction: "/api/frigate/notifications/{{ trigger.payload_json.after.id }}"
actions:
- action: "VIEW_FRIGATE"
title: "View Event"
- delay: # Wait for 30 seconds to check if person is lingering
seconds: 30
- condition: # Check if the person is still there (using Frigate's in_progress event or a template sensor)
condition: template
value_template: "{{ states('binary_sensor.front_door_person_occupancy') == 'on' }}"
- choose:
- conditions:
- condition: sun
before: sunrise
after: sunset
sequence:
- service: light.turn_on
entity_id: light.porch_light
data:
flash: 5 # Flash 5 times
brightness_pct: 100
rgb_color: [255, 0, 0] # Red flash as deterrent
- service: automation.trigger
entity_id: automation.disarm_alarm_if_family_member_detected # Placeholder for a more advanced facial recognition/NFC automation
variables:
frigate_event_id: "{{ trigger.payload_json.after.id }}"
This automation showcases how Frigate's precise object detection can drive complex, intelligent automations. The use of delay
and checking the `_occupancy` sensor allows for nuanced reactions, distinguishing between a quick passing event and someone lingering. The `snapshot_url` provides immediate visual context.
Best Practices / Wrap-up
-
Performance Optimization:
- Dedicated Hardware: Run Frigate on a dedicated device (e.g., a mini PC, Intel NUC) for optimal performance.
- Google Coral TPU: This is a game-changer. Do not underestimate its impact on detection speed and CPU load.
- Sub-Streams for Detection: Configure your cameras to provide a lower resolution sub-stream specifically for Frigate's detection input. This significantly reduces processing requirements.
- Hardware Acceleration (FFmpeg): Utilize hardware acceleration (QSV, NVENC, V4L2) for video decoding in Frigate's FFmpeg configuration if your host hardware supports it.
-
Privacy & Local Processing:
- Frigate keeps all video processing local, meaning your sensitive camera feeds are not sent to cloud services, enhancing privacy.
- Ensure your Frigate instance and MQTT broker are on a secure, ideally segmented, local network.
-
Storage Management:
- Use an SSD for Frigate's storage volume (`/media/frigate`) for better performance and reliability compared to SD cards or HDDs for constant writes.
- Regularly review and fine-tune your retention policies (
record
,snapshots
,events
) to prevent storage exhaustion.
-
Security Measures:
- Secure your MQTT broker with a strong username/password, and consider enabling TLS.
- Protect your Frigate UI with basic authentication if exposed outside your local network (though generally not recommended).
- Keep Frigate and Home Assistant updated to benefit from the latest security patches and features.
-
Maintenance & Monitoring:
- Monitor Frigate's health and performance via its UI or by integrating its sensors into Home Assistant (e.g., detector FPS, CPU usage).
- Regularly back up your
config.yml
and Docker Compose file.
By thoughtfully implementing Frigate with Home Assistant, you move beyond basic motion alerts to a truly intelligent, context-aware security system. This setup empowers you to create automations that are not only more reliable but also profoundly enhance the safety and comfort of your smart home, providing peace of mind without the constant nuisance of false alarms.

NGC 224
Author bio: DIY Smart Home Creator