python-kasa
python-kasa is a Python library to control TPLink's smart home devices (plugs, wall switches, power strips, and bulbs).
This is a voluntary, community-driven effort and is not affiliated, sponsored, or endorsed by TPLink.
Contributions in any form (adding missing features, reporting issues, fixing or triaging existing ones, improving the documentation, or device donations) are more than welcome!
Getting started
You can install the most recent release using pip:
pip install python-kasa
Alternatively, you can clone this repository and use uv to install the development version:
git clone https://github.com/python-kasa/python-kasa.git
cd python-kasa/
uv sync --all-extras
uv run kasa
If you have not yet provisioned your device, you can do so using the cli tool.
Discovering devices
Running kasa discover will send discovery packets to the default broadcast address (255.255.255.255) to discover supported devices.
If your device requires authentication to control it,
you need to pass the credentials using --username and --password options or define KASA_USERNAME and KASA_PASSWORD environment variables.
The discover command will automatically execute the state command on all the discovered devices:
$ kasa discover
Discovering devices on 255.255.255.255 for 3 seconds
== Bulb McBulby - L530 ==
Host: 192.0.2.123
Port: 80
Device state: False
Time: 2024-06-22 15:42:15+02:00 (tz: {'timezone': 'CEST'}
Hardware: 3.0
Software: 1.1.6 Build 240130 Rel.173828
MAC (rssi): 5C:E9:31:aa:bb:cc (-50)
== Primary features ==
State (state): False
Brightness (brightness): 11 (range: 0-100)
Color temperature (color_temperature): 0 (range: 2500-6500)
Light effect (light_effect): *Off* Party Relax
== Information ==
Signal Level (signal_level): 2
Overheated (overheated): False
Cloud connection (cloud_connection): False
Update available (update_available): None
Device time (device_time): 2024-06-22 15:42:15+02:00
== Configuration ==
HSV (hsv): HSV(hue=35, saturation=70, value=11)
Auto update enabled (auto_update_enabled): False
Light preset (light_preset): *Not set* Light preset 1 Light preset 2 Light preset 3 Light preset 4 Light preset 5 Light preset 6 Light preset 7
Smooth transition on (smooth_transition_on): 2 (range: 0-60)
Smooth transition off (smooth_transition_off): 20 (range: 0-60)
== Debug ==
Device ID (device_id): soneuniqueidentifier
RSSI (rssi): -50 dBm
SSID (ssid): HomeNet
Current firmware version (current_firmware_version): 1.1.6 Build 240130 Rel.173828
Available firmware version (available_firmware_version): None
Command line usage
All devices support a variety of common commands (like on, off, and state).
The syntax to control device is kasa --host <host> <command>:
$ kasa --host 192.0.2.123 on
Use kasa --help (or consult the documentation) to get a list of all available commands and options.
Some examples of available options include JSON output (--json), more verbose output (--verbose), and defining timeouts (--timeout and --discovery-timeout).
Refer the documentation for more details.
Feature interface
All devices are also controllable through a generic feature-based interface.
The available features differ from device to device and are accessible using kasa feature command:
$ kasa --host 192.0.2.123 feature
== Primary features ==
State (state): False
Brightness (brightness): 11 (range: 0-100)
Color temperature (color_temperature): 0 (range: 2500-6500)
Light effect (light_effect): *Off* Party Relax
== Information ==
Signal Level (signal_level): 2
Overheated (overheated): False
Cloud connection (cloud_connection): False
Update available (update_available): None
Device time (device_time): 2024-06-22 15:39:44+02:00
== Configuration ==
HSV (hsv): HSV(hue=35, saturation=70, value=11)
Auto update enabled (auto_update_enabled): False
Light preset (light_preset): *Not set* Light preset 1 Light preset 2 Light preset 3 Light preset 4 Light preset 5 Light preset 6 Light preset 7
Smooth transition on (smooth_transition_on): 2 (range: 0-60)
Smooth transition off (smooth_transition_off): 20 (range: 0-60)
== Debug ==
Device ID (device_id): soneuniqueidentifier
RSSI (rssi): -50 dBm
SSID (ssid): HomeNet
Current firmware version (current_firmware_version): 1.1.6 Build 240130 Rel.173828
Available firmware version (available_firmware_version): None
Some features present configuration that can be changed:
kasa --host 192.0.2.123 feature color_temperature 2500
Changing color_temperature from 0 to 2500
New state: 2500
Library usage
import asyncio
from kasa import Discover
async def main():
dev = await Discover.discover_single("192.0.2.123", username="un@example.com", password="pw")
await dev.turn_on()
await dev.update()
if __name__ == "__main__":
asyncio.run(main())
If you want to use this library in your own project, a good starting point is the tutorial in the documentation.
You can find several code examples in the API documentation How to guides.
Information about the library design and the way the devices work can be found in the topics section.
Contributing
Contributions are very welcome! The easiest way to contribute is by creating a fixture file for the automated test suite if your device hardware and firmware version is not currently listed as supported. Please refer to our contributing guidelines.
Supported devices
The following devices have been tested and confirmed as working. If your device is unlisted but working, please consider contributing a fixture file.
Supported Kasa devices
- Plugs: EP10, EP251, HS1001, HS103, HS105, HS110, KP100, KP105, KP115, KP125, KP125M2, KP401
- Power Strips: EP40, EP40M2, HS107, HS300, KP200, KP303, KP400
- Wall Switches: ES20M, HS2001, HS210, HS2201, KP405, KS200, KS200M, KS2052, KS220, KS220M, KS2252, KS230, KS2402
- Bulbs: KL110, KL110B, KL120, KL125, KL130, KL135, KL50, KL60, LB100, LB110, LB130
- Light Strips: KL400L10, KL400L5, KL420L5, KL430
- Hubs: KH1002
- Hub-Connected Devices3: KE1002, KE1102
Supported Tapo2 devices
- Plugs: P100, P105, P110, P110M, P115, P125M, P135, TP10, TP15
- Power Strips: P210M, P300, P304M, P306, P316M, TP25
- Wall Switches: S210, S220, S500, S500D, S505, S505D, S515D, TS15
- Bulbs: L430C, L430P, L510B, L510E, L530B, L530E, L530EA, L535E, L630
- Light Strips: L900-10, L900-5, L920-5, L930-5
- Cameras: C100, C101, C110, C200, C210, C220, C225, C325WB, C460, C520WS, C720, TC40, TC65, TC70
- Doorbells and chimes: D100C, D130, D230
- Vacuums: RV20 Max Plus, RV30 Max
- Hubs: H100, H200
- Hub-Connected Devices3: S200B, S200D, T100, T110, T300, T310, T315
See supported devices in our documentation for more detailed information about tested hardware and software versions.
Resources
Developer Resources
- softScheck's github contains lot of information and wireshark dissector
- TP-Link Smart Home Device Simulator
- Unofficial API documentation
- Another unofficial API documentation
- pyHS100 provides synchronous interface and is the unmaintained predecessor of this library.
Library Users
Other related projects
- PyTapo - Python library for communication with Tapo Cameras
- Tapo P100 (Tapo plugs, Tapo bulbs)
- plugp100, another tapo library
- rust and python implementation for tapo devices
Metadata
Release files for python-kasa 0.11.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| python_kasa-0.11.0.1.tar.gz | 526.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| python_kasa-0.11.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 802.9 kB
Release files / python_kasa-0.11.0.1.tar.gz
| Download URL | python_kasa-0.11.0.1.tar.gz |
|---|---|
| Size | 526.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
378e6bb923690cda5cf1e9d33d4d4094c21a6e337614fd29a0f2d4af40da23e4
|
|
BLAKE2b-256 checksum How to use checksums |
5f4930b3526b58892f8407f164aa9b891db3ab6dbebd86f151124e557a7279f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.
Transparency logRelease files / python_kasa-0.11.0.1-py3-none-any.whl
| Download URL | python_kasa-0.11.0.1-py3-none-any.whl |
|---|---|
| Size | 276.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
58e0ad5c5b71e60c2b58f3a5a17bd9b9427b8947ec72aecb96edaaa6a78d84ad
|
|
BLAKE2b-256 checksum How to use checksums |
c5f10d1b2b6617263ba925675b604454fc0686898ac856487827067a1331aa8d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.
Transparency log