HomeAssistant-Tapo-Control is a free, open source automation project written in Python and released under Apache-2.0. It has 1,999 GitHub stars, 157 forks and 29 open issues, and was last pushed 10 days ago. On this registry it ranks #44 of 54 tracked projects in Automation, with 5 head-to-head comparisons available. It gained 3 stars over the last 3 tracked days.

What is HomeAssistant-Tapo-Control?

What it is

HomeAssistant-Tapo-Control is a Python custom component for Home Assistant, published under Apache-2.0 on GitHub. It adds Tapo cameras, doorbells, and chimes to a Home Assistant instance, giving users a control and monitoring surface for those devices.

The project solves the problem that Tapo devices may not be fully usable inside Home Assistant through the official integration. It exposes a stream for devices that have no RTSP or ONVIF capabilities, and it uses local network protocols for camera control, video streaming, recording downloads, movement tracking, and doorbell events.

Key capabilities

  • The component adds Tapo cameras, doorbells, and chimes to Home Assistant through the Tapo: Cameras Control integration.
  • It exposes a video stream for devices that do not have RTSP or ONVIF capabilities.
  • It can use TCP/443 HTTPS control for cameras and doorbells, and TCP/80 HTTP control for chimes.
  • It can use TCP/8800 for proprietary video streaming and recording downloads when the device supports those functions.
  • It supports PTZ control, as indicated by project topics, and can use TCP/554 RTSP to fetch video from cameras that provide RTSP.
  • It can use TCP/2020 ONVIF to track detected movement through a binary sensor when the device supports ONVIF.
  • It can receive UDP/20005 broadcast doorbell press events for a standalone doorbell or hub.

Who uses it and how

  • Home Assistant users install the component manually or from HACS, then add devices through the Integrations page.
  • Users configure their network so Home Assistant can reach the device on the required local or virtual LAN ports.
  • Users enable Third Party Compatibility in the official Tapo mobile app before using the component.
  • Users integrate only one Tapo integration for each device to avoid conflicts and instability.
  • Users can start setup through a My Home Assistant redirect when the redirect feature is configured.

Getting started

The typical installation method is to copy custom_components/tapo_control/ into the Home Assistant configuration folder, or to install it from HACS. After installation, enable Third Party Compatibility in the Tapo app, open the required local network ports, and add the Tapo: Cameras Control integration in Home Assistant.

When to use it — and when not to

Use this component when you need broader Tapo camera, doorbell, or chime control than the official Home Assistant integration provided as of December 2024, especially for devices without RTSP or ONVIF. Do not use it if you cannot manage local network port requirements, or if another Tapo integration is already handling the same device. The component depends on device capabilities for streaming, recording downloads, and movement tracking, so some features may be unavailable on some devices.

project readme (upstream, from github) — read inline

hacs_badge GitHub release HA integration usage

HomeAssistant - Tapo: Cameras Control

Custom component - Tapo: Cameras Control - to add Tapo cameras, doorbells and chimes into Home Assistant

⭐ Now also exposing a stream for devices that have no RTSP or ONVIF capabilities.

Contributing

Before opening a pull request, read CONTRIBUTING.md, especially if the work used an AI assistant.

AI-assisted contributions are welcome when the author has reviewed, understood, and can explain the changes. Purely AI-generated or "vibe coded" PRs where the author did not review the code and behavior are not welcome and may be closed. Reviewing unverified generated code often takes longer than implementing the change directly.

AI coding assistants must read AGENTS.md and CONTRIBUTING.md before modifying files, creating commits, pushing branches, or opening PRs.

Please keep PRs small, focused, tested, and easy to review. Be explicit about what was tested, what was not tested, what device models were used, and whether AI generated or drafted any part of the change.

For changes that need Home Assistant runtime verification, AI assistants should guide the user through testing in their Home Assistant instance, review the results with them, and iterate until the behavior is understood.

Installation

Copy contents of custom_components/tapo_control/ to custom_components/tapo_control/ in your Home Assistant config folder.

Installation using HACS

HACS is a community store for Home Assistant. You can install HACS and then install Tapo: Cameras Control from the HACS store.

Requirements

Network

Following (v)LAN ports must be open in firewall for the camera to access your Tapo Device from Home Assistant:

Chimes:

  • TCP/80 - HTTP for control of the camera (services)

Cameras and Doorbells:

  • TCP/443 - HTTPS for control of the camera (services)
  • TCP/8800 - Proprietary protocol for video streaming and recordings downloads (if available on device)
  • TCP/554 - RTSP to fetch video stream from the camera (if available on device)
  • TCP/2020 - ONVIF to track detected movement via a binary sensor (if available on device)
  • UDP/20005 (broadcast) for doorbell press event on standalone doorbell, or hub for a doorbell

These are not WAN ports, DO NOT OPEN WAN PORTS VIA PORT FORWARDING. You might need to open (v)lan ports only if you know what all of this means.

Third-Party Compatibility

Ensure you have Third Party Compatibility turned on in the official Tapo app on your smartphone.

Tapo App -> Me -> Third-Party Compatibility -> On

Usage

Add cameras, doorbells or chimes via Integrations (search for Tapo: Cameras Control) in Home Assistant UI. You can also simply click the button below if you have MyHomeAssistant redirects set up.

Open your Home Assistant instance and start setting up a new integration.

Note: There are other Tapo integrations, make sure you select Tapo: Cameras Control. Otherwise you might choose the one for plugs and lights, or the official HA one which has a minimum feature set compared to this integration as of December 2024.

When integrating Tapo cameras, doorbells and chimes, ensure only ONE integration is used. If multiple are used at the same time it will result in conflicts and instability of connection to camera for all the integrations / services connecting to camera.

If you are adding a chime, set Control Port to 80 instead of 443.

Devices are also automatically discovered when they are (re)connected to WIFI.

To add multiple devices, add integration multiple times.

See examples for lovelace cards.

Quick Start

This custom component creates:

Doorbells, Cameras (for each lens, if supported):

  • Up to 4 camera entities: HD and SD, using RTSP standard or TP-Link proprietary video protocol. If you choose to use direct entities, it is recommended to disable Use Stream from Home Assistant in options for the best performance and battery life.
  • Binary sensor for motion after the motion is detected for the first time and a binary sensor for doorbell press
  • Light entity, if the camera supports a floodlight switch
  • Buttons for Calibrate, Format, Manual Alarm start & stop, Moving the camera, Reboot and syncing time
  • Switch entities for Auto track, Automatic Reboot, Flip setting, LED Indicator, Lens Distortion Correction, (Rich) Notifications, Recording, Microphone Mute, Microphone Noise Cancelling, Automatically Upgrade Firmware, HDR mode, Alarm Trigger Event types, Privacy Zones, Diagnose Mode, Smart Track specific switches, Smart Dual Track specific switches, Preset Patrol Mode, Audio Recording and Privacy mode
  • Select entities for Automatic Alarm, Automatic Reboot Time, Light Frequency, Motion Detection, Night Vision, Spotlight Intensity, Alarm Type, Quick Response, Smart Dual Track Method and Move to Preset
  • Number entity for Movement Angle, Speaker Volume, Microphone Volume, Spotlight Intensity, Siren Volume, Siren Duration and Motion Detection Digital Sensitivity
  • Media Source for browsing and playing recordings stored on camera
  • Sensor entity that reports monitor media sync status
  • Sensor entities for Storage diagnostics and Last Automatic Reboot Time

Chimes:

  • Number entity for Chime Duration, Chime Volume, Chime Play Duration and Chime Play Volume
  • Switch entity for Chime Ringtone and LED
  • Select entity for Chime Sound Type and Chime Play Type
  • Sensor entities for Network SSID, Signal Level, RSSI
  • Button entity for Reboot and Ringing the chime

Additionally, following services are available for cameras with PTZ:

tapo_control.save_preset

Saves the current PTZ position to a preset

  • name Required: Name of the preset. Cannot be empty or a number
tapo_control.delete_preset

Deletes a preset

  • preset Required: PTZ preset ID or a Name. See possible presets in entity attributes

Sound Detection

Integration is capable of analysing sound from camera microphone and expose noise detected via binary_sensor.

You need to enable this feature in integration options by checking "Enable sound threshold detection". After enabling it, you can also set any other options starting with [Sound Detection]. You will need to restart Home Asssistant after doing any changes.

For more information and troubleshooting see Home Assistant ffmpeg documentation on which this feature is based on.

Media Sync

Integration is capable of synchronizing recordings for fast playback.

Synchronization is turned off by default, you can browse media stored on camera and request it to be played. However, downloading is rather slow, so it is a good idea to enable media synchronization in background. That way, you will be able to play any synchronized media from camera instantly.

You can enable this setting by navigating to Home Assistant Settings -> Devices & services and clicking the Tapo: Cameras control integration. There, click on the Configure button next to the Tapo device you wish to turn media synchronization on for, and choose Configure media. Here, you need to define the number of hours to synchronize. Unless it is specified, synchronization does not run. Here, you are able to also set the storage path where the synchronized recordings will be stored (defaults to /config/.storage/tapo_control).

Finally, you can turn on, or off switch entity switch.*_media_sync.

Notice: Recordings are deleted after the number of hours you have chosen to synchronize passes, once both the actual recording time and the file modified time is older than the number of hours set.

Media download event

Whenever a recording is downloaded (either because you requested playback or media sync picked it up), the integration fires a Home Assistant event tapo_control_media_downloaded with data:

  • entry_id: Config entry id of

readme truncated — read the full docs on github

Frequently asked questions

Is HomeAssistant-Tapo-Control free to use?

HomeAssistant-Tapo-Control is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does HomeAssistant-Tapo-Control do?

Control for Tapo cameras as a Home Assistant component

What is HomeAssistant-Tapo-Control written in?

HomeAssistant-Tapo-Control is primarily written in Python. Its source is publicly available at https://github.com/JurajNyiri/HomeAssistant-Tapo-Control, and it has 1,999 GitHub stars.