Skip to content

Instantly share code, notes, and snippets.

@tprelog
Forked from joestump/unifi.py
Last active January 21, 2024 18:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tprelog/286096e8e204bb7301027fecdc46ff4b to your computer and use it in GitHub Desktop.
Save tprelog/286096e8e204bb7301027fecdc46ff4b to your computer and use it in GitHub Desktop.
A simple Python client to shutdown or reboot the Ubiquiti UDM Pro
import argparse
import requests
import json
import urllib3
import unifi_secrets
HOST = unifi_secrets.unifi_host
USER = unifi_secrets.unifi_username
PASS = unifi_secrets.unifi_password
UNIFI_LOGIN_PATH = '/api/auth/login'
# Disable SSL verification warnings
urllib3.disable_warnings()
class Unifi(object):
def __init__(self, host, username, password):
self.host = 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 request(self, path, data={}, method='POST'):
uri = 'https://{}{}'.format(self.host, 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)
try:
self.csrf = r.headers['X-CSRF-Token']
except KeyError:
pass
return r
def reboot(self):
r = self.request("/api/system/reboot", method='POST')
return r.ok
def shutdown(self):
r = self.request("/api/system/poweroff", method='POST')
return r.ok
if __name__ == "__main__":
udm = Unifi(HOST,USER,PASS)
udm.login()
parser = argparse.ArgumentParser()
parser.add_argument('command', help='reboot | shutdown')
args = parser.parse_args()
if args.command == 'reboot':
udm.reboot()
elif args.command == 'shutdown':
udm.shutdown()
unifi_host = ''
unifi_username = ''
unifi_password = ''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment