Kasa Smart Plugs
TP-Link Kasa EP25 and EP10 plugs are the backbone of TentPilot's environment and irrigation control. They're controlled via LAN — no cloud dependency, no API keys, sub-100ms toggle response time. Scout discovers them automatically.
Supported models
| Model | Notes |
|---|---|
| EP25 | Recommended — energy monitoring, 15A, outdoor-rated |
| EP10 | Budget option — no energy monitoring, compact body, 15A |
| KP115 | Older EP25 equivalent — also works via python-kasa |
Newer Kasa firmware (2023+) uses TP-Link's KLAP auth protocol. Make sure you're running Scout v0.2+ which includes KLAP support. Older Scout builds will fail to authenticate against updated firmware.
Setup
Add plugs to the Kasa app
Use the TP-Link Kasa iOS/Android app to add your plugs to your Wi-Fi network. This is the only step that requires the Kasa app — once the plug is on your network, TentPilot takes over via LAN.
Scout auto-discovers plugs
Start Scout (tentpilot-scout) on a machine on the same network. It sends UDP broadcast discovery packets and finds all Kasa plugs automatically. No IP addresses or credentials needed.
Found: TP-Link EP25 @ 192.168.1.45 (fan-left)
Found: TP-Link EP25 @ 192.168.1.46 (humidifier)
Found: TP-Link EP10 @ 192.168.1.52 (irrigation-pump)
Assign roles in the dashboard
In the TentPilot dashboard, go to Devices. Each Kasa plug will appear with an "Assign" button. Select the room and role for each plug.
Available device roles
| Role | Control mode | Used by |
|---|---|---|
| fan | Bang-bang (direct) | Environment control loop |
| heater | Bang-bang (direct) | Environment control loop |
| humidifier | Bang-bang (direct) | Environment control loop |
| dehumidifier | Bang-bang (direct) | Environment control loop |
| irrigation_pump | Timed toggle | Irrigation scheduler |
| nutrient_pump_[A-H] | Timed toggle | Fertigation engine |
Kasa plugs are controlled in "direct" mode — TentPilot toggles the outlet on and off directly. Inkbird controllers (ITC-308, IHC-200) use "setpoint" mode — TentPilot adjusts the controller's internal setpoint. If you're using both, TentPilot handles the distinction automatically based on device type.
Troubleshooting
Plug discovered but not controllable
This usually means KLAP auth failed. Update Scout: pip install --upgrade tentpilot-scout. If the plug was recently reset or firmware-updated, it may use a new credential. Re-run the Kasa app onboarding for that device, then restart Scout.
Plug not discovered at all
Confirm Scout is on the same subnet as the plug. Many routers block UDP broadcast across subnets or on guest networks. Try manually adding by IP: set KASA_STATIC_IPS=192.168.1.45,192.168.1.46 in your environment before running Scout.