26 releases
0.7.17 | Oct 23, 2024 |
---|---|
0.7.14 | Aug 31, 2024 |
0.7.12 | Jun 27, 2024 |
0.7.9 | Jan 27, 2024 |
0.2.0 | Jun 12, 2022 |
#67 in Hardware support
217 downloads per month
265KB
5.5K
SLoC
Tapo
Unofficial Tapo API Client. Works with TP-Link Tapo smart devices. Tested with light bulbs (L510, L520, L530, L535, L610, L630), light strips (L900, L920, L930), plugs (P100, P105, P110, P115), power strips (P300, P304), 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 L535 L630 |
L900 |
L920 L930 |
P100 P105 |
P110 P115 |
P300 P304 |
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
✓ - Rust only
✅ - Rust and Python
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.
Credits
Inspired by petretiandrea/plugp100.
Dependencies
~13–25MB
~376K SLoC