Skip to content

Instantly share code, notes, and snippets.

Forked from joestump/
Last active April 1, 2023 12:11
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save alexlmiller/586f74bbef395e1a34b2dfd06541102b to your computer and use it in GitHub Desktop.
Save alexlmiller/586f74bbef395e1a34b2dfd06541102b to your computer and use it in GitHub Desktop.
A simply Python Client for enabling, disabling, and checking status of Wifi Networks on a Unifi Dream Machine (or other UnifiOS)
import requests
import json
import urllib3
import argparse
import udm_wlan_secrets
UNIFI_URL = udm_wlan_secrets.unifi_url
UNIFI_USER = udm_wlan_secrets.unifi_username
UNIFI_PASS = udm_wlan_secrets.unifi_password
UNIFI_LOGIN_PATH = '/api/auth/login'
UNIFI_WLAN_PATH = '/proxy/network/api/s/default/rest/wlanconf/'
# Disable SSL verification warnings
class Unifi(object):
def __init__(self, host, username, password): = host
self.username = username
self.password = password
self.session = requests.Session()
self.csrf = ""
def login(self):
payload = {
"username": self.username,
"password": self.password,
r = self.request(UNIFI_LOGIN_PATH, payload)
return r.ok
def status(self, wlan_id):
r = self.request(UNIFI_WLAN_PATH+wlan_id, method='GET')
wlan_status = r.json()
name = wlan_status['data'][0]['name']
wlan_active = wlan_status['data'][0]['enabled']
if wlan_active == True:
print(name+' is ENABLED')
elif wlan_active == False:
print(name+' is DISABLED')
return r.ok
def disable(self, wlan_id):
payload = {
"_id": wlan_id,
"enabled": False
r = self.request(UNIFI_WLAN_PATH+wlan_id, payload, method='PUT')
return r.ok
def enable(self, wlan_id):
payload = {
"_id": wlan_id,
"enabled": True
r = self.request(UNIFI_WLAN_PATH+wlan_id, payload, method='PUT')
return r.ok
def request(self, path, data={}, method='POST'):
uri = 'https://{}{}'.format(, path)
headers = {
"Accept": "application/json",
"Content-Type": "application/json; charset=utf-8",
if self.csrf:
headers["X-CSRF-Token"] = self.csrf
r = getattr(self.session, method.lower())(uri, json=data, verify=False, headers=headers)
self.csrf = r.headers['X-CSRF-Token']
except KeyError:
return r
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--wlan_id', help='ID of WLAN Network to Target')
parser.add_argument('--function', help='Status / Enable / Disable')
args = parser.parse_args()
if args.function == 'enable':
enable = u.enable(args.wlan_id)
status = u.status(args.wlan_id)
elif args.function == 'disable':
disable = u.disable(args.wlan_id)
status = u.status(args.wlan_id)
elif args.function == 'status':
status = u.status(args.wlan_id)
unifi_url = ''
unifi_username = ''
unifi_password = ''
Copy link

gulli1986 commented Jan 31, 2022

thanks @rjcds !
Working now, just had a small issue with 1.11.0 update but it is fine now!

Copy link

rjcds commented Jan 31, 2022

@gulli1986 are you referring to my script, or @alexlmiller 's ?
Mine is working on 1.11.0 as far as I can see for a friend with a UDM Pro on 1.11.0
@alexlmiller 's python script is working for me on 1.11.0 on a UDM base

Copy link

@rjcds I was having trouble with @alexlmiller 's python script and 1.11.0.
I switched to your script, it is now working fine with HA OS and unifi 1.11.0, thanks!

Copy link

!thanks @rjcds . Works great, appreciate the effort.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment