Local realtime person detection for RTSP cameras

I mean that the image I get from Pushover is not the same as the HA notification image when I use the above code.

I think what is happening is that when I call the HA Downloader service its a bit too slow to finish out before the next automation service runs. It doesn’t finish grabbing the new snapshot yet from frigate at:

url: 'http://10.200.200.54:5000/events/{{trigger.payload_json["after"]["id"]}}/snapshot.jpg?format=android

So when the next service is called which is the Pushover service, the Downloader hasn’t finished writing the new snapshot.jpg. So Pushover is still attaching the “old” snapshot.jpg. I can correct this issue if I use a 1 second delay between the HA Download service and the Pushover Notification. When I inject the automation delay, that forces the Pushover service to wait. That one second is enough for the Downloader to finished what its doing.

The images still don’t match up however. The image I get from the HA notification is still different, but at least its the same motion “timeline”.

I will say I’m using this as my condition:

condition: 
      - "{{ trigger.payload_json['after']['label'] == 'person' }}"
      - "{{ ( as_timestamp(now()) - as_timestamp(state_attr('automation.driveway_notfication', 'last_triggered')) |int(0) ) > 45 }}"

I’m using that second condition so I only get one notification and not a dump of several. That may be part of my issue with the notification images not matching between HA and Pushover.

The snapshot will update during the event as better images are found. Which one you get will depend on what time you fetch that endpoint. If you have a camera at 5 fps, you could get up to 5 updates to the snapshot in a second.

Now that makes sense on why the images may be slightly different between my two notifications since they are sent fractions of a second apart as the automation runs.

I guess if I want to continue using Pushover with image attachments then I’ll have to continue to use the HA Downloader service. Its not big deal. Adding the one second delay at least gets me snapshots during the same event even if they aren’t exactly the same.

Two questions:

Is it normal for the bbox HTTP endpoint to show the bounding boxes behind the mask even when I have a masked turned on in the config? I can confirm the mask is enabled because I can see the mask using the HTTP mask endpoint. If I drop the mask endpoint and just turn on the bbox endpoint, Frigate is still showing those bboxes where the mask is located. I thought with a mask enabled Frigate couldn’t see in those areas.

Second, anyone on a RPi4 have this running sucessfully? I don’t have the Coral device yet for the Pi so just doing testing. Using the 32-bit Raspberry OS. I think I picked the right image for frigate in the docker-compose file. Anyway Frigate runs fine until it begins to write clips and the errors below then start to come in.

frigate    | watchdog.driveway              INFO    : Waiting for ffmpeg to exit gracefully...                                  
frigate    | [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1b46ce0] moov atom not found                                                          
frigate    | /tmp/cache/driveway-20201229162410.mp4: Invalid data found when processing input                                   
frigate    | frigate.events                 INFO    : bad file: driveway-20201229162410.mp4                                     
frigate    | [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1b33ce0] moov atom not found                                                          
frigate    | /tmp/cache/driveway-20201229162400.mp4: Invalid data found when processing input                                   
frigate    | frigate.events                 INFO    : bad file: driveway-20201229162400.mp4                                     
frigate    | watchdog.driveway              INFO    : Terminating the existing ffmpeg process...                                
frigate    | watchdog.driveway              INFO    : Waiting for ffmpeg to exit gracefully... 

Here is my docker-compose file:

services:
  frigate:
      container_name: frigate
      restart: unless-stopped
      privileged: true
      image: blakeblackshear/frigate:0.8.0-beta3-armv7
      volumes:
        - /dev/bus/usb:/dev/bus/usb
        - /etc/localtime:/etc/localtime:ro
        - /home/joe/frigate/config:/config                                                      
        - /home/joe/frigate/clips:/media/frigate/clips                                          
        #- <path_to_directory_for_recordings>:/media/frigate/recordings                                      
        - type: tmpfs # 1GB of memory, reduces SSD/SD Card wear                                              
          target: /tmp/cache
          tmpfs:
            size: 100000000
      ports:
        - "5000:5000"
        - "1935:1935"
      environment:
        FRIGATE_RTSP_PASSWORD: "password"

And my simple config file:

  host: 10.200.200.44
  user: frigate
  password: pass

save_clips:
  max_seconds: 300
  retain:
      default: 10

ffmpeg:
  global_args: -hide_banner -loglevel info

ffmpeg:
  hwaccel_args:
    - -c:v
    - h264_mmal

objects:
  track:
   - car

cameras:
  driveway:
    ffmpeg:
      inputs:
        - path: rtsp://admin:{FRIGATE_RTSP_PASSWORD}@10.200.200.14:554/cam/realmonitor?channel=1&subtype=1
          roles:
            - rtmp
            - detect
        - path: rtsp://admin:{FRIGATE_RTSP_PASSWORD}@10.200.200.14:554/cam/realmonitor?channel=1&subtype=0
          roles:
            - clips
    height: 480
    width: 704
    fps: 5
    save_clips:
      enabled: True
      pre_capture: 1
      objects:
        - car
    mask: poly,3,82,0,0,703,2,702,479,0,478,0,209,702,202,700,54,393,78

Is there anything special with a Rpi4 I need to be doing other than choosing the frigate:0.8.0-beta3-armv7 image for Docker and then using the following ffmpeg arguments:

  hwaccel_args:
    - -c:v
    - h264_mmal

The mask is only for motion detection. It will prevent motion from triggering detection in those areas, but frigate will still track objects as they move into masked areas and may pick up other objects in the background as well. I will be adding object detection masks separately.

Thanks for that explanation.

Should I open up an issue for the RPi4? Ffmpeg throws errors from the Frigate console when it tries to write clips, I’m using the recommended ffmpeg args as described in your read me. Using 32bit OS as well.

Working flawlessly on Home Assistant Blue Odroid N2+. Inference time is usually 12ms.

1 Like

I’m using the HassOS Beta Add-on and the custon_component.

I have correctly connected to the MQTT broker but the only MQTT communication that is happening is the available state and the snapshot. This means I can’t make any additional sensors.

That’s surely not correct?

What does CPU usage look like? Are you able to get ffmpeg hardware acceleration?

Did you make a specific user and password for frigate or are you doing anonymous? Someone posted earlier that mqtt didn’t fully work until they did this.

The USB accelerators are out of stock just about everywhere in the USA. Trying to find one for my Rpi.

I’ve noticed my homeassistant log file is filling up with exceptions

Running v1.3 of frigate with USB Coral on Intel NUC

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 462, in async_render_to_info
    render_info._result = self.async_render(variables, **kwargs)
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 355, in async_render
    raise TemplateError(err) from err
homeassistant.exceptions.TemplateError: UndefinedError: 'None' has no attribute 'attributes'
2020-12-28 16:38:06 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('UndefinedError: 'None' has no attribute 'attributes'') while processing template 'Template("{{ states.sensor.frigate_debug.attributes["frontyard"]["detection_fps"] }}")' for attribute '_state' in entity 'sensor.frontyard_detection_fps'
2020-12-28 16:38:06 ERROR (MainThread) [homeassistant.helpers.event] Error while processing template: Template("{{ states.sensor.frigate_debug.attributes["driveway"]["camera_fps"] }}")
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 353, in async_render
    render_result = compiled.render(kwargs)
  File "/usr/local/lib/python3.8/site-packages/jinja2/environment.py", line 1090, in render
    self.environment.handle_exception()
  File "/usr/local/lib/python3.8/site-packages/jinja2/environment.py", line 832, in handle_exception
    reraise(*rewrite_traceback_stack(source=source))
  File "/usr/local/lib/python3.8/site-packages/jinja2/_compat.py", line 28, in reraise
    raise value.with_traceback(tb)
  File "<template>", line 1, in top-level template code
  File "/usr/local/lib/python3.8/site-packages/jinja2/sandbox.py", line 384, in getitem
    return obj[argument]
jinja2.exceptions.UndefinedError: 'None' has no attribute 'attributes'
web_port: 5000
detectors:
  coral:
    type: edgetpu
    device: 'usb:0'
save_clips:
  max_seconds: 300
  clips_dir: /media/frigate
  cache_dir: /cache
mqtt:
  host: 172.17.0.1
  port: 1883
  topic_prefix: frigate
  client_id: frigate
  user: user
  password: 8cTWNt9OCVS5zWfxtvJA
ffmpeg:
  hwaccel_args:
    - '-hwaccel'
    - vaapi
    - '-hwaccel_device'
    - /dev/dri/renderD128
    - '-hwaccel_output_format'
    - yuv420p
cameras:
  driveway:
    ffmpeg:
      input: 'rtsp://admin:[email protected]:554/Streaming/channels/102'
    height: 480
    width: 640
    save_clips:
      enabled: true
      pre_capture: 10
  frontyard:
    ffmpeg:
      input: 'rtsp://admin:[email protected]:554/Streaming/channels/102'
    height: 480
    width: 640
    save_clips:
      enabled: true
      pre_capture: 10
  patio:
    ffmpeg:
      input: 'rtsp://admin:[email protected]:554/Streaming/channels/102'
    height: 480
    width: 640
    save_clips:
      enabled: true
      pre_capture: 5
objects:
  track:
    - person
    - car
    - cat
    - dog
  filters:
    person:
      min_area: 0
      max_area: 100000
      min_score: 0.5
      threshold: 0.85
camera:
  - name: frontyard Last Person
    platform: mqtt
    topic: frigate/frontyard/person/snapshot
  - name: frontyard Last Car
    platform: mqtt
    topic: frigate/frontyard/car/snapshot
    
  - name: driveway Last Person
    platform: mqtt
    topic: frigate/driveway/person/snapshot
  - name: driveway Last Car
    platform: mqtt
    topic: frigate/driveway/car/snapshot  

  - name: patio Last Person
    platform: mqtt
    topic: frigate/patio/person/snapshot
  - name: patio Last Cat
    platform: mqtt
    topic: frigate/patio/cat/snapshot    

binary_sensor:
  - name: frontyard Person
    platform: mqtt
    state_topic: "frigate/frontyard/person"
    device_class: motion
    availability_topic: "frigate/available"
    
  - name: driveway Person
    platform: mqtt
    state_topic: "frigate/driveway/person"
    device_class: motion
    availability_topic: "frigate/available"   

  - name: patio Person
    platform: mqtt
    state_topic: "frigate/patio/person"
    device_class: motion
    availability_topic: "frigate/available"    

sensor:
  - platform: rest
    name: Frigate Debug
    resource: http://localhost:5000/debug/stats
    scan_interval: 5
    json_attributes:
      - driveway
      - frontyard
      - detection_fps
      - detectors
    value_template: 'OK'  
  - platform: template
    sensors:
      frontyard_fps: 
        value_template: '{{ states.sensor.frigate_debug.attributes["frontyard"]["camera_fps"] }}'
        unit_of_measurement: 'FPS'
      frontyard_skipped_fps: 
        value_template: '{{ states.sensor.frigate_debug.attributes["frontyard"]["skipped_fps"] }}'
        unit_of_measurement: 'FPS'
      frontyard_detection_fps: 
        value_template: '{{ states.sensor.frigate_debug.attributes["frontyard"]["detection_fps"] }}'
        unit_of_measurement: 'FPS'

      driveway_fps: 
        value_template: '{{ states.sensor.frigate_debug.attributes["driveway"]["camera_fps"] }}'
        unit_of_measurement: 'FPS'
      driveway_skipped_fps: 
        value_template: '{{ states.sensor.frigate_debug.attributes["driveway"]["skipped_fps"] }}'
        unit_of_measurement: 'FPS'
      driveway_detection_fps: 
        value_template: '{{ states.sensor.frigate_debug.attributes["driveway"]["detection_fps"] }}'
        unit_of_measurement: 'FPS'
        
      patio_fps: 
        value_template: '{{ states.sensor.frigate_debug.attributes["patio"]["camera_fps"] }}'
        unit_of_measurement: 'FPS'
      patio_skipped_fps: 
        value_template: '{{ states.sensor.frigate_debug.attributes["patio"]["skipped_fps"] }}'
        unit_of_measurement: 'FPS'
      patio_detection_fps: 
        value_template: '{{ states.sensor.frigate_debug.attributes["patio"]["detection_fps"] }}'
        unit_of_measurement: 'FPS'        
        
      
      frigate_detection_fps: 
        value_template: '{{ states.sensor.frigate_debug.attributes["detection_fps"] }}'
        unit_of_measurement: 'FPS'
      frigate_coral_inference:
        value_template: '{{ states.sensor.frigate_debug.attributes["detectors"]["coral"]["inference_speed"] }}' 
        unit_of_measurement: 'ms'

In my frigate log i’m also seeing the following

driveway: ffmpeg sent a broken frame. something is wrong.
driveway: ffmpeg process is not running. exiting capture thread...
frontyard: ffmpeg sent a broken frame. something is wrong.
frontyard: ffmpeg process is not running. exiting capture thread...
patio: ffmpeg sent a broken frame. something is wrong.
patio: ffmpeg process is not running. exiting capture thread...
Creating ffmpeg process...
ffmpeg -hide_banner -loglevel panic -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format yuv420p -avoid_negative_ts make_zero -fflags nobuffer -flags low_delay -strict experimental -fflags +genpts+discardcorrupt -rtsp_transport tcp -stimeout 5000000 -use_wallclock_as_timestamps 1 -i 

hey,

Do you mean like this?

mqtt:
  host: core-mosquitto.local.hass.io
  port: 1883
  topic_prefix: frigate
  client_id: frigate
  user: REDACTED
  password: REDACTED

EDIT: Changed host to internal IP and it seemed to work - thanks!

CPU usage is extremely low. Usually under 2%. Mind you, I have other add-ons running; motioneye, nodered, mqtt broker.

I just got the configuration and automations updated with the 0.8 beta and integration. I had to remove previous mqtt sensors and use the new ones. My automation used to be triggered on the old person sensor. I made a new binary sensor template.

binary_sensor:
  - platform: template
    sensors:
      porch_person:
        friendly_name: Porch Person Detected
        device_class: motion
        value_template: "{{states('sensor.porch_person')|float > 1}}"

Here’s my simple config (redacted)

detectors:
  coral:
    type: edgetpu
    device: 'usb:0'
mqtt:
  host: XXXX
  port: XXXX
  user: XXXX
  password: 'XXXX'
  topic_prefix: frigate
  client_id: frigate
ffmpeg: {}
cameras:
  porch:
    ffmpeg:
      inputs:
        - path: 'XXXX'
          roles:
            - detect
            - rtmp
    width: 1600
    height: 1200
    fps: 30
    snapshots:
      show_timestamp: false
      draw_zones: true
      draw_bounding_boxes: false
    objects:
      track:
        - person
objects:
  track:
    - person
  filters:
    person:
      min_area: 15000
      min_score: 0.75

I haven’t bothered with hardware acceleration, because I don’t really need to. Inference speeds are actually closer to 14ms

And just for shits and gigs here is my main node red automation:

[{"id":"1b97dcff.d01643","type":"server-state-changed","z":"38eef358.45bfcc","name":"Porch Motion Sensor","server":"fe3c14cb.872068","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.porch_person","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":161,"y":1097,"wires":[["cc583aab.658c78"]]},{"id":"cc583aab.658c78","type":"rbe","z":"38eef358.45bfcc","name":"","func":"rbe","gap":"","start":"","inout":"out","property":"payload","x":351,"y":1097,"wires":[["3a690fdc.129ba"]]},{"id":"3a690fdc.129ba","type":"switch","z":"38eef358.45bfcc","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":491,"y":1097,"wires":[["f2428608.f54e48"],[]]},{"id":"f2428608.f54e48","type":"api-current-state","z":"38eef358.45bfcc","name":"Toggle","server":"fe3c14cb.872068","version":1,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"input_boolean.porch_motion_notif","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":631,"y":1097,"wires":[["751e3e6e.46cbc","4d6f46ff.d53688"],[]]},{"id":"751e3e6e.46cbc","type":"trigger","z":"38eef358.45bfcc","name":"","op1":"","op2":"0","op1type":"pay","op2type":"str","duration":"0","extend":false,"units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":801,"y":1097,"wires":[["94a72128.9fd4e"]]},{"id":"4d6f46ff.d53688","type":"api-current-state","z":"38eef358.45bfcc","name":"Toggle","server":"fe3c14cb.872068","version":1,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"input_boolean.test_switch_1","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":770,"y":1160,"wires":[["accb08c4.c1e268"],[]]},{"id":"94a72128.9fd4e","type":"delay","z":"38eef358.45bfcc","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":981,"y":1097,"wires":[["c7763fa4.125e9"]]},{"id":"710d802f.fe44a","type":"change","z":"38eef358.45bfcc","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":1740,"y":1020,"wires":[["751e3e6e.46cbc","13a42415.9006ec"]]},{"id":"accb08c4.c1e268","type":"delay","z":"38eef358.45bfcc","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":920,"y":1160,"wires":[["244eaf70.d42d2"]]},{"id":"c7763fa4.125e9","type":"http request","z":"38eef358.45bfcc","name":"HTTP REQ","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://192.168.1.182:5000/porch/person/best.jpg?h=300&crop=1","tls":"","persist":false,"proxy":"","authType":"","x":1151,"y":1097,"wires":[["c7cb20e1.182bb"]]},{"id":"13a42415.9006ec","type":"trigger","z":"38eef358.45bfcc","name":"","op1":"","op2":"","op1type":"nul","op2type":"pay","duration":"30","extend":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":1731,"y":1097,"wires":[["710d802f.fe44a"]]},{"id":"244eaf70.d42d2","type":"http request","z":"38eef358.45bfcc","name":"HTTP REQ","method":"GET","ret":"bin","paytoqs":"ignore","url":"http://192.168.1.182:5000/porch/person/best.jpg?h=300&crop=1","tls":"","persist":false,"proxy":"","authType":"","x":1090,"y":1160,"wires":[["2959a544.8f339a"]]},{"id":"c7cb20e1.182bb","type":"file","z":"38eef358.45bfcc","name":"SAVE","filename":"/config/www/porch_best_crop.jpg","appendNewline":false,"createDir":false,"overwriteFile":"true","encoding":"none","x":1311,"y":1097,"wires":[["162a09bc.ed9e76"]]},{"id":"162a09bc.ed9e76","type":"api-call-service","z":"38eef358.45bfcc","name":"Notify PS: Porch Motion","server":"fe3c14cb.872068","version":1,"debugenabled":false,"service_domain":"notify","service":"sarah_and_patrick","entityId":"","data":"{\"message\":\"Porch motion detected!\",\"data\":{\"entity_id\":\"camera.porch_camera\",\"push\":{\"sound\":\"health_notification.caf\",\"category\":\"camera\",\"thread-id\":\"porch\"},\"attachment\":{\"content-type\":\"jpeg\",\"url\":\"https://ha.patricklfs.com/local/porch_best_crop.jpg\"},\"data\":{\"url\":\"/lovelace/porchcam\"},\"apns_headers\":{\"apns-collapse-id\":\"backyard-motion-detected\"}}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1511,"y":1097,"wires":[["13a42415.9006ec"]]},{"id":"2959a544.8f339a","type":"file","z":"38eef358.45bfcc","name":"SAVE","filename":"/config/www/porch_best_crop.jpg","appendNewline":false,"createDir":false,"overwriteFile":"true","encoding":"none","x":1250,"y":1160,"wires":[["d1eb88e1.59a1d8"]]},{"id":"d1eb88e1.59a1d8","type":"api-call-service","z":"38eef358.45bfcc","name":"Front Lights On","server":"fe3c14cb.872068","version":1,"debugenabled":false,"service_domain":"switch","service":"turn_on","entityId":"group.front_lights_group","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1420,"y":1160,"wires":[["e48ccb58.b3f858","28623c70.450b74"]]},{"id":"e48ccb58.b3f858","type":"trigger","z":"38eef358.45bfcc","name":"","op1":"","op2":"","op1type":"nul","op2type":"pay","duration":"10","extend":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":1610,"y":1160,"wires":[["72f80df7.3d1d94"]]},{"id":"28623c70.450b74","type":"api-call-service","z":"38eef358.45bfcc","name":"Notify PS: Porch Motion","server":"fe3c14cb.872068","version":1,"debugenabled":false,"service_domain":"notify","service":"sarah_and_patrick","entityId":"","data":"{\"message\":\"Person detected. Front lights turned on!\",\"data\":{\"entity_id\":\"camera.porch_camera\",\"push\":{\"sound\":\"health_notification.caf\",\"category\":\"camera\",\"thread-id\":\"porch\"},\"attachment\":{\"content-type\":\"jpeg\",\"url\":\"https://ha.patricklfs.com/local/porch_best_crop.jpg\"},\"data\":{\"url\":\"/lovelace/porchcam\"},\"apns_headers\":{\"apns-collapse-id\":\"backyard-motion-detected\"}}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1650,"y":1220,"wires":[[]]},{"id":"72f80df7.3d1d94","type":"api-call-service","z":"38eef358.45bfcc","name":"Front Lights Off","server":"fe3c14cb.872068","version":1,"debugenabled":false,"service_domain":"switch","service":"turn_off","entityId":"group.front_lights_group","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1800,"y":1160,"wires":[["6d2c88b1.2a7678"]]},{"id":"6d2c88b1.2a7678","type":"change","z":"38eef358.45bfcc","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":2000,"y":1160,"wires":[["e48ccb58.b3f858"]]},{"id":"fe3c14cb.872068","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

1 Like

hi ,
i got my minisforum gk41 + coral that is gonna be used solely to run frigate. HA runs separately on RPi3
Just wondering what would be recommended OS for gk41?

No idea the specs of that box, but it looks like a nuc clone. I’d run HA supervised on that box and do the frigate addon. Way more power than a pi.

Thanks @danbutter
It looks like there is no HA OS with supervised version. Just wonder how much effort it takes to maintain especially for someone without much of linux knowledge? This is my main reservation on installing HA supervised + my RPi3 installation runs just fine…

Also this list doesnt include minisforum gk21, do you think i will still run? https://github.com/home-assistant/supervised-installer

If you will only be running frigate, you can run any OS that supports docker. I would probably go with Ubuntu server. I run K3OS on mine, but I run everything in kubernetes. Unless you have a lot of cameras, you can easily run homeassistant on it too with plenty of headroom leftover.

Looks like the Readme for supervised suggests Debian. I would go with that.

thanks @blakeblackshear
I’ll give it a go with Debian then.

I’m only not sure how painful switching from hassos to HA supervised is gonna be in long run.