DISCLAIMER: This software is neither affiliated with nor endorsed by either Control4 or TP-Link.
This suite provides local, cloud-free control of TP-Link Kasa and Tapo smart home devices from Control4, across the generations of TP-Link's local protocols. Older Kasa integrations rely on TP-Link's plaintext protocol on port 9999; firmware updates rolled out since late 2024 disable that protocol and replace it with KLAP, an encrypted local protocol, and newer Kasa hardware (e.g. the EP25 v2.6) also swaps the legacy command schema for the SMART schema that Tapo devices speak. These drivers implement the KLAP handshake and session encryption (both hash generations) and both command schemas, and auto-detect devices still on the original firmware, so the same driver instance keeps working when TP-Link migrates a device.
- Control4 OS 3.3+
- TP-Link (Kasa/Tapo) account credentials for devices on KLAP firmware; devices on original Kasa firmware need no credentials
Control Kasa smart power strips (HS300/KP303/KP400) and smart plugs. Every output is exposed as a standard Control4 relay binding with per-output events, variables, and real-time power readings.
Key features:
- Local control of each output with no TP-Link cloud dependency after setup
- KLAP encrypted transport plus automatic legacy protocol detection
- Speaks both the legacy IOT and the newer SMART command schemas, so SMART-firmware plugs and power strips (Kasa EP25 v2.6/KP125M/EP40M, Tapo P-series) work alongside classic Kasa hardware
- Standard Control4 relay binding per output
Output N Turned On/Output N Turned Off,Connected, andDisconnectedevents- Per-output variables (
Output N Name,Output N State,Output N Power,Voltage) for programming - Real-time energy monitoring per outlet with a configurable poll rate, on devices that support it
- Turn Output On / Turn Output Off / Toggle Output programming commands
- Output Light bindings pair with the TP-Link Light driver to present an output as a light
Present a Control4 light (light_v2) backed by a TP-Link device, in one of two modes:
Key features:
- Direct mode: connects to a TP-Link light — Tapo L900/L920/L930 strips and Tapo bulbs over KLAP + SMART, or legacy Kasa KL/LB-series bulbs and light strips over KLAP or port 9999 with the IOT schema, auto-detected. Brightness, color, and color temperature are enabled dynamically from what the device reports
- Proxy mode: binds to a TP-Link Outlet output so a lamp plugged into a smart outlet appears as a real on/off light, with state kept in sync from the outlet
- Conservative capability baseline so on/off devices never advertise dimming or color to capability consumers
- Advanced Lighting Scenes support
- Download the latest
control4-tplink.zipfrom Github. - Extract and install the desired
.c4zdriver files. - Use the "Search" tab in Composer Pro to find the driver by name and add it to your project.
Each driver includes its own documentation accessible from within Composer Pro. Refer to the individual driver documentation for detailed property descriptions, programming reference, and configuration guides.
If you have any questions or issues integrating these drivers with Control4, you can file an issue on GitHub:
https://github.com/finitelabs/control4-tplink/issues/new
- TP-Link Outlet: control the individual outputs of multi-outlet legacy plugs that report short child ids (such as the EP40A). These devices reject the short id in the relay command and require the full device-prefixed child id, so per-output on and off now works instead of failing silently.
- TP-Link Light: direct-mode support for legacy Kasa KL/LB-series bulbs (e.g. KL110, KL120, KL125, KL130, KL135) and light strips (KL400/KL420/KL430) via the IOT command schema, over the original port 9999 protocol or KLAP firmware with either hash generation. Devices on original firmware need no TP-Link credentials. Ramp rates forward as device-side transitions, matching the SMART path. Any Control4 light command takes over from a lighting effect running on a strip.
- TP-Link Light: a Protocol property (Auto/KLAP/Legacy) and a Reconnect action,
matching the TP-Link Outlet driver. The detected transport and schema show in
Driver Status as
Connected (SMART),Connected (KLAP), orConnected (Legacy). - Verified hardware: a field install confirms the KL130 in direct mode via the IOT bulb schema.
- TP-Link Light: Tapo-class devices in direct mode now show
Connected (SMART)instead ofConnected (KLAP), matching the outlet driver's naming.
- TP-Link Outlet: SMART command schema support for newer Kasa and Tapo plugs
(e.g. EP25 hardware v2.6, KP125M, Tapo P-series), auto-detected over KLAP and
shown as
Connected (SMART). TP-Link account credentials are required, and SMART devices on very early firmware (EP25 v2.6 firmware 1.0.2 and older) need a firmware update through the Kasa app. - TP-Link Outlet: multi-outlet SMART devices (Tapo power strips, EP40M) are controlled through their child outlets, including per-outlet energy readings where the hardware reports them.
- TP-Link Outlet: KLAP v1 handshake hashing for original Kasa devices whose KLAP firmware uses MD5-based hashes instead of the SHA-based v2 hashes.
- TP-Link Outlet: Auto mode falls back to the legacy protocol even when the KLAP handshake reports an auth mismatch, so transitional Kasa firmware (seen on KP115 1.1.1) that answers KLAP with credentials matching no known scheme stays reachable over the legacy protocol it still serves on port 9999.
- Verified hardware documented from live systems: EP25 over KLAP + SMART, HS300 on KLAP firmware, KP115 and HS110 on legacy firmware, and a Tapo L930 over KLAP + SMART.
- Forward Control4 ramp rates to the bulb as a native SMART transition, so brightness, color, and on/off changes fade over the programmed rate instead of snapping in direct mode.
- Restore dynamic bindings and output variables in OnDriverInit so programming attached to them keeps working after a Director restart.
- Restructured the repository README as a suite overview covering both the TP-Link Outlet and TP-Link Light drivers, instead of embedding the outlet driver's documentation.
- Initial release.

