Giter Club home page Giter Club logo

pyunifi's Introduction

PyPI version Build Status

PyUnifi


A rewrite of https://github.com/unifi-hackers/unifi-lab in cleaner Python. Forked from https://github.com/calmh/unifi-api due to unmaintained status and rewritten to use the Requests module.

Development & Pull Request

Perform all pull requests against the development branch. Pull requests against the master branch will not be merged, but closed.

Install

sudo pip install -U pyunifi

API Example

from pyunifi.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.

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 [v4|v5|unifiOS|UDMP-unifiOS]
  • site_id -- the site ID to access
  • ssl_verify -- Verify the controllers SSL certificate, default=True, can also be False or "path/to/custom_cert.pem"

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.

update_user_group(self, group_id, down_kbps=-1, up_kbps=-1)

Update user group bandwidth settings.

  • group_id -- Group ID to modify.
  • down_kbps -- New bandwidth in KBPS for download.
  • up_kbps -- New bandwidth in KBPS for upload.

get_healthinfo(self)

Return high level health information on status of the setup

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

set_client_alias(self, mac, alias)

Set client alias. Use "" to reset to the default.

  • mac: The target MAC: aa:bb:cc:dd:ee:ff
  • alias: The alias to set

create_voucher(self, number, quota, expire, up_bandwidth=None, down_bandwidth=None, byte_quota=None, note=None)

Create voucher for guests. Return list of new vouchers.

  • number -- number of vouchers
  • quota -- maximal number of using; 0 = unlimited
  • expire -- expiration of vouchers in minutes
  • up_bandwidth -- up speed allowed in kbps (optional)
  • down_bandwidth -- down speed allowed in kbps (optional)
  • byte_quota -- quantity of bytes allowed in MB (optional)
  • note -- description of vouchers (optional)

list_vouchers(self, **filter)

Get list of vouchers.

  • filter -- Voucher filter (create_time, code, quota, used, note, status_expires, status, ...)
  c.list_vouchers(code='12345-67890')

delete_voucher(self, id)

Delete / revoke voucher.

  • id -- voucher id

get_device_stat(self, target_mac)

Gets the current state & configuration of the given device based on its MAC Address.

  • target_mac -- MAC address of the device

get_radius_users(self)

Returns a list of all RADIUS users, name, password, 24 digit user id, and 24 digit site id.

add_radius_user(self, name, password)

Add a new RADIUS user with this username and password.

  • name -- the new user's username
  • password -- the new user's password

update_radius_user(self, name, password, id)

Update a RADIUS user to this new username and password. Requires the user's 24 digit user id, which can be gotten from get_radius_users(self).

  • name -- the user's new username
  • password -- the user's new password
  • id -- the user's 24 digit user id.

delete_radius_user(self, id)

Delete a RADIUS user. Requires the user's 24 digit user id, which can be gotten from get_radius_users(self).

  • id -- the user's 24 digit user id.

get_switch_port_overrides(self, target_mac)

Gets a list of port overrides, in dictionary format, for the given target MAC address. The dictionary contains the port_idx, portconf_id, poe_mode, & name.

  • target_mac -- MAC address of the device

switch_port_power_off(self, target_mac, port_idx)

Powers Off the given port on the Switch identified by the given MAC Address.

  • target_mac -- MAC address of the device
  • port_idx -- Port ID to power off

switch_port_power_on(self, target_mac, port_idx)

Powers On the given port on the Switch identified by the given MAC Address.

  • target_mac -- MAC address of the device
  • port_idx -- Port ID to power on

Utilities

The following small utilities are bundled with the API:

unifi-ls-clients

Lists the currently active clients on the networks. Can take the following parameters:

Parameters Description Default
-c controller address unifi
-u controller username admin
-p controller password
-b controller port 8443
-v controller base version v5
-s site ID, UniFi >=3.x only default
-V ignore SSL certificates
-C verify with ssl certificate pem file
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

License

MIT

pyunifi's People

Contributors

finish06 avatar calmh avatar mtnocean avatar chrismandich avatar matsimon avatar the-loeki avatar luken avatar candlerb avatar gottsman avatar sdague avatar jchasey avatar agauvrit-tis avatar cyr3xx avatar saroberts avatar hamiltont avatar voltagex avatar zakx avatar elfixit avatar digitlength avatar aenea avatar xaviertorras avatar timball avatar ryanaguilar avatar bachp avatar martey avatar makuser avatar kleo avatar jgarland79 avatar jamenlang avatar jsayles avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.