Skip to content

Instantly share code, notes, and snippets.

Forked from joestump/
Last active April 1, 2023 12:11
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
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

@alexlmiller, thanks. I was hoping it would work right off the bat but understands this will not work due to "imports".
Thanks anyway, will look at those alternatives.

Copy link

rjcds commented Jan 10, 2022

Thank you @alexlmiller - using your script with a UDM works perfectly; here is my Home Assistant switch:

  - platform: command_line
          command_on: >
              python3 /config/scripts/ --wlan_id XXX --function enable
          command_off: >
              python3 /config/scripts/ --wlan_id XXX --function disable
          command_state: >
              python3 /config/scripts/ --wlan_id XXX --function status
          value_template: >
              {% if value == "SSID is ENABLED" %}
              {% else %}
              {% endif %}
          friendly_name: Guest WiFi

Copy link

rjcds commented Jan 15, 2022

@gulli1986 you can try my bash script here
I put it together for a friend who is using HA OS like you

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