Skip to main content

Unofficial Tapo API Client. Works with TP-Link Tapo smart devices. Tested with light bulbs (L510, L520, L530, L610, L630), plugs (P100, P105, P110, P115), hubs (H100), switches (S200B) and sensors (KE100, T100, T110, T300, T310, T315).

Project description

Tapo

License Crates Documentation Crates.io PyPI Python PyPI
Unofficial Tapo API Client. Works with TP-Link Tapo smart devices. Tested with light bulbs (L510, L520, L530, L610, L630), light strips (L900, L920, L930), plugs (P100, P105, P110, P115, P300), hubs (H100), switches (S200B) and sensors (KE100, T100, T110, T300, T310, T315).

Device support

✓ - Rust only
✅ - Rust and Python

Feature


GenericDevice


L510
L520
L610
L530
L630

L900


L920
L930

P100
P105

P110
P115

P300


H100


device_reset
get_child_device_component_list_json
get_child_device_list
get_child_device_list_json
get_current_power
get_device_info
get_device_info_json
get_device_usage
get_energy_data
get_energy_usage
off
on
refresh_session
set_brightness
set_color
set_color_temperature
set_hue_saturation
set_lighting_effect
set() API *

* The set() API allows multiple properties to be set in a single request.

Hub (H100) Child Devices Support

Feature

KE100

S200B

T100

T110

T300

T310
T315
get_device_info *
get_device_info_json
get_temperature_humidity_records
get_trigger_logs
set_child_protection
set_frost_protection
set_max_control_temperature
set_min_control_temperature
set_target_temperature
set_temperature_offset

* Obtained by calling get_child_device_list on the hub device or get_device_info on a child device handler.

Rust

Usage

Cargo.toml

[dependencies]
tapo = "0.7"

main.rs

let device = ApiClient::new("<tapo-username>", "tapo-password")
    .p110("<device ip address>")
    .await?;

device.on().await?;

Examples

export TAPO_USERNAME=
export TAPO_PASSWORD=
export IP_ADDRESS=

cargo run --example tapo_l530

See all examples in /tapo/examples.

Wrapper REST API

tapo-rest is a REST wrapper of this library that can be deployed as a service or serve as an advanced example.

Python

Usage

pip install tapo
client = ApiClient("<tapo-username>", "tapo-password")
device = await client.p110("<device ip address>")

await device.on()

Examples

cd tapo-py
poetry install # On the initial run
poetry shell
maturin develop # On the initial run and whenever the Rust code is modified

export TAPO_USERNAME=
export TAPO_PASSWORD=
export IP_ADDRESS=
python examples/tapo_p110.py

See all examples in /tapo-py/examples.

Contributing

Contributions are welcome and encouraged! See /CONTRIBUTING.md.

Troubleshooting

1. Installing openssl on Windows

With chocolatey

choco install openssl
[System.Environment]::SetEnvironmentVariable('OPENSSL_DIR', $Env:Programfiles + "\OpenSSL-Win64", "User")

or with vcpkg

git clone git@github.com:microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat
./vcpkg.exe install openssl-windows:x64-windows
./vcpkg.exe install openssl:x64-windows-static
./vcpkg.exe integrate install
[System.Environment]::SetEnvironmentVariable('OPENSSL_DIR', (Get-Location).Path + "\installed\x64-windows-static", "User")

Credits

Inspired by petretiandrea/plugp100.

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

tapo-0.5.0.tar.gz (103.7 kB view hashes)

Uploaded Source

Built Distributions

tapo-0.5.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl (5.1 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ x86-64

tapo-0.5.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl (5.0 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ i686

tapo-0.5.0-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl (4.8 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARMv7l

tapo-0.5.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl (5.5 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARM64

tapo-0.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

tapo-0.5.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (5.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

tapo-0.5.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

tapo-0.5.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

tapo-0.5.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (4.5 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

tapo-0.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

tapo-0.5.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl (5.1 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ x86-64

tapo-0.5.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl (5.0 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ i686

tapo-0.5.0-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl (4.8 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARMv7l

tapo-0.5.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl (5.5 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARM64

tapo-0.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

tapo-0.5.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (5.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

tapo-0.5.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

tapo-0.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

tapo-0.5.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (4.5 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

tapo-0.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

tapo-0.5.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl (5.1 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ x86-64

tapo-0.5.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl (5.0 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ i686

tapo-0.5.0-pp38-pypy38_pp73-musllinux_1_2_armv7l.whl (4.8 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARMv7l

tapo-0.5.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl (5.5 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARM64

tapo-0.5.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (5.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

tapo-0.5.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

tapo-0.5.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (4.5 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

tapo-0.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

tapo-0.5.0-cp312-none-win_amd64.whl (3.9 MB view hashes)

Uploaded CPython 3.12 Windows x86-64

tapo-0.5.0-cp312-none-win32.whl (3.4 MB view hashes)

Uploaded CPython 3.12 Windows x86

tapo-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl (5.1 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

tapo-0.5.0-cp312-cp312-musllinux_1_2_i686.whl (5.0 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

tapo-0.5.0-cp312-cp312-musllinux_1_2_armv7l.whl (4.8 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARMv7l

tapo-0.5.0-cp312-cp312-musllinux_1_2_aarch64.whl (5.5 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

tapo-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

tapo-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (5.2 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

tapo-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.8 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

tapo-0.5.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

tapo-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (4.5 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

tapo-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.2 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

tapo-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (4.3 MB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

tapo-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl (3.9 MB view hashes)

Uploaded CPython 3.12 macOS 10.12+ x86-64

tapo-0.5.0-cp311-none-win_amd64.whl (3.9 MB view hashes)

Uploaded CPython 3.11 Windows x86-64

tapo-0.5.0-cp311-none-win32.whl (3.4 MB view hashes)

Uploaded CPython 3.11 Windows x86

tapo-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl (5.1 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

tapo-0.5.0-cp311-cp311-musllinux_1_2_i686.whl (5.0 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

tapo-0.5.0-cp311-cp311-musllinux_1_2_armv7l.whl (4.8 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARMv7l

tapo-0.5.0-cp311-cp311-musllinux_1_2_aarch64.whl (5.5 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

tapo-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

tapo-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (5.2 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

tapo-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.8 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

tapo-0.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

tapo-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (4.5 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

tapo-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.2 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

tapo-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (4.3 MB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

tapo-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl (4.0 MB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

tapo-0.5.0-cp310-none-win_amd64.whl (3.9 MB view hashes)

Uploaded CPython 3.10 Windows x86-64

tapo-0.5.0-cp310-none-win32.whl (3.4 MB view hashes)

Uploaded CPython 3.10 Windows x86

tapo-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl (5.1 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

tapo-0.5.0-cp310-cp310-musllinux_1_2_i686.whl (5.0 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

tapo-0.5.0-cp310-cp310-musllinux_1_2_armv7l.whl (4.8 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARMv7l

tapo-0.5.0-cp310-cp310-musllinux_1_2_aarch64.whl (5.5 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

tapo-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

tapo-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (5.2 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

tapo-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.8 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

tapo-0.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

tapo-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (4.5 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

tapo-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.2 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

tapo-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (4.3 MB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

tapo-0.5.0-cp39-none-win_amd64.whl (3.9 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

tapo-0.5.0-cp39-none-win32.whl (3.4 MB view hashes)

Uploaded CPython 3.9 Windows x86

tapo-0.5.0-cp39-cp39-musllinux_1_2_x86_64.whl (5.1 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

tapo-0.5.0-cp39-cp39-musllinux_1_2_i686.whl (5.0 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

tapo-0.5.0-cp39-cp39-musllinux_1_2_armv7l.whl (4.8 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARMv7l

tapo-0.5.0-cp39-cp39-musllinux_1_2_aarch64.whl (5.5 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

tapo-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

tapo-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (5.2 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

tapo-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.8 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

tapo-0.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

tapo-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (4.5 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

tapo-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.2 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

tapo-0.5.0-cp39-cp39-macosx_11_0_arm64.whl (4.3 MB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

tapo-0.5.0-cp38-none-win_amd64.whl (3.9 MB view hashes)

Uploaded CPython 3.8 Windows x86-64

tapo-0.5.0-cp38-none-win32.whl (3.4 MB view hashes)

Uploaded CPython 3.8 Windows x86

tapo-0.5.0-cp38-cp38-musllinux_1_2_x86_64.whl (5.1 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

tapo-0.5.0-cp38-cp38-musllinux_1_2_i686.whl (5.0 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ i686

tapo-0.5.0-cp38-cp38-musllinux_1_2_armv7l.whl (4.8 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARMv7l

tapo-0.5.0-cp38-cp38-musllinux_1_2_aarch64.whl (5.5 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

tapo-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

tapo-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (5.2 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

tapo-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.8 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

tapo-0.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

tapo-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (4.5 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

tapo-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.2 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

Supported by

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