Skip to content

About

Typed, dependency-light Python SDK for TP-Link Deco mesh routers over the internal HTTPS API — clients, devices, performance and network status.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Repository files navigation

tplink-deco-api

CI PyPI

Sponsor

Python SDK for controlling TP-Link Deco mesh Wi-Fi routers via the internal HTTP API.

Installation

pip install tplink-deco-api

Usage

from tplink_deco_api import DecoClient

with DecoClient("192.168.68.1", "admin", "your-password") as deco:
    for client in deco.get_client_list():
        print(client.name, client.ip, client.connection_type)

Available methods

Session

Method Returns
login() LoginResult
logout() None
is_authenticated() bool

Typed queries

Method Returns
get_device_list() list[Device]
get_device_mode() DeviceMode
get_wlan_config() WlanConfig
get_performance() Performance
get_client_list(deco_mac?) list[ClientDevice]
get_client_totals(deco_mac?) NetworkTotals
get_internet_status() InternetStatus
get_wan_info(device_mac?) WanInfo
get_dsl_status(device_mac?) DslStatus
get_wireless_power(device_mac?) WirelessPower
get_time_settings(device_mac?) TimeSettings
get_log_types() list[LogType]

Client management — deco.clients

Method Returns
update(mac, name, client_type?) None
remove(mac) None
get_blocked() list[BlockedClient]
block(mac, name, client_type) None
unblock(mac) None

update always sends the name: the firmware ignores an edit that does not carry one, so pass the current name to change only the device type. remove forgets an offline client; the router lists it again if it reconnects.

Fixed IPs — deco.address_reservations

Method Returns
get_table() AddressReservationTable
add(reservation) None
modify(current, replacement) None
remove(mac) None
from tplink_deco_api import AddressReservation, DecoClient

with DecoClient("192.168.68.1", "admin", "your-password") as deco:
    deco.address_reservations.add(AddressReservation("AA:BB:CC:DD:EE:FF", "192.168.68.50"))
    deco.clients.update("AA:BB:CC:DD:EE:FF", "Living Room TV")

MAC addresses are accepted with : or - separators. Malformed MAC or IPv4 input raises ValueError before any request is sent.

Raw access

request(path, form, data) and request_list(path, form, data) send an authenticated, encrypted request to any endpoint and return the decrypted result (as an object or a list respectively). Use them for the endpoints that have no typed wrapper yet — the full catalogue is documented in docs/endpoints/.

Models

Every method returns typed dataclasses — no generic dictionaries.

client.mac              # "AA:BB:CC:DD:EE:FF"
client.name             # "MacBook Pro"
client.ip               # "192.168.68.10"
client.connection_type  # "band6"
client.online           # True

device.device_model     # "BE65"
device.software_ver     # "1.2.10 Build 20251229"

wlan.band2_4.host.ssid      # "My Network"
wlan.band2_4.guest.password # "guest-password"

perf.cpu_usage  # 0.03
perf.mem_usage  # 0.42

Requirements

  • Python 3.14+
  • TP-Link Deco router reachable on the local network

Support

This SDK is built and maintained on personal time, on hardware bought for the purpose. If it is useful to you, consider sponsoring the work — it keeps the devices, the testing and the releases coming.

License

MIT

About

Typed, dependency-light Python SDK for TP-Link Deco mesh routers over the internal HTTPS API — clients, devices, performance and network status.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages