跳转到主要内容

Unifi Protect (非官方) 的 Python API

项目描述

非官方 UniFi Protect Python API 和 CLI

CI Status Documentation Status Test coverage percentage

Poetry Ruff pre-commit

PyPI Version Supported Python versions License


文档: https://uiprotect.readthedocs.io

源代码: https://github.com/uilibs/uiprotect


Unifi Protect (非官方) 的 Python API

寻找维护者

此项目正在寻找维护者。

安装

通过 pip (或您喜欢的包管理器) 安装此软件

pip install uiprotect

历史

由于该项目更改了许可证,该许可证不符合 Home Assistant 的要求,因此从 pyunifiprotect 中分离出来。此项目致力于保持 MIT 许可证。

鸣谢

  • Bjarne Riis (@briis) 为原始 pyunifiprotect 软件包
  • Christopher Bailey (@AngellusMortis) 为维护 pyunifiprotect 软件包

贡献者 ✨

感谢这些了不起的人(emoji key

本项目遵循all-contributors规范。欢迎所有类型的贡献!

uiprotect是UniFi Protect的非官方API。与Ubiquiti无关。

此模块与安装在UniFi OS控制台(如Ubiquiti CloudKey+或UniFi Dream Machine Pro)上的UniFi Protect监控软件进行通信。

Ubiquiti没有对API进行文档说明,因此,随着Ubiquiti软件的不断发展,此模块可能存在遗漏和/或频繁更改。

该模块主要编写用于在Home Assistant核心UniFi Protect集成中使用,但也可能用于其他目的。

智能检测现在需要远程访问才能启用

智能检测(人员、车辆、动物、面部),之前可以仅使用本地控制台使用,现在需要您启用远程访问才能启用

由于Ubiquiti可以在任何时候重新配置访问控制,因此启用远程访问可能会授予其他用户对您的控制台的访问权限

如果您不希望该功能被锁定在远程访问之后,请通知Ubiquiti

文档

项目的完整文档.

要求

如果您想本地安装uiprotect,以下是需要满足的要求

  • UniFi Protect版本1.20+
    • 库的最新版本通常仅针对两个最新的次要版本进行测试。这可能是两个最新的稳定版本(如1.21.x和2.0.x)或最新的EA版本和稳定版本(如2.2.x EA和2.1.x)。
  • Python 3.10+
  • POSIX兼容系统
    • 库仅在Linux上进行测试,具体为官方Python Docker镜像中可用的最新Debian版本,但没有理由认为库不能在任何Linux发行版或macOS上工作。
  • ffmpeg
    • ffmpeg主要用于将音频流式传输到Protect摄像头,这可以被认为是一个软要求

或者您可以使用提供的Docker容器,在这种情况下,唯一的要求是Docker或另一个OCI兼容的编排器(如Kubernetes或podman)。

Windows不受支持。如果您需要在Windows上使用uiprotect,请使用Docker Desktop和提供的docker容器或WSL

安装

从PyPi

uiprotect可在PyPi上找到

pip install uiprotect

从GitHub

pip install git+https://github.com/uilibs/uiprotect.git#egg=uiprotect

使用Docker容器

还提供了一个Docker容器,因此您无需安装/管理Python。您可以将以下内容添加到您的.bashrc或类似文件中。

function uiprotect() {
    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/uilibs/uiprotect:latest "$@"
}

有关Docker版本的说明,因为它是在容器中运行的

  • 您可以使用以下命令随时更新:docker pull ghcr.io/uilibs/uiprotect:latest
  • 您当前的本地工作目录($PWD)将自动挂载到容器内的/data。对于输出文件的命令,这是您唯一可以写入并且文件可以持久化的路径。
  • 容器原生支持linux/amd64linux/arm64。这意味着它也适用于使用Docker Desktop的macOS或Windows。
  • TZ应该是您的UniFi Protect实例所在的Olson时区名称
  • 有关TZ和其他环境变量的更多详细信息,请参阅命令行文档

快速入门

CLI

![警告] 不支持使用Ubiquiti SSO账户,并积极建议不要使用。没有使用多因素认证的选项。您应使用本地访问用户。`uiprotect` 未设计为允许您使用管理员账户访问控制台或通过公共互联网使用,因为这都存在安全风险。

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

uiprotect --help
uiprotect nvr

Python

UniFi Protect 本身是100%异步的,因此这个库主要设计用于异步环境中。

库的主要接口是 uiprotect.ProtectApiClient

from uiprotect 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()

待办事项 / 规划 / 未实现

一般来说,库中缺少的任何功能都计划最终实现,或者作为以下例外情况的好用功能

UniFi OS 功能

任何严格属于UniFi OS的功能。如果将来实现,它将作为与该库交互的单独库来实现。例如包括

  • 管理RAID和磁盘
  • 创建和管理用户

远程访问 / Ubiquiti云功能

一些需要启用Ubiquiti账户或“远程访问”的功能目前尚未实现。例如包括

  • 流共享
  • 人脸检测

项目详情


发布历史 发布通知 | RSS订阅

下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

uiprotect-6.2.0.tar.gz (108.4 kB 查看哈希)

上传时间 源代码

构建分发

uiprotect-6.2.0-py3-none-any.whl (120.3 kB 查看哈希)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面