%global _empty_manifest_terminate_build 0 Name: python-pyunifiprotect Version: 4.8.2 Release: 1 Summary: Unofficial UniFi Protect Python API and CLI License: MIT URL: https://pypi.org/project/pyunifiprotect/ Source0: https://mirrors.nju.edu.cn/pypi/web/packages/7b/3c/4f2b9baa41a4267c5d66211d8ee447c9f55f66d87da9ef77c4969ac86bd4/pyunifiprotect-4.8.2.tar.gz BuildArch: noarch Requires: python3-aiofiles Requires: python3-aiohttp Requires: python3-aioshutil Requires: python3-async-timeout Requires: python3-dateparser Requires: python3-orjson Requires: python3-packaging Requires: python3-pillow Requires: python3-pydantic Requires: python3-pyjwt Requires: python3-typer[all] Requires: python3-aiosqlite Requires: python3-asyncify Requires: python3-av Requires: python3-sqlalchemy[asyncio] Requires: python3-base36 Requires: python3-black Requires: python3-build Requires: python3-coverage[toml] Requires: python3-flake8-docstrings Requires: python3-flake8 Requires: python3-ipython Requires: python3-mike Requires: python3-mkdocs-git-revision-date-localized-plugin Requires: python3-mkdocs-include-markdown-plugin Requires: python3-mkdocs-material Requires: python3-mkdocstrings[python] Requires: python3-mypy Requires: python3-pip-tools Requires: python3-pydocstyle Requires: python3-pylint-strict-informational Requires: python3-pylint Requires: python3-pyproject-flake8 Requires: python3-pytest-asyncio Requires: python3-pytest-benchmark Requires: python3-pytest-cov Requires: python3-pytest-sugar Requires: python3-pytest-timeout Requires: python3-pytest-xdist Requires: python3-pytest Requires: python3-sqlalchemy[asyncio,mypy] Requires: python3-termcolor Requires: python3-types-aiofiles Requires: python3-types-dateparser Requires: python3-types-pillow Requires: python3-types-termcolor Requires: python3-tzdata Requires: python3-aiosqlite Requires: python3-asyncify Requires: python3-av Requires: python3-ipython Requires: python3-dotenv Requires: python3-sqlalchemy[asyncio] Requires: python3-termcolor Requires: python3-ipython Requires: python3-termcolor Requires: python3-dotenv Requires: python3-tzdata %description # Unofficial UniFi Protect Python API and CLI [![Latest PyPI version](https://img.shields.io/pypi/v/pyunifiprotect)](https://pypi.org/project/pyunifiprotect/) [![Supported Python](https://img.shields.io/pypi/pyversions/pyunifiprotect)](https://pypi.org/project/pyunifiprotect/) [![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![CI](https://github.com/AngellusMortis/pyunifiprotect/actions/workflows/ci.yaml/badge.svg)](https://github.com/AngellusMortis/pyunifiprotect/actions/workflows/ci.yaml) [![Documentation](https://github.com/AngellusMortis/pyunifiprotect/actions/workflows/pages/pages-build-deployment/badge.svg)](https://angellusmortis.github.io/pyunifiprotect/) `pyunifiprotect` is an unofficial API for UniFi Protect. There is no affiliation with Ubiquiti. This module communicates with UniFi Protect surveillance software installed on a UniFi OS Console such as a Ubiquiti CloudKey+ or UniFi Dream Machine Pro. The API is not documented by Ubiquiti, so there might be misses and/or frequent changes in this module, as Ubiquiti evolves the software. The module is primarily written for the purpose of being used in Home Assistant core [integration for UniFi Protect](https://www.home-assistant.io/integrations/unifiprotect) but might be used for other purposes also. ## Documentation [Full documentation for the project](https://angellusmortis.github.io/pyunifiprotect/). ## Requirements If you want to install `pyunifiprotect` natively, the below are the requirements: * [UniFi Protect](https://ui.com/camera-security) version 1.20+ * Latest version of library is generally only tested against the two latest minor version. This is either two latest stable versions (such as 1.21.x and 2.0.x) or the latest EA version and stable version (such as 2.2.x EA and 2.1.x). * [Python](https://www.python.org/) 3.9+ * POSIX compatible system * Library is only test on Linux, specifically the latest Debian version available for the official Python Docker images, but there is no reason the library should not work on any Linux distro or MacOS. * [ffmpeg](https://ffmpeg.org/) * ffmpeg is primarily only for streaming audio to Protect cameras, this can be considered a soft requirement Alternatively you can use the [provided Docker container](#using-docker-container), in which case the only requirement is [Docker](https://docs.docker.com/desktop/) or another OCI compatible orchestrator (such as Kubernetes or podman). Windows is **not supported**. If you need to use `pyunifiprotect` on Windows, use Docker Desktop and the provided docker container or [WSL](https://docs.microsoft.com/en-us/windows/wsl/install). ## Install ### From PyPi `pyunifiprotect` is available on PyPi: ```bash pip install pyunifiprotect ``` ### From Github ```bash pip install git+https://github.com/AngellusMortis/pyunifiprotect.git#egg=pyunifiprotect ``` ### Using Docker Container A Docker container is also provided so you do not need to install/manage Python as well. You can add the following to your `.bashrc` or similar. ```bash function unifi-protect() { docker run --rm -it \ -e UFP_USERNAME=YOUR_USERNAME_HERE \ -e UFP_PASSWORD=YOUR_PASSWORD_HERE \ -e UFP_ADDRESS=YOUR_IP_ADDRESS \ -e UFP_PORT=443 \ -e UFP_SSL_VERIFY=True \ -e TZ=America/New_York \ -v $PWD:/data ghcr.io/angellusmortis/pyunifiprotect:latest "$@" } ``` Some notes about the Docker version since it is running inside of a container: * You can update at any time using the command `docker pull ghcr.io/AngellusMortis/pyunifiprotect:latest` * Your local current working directory (`$PWD`) will automatically be mounted to `/data` inside of the container. For commands that output files, this is the _only_ path you can write to and have the file persist. * The container supports `linux/amd64` and `linux/arm64` natively. This means it will also work well on MacOS or Windows using Docker Desktop. * For versions of `pyunifiprotect` before v4.1.5, you need to use the `ghcr.io/briis/pyunifiprotect` image instead. * `TZ` should be the [Olson timezone name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) for the timezone your UniFi Protect instance is in. * For more details on `TZ` and other environment variables, check the [command line docs](https://angellusmortis.github.io/pyunifiprotect/latest/cli/) ## Quickstart ### CLI !!! warning "About Ubiquiti SSO accounts" Ubiquiti SSO accounts are not supported and actively discouraged from being used. There is no option to use MFA. You are expected to use local access user. `pyunifiprotect` is not designed to allow you to use your owner account to access the your console or to be used over the public Internet as both pose a security risk. ```bash export UFP_USERNAME=YOUR_USERNAME_HERE export UFP_PASSWORD=YOUR_PASSWORD_HERE export UFP_ADDRESS=YOUR_IP_ADDRESS export UFP_PORT=443 # change to false if you do not have a valid HTTPS Certificate for your instance export UFP_SSL_VERIFY=True unifi-protect --help unifi-protect nvr ``` ### Python UniFi Protect itself is 100% async, so as such this library is primarily designed to be used in an async context. The main interface for the library is the `pyunifiprotect.ProtectApiClient`: ```python from pyunifiprotect import ProtectApiClient protect = ProtectApiClient(host, port, username, password, verify_ssl=True) await protect.update() # this will initialize the protect .bootstrap and open a Websocket connection for updates # get names of your cameras for camera in protect.bootstrap.cameras.values(): print(camera.name) # subscribe to Websocket for updates to UFP def callback(msg: WSSubscriptionMessage): # do stuff unsub = protect.subscribe_websocket(callback) # remove subscription unsub() ``` ## TODO / Planned / Not Implemented The following the noticeable features are that still missing from pyunifiprotect. All of them are planned for "some day" / "nice to have" except where noted. * Liveview creating/updating/deleting * PTZ controls * Creating WebRTC streaming connections * Backups * Device Groups * Record Scheduling * Battery powered cameras (G3 Battery, Aplify Vision) * Camera analytics and live heatmaps * Reconfiguring WiFi * "Locate" feature for Lights/Sensors/Doorlocks * The `/timeline` API endpoint * User/Group/Permission management -- partially implemented as users and groups are modeled, just not fleshed out * Any strictly UniFi OS feature like managing RAID, creating users, etc. -- Out of Scope. If it ever done, it will be in a separate library that interacts with this one ## Credits * Bjarne Riis ([@briis](https://github.com/briis/)) for the original pyunifiprotect package %package -n python3-pyunifiprotect Summary: Unofficial UniFi Protect Python API and CLI Provides: python-pyunifiprotect BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-pyunifiprotect # Unofficial UniFi Protect Python API and CLI [![Latest PyPI version](https://img.shields.io/pypi/v/pyunifiprotect)](https://pypi.org/project/pyunifiprotect/) [![Supported Python](https://img.shields.io/pypi/pyversions/pyunifiprotect)](https://pypi.org/project/pyunifiprotect/) [![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![CI](https://github.com/AngellusMortis/pyunifiprotect/actions/workflows/ci.yaml/badge.svg)](https://github.com/AngellusMortis/pyunifiprotect/actions/workflows/ci.yaml) [![Documentation](https://github.com/AngellusMortis/pyunifiprotect/actions/workflows/pages/pages-build-deployment/badge.svg)](https://angellusmortis.github.io/pyunifiprotect/) `pyunifiprotect` is an unofficial API for UniFi Protect. There is no affiliation with Ubiquiti. This module communicates with UniFi Protect surveillance software installed on a UniFi OS Console such as a Ubiquiti CloudKey+ or UniFi Dream Machine Pro. The API is not documented by Ubiquiti, so there might be misses and/or frequent changes in this module, as Ubiquiti evolves the software. The module is primarily written for the purpose of being used in Home Assistant core [integration for UniFi Protect](https://www.home-assistant.io/integrations/unifiprotect) but might be used for other purposes also. ## Documentation [Full documentation for the project](https://angellusmortis.github.io/pyunifiprotect/). ## Requirements If you want to install `pyunifiprotect` natively, the below are the requirements: * [UniFi Protect](https://ui.com/camera-security) version 1.20+ * Latest version of library is generally only tested against the two latest minor version. This is either two latest stable versions (such as 1.21.x and 2.0.x) or the latest EA version and stable version (such as 2.2.x EA and 2.1.x). * [Python](https://www.python.org/) 3.9+ * POSIX compatible system * Library is only test on Linux, specifically the latest Debian version available for the official Python Docker images, but there is no reason the library should not work on any Linux distro or MacOS. * [ffmpeg](https://ffmpeg.org/) * ffmpeg is primarily only for streaming audio to Protect cameras, this can be considered a soft requirement Alternatively you can use the [provided Docker container](#using-docker-container), in which case the only requirement is [Docker](https://docs.docker.com/desktop/) or another OCI compatible orchestrator (such as Kubernetes or podman). Windows is **not supported**. If you need to use `pyunifiprotect` on Windows, use Docker Desktop and the provided docker container or [WSL](https://docs.microsoft.com/en-us/windows/wsl/install). ## Install ### From PyPi `pyunifiprotect` is available on PyPi: ```bash pip install pyunifiprotect ``` ### From Github ```bash pip install git+https://github.com/AngellusMortis/pyunifiprotect.git#egg=pyunifiprotect ``` ### Using Docker Container A Docker container is also provided so you do not need to install/manage Python as well. You can add the following to your `.bashrc` or similar. ```bash function unifi-protect() { docker run --rm -it \ -e UFP_USERNAME=YOUR_USERNAME_HERE \ -e UFP_PASSWORD=YOUR_PASSWORD_HERE \ -e UFP_ADDRESS=YOUR_IP_ADDRESS \ -e UFP_PORT=443 \ -e UFP_SSL_VERIFY=True \ -e TZ=America/New_York \ -v $PWD:/data ghcr.io/angellusmortis/pyunifiprotect:latest "$@" } ``` Some notes about the Docker version since it is running inside of a container: * You can update at any time using the command `docker pull ghcr.io/AngellusMortis/pyunifiprotect:latest` * Your local current working directory (`$PWD`) will automatically be mounted to `/data` inside of the container. For commands that output files, this is the _only_ path you can write to and have the file persist. * The container supports `linux/amd64` and `linux/arm64` natively. This means it will also work well on MacOS or Windows using Docker Desktop. * For versions of `pyunifiprotect` before v4.1.5, you need to use the `ghcr.io/briis/pyunifiprotect` image instead. * `TZ` should be the [Olson timezone name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) for the timezone your UniFi Protect instance is in. * For more details on `TZ` and other environment variables, check the [command line docs](https://angellusmortis.github.io/pyunifiprotect/latest/cli/) ## Quickstart ### CLI !!! warning "About Ubiquiti SSO accounts" Ubiquiti SSO accounts are not supported and actively discouraged from being used. There is no option to use MFA. You are expected to use local access user. `pyunifiprotect` is not designed to allow you to use your owner account to access the your console or to be used over the public Internet as both pose a security risk. ```bash export UFP_USERNAME=YOUR_USERNAME_HERE export UFP_PASSWORD=YOUR_PASSWORD_HERE export UFP_ADDRESS=YOUR_IP_ADDRESS export UFP_PORT=443 # change to false if you do not have a valid HTTPS Certificate for your instance export UFP_SSL_VERIFY=True unifi-protect --help unifi-protect nvr ``` ### Python UniFi Protect itself is 100% async, so as such this library is primarily designed to be used in an async context. The main interface for the library is the `pyunifiprotect.ProtectApiClient`: ```python from pyunifiprotect import ProtectApiClient protect = ProtectApiClient(host, port, username, password, verify_ssl=True) await protect.update() # this will initialize the protect .bootstrap and open a Websocket connection for updates # get names of your cameras for camera in protect.bootstrap.cameras.values(): print(camera.name) # subscribe to Websocket for updates to UFP def callback(msg: WSSubscriptionMessage): # do stuff unsub = protect.subscribe_websocket(callback) # remove subscription unsub() ``` ## TODO / Planned / Not Implemented The following the noticeable features are that still missing from pyunifiprotect. All of them are planned for "some day" / "nice to have" except where noted. * Liveview creating/updating/deleting * PTZ controls * Creating WebRTC streaming connections * Backups * Device Groups * Record Scheduling * Battery powered cameras (G3 Battery, Aplify Vision) * Camera analytics and live heatmaps * Reconfiguring WiFi * "Locate" feature for Lights/Sensors/Doorlocks * The `/timeline` API endpoint * User/Group/Permission management -- partially implemented as users and groups are modeled, just not fleshed out * Any strictly UniFi OS feature like managing RAID, creating users, etc. -- Out of Scope. If it ever done, it will be in a separate library that interacts with this one ## Credits * Bjarne Riis ([@briis](https://github.com/briis/)) for the original pyunifiprotect package %package help Summary: Development documents and examples for pyunifiprotect Provides: python3-pyunifiprotect-doc %description help # Unofficial UniFi Protect Python API and CLI [![Latest PyPI version](https://img.shields.io/pypi/v/pyunifiprotect)](https://pypi.org/project/pyunifiprotect/) [![Supported Python](https://img.shields.io/pypi/pyversions/pyunifiprotect)](https://pypi.org/project/pyunifiprotect/) [![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![CI](https://github.com/AngellusMortis/pyunifiprotect/actions/workflows/ci.yaml/badge.svg)](https://github.com/AngellusMortis/pyunifiprotect/actions/workflows/ci.yaml) [![Documentation](https://github.com/AngellusMortis/pyunifiprotect/actions/workflows/pages/pages-build-deployment/badge.svg)](https://angellusmortis.github.io/pyunifiprotect/) `pyunifiprotect` is an unofficial API for UniFi Protect. There is no affiliation with Ubiquiti. This module communicates with UniFi Protect surveillance software installed on a UniFi OS Console such as a Ubiquiti CloudKey+ or UniFi Dream Machine Pro. The API is not documented by Ubiquiti, so there might be misses and/or frequent changes in this module, as Ubiquiti evolves the software. The module is primarily written for the purpose of being used in Home Assistant core [integration for UniFi Protect](https://www.home-assistant.io/integrations/unifiprotect) but might be used for other purposes also. ## Documentation [Full documentation for the project](https://angellusmortis.github.io/pyunifiprotect/). ## Requirements If you want to install `pyunifiprotect` natively, the below are the requirements: * [UniFi Protect](https://ui.com/camera-security) version 1.20+ * Latest version of library is generally only tested against the two latest minor version. This is either two latest stable versions (such as 1.21.x and 2.0.x) or the latest EA version and stable version (such as 2.2.x EA and 2.1.x). * [Python](https://www.python.org/) 3.9+ * POSIX compatible system * Library is only test on Linux, specifically the latest Debian version available for the official Python Docker images, but there is no reason the library should not work on any Linux distro or MacOS. * [ffmpeg](https://ffmpeg.org/) * ffmpeg is primarily only for streaming audio to Protect cameras, this can be considered a soft requirement Alternatively you can use the [provided Docker container](#using-docker-container), in which case the only requirement is [Docker](https://docs.docker.com/desktop/) or another OCI compatible orchestrator (such as Kubernetes or podman). Windows is **not supported**. If you need to use `pyunifiprotect` on Windows, use Docker Desktop and the provided docker container or [WSL](https://docs.microsoft.com/en-us/windows/wsl/install). ## Install ### From PyPi `pyunifiprotect` is available on PyPi: ```bash pip install pyunifiprotect ``` ### From Github ```bash pip install git+https://github.com/AngellusMortis/pyunifiprotect.git#egg=pyunifiprotect ``` ### Using Docker Container A Docker container is also provided so you do not need to install/manage Python as well. You can add the following to your `.bashrc` or similar. ```bash function unifi-protect() { docker run --rm -it \ -e UFP_USERNAME=YOUR_USERNAME_HERE \ -e UFP_PASSWORD=YOUR_PASSWORD_HERE \ -e UFP_ADDRESS=YOUR_IP_ADDRESS \ -e UFP_PORT=443 \ -e UFP_SSL_VERIFY=True \ -e TZ=America/New_York \ -v $PWD:/data ghcr.io/angellusmortis/pyunifiprotect:latest "$@" } ``` Some notes about the Docker version since it is running inside of a container: * You can update at any time using the command `docker pull ghcr.io/AngellusMortis/pyunifiprotect:latest` * Your local current working directory (`$PWD`) will automatically be mounted to `/data` inside of the container. For commands that output files, this is the _only_ path you can write to and have the file persist. * The container supports `linux/amd64` and `linux/arm64` natively. This means it will also work well on MacOS or Windows using Docker Desktop. * For versions of `pyunifiprotect` before v4.1.5, you need to use the `ghcr.io/briis/pyunifiprotect` image instead. * `TZ` should be the [Olson timezone name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) for the timezone your UniFi Protect instance is in. * For more details on `TZ` and other environment variables, check the [command line docs](https://angellusmortis.github.io/pyunifiprotect/latest/cli/) ## Quickstart ### CLI !!! warning "About Ubiquiti SSO accounts" Ubiquiti SSO accounts are not supported and actively discouraged from being used. There is no option to use MFA. You are expected to use local access user. `pyunifiprotect` is not designed to allow you to use your owner account to access the your console or to be used over the public Internet as both pose a security risk. ```bash export UFP_USERNAME=YOUR_USERNAME_HERE export UFP_PASSWORD=YOUR_PASSWORD_HERE export UFP_ADDRESS=YOUR_IP_ADDRESS export UFP_PORT=443 # change to false if you do not have a valid HTTPS Certificate for your instance export UFP_SSL_VERIFY=True unifi-protect --help unifi-protect nvr ``` ### Python UniFi Protect itself is 100% async, so as such this library is primarily designed to be used in an async context. The main interface for the library is the `pyunifiprotect.ProtectApiClient`: ```python from pyunifiprotect import ProtectApiClient protect = ProtectApiClient(host, port, username, password, verify_ssl=True) await protect.update() # this will initialize the protect .bootstrap and open a Websocket connection for updates # get names of your cameras for camera in protect.bootstrap.cameras.values(): print(camera.name) # subscribe to Websocket for updates to UFP def callback(msg: WSSubscriptionMessage): # do stuff unsub = protect.subscribe_websocket(callback) # remove subscription unsub() ``` ## TODO / Planned / Not Implemented The following the noticeable features are that still missing from pyunifiprotect. All of them are planned for "some day" / "nice to have" except where noted. * Liveview creating/updating/deleting * PTZ controls * Creating WebRTC streaming connections * Backups * Device Groups * Record Scheduling * Battery powered cameras (G3 Battery, Aplify Vision) * Camera analytics and live heatmaps * Reconfiguring WiFi * "Locate" feature for Lights/Sensors/Doorlocks * The `/timeline` API endpoint * User/Group/Permission management -- partially implemented as users and groups are modeled, just not fleshed out * Any strictly UniFi OS feature like managing RAID, creating users, etc. -- Out of Scope. If it ever done, it will be in a separate library that interacts with this one ## Credits * Bjarne Riis ([@briis](https://github.com/briis/)) for the original pyunifiprotect package %prep %autosetup -n pyunifiprotect-4.8.2 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-pyunifiprotect -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Sun Apr 23 2023 Python_Bot - 4.8.2-1 - Package Spec generated