• Stars
    star
    340
  • Rank 124,317 (Top 3 %)
  • Language
    Rust
  • License
    MIT License
  • Created over 2 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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).

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), 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
on ✅ ✅ ✓ ✓ ✅ ✅
off ✅ ✅ ✓ ✓ ✅ ✅
get_device_info ✅ ✅ ✓ ✓ ✅ ✅
get_device_info_json ✅ ✅ ✓ ✓ ✅ ✅
get_device_usage ✅ ✓ ✓ ✅ ✅
get_energy_usage ✅
get_energy_data ✅
get_current_power ✅
set_brightness ✅ ✓ ✓
set_color ✓ ✓
set_hue_saturation ✓ ✓
set_color_temperature ✓ ✓
set_lighting_effect ✓
set() API * ✓ ✓

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

Hub (H100) Support

Feature KE100 S200B T100 T110 T300 T310, T315
get_device_info * ✓ ✓ ✓ ✓ ✓ ✓
get_device_info_json ✓ ✓ ✓ ✓ ✓ ✓
get_temperature_humidity_records ✓
get_trigger_logs ✓ ✓ ✓ ✓
set_target_temperature ✓
set_min_control_temperature ✓
set_max_control_temperature ✓
set_temperature_offset ✓
set_frost_protection ✓
set_child_protection ✓

* Obtained by calling get_child_device_list on the hub device or get_device_info on a child 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
poetry shell

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.