Tapo
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
[]
= "0.7"
main.rs
let device = new?
.p110
.await?;
device.on.await?;
Examples
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
=
= await
await
Examples
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.