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).
✓ - 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.
| 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.
Cargo.toml
[dependencies]
tapo = "0.7"main.rs
let device = ApiClient::new("<tapo-username>", "tapo-password")?
.p110("<device ip address>")
.await?;
device.on().await?;export TAPO_USERNAME=
export TAPO_PASSWORD=
export IP_ADDRESS=
cargo run --example tapo_l530See all examples in /tapo/examples.
tapo-rest is a REST wrapper of this library that can be deployed as a service or serve as an advanced example.
pip install tapoclient = ApiClient("<tapo-username>", "tapo-password")
device = await client.p110("<device ip address>")
await device.on()cd tapo-py
poetry install
poetry shell
export TAPO_USERNAME=
export TAPO_PASSWORD=
export IP_ADDRESS=python examples/tapo_p110.pySee all examples in /tapo-py/examples.
Contributions are welcome and encouraged! See /CONTRIBUTING.md.
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")Inspired by petretiandrea/plugp100.