All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Tool now targets UIProtect instead of pyunifiprotect which should help any lingering auth issues with Unifi OS 4.X
- Python Version bumped to 3.10 (based on UIPortect need)
- (had to make the dev and test dependencies required instead of extras to get poetry to work)
- A new experimental downloader that uses the same mechanism the web ui does. Enable with
--experimental-downloader
- Support for UniFi OS 4.x.x
- Set pyunifiprotect to a minimum version of 5.0.0
- Bumped
pyunifiprotect
version to fix with versions of Unifi Protect after 3.0.10
- Bumped
pyunifiprotect
version to fix issue with old version of yarl
- Bumped
pyunifiprotect
version to fix issue caused by new video modes
- Bumped
pyunifiprotect
version to fix issue caused by unifi protect returning invalid UUIDs
- Issue where duplicate events were being downloaded causing database errors
- Default file path format now uses event start time instead of event end time which makes more logical sense
- Event type enum conversion string was no longer converting to the enum value, this is now done explicitly.
- Command line option to skip events longer than a given length (default 2 hours)
- Docker image is now based on alpine edge giving access to the latest version of rclone
- Failed uploads no longer write to the database, meaning they will be retried
- Fixed issue with chunked event fetch during initial ignore of events
- Fixed error when no events were fetched for the retention period
- Errors caused by latest unifi protect version by bumping the version of pyunifiprotect used
- Queries for events are now chunked into groups of 500 which should help stop this tool crashing large unifi protect instances.
- Time period parsing, 'Y' -> 'y'
- Queued up downloads etc now wait for dropped connections to be re-established.
- Missing event checker ignoring the "ignored cameras" list
- Added optional argument string to pass directly to the
rclone delete
command used to purge video files
- Fixed download errors not counting as failures
- The ability to send logging out via apprise notifications
- Color logging is now optional
- Events are now permanently ignored if they fail to download 10 times
- Added ability to configure purge interval
- Purge interval returned to previous default of once a day
- Fix improper unpacking of upload events
- check that current event is not none before trying to get it it’s ID
- downloader/uploaded clear their current event once it’s been processed
- use event ID of currently up/downloading event, not whole event object when checking missing events
- Logging of remaining upload queue size
- Uploading files were not accounted for when checking for missing events
- Buffer size parameter is logged in human-readable format
- Now logs time zone settings for both the host and NVR
- Color logging is now optional and defaults to disabled (to match previous behavior before v0.8.0)
- Ability to configure download buffer size (bumped default up to 512MiB)
- Event IDs to upload/download logging
- Log spam when lots of events are missing, this will now only occur if the logging level is set to
EXTRA_DEBUG
(-vv) - corrected logging not showing smart detection types
- The application no longer stalls when a video is downloaded larger than the available buffer size
- Ability to set the least verbose logging for the docker container
- Fixed issue where command output was being returned with added indentation intended for logging only
- Fixed issue where some command logging was not indented
- Fixed issue where the tool could crash when run in a container if /config/database didn't exist
version 0.8.0 was used by accident previously and PyPI would not accept it so bumping by one patch version
Major internal refactoring. Each task is now its own class and asyncio task.
- A database of backed up events and where they are stored
- A periodic check for missed events
- This will also ensure past events before the tool was used are backed up, up until the retention period
- Pruning is no longer done based on file timestamps, the database is used instead. The tool will no longer delete files it didn't create.
- Pruning now runs much more frequently (every minute) so retention periods of less than a day are now possible.
No functional changes in this version. This is just to trigger the release CI.
- Arm docker container
- rclone debugging instructions when using docker
- Documentation error in rclone config path of docker container.
- Updated to the 4.0.0 version of pyunifiprotect
- Added rust to the container, and bumped it to alpine 3.16
- Updated to the latest version of pyunifiprotect to fix issues introduced in unifi protect 2.1.1
- Updated to the latest version of pyunifiprotect to fix issues introduced in unifi protect 2.0.1
- Updated documentation to include how to set up local user accounts on unifi protect
- Added a the ability to change the way the clip files are structured via a template string.
- Fixed issue where event types without clips would attempt (and fail1) to download clips
- Drastically reduced the size of the docker container
- Fixed typos in the documentation
- Some dev dependencies are now not installed as default
- Support for doorbell ring events
detection_types
parameter to limit which kinds of events are backed up
- Actually fixed timestamps this time.
- Timestamps in filenames and logging now show time in the timezone of the NVR not UTC
- rclone delete command now works as expected on windows when spaces are in the file path
- Dockerfile now allows setting of user and group to run as, as well as a default config
- rclone command now works as expected on windows when spaces are in the file path
- If
ffprobe
is available, the downloaded clips length is checked and logged
- A time delay has been added before downloading clips to try to resolve an issue where downloaded clips were too short
- A
--version
command line option to show the tools version
- Websocket checks are no longer logged in verbosity level 1 to reduce log spam
- Now checks if the websocket connection is alive, and attempts to reconnect if it isn't.
- New CLI argument for passing CLI arguments directly to
rclone
.
- A new camera getting added while running no longer crashes the application.
- A timeout during download now correctly retries the download instead of abandoning the event.
- Retry logging formatting
- Ability to ignore cameras
- Retry failed download/uploads
- More logging
- CI to build
dev
container - More documentation
- Upload exceptions getting passed silently
- Camera ID -> Name map is no longer only looked up once at the start
- Docker container
- Dependabot
- Better project description
- Typos in docs
- First release