pvharmo2/gha-lab-7ccf56a2a4
GitHub: pvharmo2/gha-lab-7ccf56a2a4
Home Assistant 自定义集成,将 TP-Link Tapo 摄像头、门铃和门铃提示音设备接入智能家居平台并提供丰富的控制功能。
Stars: 0 | Forks: 1
[](https://github.com/hacs/integration)
[](https://github.com/JurajNyiri/HomeAssistant-Tapo-Control/releases/)
[](https://analytics.home-assistant.io/custom_integrations.json)
# HomeAssistant - Tapo: 摄像头控制
自定义组件 - Tapo: 摄像头控制 - 用于将 Tapo 摄像头、门铃和门铃提示音接入 Home Assistant
⭐ 现在还为不支持 RTSP 或 ONVIF 功能的设备提供了视频流。
## 安装
将 custom_components/tapo_control/ 目录下的内容复制到你 Home Assistant 配置文件夹下的 custom_components/tapo_control/ 目录中。
## 使用 HACS 安装
HACS 是 Home Assistant 的社区商店。你可以先安装 [HACS](https://github.com/custom-components/hacs),然后从 HACS 商店中安装 Tapo: Camera Control。
## 要求
### 网络
为了能从 Home Assistant 访问你的 Tapo 摄像头,必须在防火墙中**打开**以下目标 TCP (v)LAN 端口:
门铃提示音(Chimes):
- 80 - 用于控制摄像头([服务](https://github.com/JurajNyiri/HomeAssistant-Tapo-Control#quick-start))的 HTTP
摄像头和门铃:
- 443 - 用于控制摄像头([服务](https://github.com/JurajNyiri/HomeAssistant-Tapo-Control#quick-start))的 HTTPS
- 8800 - 用于视频流和录像下载(如果设备支持)的专有协议
- 554 - 用于从摄像头获取视频流(如果设备支持)的 RTSP
- 2020 - 用于通过二进制传感器跟踪检测到的移动(如果设备支持)的 ONVIF
**这些不是 WAN 端口,_绝对不要_通过端口转发打开 WAN 端口。只有当你明白上述内容的含义时,才可能需要打开 (v)LAN 端口。**
### 第三方兼容性
确保你已在智能手机上的官方 Tapo 应用中开启了第三方兼容性。
**Tapo App -> 我的 (Me) -> Tapo 实验室 (Tapo Lab) -> 第三方兼容性 (Third-Party Compatibility) -> 开启**

注意:需要 3.8.103 或更高版本。
## 使用说明
在 Home Assistant 界面中通过集成(搜索 `Tapo: Cameras Control`)添加摄像头、门铃或门铃提示音。如果你配置了 MyHomeAssistant 重定向,也可以直接点击下面的按钮。
[](https://my.home-assistant.io/redirect/config_flow_start/?domain=tapo_control)
**注意:** 还有其他的 Tapo 集成,请确保你选择的是 `Tapo: Cameras Control`。否则,你可能会选到用于插座和灯泡的集成,或者是截至 2024 年 12 月功能比此集成少得多的官方 HA 集成。
在接入 Tapo 摄像头、门铃和门铃提示音时,请确保只使用一个集成。如果同时使用多个,将导致所有连接到摄像头的集成/服务发生冲突和连接不稳定。
如果你要添加门铃提示音,请将控制端口设置为 80 而不是 443。
当设备(重新)连接到 WIFI 时,也会被自动发现。
要添加多个设备,请多次添加该集成。
请参阅 [lovelace 卡片示例](https://github.com/JurajNyiri/HomeAssistant-Tapo-Control/blob/main/examples/EXAMPLES_LOVELACE.md)。
## 快速开始
此自定义组件会创建:
门铃和摄像头:
- 最多 4 个摄像头实体:HD 和 SD,使用标准 RTSP 或 TP-Link 专有视频协议。如果你选择使用直接实体,建议在选项中禁用 `Use Stream from Home Assistant`,以获得最佳性能和电池续航。
- 首次检测到移动后,用于运动检测的二进制传感器
- 如果摄像头支持泛光灯开关,则会创建灯实体
- 用于校准、格式化、手动启停报警、移动摄像头、重启和时间同步的按钮
- 用于自动跟踪、画面翻转、LED 指示灯、镜头畸变校正、(丰富)通知、录像、麦克风静音、麦克风降噪、自动升级固件、HDR 模式、报警触发事件类型、隐私区域、诊断模式、智能跟踪特定开关、录音和隐私模式的开关实体
- 用于自动报警、光源频率、移动侦测、夜视、聚光灯亮度、报警类型、快速回复和移动到预置点的下拉选择实体
- 用于移动角度、扬声器音量、麦克风音量、聚光灯亮度、警报音量、警报持续时间和移动侦测数字灵敏度的数字实体
- 用于浏览和播放存储在摄像头上的录像的 Media Source
- 报告监控媒体同步状态的传感器实体
- 用于存储诊断的传感器实体
门铃提示音(Chimes):
- 用于提示音时长、提示音音量、提示音播放时长和提示音播放音量的数字实体
- 用于提示音铃声和 LED 的开关实体
- 用于提示音声音类型和提示音播放类型的下拉选择实体
- 用于网络 SSID、信号强度和 RSSI 的传感器实体
- 用于重启和响铃的按钮实体
此外,对于支持 PTZ 的摄像头,还提供以下服务:
## 声音检测
该集成能够分析来自摄像头麦克风的声音,并通过 binary_sensor 暴露检测到的噪音。
你需要通过勾选“Enable sound threshold detection”在集成选项中启用此功能。启用后,你还可以设置任何其他以 [Sound Detection] 开头的选项。进行任何更改后,你需要重启 Home Assistant。
有关更多信息和故障排除,请参阅该功能所基于的 [Home Assistant ffmpeg 文档](https://www.home-assistant.io/integrations/ffmpeg_noise/)。
## 媒体同步
该集成能够同步录像以实现快速播放。
同步默认是关闭的,你可以浏览存储在摄像头上的媒体并请求播放。然而,下载速度相当慢,因此建议在后台启用媒体同步。这样,你就可以瞬间播放从摄像头同步的任何媒体。
你可以通过导航到 `Home Assistant 设置` -> `设备与服务` 并点击 `Tapo: Cameras control` 集成来启用此设置。在那里,点击你想要开启媒体同步的 Tapo 设备旁边的 `配置` 按钮,并选择 `配置媒体`。在这里,你需要定义要同步的小时数。除非指定,否则同步不会运行。在这里,你还可以设置存储同步录像的存储路径(默认为 /config/.storage/tapo_control)。
最后,你可以打开或关闭开关实体 `switch.*_media_sync`。
**注意:** 一旦实际录像时间和文件修改时间超过你设置的同步小时数,录像将被删除。
## 故障排除 | 常见问题
## 有意见或建议?
请[提交一个新 issue](https://github.com/JurajNyiri/HomeAssistant-Tapo-Control/issues/new/choose),或在 [Home Assistant: 社区论坛](https://community.home-assistant.io/t/tapo-cameras-control/231795)上讨论。
加入 [Discord](https://discord.gg/pa54QyK) 参与讨论。
## 致谢
- 来自 NCC Group 的 [Dale Pavey](https://research.nccgroup.com/2020/07/31/lights-camera-hacked-an-insight-into-the-world-of-popular-ip-cameras/) 对 Tapo C200 进行了初步研究
- [likaci](https://github.com/likaci) 及其 [GitHub 仓库](https://github.com/likaci/mercury-ipc-control) 对 tapo 所基于的水星(Mercury)摄像头进行了研究
- [Tim Zhang](https://github.com/ttimasdf) 在其 [GitHub 仓库](https://github.com/ttimasdf/mercury-ipc-control) 中对水星摄像头进行了额外的研究
- [Gábor Szabados](https://github.com/GSzabados) 进行了研究并在 [Home Assistant 社区论坛](https://community.home-assistant.io/t/use-pan-tilt-function-for-tp-link-tapo-c200-from-home-assistant/170143/18)中收集了上述所有信息
- [Davide Depau](https://github.com/Depau) 对摄像头进行了额外的[研究](https://md.depau.eu/s/r1Ys_oWoP)并开发了 pytapo 库
- [Joe Bebo](https://github.com/bebo-dot-dev) 为使用 Hub 的摄像头[记录](https://github.com/JurajNyiri/HomeAssistant-Tapo-Control/issues/243)了通信协议
# 免责声明
本集成使用的 python 模块 Pytapo 是一个非官方模块,旨在实现与 Tapo 摄像头的互操作性。
作者与 Tp-Link 或 Tapo 没有任何从属关系。
pytapo 库中使用的所有 API 请求均可在互联网上找到(上面已链接示例),并且 pytapo 模块纯粹是这些 https 请求的封装。
作者不保证本集成的功能,并且不对任何损害负责。
本仓库中的所有产品名称、商标和注册商标均归其各自所有者所有。
tapo_control.save_preset
将当前 PTZ 位置保存为预置点 - **name** 必填:预置点的名称。不能为空或为数字tapo_control.delete_preset
删除预置点 - **preset** 必填:PTZ 预置点 ID 或名称。可在实体属性中查看可用的预置点使用哪个视频流?
此集成提供 4 种不同的摄像头实体: - HD Stream - SD Stream - HD Stream (Direct) - SD Stream (Direct) 直接视频流使用 TP-Link 的专有流媒体协议。非直接视频流使用标准的 RTSP 协议。 ### 为什么要使用 Direct 视频流? 1. 如果你的设备没有 RTSP 功能,这是唯一的办法。这包括电池设备、太阳能设备以及通过 Hub 工作的设备。 2. 如果你已经用完了[所有的 RTSP 流](https://www.tp-link.com/cz/support/faq/2742/),和/或你的 RTSP 流在 Home Assistant 中不稳定。 3. 直接视频流的加载速度_极快_,并且延迟不到半秒*_(_*请确保在集成选项中禁用 `Use Stream from Home Assistant (restart required)` 以获得最快的体验_)。在底层,新的视频流是“直接发送到浏览器”的二进制数据流,没有任何不必要的转换或开销。 ### 为什么不使用 Direct 视频流? 如果你可以选择使用 RTSP,建议坚持使用 RTSP 流。 1. 直接视频流会占用更多的 CPU 资源,因为运行此集成的设备现在需要直接处理二进制流,而不是由摄像头提供标准化的 RTSP 流。 2. 直接视频流不能与 webrtc card 或 go2rtc 一起使用。 3. 使用 [webrtc](https://github.com/AlexxIT/WebRTC) Home Assistant 摄像头卡片,RTSP 流非常快且几乎没有延迟。用于检测运动的 binary sensor 未显示或不起作用
只有在第一次检测到运动后才会添加运动传感器。 它还需要设备支持 ONVIF。如果设备没有暴露 Onvif 接口(如果是电池或太阳能供电则极有可能),运动事件将不起作用。 - 确保摄像头已开启移动侦测 - 确保摄像头已关闭隐私模式 - 确保摄像头能看到你和你的动作 - 如果你启用了 webhooks,并且你的 Home Assistant 内部 URL 可以通过 HTTP 访问,请确保摄像头能够访问它。 - 确保你为 Home Assistant 设置了正确的 IP。在 `/profile` 下打开高级模式。转到 `/config/network` 并在 `Network Adapter` 下确认设备显示的 IP 正确。如果不正确,请在 `Home Assistant URL` 下取消选中 `Local Network` 旁边的 `自动`,并将其设置为 `http://<某个 IP 地址>:8123`。**切勿使用 HTTPS**。 - 某些摄像头固件存在 pullpoint 损坏的问题,只有 webhooks 能正常工作。如果你因为上述原因(https 或 vlan 设置)无法运行 webhooks,binary sensor 将永远无法显示。 - 尝试在摄像头前走动 - 如果上述方法均无效,请重启摄像头并重试 同时请确保: - binary sensor 未通过实体被禁用,检查 .storage/core.entity_registry 中是否有被禁用的实体,在平台 "tapo_control" 上寻找 "disabled_by": "user"。如果是,请删除整个实体或将其更改为 "disabled_by": null,然后重启 HASS。 - binary sensor 在 tapo 集成选项中已启用 - 摄像头上的 onvif 端口 2020 已打开摄像头视频流延迟很大
这是 Home Assistant 的一个[已知问题](https://community.home-assistant.io/t/i-tried-all-the-camera-platforms-so-you-dont-have-to/222999)。 可以选择禁用该摄像头对 Home Assistant Stream 组件的使用,这可能会以较高的 CPU 使用率为代价,极大地降低延迟。 你可以在添加摄像头时选择禁用流组件,或者在添加摄像头后通过“选项”进行设置。此更改需要重启 Home Assistant。 这样做可能会有一些缺点,例如失去控制播放的选项以及更高的 CPU 使用率。 实际效果取决于你的硬件以及未来 Home Assistant 的更新。 如果你禁用了流组件但你的硬件性能不足,你将会遇到花屏、延迟增大和卡顿现象。 如果你愿意,可以尝试一下,看看哪种方式最适合你。 **另一种方法是使用 [AlexxIT 的 WebRTC Camera](https://github.com/AlexxIT/WebRTC)。** 可用的配置示例: ``` type: custom:webrtc-camera entity: camera.bedroom_hd ```摄像头视频流中没有声音
Home Assistant 支持的音频编解码器为 "aac"、"ac3" 和 "mp3"。 Tapo 摄像头使用的是不支持的 PCM ALAW (alaw)。 [更多详细信息请见此处。](https://github.com/JurajNyiri/HomeAssistant-Tapo-Control/issues/58#issuecomment-762787442) **你可以使用 [AlexxIT 的 WebRTC Camera](https://github.com/AlexxIT/WebRTC) 让声音正常工作。** 可用的配置示例: ``` type: custom:webrtc-camera entity: camera.bedroom_hd ```当我输入正确的密码时,看到错误 `Invalid authentication data. Make sure you have created your 3rd party account via Tapo app. You can also test if these credentials work via rtsp stream, for example VLC using link rtsp://username:password@IP Address:554/stream1`
你可能输入了错误的密码,或者遇到了摄像头的限制。 - 检查日志中是否有任何错误消息 - 检查 HA 是否可以通过端口 554 和 2020 访问摄像头 最后,最可能的问题,请参阅 [Tapo 官方文档](https://www.tp-link.com/cz/support/faq/2742/) 以及:我看到错误 `Invalid cloud password.`
1. 确保你已在智能手机上的官方 Tapo 应用中开启了第三方兼容性。Tapo App -> 我的 (Me) -> Tapo 实验室 (Tapo Lab) -> 第三方兼容性 (Third-Party Compatibility) -> 开启 2. 确保登录的“两步验证”已禁用。进入 Tapo app > 我的 (Me) > 查看账户 (View Account) > 登录安全 (Login Security) > 关闭“两步验证”。 3. 重置你的密码。 4. 确保你的摄像头可以访问互联网。 5. 将摄像头重启几次。 6. 重置摄像头。从你的账户中将其移除,恢复出厂设置,在联网状态下重新添加,再将其重新添加到集成中。 7. 尝试关闭再开启第三方兼容性,并通过 Tapo App 打开摄像头。 . 如果以上方法均无效(不太可能),请从第 1 步开始重复,等待几个小时后再试。支持的型号
用户反馈以下 Tapo 摄像头、门铃和门铃提示音具有完整功能: - TC55 - TC60 - TC70 - TC85 - C100 - C110 - C120 - C200 - C210 - C211 - C220 - C225 - C310 - C320WS - C410 - C420 - C420S2 - C500 - C510W - C520WS - C530WS - C720 - D100C - D230 - D235 该集成_应该_适用于任何其他基于 Tapo 摄像头的设备和门铃提示音。 如果你在其他型号上测试成功,请通过新 issue 报告。 注意:如果设备未暴露 Onvif 接口(极有可能是因为使用电池或太阳能供电),运动事件将不起作用。提到摄像头时的 webhook 是什么意思?
摄像头使用 ONVIF 标准来传递运动事件。这种通信可以通过两种方式进行: 1. Pullpoint:客户端打开与摄像头的连接并等待,直到摄像头响应。只有在有事件需要通信时,摄像头才会响应。在摄像头响应后,客户端重新打开连接并再次等待。 2. Webhook:客户端告诉摄像头接收事件的 URL。当事件发生时,摄像头将此信息发送到客户端定义的 URL。 Webhook 是首选的通信方式,因为它们速度更快且占用资源更少。话虽如此; - Webhook 要求仅使用 HTTP 的 HA 设置,因为 Tapo 摄像头不支持 HTTPS webhooks - Webhook 要求在 HA 中定义正确的 base_url,以便传输的 URL 是正确的(你可以通过启用 homeassistant.onvif 的调试日志来检查发送的 URL) 上述要点由该集成自动判断,如果 HA 不符合标准,则禁用 webhook。话虽如此; - 某些摄像头(和/或固件)在同时创建 webhook 和 pullpoint 连接时会死机,而这在开始时发生是为了检测是否支持 webhook,以便通信可以回退到 pullpoint。 - 某些摄像头固件(1.3.6 C200)存在 pullpoint 损坏的问题,只有 webhook 能正常工作 要让 webhook 正常工作,用户只需确保在 HTTP 上使用 HA,并且 HA 在传输的 URL 上可用即可。这个集成是免费且完全本地化的吗?
是的,该集成是免费的,不需要任何付费订阅。它也是完全本地化的,不需要摄像头或此集成访问互联网。执行自动化 / 脚本时收到 Exception: Invalid authentication data
摄像头的固件期望按顺序接收消息。并行发送可能会导致摄像头返回 401 错误代码,从而向我们显示此异常。 你需要改为按顺序发送自动化操作,如果需要,也可以加上延迟。 有关更多信息,请参阅 https://github.com/JurajNyiri/HomeAssistant-Tapo-Control/issues/488。时间同步同步了错误的时间
由于[未知根本原因](https://github.com/JurajNyiri/HomeAssistant-Tapo-Control/issues/307),一些摄像头在通过 ONVIF 标准设置时间时的行为与其他摄像头不同,目前尚未找到根本原因。 无法通过官方应用程序设置时间,此集成使用的是通过 ONVIF 标准实现的未公开且不受支持的摄像头功能。 如果时间设置不正确,例如快了 1 小时: 1. 确保为 Home Assistant 和设备都设置了正确的时区 2. 如果仍然遇到问题,请导航至 `/config/integrations/integration/tapo_control` 3. 点击你希望同步时间的设备下方的 Configure(配置) 4. 选择 `Configure time synchronization`,点击提交 5. 调整夏令时期间或非夏令时期间的时间偏移量
# 免责声明
本集成使用的 python 模块 Pytapo 是一个非官方模块,旨在实现与 Tapo 摄像头的互操作性。
作者与 Tp-Link 或 Tapo 没有任何从属关系。
pytapo 库中使用的所有 API 请求均可在互联网上找到(上面已链接示例),并且 pytapo 模块纯粹是这些 https 请求的封装。
作者不保证本集成的功能,并且不对任何损害负责。
本仓库中的所有产品名称、商标和注册商标均归其各自所有者所有。标签:Home Assistant, Tapo, 摄像头控制, 智能家居, 物联网, 逆向工具