0.1.2 • Published 3 years ago

unifi-axios-events v0.1.2

Weekly downloads
119
License
MIT
Repository
github
Last release
3 years ago

unifi-axios-events

License

unifi-axios-events is a Node.js module that allows you to listen for events from and call methods on the UniFi API (UniFi is Ubiquiti Networks wifi controller software). It is heavily derivitive of unifi-events. I was having issues with it interfacing with my UDM Pro and ended up porting the code to Axios since request is now deprecated. I should work with any Unifi controller but I have only tested it with the UDM Pro.

Requirements

Installation

$ npm install unifi-axios-events

Example

const Unifi = require('unifi-axios-events')

const unifi = new Unifi({
  host: 'unifi',                        // The hostname or ip address of the unifi controller (default: 'unifi')
  port: 8443,                           // Port of the unifi controller (default: 8443)
  username: 'admin',                    // Username (default: 'admin').
  password: 'ubnt',                     // Password (default: 'ubnt').
  site: 'default',                      // The UniFi site to connect to (default: 'default').
  insecure: true,                       // Allow connections if SSL certificate check fails (default: false).
});

unifi.init();

// Listen for any event
unifi.on('**', function (data) {
  console.log(this.event, data);
});

Events

unifi-events uses EventEmitter2 and namespaced events.

namespace ctrl

These events indicate the status of the connection to the UniFi controller

  • ctrl.connect - emitted when the connection to the controller is established
  • ctrl.disconnect - emitted when the connection to the controller is lost
  • ctrl.error -
  • ctrl.reconnect -

namespaces wu, wg, lu, ...

This JSON file shows all possible events: https://demo.ubnt.com/manage/locales/en/eventStrings.json?v=5.4.11.2 The prefix EVT_ gets stripped, the first underscore is replaced by the namespace separating dot, everything is converted to lower case. Some events such as EVT_AD_LOGIN (Admin Login) are not emitted by the UniFi Controller.

Example Wireless User events

  • wu.connected - Wireless User connected
  • wu.disconnected - Wireless User disconnected
  • wu.roam - Wireless User roamed from one AP to another
  • wu.roam_radio - Wireless User changed channel on the same AP

Example Wireless Guest Events

  • wg.connected - Wireless Guest connected
  • wg.disconnected - Wireless Guest disconnected
  • wg.roam - Wireless Guest roamed from one AP to another
  • wg.roam_radio - Wireless Guest changed channel on the same AP
  • wg.authorization_ended - Wireless Guest became unauthorised

Wildcard usage

Example listing for events on Guest Wireless networks only:

unifi.on('wg.*', function (data) {
  console.log(this.event, data);
})

Example listening for connected events on all network types:

unifi.on('*.connected', function (data) {
  console.log(this.event, data);
});

Methods

init()

Initialize the connection to the UniFi controller. Must be called after the constructor.

connect()

Connect to the UniFi controller. Is called by init(), so normally you don't need to call it (except if you want to re-establish a connection that was closed before).

close()

Closes the connection to the UniFi controller

UniFi API Methods

Following methods operate on the configured site. The path gets prefixed with https://<host>:<port>/api/s/<site>/ if it does not start with a slash, otherwise it gets prefixed with https://<host>:<port>. To explore available API endpoints you can use the UniFi-API-browser.

These methods are returning a promise.

get(path)

Do a HTTP GET on the API.

Examples:

  • Get a list of all clients
unifi.get('stat/sta').then(console.log);
  • Get infos of a specific client
unifi.get('stat/user/<mac>').then(console.log);
  • Get alarms
unifi.get('list/alarm').then(console.log);
  • Get wireless network IDs
unifi.get('rest/wlanconf').then(res => {
    res.data.forEach(wlan => {
        console.log(wlan.name, wlan._id);
    });
});
  • Get device IDs
unifi.get('stat/device').then(res => {
     res.data.forEach(dev => {
        console.log(dev.name, dev._id);
     });
});

del(path)

Do a HTTP DELETE on the API.

post(path, body)

Do a HTTP POST on the API.

Examples:

  • Enable all LEDs of all APs
unifi.post('set/setting/mgmt', {led_enabled: true}).then(console.log);
  • Disable a WLAN
unifi.post('upd/wlanconf/<wlan_id>', {enabled: false}).then(console.log);

put(path, body)

Do a HTTP PUT on the API.

Examples:

  • Enable LED of AP
unifi.put('rest/device/<device_id>', {led_override: 'on'}).then(console.log);

License