I’m setting up Home Assistant to record video from my Amcrest cameras. These cameras binary sensor for motion detection, so I’m using that as a trigger. When motion is detected, I record 30 seconds of video to the internal SD card, then upload that to S3. It also sends a notification to my phone with a dynamic attachment showing the live video.
To pass the correct filename to the minio.put
step, I had to create a helper entity for the filename. This seems a bit clunky but I couldn’t think of a better way. If anyone knows of a way to keep this self-contained within the automation that would be nice.
In AWS, I have configured a lifecycle rule to delete old recordings after 90 days. But I don’t know how to do this locally. Is there a way to delete files on a schedule?
- alias: Outside - front yard motion
description: Record and upload to S3 when Amcrest cameras detect motion
trigger:
- platform: state
entity_id:
- binary_sensor.front_yard_motion_detected
to: 'on'
condition:
- condition: state
entity_id: input_boolean.alarm_set
state: 'on'
action:
- service: input_text.set_value
data:
value: '{{ now().strftime(''%Y%m%d_%H%M%S'') }}_front_yard'
target:
entity_id: input_text.latest_recording_front_yard
- service: notify.family_notifications
data:
message: Front yard {{ now().strftime('%H:%M:%S') }}
title: Motion Detected
data:
entity_id: camera.front_yard
url: /lovelace/security
- service: camera.record
data:
filename: /share/recordings/front_yard/{{ states('input_text.latest_recording_front_yard')
}}.mp4
duration: 20 # not accurate, it actually records a little longer
target:
entity_id: camera.front_yard
- service: minio.put
data:
bucket: xxxxxxxxxx
file_path: /share/recordings/front_yard/{{ states('input_text.latest_recording_front_yard')
}}.mp4
key: recordings/front_yard/{{ states('input_text.latest_recording_front_yard') }}.mp4
mode: single