Skip to main content

Python tool to backup unifi event clips in realtime.

Project description

Unifi Protect Backup

pypi python Build Status codecov

A Python based tool for backing up UniFi Protect event clips as they occur.

The idea for this project came after realising that if something were to happen, e.g. a fire, or a burglary that meant I could no longer access my UDM, all the footage recorded by all my nice expensive UniFi cameras would have been rather pointless. With this tool, all motion and smart detection clips are immediately backed up to off-site storage thanks to rclone, and kept for the configured retention period.

Buy me a coffee

Features

Requirements

  • Python 3.9+
  • Unifi Protect version 1.20 or higher (as per pyunifiproect)
  • rclone installed with at least one remote configured.

Installation

  1. Install rclone. Instructions for your platform can be found here: https://rclone.org/install/#quickstart
  2. Configure the rclone remote you want to backup to. Instructions can be found here: https://rclone.org/docs/#configure
  3. pip install unifi-protect-backup
  4. Optional: Install ffprobe so that unifi-protect-backup can check the length of the clips it downloads

Usage

:warning: Potential Data Loss: Be very careful when setting the rclone-destination, at midnight every day it will delete any files older than retention. It is best to give unifi-protect-backup its own directory.

Usage: unifi-protect-backup [OPTIONS]

  A Python based tool for backing up Unifi Protect event clips as they occur.

Options:
  --address TEXT                  Address of Unifi Protect instance
                                  [required]
  --port INTEGER                  Port of Unifi Protect instance
  --username TEXT                 Username to login to Unifi Protect instance
                                  [required]
  --password TEXT                 Password for Unifi Protect user  [required]
  --verify-ssl / --no-verify-ssl  Set if you do not have a valid HTTPS
                                  Certificate for your instance
  --rclone-destination TEXT       `rclone` destination path in the format
                                  {rclone remote}:{path on remote}. E.g.
                                  `gdrive:/backups/unifi_protect`  [required]
  --retention TEXT                How long should event clips be backed up
                                  for. Format as per the `--max-age` argument
                                  of `rclone`
                                  (https://rclone.org/filtering/#max-age-don-
                                  t-transfer-any-file-older-than-this)
  --rclone-args TEXT              Optional arguments which are directly passed
                                  to `rclone rcat`. These can by used to set
                                  parameters such as the bandwidth limit used
                                  when pushing the files to the rclone
                                  destination, e.g., '--bwlimit=500k'. Please
                                  see the `rclone` documentation for the full
                                  set of arguments it supports
                                  (https://rclone.org/docs/). Please use
                                  responsibly.
  --ignore-camera TEXT            IDs of cameras for which events should not
                                  be backed up. Use multiple times to ignore
                                  multiple IDs. If being set as an environment
                                  variable the IDs should be separated by
                                  whitespace.
  -v, --verbose                   How verbose the logging output should be.

                                      None: Only log info messages created by
                                      `unifi-protect-backup`, and all warnings

                                      -v: Only log info & debug messages
                                      created by `unifi-protect-backup`, and
                                      all warnings

                                      -vv: Log info & debug messages created
                                      by `unifi-protect-backup`, command
                                      output, and all warnings

                                      -vvv Log debug messages created by
                                      `unifi-protect-backup`, command output,
                                      all info messages, and all warnings

                                      -vvvv: Log debug messages created by
                                      `unifi-protect-backup` command output,
                                      all info messages, all warnings, and
                                      websocket data

                                      -vvvvv: Log websocket data, command
                                      output, all debug messages, all info
                                      messages and all warnings  [x>=0]
  --help                          Show this message and exit.

The following environment variables can also be used instead of command line arguments (note, CLI arguments always take priority over environment variables):

  • UFP_USERNAME
  • UFP_PASSWORD
  • UFP_ADDRESS
  • UFP_PORT
  • UFP_SSL_VERIFY
  • RCLONE_RETENTION
  • RCLONE_DESTINATION
  • RCLONE_ARGS
  • IGNORE_CAMERAS

Docker Container

You can run this tool as a container if you prefer with the following command. Remember to change the variable to make your setup.

docker run \
  -e UFP_USERNAME='USERNAME' \
  -e UFP_PASSWORD='PASSWORD' \
  -e UFP_ADDRESS='UNIFI_PROTECT_IP' \
  -e UFP_SSL_VERIFY='false' \
  -e RCLONE_DESTINATION='my_remote:/unifi_protect_backup' \
  -v '/path/to/rclone.conf':'/root/.config/rclone/rclone.conf' \
  ghcr.io/ep1cman/unifi-protect-backup

If you do not already have a rclone.conf file you can create one as follows:

$ docker run -it --rm -v $PWD:/root/.config/rclone/ ghcr.io/ep1cman/unifi-protect-backup rclone config

This will create a rclone.conf file in your current directory

Credits

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

unifi-protect-backup-0.5.1.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

unifi_protect_backup-0.5.1-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file unifi-protect-backup-0.5.1.tar.gz.

File metadata

  • Download URL: unifi-protect-backup-0.5.1.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for unifi-protect-backup-0.5.1.tar.gz
Algorithm Hash digest
SHA256 b11dfe1ba1361cf4b849c625b35702844c7d625645146092cd3c54fac672764e
MD5 64b9cac6c2427a3f7403a6b496bd46c3
BLAKE2b-256 5578a6295cebe0368c2cb72dafe285401d13bec8aa6780f3695bd5b9d3cfb10f

See more details on using hashes here.

File details

Details for the file unifi_protect_backup-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: unifi_protect_backup-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for unifi_protect_backup-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a27b2a515947a1b98f51dfe8e875b0f474bcdea3ed2c325eb93fe301a92fbd8d
MD5 25733608c1eb9f0c9108f5c3dcd0087c
BLAKE2b-256 471dab499c8f1df244c29902f485e31e6ad521aab4024f4453c2ec77a6483558

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page