TP-Link Archer C50 API
Project description
TP-Link Archer C50 API
HTTP based python package for API access and router management of the TP-Link Archer C50
Version 1.0.0
Dependencies
Usage
Initialize
Enter your hostname/IP & credentials used to log in to your router management page
import tplinkrouter
router = tplinkrouter.C50('hostname','username','password')
OPTIONAL: You may also pass a logger as router = tplinkrouter.C50('hostname','username','password',_LOGGER)
to log errors instead of printing them
Built-in Functions (v0.3.0+)
router.about()
# Return
{
'modelName': 'Archer C50',
'description': 'TP-Link Archer C50 AC1200 Dual-Band'
}
router.get_clients()
# Return
['johns-iphone','macbook-pro','android-c78df7av3c5d4ba43cad65c6']
router.get_password('MYSSID1')
# Return
'mypassword24ghz'
router.set_password('MYSSID1','bobsyouruncle')
# Disable SSID broadcast of MYSSID2
router.set_ssid_state('MYSSID2',False)
# Disable 5GHz Band
router.set_band('5GHz',False)
Function | Args | Description | Return |
---|---|---|---|
about |
Gets basic info about the router | { 'modelName', 'description' } |
|
get_version |
Gets hardware and software version of the router | { 'hardwareVersion', 'softwareVersion' } |
|
get_clients |
Gets list of connected clients (host name) including DHCP & permanent leases, across both wifi and LAN | List of strings | |
get_clients_by_mac |
Gets list of connected clients (MAC Address) including DHCP & permanent leases, across both wifi and LAN | List of strings | |
get_wlans |
Gets details of wlans (by internal wlan name) including guest network wlans on both bands | Dict of Dicts | |
get_ssids |
Gets list of ssids including guest network wlans on both bands | List of strings | |
get_password |
ssid -> str: required |
Gets WPA2 PSK of specified SSID | string |
set_password |
ssid -> str: required password -> str: required |
Sets new WPA2 PSK of specified SSID | boolean |
set_ssid_state |
ssid -> str: required state -> boolean: required |
Enables/disables SSID broadcast of the specified SSID | boolean |
set_band |
band -> 2.4GHz or 5GHz state -> boolean: required |
Enables/disables specified band | boolean |
is_on |
Returns whether or not the device is powered on | boolean | |
restart |
Does what it says on the can | boolean | |
logout |
Does what it says on the can | boolean |
Internal Function: _get()
Internal function used to access different named commands. You may use this if you want direct access to the router's return data without the cleanup done by built-in functions
router._get('wlan')
Supported Parameters:
about
version
info
bands
wan
wlan
wlan_info
guest_24ghz
guest_5ghz
dhcp_settings
dhcp_clients
restart
logout
Return Format: Dictionary
Internal Function: _set()
Internal function used to run different set processes. You may use this if you want to directly set the router's parameters without the processing done by built-in functions
Change Password of 2.4Ghz Network:
router._set('24ghz', [{'[LAN_WLAN#1,1,0,0,0,0#0,0,0,0,0,0]0,5': {'X_TP_PreSharedKey': 'new_password'}}])
Enable/Disable WAN PPPoE:
# Enable
router._set('wan', [{}, {'[WAN_PPP_CONN#1,1,1,0,0,0#0,0,0,0,0,0]1,19': {'enable': '1'}}, {}])
# Disable
router._set('wan', [{}, {'[WAN_PPP_CONN#1,1,1,0,0,0#0,0,0,0,0,0]1,19': {'enable': '0'}}])
Return Format: Boolean
Supported Parameters:
wan
24ghz
5ghz
24ghz_band
5ghz_band
_set()
only updates the keys passed in argument 2. All other values are either fetched from the router wherever available.
Note 1: Value Format
All key/values passed in Argument 2 of _set()
must be strings.
Argument 2 passed to _set()
must be a List of Dictionaries.
Note 2: Positional Arguments
Each list item in Argument 2 of _set()
directly corresponds to each subtask in the process.
Omitting an item in the list will ignore that subtask. (See Example: Disable WAN PPPoE, index[2] omitted)
To run a subtask without updating any of its values, pass an empty dictionary in its position.
Note 3: Status Code
Internal functions return an additional key status_code
with the HTTP status code of the request. Remember to ignore this key before iterating through returned Lists or Dicts.
Models
This has only been tested on the TP-Link Archer C50 V1 running firmware 160411.
Supported Models (known):
- TP-Link Archer C50 V1
- TP-Link N600 You're free to test on other models and report them in the Issues tab.
Error 500 & Login Limit
The TP-Link Web Interface only supports upto 1 user logged in at a time (for security reasons, apparently) which is the most common reason to recieve HTTP ERROR 500
. As a workaround, you must log out from all other devices/browsers and try again. Additionally, you may also run router._get('logout')
Troubleshooting/Error Reporting/Contributing
- If you face an error, you may debug using a HTTP Requests tool/monitor on your router's configuration webpage. Additionally, you may open a new issue on this repo prefixed by [Bug]
- If you would like to help improve the package, request features or add support for more models, open an issue prefixed by [Feature Request] or [Improvement]
PRs and Commit Template
PRs and commits that you make to this repo must include the following:
- Type: bug-fix or enhancement
- Description: Brief description about what the commit achieves
- Notes: (heads ups/pointers to other developers if necessary)
Changelog
v1.0.0
- First major release!
- Cleanup
v0.3.0
- Logging support
- New return format that adds
status_code
- Performance Optimization: Logout session after commands to minimize Error 500 instances
- Remove unnecessary I/O
v0.2.1
- Add band control toggles
v0.2.0
- Introducing built in functions! Predefined commands for the most commonly used tasks, so you don't have to manually figure out the payloads.
v0.1.3
- Fix pip deploy bug
v0.1.2
- Fix pip import bug
v0.1.1
- Remove AIOHTTP Dependency
v0.1.0
- Python Package
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file tplinkrouter-1.0.0.tar.gz
.
File metadata
- Download URL: tplinkrouter-1.0.0.tar.gz
- Upload date:
- Size: 8.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77fe7c0ee9d4c64a66344f15b88703f675dd6481ffcf18163d4078a84544c19d |
|
MD5 | 3afeb46994db2f46c8f164d3b80c4a9a |
|
BLAKE2b-256 | 5e5f005aec9fff5773e3886ce5d9888e132c3179cb95362f9f87610ce85dc11f |
File details
Details for the file tplinkrouter-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: tplinkrouter-1.0.0-py3-none-any.whl
- Upload date:
- Size: 20.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4848473983d7bed47fcc5e774a770c41676648e1f1e3d592103f812cfa78983f |
|
MD5 | ca9c3a09a357ea772e12cc3601fdedc8 |
|
BLAKE2b-256 | 9db7090f93474f5f709f2ead9ca02afedf38f9a3eab10b338862889ed0cf73c9 |