• This repository has been archived on 26/Dec/2017
  • Stars
    star
    331
  • Rank 124,337 (Top 3 %)
  • Language
    Python
  • License
    MIT License
  • Created over 11 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

[UNMAINTAINED] An API towards the Ubiquity Networks UniFi controller

This project is not actively maintained

Issues and pull requests on this repository may not be acted on in a timely manner, or at all. You are of course welcome to use it anyway. You are even more welcome to fork it and maintain the results.

Unmaintained

unifi-api


A rewrite of https://github.com/unifi-hackers/unifi-lab in cleaner Python.

Install

sudo pip install -U unifi

Utilities

The following small utilities are bundled with the API:

unifi-ls-clients

Lists the currently active clients on the networks. Takes parameters for controller, username, password, controller version and site ID (UniFi >= 3.x)

jb@unifi:~ % unifi-ls-clients -c localhost -u admin -p p4ssw0rd -v v3 -s default
NAME                             MAC  AP            CHAN  RSSI   RX   TX
client-kitchen     00:24:36:9a:0d:ab  Study          100    51  300  216
jborg-mbp          28:cf:da:d6:46:20  Study          100    45  300  300
jb-iphone          48:60:bc:44:36:a4  Living Room      1    45   65   65
jb-ipad            1c:ab:a7:af:05:65  Living Room      1    22   52   65

unifi-low-snr-reconnect

Periodically checks all clients for low SNR values, and disconnects those who fall below the limit. The point being that these clients will then try to reassociate, hopefully finding a closer AP. Take the same parameters as above, plus settings for intervals and SNR threshold. Use unifi-low-snr-reconnect -h for an option summary.

A good source of understanding for RSSI/SNR values is this article. According to that, an SNR of 15 dB seems like a good cutoff, and that's also the default value in the script. You can set a higher value for testing:

jb@unifi:~ % unifi-low-snr-reconnect -c localhost -u admin -p p4ssw0rd -v v3 -s default --minsnr 30
2012-11-15 11:23:01 INFO unifi-low-snr-reconnect: Disconnecting jb-ipad/1c:ab:a7:af:05:65@Study (SNR 22 dB < 30 dB)
2012-11-15 11:23:01 INFO unifi-low-snr-reconnect: Disconnecting Annas-Iphone/74:e2:f5:97:da:7e@Living Room (SNR 29 dB < 30 dB)

For production use, launching the script into the background is recommended...

unifi-save-statistics

Get a csv file with statistics

unifi-save-statistics -c localhost -u admin -p p4ssw0rd -v v3 -s default -f filename.csv

API Example

from unifi.controller import Controller
c = Controller('192.168.1.99', 'admin', 'p4ssw0rd')
for ap in c.get_aps():
	print 'AP named %s with MAC %s' % (ap.get('name'), ap['mac'])

See also the scripts unifi-ls-clients and unifi-low-rssi-reconnect for more examples of how to use the API.

UniFi v3 Compatibility and Migration

With the release of v3, UniFi gained multisite support which requires some changes on how to interract with the API . Currently we assume v2 to be the default, thus: Updating the API WON'T BREAK existing code using this API.

Though, for continued v2 usage we recommend you start explicitely instanciating your controller in v2 mode for the day the default assumption starts to be v3 or newer:

c = Controller('192.168.1.99', 'admin', 'p4ssw0rd', 'v2')

With UniFi v3, connecting to the first (default) site, is as easy as instanciating a controller in v3 mode:

c = Controller('192.168.1.99', 'admin', 'p4ssw0rd', 'v3')

Connecting to a site other than default requires indication of both version and the site ID:

c = Controller('192.168.1.99', 'admin', 'p4ssw0rd', 'v3', 'myothersite')

You can find about the site ID by selecting the site in the UniFi web interface, i.e. "My other site". Then you can find ia its URL (https://localhost:8443/manage/s/foobar) that the site ID is myothersite.

API

class Controller

Interact with a UniFi controller.

Uses the JSON interface on port 8443 (HTTPS) to communicate with a UniFi controller. Operations will raise unifi.controller.APIError on obvious problems (such as login failure), but many errors (such as disconnecting a nonexistant client) will go unreported.

__init__(self, host, username, password)

Create a Controller object.

  • host -- the address of the controller host; IP or name
  • username -- the username to log in with
  • password -- the password to log in with
  • port -- the port of the controller host
  • version -- the base version of the controller API [v2|v3]
  • site_id -- the site ID to connect to (UniFi >= 3.x)

block_client(self, mac)

Add a client to the block list.

  • mac -- the MAC address of the client to block.

disconnect_client(self, mac)

Disconnects a client, forcing them to reassociate. Useful when the connection is of bad quality to force a rescan.

  • mac -- the MAC address of the client to disconnect.

get_alerts(self)

Return a list of Alerts.

get_alerts_unarchived(self)

Return a list of unarchived Alerts.

get_events(self)

Return a list of Events.

get_aps(self)

Return a list of all AP:s, with significant information about each.

get_clients(self)

Return a list of all active clients, with significant information about each.

get_statistics_last_24h(self)

Return statistical data of the last 24h

get_statistics_24h(self, endtime)

Return statistical data last 24h from endtime

  • endtime -- the last time of statistics.

get_users(self)

Return a list of all known clients, with significant information about each.

get_user_groups(self)

Return a list of user groups with its rate limiting settings.

get_wlan_conf(self)

Return a list of configured WLANs with their configuration parameters.

restart_ap(self, mac)

Restart an access point (by MAC).

  • mac -- the MAC address of the AP to restart.

restart_ap_name(self, name)

Restart an access point (by name).

  • name -- the name address of the AP to restart.

unblock_client(self, mac)

Remove a client from the block list.

  • mac -- the MAC address of the client to unblock.

archive_all_alerts(self)

Archive all alerts of site.

create_backup(self)

Tells the controller to create a backup archive that can be downloaded with download_backup() and then be used to restore a controller on another machine.

Remember that this puts significant load on a controller for some time (depending on the amount of users and managed APs).

get_backup(self, targetfile)

Tells the controller to create a backup archive and downloads it to a file. It should have a .unf extension for later restore.

  • targetfile -- the target file name, you can also use a full path. Default creates unifi-backup.unf in the current directoy.

authorize_guest(self, guest_mac, minutes, up_bandwidth=None, down_bandwidth=None, byte_quota=None, ap_mac=None)

Authorize a guest based on his MAC address.

  • guest_mac -- the guest MAC address : aa:bb:cc:dd:ee:ff
  • minutes -- duration of the authorization in minutes
  • up_bandwith -- up speed allowed in kbps (optional)
  • down_bandwith -- down speed allowed in kbps (optional)
  • byte_quota -- quantity of bytes allowed in MB (optional)
  • ap_mac -- access point MAC address (UniFi >= 3.x) (optional)

unauthorize_guest(self, guest_mac)

Unauthorize a guest based on his MAC address.

  • guest_mac -- the guest MAC address : aa:bb:cc:dd:ee:ff

License

MIT

More Repositories

1

node-snmp-native

Native Javascript SNMP library for Node.js
JavaScript
251
star
2

smartos-platform-upgrade

Upgrade your SmartOS in style!
Shell
123
star
3

mole

Like 1Password for ssh tunnels and VPN connections, plus sharing within a team.
Go
102
star
4

ipfix

IPFIX parser package for Go
Go
48
star
5

deprecated_lfucache

Package lfucache implements an O(1) LFU cache structure.
Go
41
star
6

zsnapper.old

[UNMAINTAINED] ZFS Snapshotting Service
JavaScript
35
star
7

zsnapper

ZFS Snapshotting Service
Go
30
star
8

node-sudo

[UNMAINTAINED] Like child_process.spawn but with sudo
JavaScript
26
star
9

yardstick

[UNMAINTAINED] Javascript code metrics
JavaScript
25
star
10

ipfixcat

Convert an IPFIX stream to readable JSON
Go
25
star
11

dst

The Datagram Stream Transfer protocol
Go
23
star
12

deprecated_jsonrpc

JSON-RPC 2.0 client for Go
Go
23
star
13

git-autotag

Tags for the lazy software maintainer
Go
21
star
14

node-zfs

[UNMAINTAINED] Node.js wrapper for ZFS management
JavaScript
21
star
15

randomart

Generates OpenSSH-style randomart.
Go
20
star
16

clonehub

Keep a local mirror of all public GitHub repositories
Python
20
star
17

imapchive

IMAP Archiver
Go
17
star
18

Glint

Intuitive GPS Tracker for the iPhone
Objective-C
13
star
19

smartos-ancestry

Script to human-readably show what image the VM:s are based on
11
star
20

ClusteredPoller

[UNMAINTAINED] Database friendly poller for the RTG traffic statistics system.
C
10
star
21

node-vpnc

[UNMAINTAINED] Cisco VPN connector / vpnc wrapper
JavaScript
10
star
22

solaris-extra-snmp

[UNMAINTAINED] Improved SNMP monitoring for Solaris
Python
10
star
23

xdr

[UNMAINTAINED] Go XDR enc/decoder
Go
8
star
24

Aggregator

[UNMAINTAINED] RTG Data Aggregation Library
Ruby
5
star
25

zspace

Space used on ZFS.
Go
5
star
26

node-hostsfile

[UNMAINTAINED] Manipulate the /etc/hosts file
JavaScript
5
star
27

node-pidof

[UNMAINTAINED] Get PID of running process
JavaScript
4
star
28

relup

Upload an asset to a GitHub release
Go
4
star
29

node-filters

[UNMAINTAINED] 1D noise reduction filters
JavaScript
4
star
30

node-yatf

[UNMAINTAINED] Yet Another Table Formatter
JavaScript
3
star
31

bingloader

Tiny tool to load the picture of the day from Bing
Go
3
star
32

luhn

A Luhn-mod-N implementation in Go
Go
3
star
33

node-inpath

[UNMAINTAINED] Find an executable in the $PATH.
JavaScript
3
star
34

para

Parallellize your stdin
Go
3
star
35

mergebot

A bot to do squash merges on pull requests
Go
3
star
36

iDatacenter

VM Administration for iPad
Objective-C
3
star
37

zpoller

[UNMAINTAINED]
JavaScript
2
star
38

dl

Trivial tool to download and untar/unzip files on Windows
Go
2
star
39

git-review

Reviewthing!
Go
2
star
40

cfdns

Deprecated - do not use - Go API client towards Cloudflare DNS service
Go
2
star
41

extractudp

Extract packet contents from a PCAP
Go
2
star
42

ev

Execution visualizer for Go
Go
2
star
43

nmea-collect

Go
2
star
44

zscrub

Complete, all-in-one, enterprise grade ZFS scrubbing solution
Shell
2
star
45

deprecated_ini

Yet another .INI file parser / writer.
Go
2
star
46

snooze

Periodic To-Do List
JavaScript
2
star
47

freezebot

Simple GitHub API integration to lock and label old, inactive, and closed issues.
Go
2
star
48

FlexGraph

Flexible Ruby grapher for RTG or other time series data
Ruby
2
star
49

cube-eds-grapher

[UNMAINTAINED] Graph environmental data from Cube
JavaScript
1
star
50

cfipsync

Deprecated - do not use - Sync IP address from text file to Cloudflare
Go
1
star
51

vmctl

Something to edit SmartOS VMs?
Go
1
star
52

cfdyndns

Dynamic DNS client for Cloudflare
Go
1
star
53

travel

Go
1
star
54

cube-eds-poller

[UNMAINTAINED] Fetch environmental data from an EDS 1-Wire device and inject it into Cube
JavaScript
1
star
55

incontainer

Go
1
star
56

Register

Martial Arts / Sports Student Registry
Ruby
1
star
57

smtpcat

For when you don't have a local MTA.
Go
1
star
58

zip

Go archive/zip with append functionality
Go
1
star
59

node-ircbridge

[UNMAINTAINED] Bridges IRC to JSON-RPC over UDP (client library).
JavaScript
1
star
60

node-openconnect

[UNMAINTAINED] Handle Cisco SSL VPNs with OpenConnect
JavaScript
1
star
61

zfs.old

ZFS package for Go
Go
1
star
62

node-kext

[UNMAINTAINED] Check and load Mac OS X kernel modules
JavaScript
1
star
63

github_docs_badges

Docs badges in Discourse
Ruby
1
star
64

github_bugs_badges

Grant discourse badges for GitHub issues
Ruby
1
star
65

zsync

rsync for ZFS snapshots
Go
1
star
66

node-ntpd-status

[UNMAINTAINED] Get status information from a local or remote ntpd
JavaScript
1
star
67

logger

A thin layer of logging levels on top of the standard log package
Go
1
star
68

BuildTools

Various scripts used for building and tagging releases
Shell
1
star
69

discourse_translators

Badges for translating
Ruby
1
star