Compare commits

...

7 Commits

Author SHA1 Message Date
malle-pietje
b633fa54c7 added ability top determine attributes to fetch with AP and site stats
general minor clean up
bumped version to 1.1.95
2024-10-07 12:54:19 +02:00
malle-pietje
5327d0c534 minor changes 2024-10-07 10:39:48 +02:00
malle-pietje
f1fc80f34f API client class v1.1.94
- minor fix based on Scrutinizer feedback
- re-added `update_admin()` method to the class; for some reason, the merge of #228 was not successful
2024-08-12 10:24:03 +02:00
malle-pietje
f82d1a6b64 removed exit following suggestion from Scrutinizer 2024-08-08 17:56:33 +02:00
malle-pietje
6f6e80e862 cleanup some comments/doc blocks 2024-08-08 17:45:03 +02:00
malle-pietje
4fefc11761 simplified the contructor by assigning default values to properties within the argument list 2024-08-08 17:37:33 +02:00
malle-pietje
0db5effe6f minor fix to return type hinting based on feedback from Scrutinizer 2024-08-07 16:26:54 +02:00
3 changed files with 260 additions and 224 deletions

View File

@@ -1,6 +1,6 @@
MIT License MIT License
Copyright (c) 2016, Art of WiFi Copyright (c) 2024, Art of WiFi
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,8 +2,10 @@
A PHP class that provides access to Ubiquiti's [**UniFi Network Application**](https://unifi-network.ui.com/) API. A PHP class that provides access to Ubiquiti's [**UniFi Network Application**](https://unifi-network.ui.com/) API.
UniFi Network Application software versions 5.X.X, 6.X.X, 7.X.X, and 8.X.X (version **8.1.104** has been confirmed to work) UniFi Network Application software versions 5.X.X, 6.X.X, 7.X.X, and 8.X.X (version **8.5.2** has been confirmed to
are supported as well as Network Applications on **UniFi OS-based consoles** (UniFi OS **3.2.12** has been confirmed to work). work) are supported as well as Network Applications on **UniFi OS-based consoles** (UniFi OS **4.0.20** has been
confirmed to work).
This class is used by our API Browser tool, which can be found This class is used by our API Browser tool, which can be found
[here](https://github.com/Art-of-WiFi/UniFi-API-browser). [here](https://github.com/Art-of-WiFi/UniFi-API-browser).
@@ -15,12 +17,13 @@ easy inclusion in your projects.
## Requirements ## Requirements
- a server with: - a server with:
- PHP **7.4.0** or higher (use version [1.1.83](https://github.com/Art-of-WiFi/UniFi-API-client/releases/tag/v1.1.83) for PHP 7.3.x and lower) - PHP **7.4.0** or higher (use version [1.1.83](https://github.com/Art-of-WiFi/UniFi-API-client/releases/tag/v1.1.83)
for PHP 7.3.x and lower)
- PHP json and PHP cURL modules - PHP json and PHP cURL modules
- tested on Apache 2.4 with PHP 7.4.27 and cURL 7.60.0 and with PHP 8.2.12 and cURL 7.81.0 - tested on Apache 2.4 with PHP 7.4.27 and cURL 7.60.0 and with PHP 8.3.11 and cURL 7.81.0
- direct network connectivity between this server and the host and port (usually TCP port 8443 or port 443 for - direct network connectivity between this server and the host and port (usually TCP port 8443 or port 443 for
UniFi OS) where the UniFi Controller is running UniFi OS) where the UniFi Controller is running
- you **must** use **accounts with local access permissions** to access the UniFi Controller API through this class - you **must** use an **account with local access permissions** to access the UniFi Controller API through this class
- do not use UniFi Cloud accounts and do not enable 2FA for the accounts that you use with this class - do not use UniFi Cloud accounts and do not enable 2FA for the accounts that you use with this class
@@ -34,16 +37,20 @@ Support for UniFi OS-based controllers has been added as of version 1.1.47. Thes
- UniFi Cloud Key Gen2 Plus (UCK G2 Plus), firmware version 2.0.24 or higher - UniFi Cloud Key Gen2 Plus (UCK G2 Plus), firmware version 2.0.24 or higher
- UniFi Cloud Console, details [here](https://help.ui.com/hc/en-us/articles/4415364143511) - UniFi Cloud Console, details [here](https://help.ui.com/hc/en-us/articles/4415364143511)
- UniFi Express (UX) - UniFi Express (UX)
- UniFi Dream Wall (UDW)
- UniFi Cloud Gateway Ultra (UCG-Ultra)
- UniFi Enterprise Fortress Gateway (EFG)
The class automatically detects UniFi OS consoles and adjusts the URLs and several functions/methods accordingly. The class automatically detects UniFi OS consoles and adjusts the URLs and several functions/methods accordingly.
UniFi OS consoles require you to connect using port **443** instead of **8443** which is used for "software-based" UniFi OS-based controllers require you to connect using port **443** instead of **8443** which is used for
controllers. If your own code implements strict validation of the URL that is passed to the constructor, please adapt "software-based" controllers. If your own code implements strict validation of the URL that is passed to the
your logic to allow URLs without a port suffix or with port 443 when working with a UniFi OS-based controller. constructor, please adapt your logic to allow URLs without a port suffix or with port 443 when working with a
UniFi OS-based controller.
### Remote API access to UniFi OS-based controllers ### Remote API access to UniFi OS-based controllers
When connecting to a UniFi OS gateway through the WAN interface, you need to create a specific firewall rule to When connecting to a UniFi OS-based gateway through the WAN interface, you need to create a specific firewall rule to
allow this. See this blog post on the Art of WiFi website for more details: allow this. See this blog post on the Art of WiFi website for more details:
https://artofwifi.net/blog/how-to-access-the-unifi-controller-by-wan-ip-or-hostname-on-a-udm-pro https://artofwifi.net/blog/how-to-access-the-unifi-controller-by-wan-ip-or-hostname-on-a-udm-pro

View File

@@ -3,7 +3,7 @@
namespace UniFi_API; namespace UniFi_API;
/** /**
* The UniFi API client class * The UniFi API client class.
* *
* This UniFi API client class is based on the work done by the following developers: * This UniFi API client class is based on the work done by the following developers:
* domwo: https://community.ui.com/questions/little-php-class-for-unifi-api/933d3fb3-b401-4499-993a-f9af079a4a3a * domwo: https://community.ui.com/questions/little-php-class-for-unifi-api/933d3fb3-b401-4499-993a-f9af079a4a3a
@@ -20,22 +20,22 @@ namespace UniFi_API;
*/ */
class Client class Client
{ {
/** constants */ /** Constants. */
const CLASS_VERSION = '1.1.93'; const CLASS_VERSION = '1.1.95';
const CURL_METHODS_ALLOWED = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH']; const CURL_METHODS_ALLOWED = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'];
const DEFAULT_CURL_METHOD = 'GET'; const DEFAULT_CURL_METHOD = 'GET';
/** /**
* protected properties * Protected properties.
* *
* @note do **not** directly edit the property values below, instead use the constructor or the respective * @note do **not** directly edit the property values below, instead use the constructor or the respective
* getter and setter functions/methods * getter and setter functions/methods
*/ */
protected string $baseurl = 'https://127.0.0.1:8443'; protected string $baseurl = '';
protected string $user = ''; protected string $user = '';
protected string $password = ''; protected string $password = '';
protected string $site = 'default'; protected string $site = '';
protected string $version = '8.0.28'; protected string $version = '';
protected bool $debug = false; protected bool $debug = false;
protected bool $is_logged_in = false; protected bool $is_logged_in = false;
protected bool $is_unifi_os = false; protected bool $is_unifi_os = false;
@@ -55,6 +55,16 @@ class Client
'Content-Type: application/json', 'Content-Type: application/json',
'Expect:', 'Expect:',
]; ];
protected array $default_site_stats_attribs = [
'bytes',
'wan-tx_bytes',
'wan-rx_bytes',
'wlan_bytes',
'num_sta',
'lan-num_sta',
'wlan-num_sta',
'time',
];
/** /**
* Construct an instance of the UniFi API client class. * Construct an instance of the UniFi API client class.
@@ -63,22 +73,22 @@ class Client
* @param string $password password to use when connecting to the UniFi controller * @param string $password password to use when connecting to the UniFi controller
* @param string $baseurl optional, base URL of the UniFi controller which *must* include an 'https://' prefix, * @param string $baseurl optional, base URL of the UniFi controller which *must* include an 'https://' prefix,
* a port suffix (e.g. :8443) is required for non-UniFi OS controllers, * a port suffix (e.g. :8443) is required for non-UniFi OS controllers,
* do not add trailing slashes, default value is 'https://127.0.0.1:8443' * do not add trailing slashes, defaults to 'https://127.0.0.1:8443'
* @param string|null $site optional, short site name to access, defaults to 'default' * @param string|null $site optional, short site name to access, defaults to 'default'
* @param string|null $version optional, the version number of the controller * @param string|null $version optional, the version number of the controller, defaults to '8.0.28'
* @param bool $ssl_verify optional, whether to validate the controller's SSL certificate or not, a value of true * @param bool $ssl_verify optional, whether to validate the controller's SSL certificate or not, a value of true
* is recommended for production environments to prevent potential MitM attacks, default * is recommended for production environments to prevent potential MitM attacks, defaults
* value (false) disables validation of the controller's SSL certificate * to false which disables validation of the controller's SSL certificate
* @param string $unificookie_name optional, name of the cookie to use, default value is 'unificookie'. * @param string $unificookie_name optional, name of the cookie to use, defaults to 'unificookie'.
* This is only necessary when you have multiple apps using the API on the same web * This is only necessary when you have multiple apps using this API client on the
* server. * same web server.
*/ */
public function __construct( public function __construct(
string $user, string $user,
string $password, string $password,
string $baseurl = '', string $baseurl = 'https://127.0.0.1:8443',
string $site = null, string $site = 'default',
string $version = null, string $version = '8.0.28',
bool $ssl_verify = false, bool $ssl_verify = false,
string $unificookie_name = 'unificookie' string $unificookie_name = 'unificookie'
) )
@@ -87,23 +97,15 @@ class Client
trigger_error('The PHP curl extension is not loaded. Please correct this before proceeding!'); trigger_error('The PHP curl extension is not loaded. Please correct this before proceeding!');
} }
$this->unificookie_name = trim($unificookie_name); $this->check_base_url($baseurl);
$this->check_site($site);
$this->baseurl = trim($baseurl);
$this->site = strtolower(trim($site));
$this->user = trim($user); $this->user = trim($user);
$this->password = trim($password); $this->password = trim($password);
if (!empty($baseurl)) {
$this->check_base_url($baseurl);
$this->baseurl = trim($baseurl);
}
if (!empty($site)) {
$this->check_site($site);
$this->site = trim($site);
}
if (!empty($version)) {
$this->version = trim($version); $this->version = trim($version);
} $this->unificookie_name = trim($unificookie_name);
if ($ssl_verify === true) { if ($ssl_verify === true) {
$this->curl_ssl_verify_peer = true; $this->curl_ssl_verify_peer = true;
@@ -131,11 +133,11 @@ class Client
} }
/** /**
* Login to the UniFi controller * Login to the UniFi controller.
* *
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses
* @return bool|int returns true upon success, false or the HTTP response code (typically 400, 401, or 403) upon * @return bool|int returns true upon success, false or the HTTP response code (typically 400, 401, or 403) upon
* error * error
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses
*/ */
public function login() public function login()
{ {
@@ -221,9 +223,9 @@ class Client
} }
/** /**
* Logout from the UniFi controller * Logout from the UniFi controller.
* *
* @return bool returns true upon success * @return bool true upon success
*/ */
public function logout(): bool public function logout(): bool
{ {
@@ -269,7 +271,7 @@ class Client
****************************************************************/ ****************************************************************/
/** /**
* Authorize a client device * Authorize a client device.
* *
* @param string $mac client MAC address * @param string $mac client MAC address
* @param int $minutes minutes (from now) until authorization expires * @param int $minutes minutes (from now) until authorization expires
@@ -278,7 +280,7 @@ class Client
* @param int|null $megabytes optional, data transfer limit in MB * @param int|null $megabytes optional, data transfer limit in MB
* @param string|null $ap_mac optional, AP MAC address to which client is connected, should result in faster * @param string|null $ap_mac optional, AP MAC address to which client is connected, should result in faster
* authorization for the client device * authorization for the client device
* @return bool returns true upon success * @return bool true upon success
*/ */
public function authorize_guest(string $mac, int $minutes, int $up = null, int $down = null, int $megabytes = null, string $ap_mac = null): bool public function authorize_guest(string $mac, int $minutes, int $up = null, int $down = null, int $megabytes = null, string $ap_mac = null): bool
{ {
@@ -305,10 +307,10 @@ class Client
} }
/** /**
* Unauthorize a client device * Unauthorize a client device.
* *
* @param string $mac client MAC address * @param string $mac client MAC address
* @return bool returns true upon success * @return bool true upon success
*/ */
public function unauthorize_guest(string $mac): bool public function unauthorize_guest(string $mac): bool
{ {
@@ -321,7 +323,7 @@ class Client
* Reconnect a client device * Reconnect a client device
* *
* @param string $mac client MAC address * @param string $mac client MAC address
* @return bool returns true upon success * @return bool true upon success
*/ */
public function reconnect_sta(string $mac): bool public function reconnect_sta(string $mac): bool
{ {
@@ -331,10 +333,10 @@ class Client
} }
/** /**
* Block a client device * Block a client device.
* *
* @param string $mac client MAC address * @param string $mac client MAC address
* @return bool returns true upon success * @return bool true upon success
*/ */
public function block_sta(string $mac): bool public function block_sta(string $mac): bool
{ {
@@ -344,10 +346,10 @@ class Client
} }
/** /**
* Unblock a client device * Unblock a client device.
* *
* @param string $mac client MAC address * @param string $mac client MAC address
* @return bool returns true upon success * @return bool true upon success
*/ */
public function unblock_sta(string $mac): bool public function unblock_sta(string $mac): bool
{ {
@@ -357,12 +359,12 @@ class Client
} }
/** /**
* Forget one or more client devices * Forget one or more client devices.
* *
* @note only supported with controller versions 5.9.X and higher, can be * @note only supported with controller versions 5.9.X and higher, can be
* slow (up to 5 minutes) on larger controllers * slow (up to 5 minutes) on larger controllers
* @param array|string $mac array of client MAC addresses (strings) or a single MAC address string * @param array|string $mac array of client MAC addresses (strings) or a single MAC address string
* @return bool returns true upon success * @return bool true upon success
*/ */
public function forget_sta($mac): bool public function forget_sta($mac): bool
{ {
@@ -375,7 +377,7 @@ class Client
} }
/** /**
* Create a new user/client-device * Create a new user/client-device.
* *
* @param string $mac client MAC address * @param string $mac client MAC address
* @param string $user_group_id _id value for the user group the new user/client-device should belong to which * @param string $user_group_id _id value for the user group the new user/client-device should belong to which
@@ -424,7 +426,7 @@ class Client
* *
* @param string $user_id id of the client-device to be modified * @param string $user_id id of the client-device to be modified
* @param string $note optional, note to be applied to the client-device * @param string $note optional, note to be applied to the client-device
* @return bool returns true upon success * @return bool true upon success
*/ */
public function set_sta_note(string $user_id, string $note = ''): bool public function set_sta_note(string $user_id, string $note = ''): bool
{ {
@@ -439,7 +441,7 @@ class Client
* @param string $user_id id of the client-device to be modified * @param string $user_id id of the client-device to be modified
* @param string $name optional, name to be applied to the client device, when empty or not set, * @param string $name optional, name to be applied to the client device, when empty or not set,
* the existing name for the client device is removed * the existing name for the client device is removed
* @return bool returns true upon success * @return bool true upon success
*/ */
public function set_sta_name(string $user_id, string $name = ''): bool public function set_sta_name(string $user_id, string $name = ''): bool
{ {
@@ -449,7 +451,7 @@ class Client
} }
/** /**
* Fetch 5-minute site stats * Fetch 5-minute site stats.
* *
* @note - defaults to the past 12 hours * @note - defaults to the past 12 hours
* - this function/method is only supported on controller versions 5.5.* and later * - this function/method is only supported on controller versions 5.5.* and later
@@ -457,124 +459,91 @@ class Client
* the controller settings * the controller settings
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param array|null $attribs optional, array of attributes to collect. Default values:
* 'bytes', 'wan-tx_bytes', 'wan-rx_bytes', 'wlan_bytes', 'num_sta', 'lan-num_sta',
* 'wlan-num_sta', 'time'
* Example values:
* 'airtime_avg', 'latency_avg', 'latency_min', 'latency_max'
* @return array|bool returns an array of 5-minute stats objects for the current site * @return array|bool returns an array of 5-minute stats objects for the current site
*/ */
public function stat_5minutes_site(int $start = null, int $end = null) public function stat_5minutes_site(int $start = null, int $end = null, array $attribs = null)
{ {
$end = empty($end) ? time() * 1000 : $end; $end = empty($end) ? time() * 1000 : $end;
$start = empty($start) ? $end - (12 * 3600 * 1000) : $start; $start = empty($start) ? $end - (12 * 3600 * 1000) : $start;
$attribs = empty($attribs) ? $this->default_site_stats_attribs : array_merge(['time'], $attribs);
$attribs = [
'bytes',
'wan-tx_bytes',
'wan-rx_bytes',
'wlan_bytes',
'num_sta',
'lan-num_sta',
'wlan-num_sta',
'time',
];
$payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end]; $payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end];
return $this->fetch_results('/api/s/' . $this->site . '/stat/report/5minutes.site', $payload); return $this->fetch_results('/api/s/' . $this->site . '/stat/report/5minutes.site', $payload);
} }
/** /**
* Fetch hourly site stats * Fetch hourly site stats.
* *
* TODO: add support for optional attrib parameter * TODO: add support for optional attrib parameter
* airtime_avg * airtime_avg
* *
* @note - defaults to the past 7*24 hours * @note - defaults to the past 7*24 hours
* - "bytes" are no longer returned with controller version 4.9.1 and later * - "bytes" are no longer returned with controller version 4.9.1 and later
* @see stat_5minutes_site() for details on attribs
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param array|null $attribs optional, array of attributes to collect.
* @return array|bool returns an array of hourly stats objects for the current site * @return array|bool returns an array of hourly stats objects for the current site
*/ */
public function stat_hourly_site(int $start = null, int $end = null) public function stat_hourly_site(int $start = null, int $end = null, array $attribs = null)
{ {
$end = empty($end) ? time() * 1000 : $end; $end = empty($end) ? time() * 1000 : $end;
$start = empty($start) ? $end - (7 * 24 * 3600 * 1000) : $start; $start = empty($start) ? $end - (7 * 24 * 3600 * 1000) : $start;
$attribs = empty($attribs) ? $this->default_site_stats_attribs : array_merge(['time'], $attribs);
$attribs = [
'bytes',
'wan-tx_bytes',
'wan-rx_bytes',
'wlan_bytes',
'num_sta',
'lan-num_sta',
'wlan-num_sta',
'time',
];
$payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end]; $payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end];
return $this->fetch_results('/api/s/' . $this->site . '/stat/report/hourly.site', $payload); return $this->fetch_results('/api/s/' . $this->site . '/stat/report/hourly.site', $payload);
} }
/** /**
* Fetch daily site stats * Fetch daily site stats.
* *
* @note - defaults to the past 52*7*24 hours * @note - defaults to the past 52*7*24 hours
* - "bytes" are no longer returned with controller version 4.9.1 and later * - "bytes" are no longer returned with controller version 4.9.1 and later
* @see stat_5minutes_site() for details on attribs
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param array|null $attribs optional, array of attributes to collect.
* @return array|bool returns an array of daily stats objects for the current site * @return array|bool returns an array of daily stats objects for the current site
*/ */
public function stat_daily_site(int $start = null, int $end = null) public function stat_daily_site(int $start = null, int $end = null, array $attribs = null)
{ {
$end = empty($end) ? (time() - (time() % 3600)) * 1000 : $end; $end = empty($end) ? (time() - (time() % 3600)) * 1000 : $end;
$start = empty($start) ? $end - (52 * 7 * 24 * 3600 * 1000) : $start; $start = empty($start) ? $end - (52 * 7 * 24 * 3600 * 1000) : $start;
$attribs = empty($attribs) ? $this->default_site_stats_attribs : array_merge(['time'], $attribs);
$attribs = [
'bytes',
'wan-tx_bytes',
'wan-rx_bytes',
'wlan_bytes',
'num_sta',
'lan-num_sta',
'wlan-num_sta',
'time',
];
$payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end]; $payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end];
return $this->fetch_results('/api/s/' . $this->site . '/stat/report/daily.site', $payload); return $this->fetch_results('/api/s/' . $this->site . '/stat/report/daily.site', $payload);
} }
/** /**
* Fetch monthly site stats * Fetch monthly site stats.
* *
* @note - defaults to the past 52 weeks (52*7*24 hours) * @note - defaults to the past 52 weeks (52*7*24 hours)
* - "bytes" are no longer returned with controller version 4.9.1 and later * - "bytes" are no longer returned with controller version 4.9.1 and later
* @see stat_5minutes_site() for details on attribs
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param array|null $attribs optional, array of attributes to collect.
* @return array|bool returns an array of monthly stats objects for the current site * @return array|bool returns an array of monthly stats objects for the current site
*/ */
public function stat_monthly_site(int $start = null, int $end = null) public function stat_monthly_site(int $start = null, int $end = null, array $attribs = null)
{ {
$end = empty($end) ? (time() - (time() % 3600)) * 1000 : $end; $end = empty($end) ? (time() - (time() % 3600)) * 1000 : $end;
$start = empty($start) ? $end - (52 * 7 * 24 * 3600 * 1000) : $start; $start = empty($start) ? $end - (52 * 7 * 24 * 3600 * 1000) : $start;
$attribs = empty($attribs) ? $this->default_site_stats_attribs : array_merge(['time'], $attribs);
$attribs = [
'bytes',
'wan-tx_bytes',
'wan-rx_bytes',
'wlan_bytes',
'num_sta',
'lan-num_sta',
'wlan-num_sta',
'time',
];
$payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end]; $payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end];
return $this->fetch_results('/api/s/' . $this->site . '/stat/report/monthly.site', $payload); return $this->fetch_results('/api/s/' . $this->site . '/stat/report/monthly.site', $payload);
} }
/** /**
* Fetch 5-minutes stats for a single access point or all access points * Fetch 5-minutes stats for a single access point or all access points.
* *
* @note - defaults to the past 12 hours * @note - defaults to the past 12 hours
* - this function/method is only supported on controller versions 5.5.* and later * - this function/method is only supported on controller versions 5.5.* and later
@@ -584,13 +553,37 @@ class Client
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param string|null $mac optional, AP MAC address to return stats for, when empty, * @param string|null $mac optional, AP MAC address to return stats for, when empty,
* stats for all APs are returned * stats for all APs are returned
* @param array|null $attribs optional, array of attributes to collect, default: (bytes, num_sta, time). Example values:
* 'bytes',
* 'num_sta',
* 'time',
* 'wifi_tx_attempts',
* 'tx_retries',
* 'wifi_tx_dropped',
* 'mac_filter_rejections',
* 'user-wlan-num_sta_connected',
* 'user-wlan-num_sta_disconnected',
* 'na-wifi_tx_attempts',
* 'ng-wifi_tx_attempts',
* 'na-wifi_tx_dropped',
* 'ng-wifi_tx_dropped',
* 'na-tx_retries',
* 'ng-tx_retries',
* 'na-tx_packets',
* 'ng-tx_packets',
* 'na-tx_bytes',
* 'ng-tx_bytes',
* 'na-rx_packets',
* 'ng-rx_packets',
* 'na-rx_bytes',
* 'ng-rx_bytes',
* @return array|bool returns an array of 5-minute stats objects * @return array|bool returns an array of 5-minute stats objects
*/ */
public function stat_5minutes_aps(int $start = null, int $end = null, string $mac = null) public function stat_5minutes_aps(int $start = null, int $end = null, string $mac = null, array $attribs = null)
{ {
$end = empty($end) ? time() * 1000 : $end; $end = empty($end) ? time() * 1000 : $end;
$start = empty($start) ? $end - (12 * 3600 * 1000) : $start; $start = empty($start) ? $end - (12 * 3600 * 1000) : $start;
$attribs = ['bytes', 'num_sta', 'time']; $attribs = empty($attribs) ? ['bytes', 'num_sta', 'time'] : array_merge(['time'], $attribs);
$payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end]; $payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end];
if (!empty($mac)) { if (!empty($mac)) {
@@ -601,42 +594,24 @@ class Client
} }
/** /**
* Fetch hourly stats for a single access point or all access points * Fetch hourly stats for a single access point or all access points.
*
* TODO: optionally add ["top_filter_by" => "tx_retries"] to payload
* add optional parameter for attribs to support:
* wifi_tx_attempts
* tx_retries
* wifi_tx_dropped
* sta_assoc_failures
* sta_wpa_auth_failures
* mac_filter_rejections
* sta_dhcp_failures
* sta_assoc_min
* sta_assoc_max
* sta_connect_time_min
* sta_connect_time_max
* sta_connect_time_total
* user-wlan-num_sta_connected
* user-wlan-num_sta_disconnected
* user-wlan-sta_assoc_samples
* user-wlan-sta_track_samples
* wlan-num_sta
* *
* @note - defaults to the past 7*24 hours * @note - defaults to the past 7*24 hours
* - make sure that the retention policy for hourly stats is set to the correct value in * - make sure that the retention policy for hourly stats is set to the correct value in
* the controller settings * the controller settings
* @see stat_5minutes_aps() for supported attribs
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param string|null $mac optional, AP MAC address to return stats for, when empty, * @param string|null $mac optional, AP MAC address to return stats for, when empty,
* stats for all APs are returned * stats for all APs are returned
* @param array|null $attribs optional, array of attributes to collect, default: (bytes, num_sta, time).
* @return array|bool returns an array of hourly stats objects * @return array|bool returns an array of hourly stats objects
*/ */
public function stat_hourly_aps(int $start = null, int $end = null, string $mac = null) public function stat_hourly_aps(int $start = null, int $end = null, string $mac = null, array $attribs = null)
{ {
$end = empty($end) ? (time() * 1000) : $end; $end = empty($end) ? (time() * 1000) : $end;
$start = empty($start) ? $end - (7 * 24 * 3600 * 1000) : $start; $start = empty($start) ? $end - (7 * 24 * 3600 * 1000) : $start;
$attribs = ['bytes', 'num_sta', 'time']; $attribs = empty($attribs) ? ['bytes', 'num_sta', 'time'] : array_merge(['time'], $attribs);
$payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end]; $payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end];
if (!empty($mac)) { if (!empty($mac)) {
@@ -647,22 +622,24 @@ class Client
} }
/** /**
* Fetch daily stats for a single access point or all access points * Fetch daily stats for a single access point or all access points.
* *
* @note - defaults to the past 7*24 hours * @note - defaults to the past 7*24 hours
* - make sure that the retention policy for hourly stats is set to the correct value in * - make sure that the retention policy for hourly stats is set to the correct value in
* the controller settings * the controller settings
* @see stat_5minutes_aps() for supported attribs
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param string|null $mac optional, AP MAC address to return stats for, when empty, * @param string|null $mac optional, AP MAC address to return stats for, when empty,
* stats for all APs are returned * stats for all APs are returned
* @param array|null $attribs optional, array of attributes to collect, default: (bytes, num_sta, time).
* @return array|bool returns an array of daily stats objects * @return array|bool returns an array of daily stats objects
*/ */
public function stat_daily_aps(int $start = null, int $end = null, string $mac = null) public function stat_daily_aps(int $start = null, int $end = null, string $mac = null, array $attribs = null)
{ {
$end = empty($end) ? time() * 1000 : $end; $end = empty($end) ? time() * 1000 : $end;
$start = empty($start) ? $end - (7 * 24 * 3600 * 1000) : $start; $start = empty($start) ? $end - (7 * 24 * 3600 * 1000) : $start;
$attribs = ['bytes', 'num_sta', 'time']; $attribs = empty($attribs) ? ['bytes', 'num_sta', 'time'] : array_merge(['time'], $attribs);
$payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end]; $payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end];
if (!empty($mac)) { if (!empty($mac)) {
@@ -678,17 +655,19 @@ class Client
* @note - defaults to the past 52 weeks (52*7*24 hours) * @note - defaults to the past 52 weeks (52*7*24 hours)
* - make sure that the retention policy for hourly stats is set to the correct value in * - make sure that the retention policy for hourly stats is set to the correct value in
* the controller settings * the controller settings
* @see stat_5minutes_aps() for supported attribs
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param string|null $mac optional, AP MAC address to return stats for, when empty, * @param string|null $mac optional, AP MAC address to return stats for, when empty,
* stats for all APs are returned * stats for all APs are returned
* @param array|null $attribs optional, array of attributes to collect, default: (bytes, num_sta, time).
* @return array|bool returns an array of monthly stats objects * @return array|bool returns an array of monthly stats objects
*/ */
public function stat_monthly_aps(int $start = null, int $end = null, string $mac = null) public function stat_monthly_aps(int $start = null, int $end = null, string $mac = null, array $attribs = null)
{ {
$end = empty($end) ? time() * 1000 : $end; $end = empty($end) ? time() * 1000 : $end;
$start = empty($start) ? $end - (52 * 7 * 24 * 3600 * 1000) : $start; $start = empty($start) ? $end - (52 * 7 * 24 * 3600 * 1000) : $start;
$attribs = ['bytes', 'num_sta', 'time']; $attribs = empty($attribs) ? ['bytes', 'num_sta', 'time'] : array_merge(['time'], $attribs);
$payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end]; $payload = ['attrs' => $attribs, 'start' => $start, 'end' => $end];
if (!empty($mac)) { if (!empty($mac)) {
@@ -699,8 +678,7 @@ class Client
} }
/** /**
* Fetch 5-minutes stats for a single user/client device * Fetch 5-minutes stats for a single user/client device.
*
* *
* @note - defaults to the past 12 hours * @note - defaults to the past 12 hours
* - only supported with UniFi controller versions 5.8.X and higher * - only supported with UniFi controller versions 5.8.X and higher
@@ -728,7 +706,7 @@ class Client
} }
/** /**
* Fetch hourly stats for a single user/client device * Fetch hourly stats for a single user/client device.
* *
* @note - defaults to the past 7*24 hours * @note - defaults to the past 7*24 hours
* - only supported with UniFi controller versions 5.8.X and higher * - only supported with UniFi controller versions 5.8.X and higher
@@ -736,13 +714,11 @@ class Client
* the controller settings * the controller settings
* - make sure that "Clients Historical Data" has been enabled in the UniFi controller settings in the Maintenance * - make sure that "Clients Historical Data" has been enabled in the UniFi controller settings in the Maintenance
* section * section
* @see stat_5minutes_user() for details on attribs
* @param string $mac MAC address of the user/client device to return stats fo * @param string $mac MAC address of the user/client device to return stats fo
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param array|null $attribs array containing attributes (strings) to be returned, valid values are: * @param array|null $attribs array containing attributes (strings) to be returned
* rx_bytes, tx_bytes, signal, rx_rate, tx_rate, rx_retries, tx_retries, rx_packets,
* tx_packets, satisfaction, wifi_tx_attempts
* default value is ['rx_bytes', 'tx_bytes']
* @return array|bool returns an array of hourly stats objects * @return array|bool returns an array of hourly stats objects
*/ */
public function stat_hourly_user(string $mac, int $start = null, int $end = null, array $attribs = null) public function stat_hourly_user(string $mac, int $start = null, int $end = null, array $attribs = null)
@@ -756,7 +732,7 @@ class Client
} }
/** /**
* Fetch daily stats for a single user/client device * Fetch daily stats for a single user/client device.
* *
* @note - defaults to the past 7*24 hours * @note - defaults to the past 7*24 hours
* - only supported with UniFi controller versions 5.8.X and higher * - only supported with UniFi controller versions 5.8.X and higher
@@ -764,13 +740,11 @@ class Client
* the controller settings * the controller settings
* - make sure that "Clients Historical Data" has been enabled in the UniFi controller settings in the Maintenance * - make sure that "Clients Historical Data" has been enabled in the UniFi controller settings in the Maintenance
* section * section
* @see stat_5minutes_user() for details on attribs
* @param string $mac MAC address of the user/client device to return stats for * @param string $mac MAC address of the user/client device to return stats for
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param array|null $attribs array containing attributes (strings) to be returned, valid values are: * @param array|null $attribs array containing attributes (strings) to be returned
* rx_bytes, tx_bytes, signal, rx_rate, tx_rate, rx_retries, tx_retries, rx_packets,
* tx_packets, satisfaction, wifi_tx_attempts
* default value is ['rx_bytes', 'tx_bytes']
* @return array|bool returns an array of daily stats objects * @return array|bool returns an array of daily stats objects
*/ */
public function stat_daily_user(string $mac, int $start = null, int $end = null, array $attribs = null) public function stat_daily_user(string $mac, int $start = null, int $end = null, array $attribs = null)
@@ -784,7 +758,7 @@ class Client
} }
/** /**
* Fetch monthly stats for a single user/client device * Fetch monthly stats for a single user/client device.
* *
* @note - defaults to the past 13 weeks (52*7*24 hours) * @note - defaults to the past 13 weeks (52*7*24 hours)
* - only supported with UniFi controller versions 5.8.X and higher * - only supported with UniFi controller versions 5.8.X and higher
@@ -792,13 +766,11 @@ class Client
* the controller settings * the controller settings
* - make sure that "Clients Historical Data" has been enabled in the UniFi controller settings in the Maintenance * - make sure that "Clients Historical Data" has been enabled in the UniFi controller settings in the Maintenance
* section * section
* @see stat_5minutes_user() for details on attribs
* @param string $mac MAC address of the user/client device to return stats for * @param string $mac MAC address of the user/client device to return stats for
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param array|null $attribs array containing attributes (strings) to be returned, valid values are: * @param array|null $attribs array containing attributes (strings) to be returned
* rx_bytes, tx_bytes, signal, rx_rate, tx_rate, rx_retries, tx_retries, rx_packets,
* tx_packets, satisfaction, wifi_tx_attempts
* default value is ['rx_bytes', 'tx_bytes']
* @return array|bool returns an array of monthly stats objects * @return array|bool returns an array of monthly stats objects
*/ */
public function stat_monthly_user(string $mac, int $start = null, int $end = null, array $attribs = null) public function stat_monthly_user(string $mac, int $start = null, int $end = null, array $attribs = null)
@@ -812,7 +784,7 @@ class Client
} }
/** /**
* Fetch 5-minute gateway stats * Fetch 5-minute gateway stats.
* *
* @note - defaults to the past 12 hours * @note - defaults to the past 12 hours
* - this function/method is only supported on controller versions 5.5.* and later * - this function/method is only supported on controller versions 5.5.* and later
@@ -838,16 +810,14 @@ class Client
} }
/** /**
* Fetch hourly gateway stats * Fetch hourly gateway stats.
* *
* @note - defaults to the past 7*24 hours * @note - defaults to the past 7*24 hours
* - requires a UniFi gateway * - requires a UniFi gateway
* @see stat_5minutes_gateway() for details on attribs
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param array|null $attribs array containing attributes (strings) to be returned, valid values are: * @param array|null $attribs array containing attributes (strings) to be returned
* mem, cpu, loadavg_5, lan-rx_errors, lan-tx_errors, lan-rx_bytes,
* lan-tx_bytes, lan-rx_packets, lan-tx_packets, lan-rx_dropped, lan-tx_dropped
* default is ['time', 'mem', 'cpu', 'loadavg_5']
* @return array|bool returns an array of hourly stats objects for the gateway belonging to the current site * @return array|bool returns an array of hourly stats objects for the gateway belonging to the current site
*/ */
public function stat_hourly_gateway(int $start = null, int $end = null, array $attribs = null) public function stat_hourly_gateway(int $start = null, int $end = null, array $attribs = null)
@@ -861,16 +831,14 @@ class Client
} }
/** /**
* Fetch daily gateway stats * Fetch daily gateway stats.
* *
* @note - defaults to the past 52 weeks (52*7*24 hours) * @note - defaults to the past 52 weeks (52*7*24 hours)
* - requires a UniFi gateway * - requires a UniFi gateway
* @see stat_5minutes_gateway() for details on attribs
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param array|null $attribs array containing attributes (strings) to be returned, valid values are: * @param array|null $attribs array containing attributes (strings) to be returned
* mem, cpu, loadavg_5, lan-rx_errors, lan-tx_errors, lan-rx_bytes,
* lan-tx_bytes, lan-rx_packets, lan-tx_packets, lan-rx_dropped, lan-tx_dropped
* default is ['time', 'mem', 'cpu', 'loadavg_5']
* @return array|bool returns an array of hourly stats objects for the gateway belonging to the current site * @return array|bool returns an array of hourly stats objects for the gateway belonging to the current site
*/ */
public function stat_daily_gateway(int $start = null, int $end = null, array $attribs = null) public function stat_daily_gateway(int $start = null, int $end = null, array $attribs = null)
@@ -884,16 +852,14 @@ class Client
} }
/** /**
* Fetch monthly gateway stats * Fetch monthly gateway stats.
* *
* @note - defaults to the past 52 weeks (52*7*24 hours) * @note - defaults to the past 52 weeks (52*7*24 hours)
* - requires a UniFi gateway * - requires a UniFi gateway
* @see stat_5minutes_gateway() for details on attribs
* @param int|null $start optional, Unix timestamp in milliseconds * @param int|null $start optional, Unix timestamp in milliseconds
* @param int|null $end optional, Unix timestamp in milliseconds * @param int|null $end optional, Unix timestamp in milliseconds
* @param array|null $attribs array containing attributes (strings) to be returned, valid values are: * @param array|null $attribs array containing attributes (strings) to be returned
* mem, cpu, loadavg_5, lan-rx_errors, lan-tx_errors, lan-rx_bytes,
* lan-tx_bytes, lan-rx_packets, lan-tx_packets, lan-rx_dropped, lan-tx_dropped
* default is ['time', 'mem', 'cpu', 'loadavg_5']
* @return array|bool returns an array of monthly stats objects for the gateway belonging to the current site * @return array|bool returns an array of monthly stats objects for the gateway belonging to the current site
*/ */
public function stat_monthly_gateway(int $start = null, int $end = null, array $attribs = null) public function stat_monthly_gateway(int $start = null, int $end = null, array $attribs = null)
@@ -907,7 +873,7 @@ class Client
} }
/** /**
* Fetch speed test results * Fetch speed test results.
* *
* @note - defaults to the past 24 hours * @note - defaults to the past 24 hours
* - requires a UniFi gateway * - requires a UniFi gateway
@@ -925,7 +891,7 @@ class Client
} }
/** /**
* Fetch IPS/IDS events * Fetch IPS/IDS events.
* *
* @note - defaults to the past 24 hours * @note - defaults to the past 24 hours
* - requires a UniFi gateway * - requires a UniFi gateway
@@ -1082,11 +1048,11 @@ class Client
} }
/** /**
* Assign client device to another group * Assign a client device to another group
* *
* @param string $client_id _id value of the client device to be modified * @param string $client_id _id value of the client device to be modified
* @param string $group_id _id value of the user group to assign client device to * @param string $group_id _id value of the user group to assign client device to
* @return bool returns true upon success * @return bool true upon success
*/ */
public function set_usergroup(string $client_id, string $group_id): bool public function set_usergroup(string $client_id, string $group_id): bool
{ {
@@ -1096,7 +1062,7 @@ class Client
} }
/** /**
* Update client device fixed IP address (using REST) * Update a client device's fixed IP address (using REST)
* *
* @param string $client_id _id value for the client device * @param string $client_id _id value for the client device
* @param bool $use_fixedip determines whether to enable the fixed IP address or not * @param bool $use_fixedip determines whether to enable the fixed IP address or not
@@ -1883,6 +1849,68 @@ class Client
return $this->fetch_results_boolean('/api/s/' . $this->site . '/cmd/sitemgr', $payload); return $this->fetch_results_boolean('/api/s/' . $this->site . '/cmd/sitemgr', $payload);
} }
/**
* Update an admin of the current site
*
* @param string $admin_id _id value of the admin user to update, can be obtained using the
* list_all_admins() method/function
* @param string $name update the name of the admin user
* @param string $email update the email address of the admin user
* @param string $password optionally update the password of the admin user
* @param bool $readonly optional, whether the new admin has readonly
* permissions, default value is false which gives the new admin
* Administrator permissions
* @param bool $device_adopt optional, whether the new admin has permissions to
* adopt devices, default value is false. With versions < 5.9.X this only applies
* when readonly is true.
* @param bool $device_restart optional, whether the new admin has permissions to
* restart devices, default value is false. With versions < 5.9.X this only applies
* when readonly is true.
* @return bool true on success
*/
public function update_admin(
string $admin_id,
string $name,
string $email,
string $password = '',
bool $readonly = false,
bool $device_adopt = false,
bool $device_restart = false
): bool
{
$email = trim($email);
$email_valid = filter_var($email, FILTER_VALIDATE_EMAIL);
if (!$email_valid) {
trigger_error('The email address provided is invalid!');
return false;
}
$payload = [
'admin' => trim($admin_id),
'name' => trim($name),
'email' => $email,
'cmd' => 'update-admin',
'role' => 'admin',
'x_password' => $password,
'permissions' => [],
];
if ($readonly) {
$payload['role'] = 'readonly';
}
if ($device_adopt) {
$payload['permissions'][] = 'API_DEVICE_ADOPT';
}
if ($device_restart) {
$payload['permissions'][] = 'API_DEVICE_RESTART';
}
return $this->fetch_results_boolean('/api/s/' . $this->site . '/cmd/sitemgr', $payload);
}
/** /**
* Revoke an admin from the current site * Revoke an admin from the current site
* *
@@ -3009,7 +3037,7 @@ class Client
* Check firmware update * Check firmware update
* *
* @note triggers a Device Firmware Update in Classic Settings > System settings > Maintenance * @note triggers a Device Firmware Update in Classic Settings > System settings > Maintenance
* @return bool returns true upon success * @return bool true upon success
*/ */
public function check_firmware_update(): bool public function check_firmware_update(): bool
{ {
@@ -3023,7 +3051,7 @@ class Client
* *
* @note updates the device to the latest STABLE firmware known to the controller * @note updates the device to the latest STABLE firmware known to the controller
* @param string $mac MAC address of the device to upgrade * @param string $mac MAC address of the device to upgrade
* @return bool returns true upon success * @return bool true upon success
*/ */
public function upgrade_device(string $mac): bool public function upgrade_device(string $mac): bool
{ {
@@ -3037,7 +3065,7 @@ class Client
* *
* @note updates all devices of the selected type to the latest STABLE firmware known to the controller * @note updates all devices of the selected type to the latest STABLE firmware known to the controller
* @param string $type the type of devices to upgrade, must be one of "uap", "usw", "ugw". "uap" is the default. * @param string $type the type of devices to upgrade, must be one of "uap", "usw", "ugw". "uap" is the default.
* @return bool returns true upon success * @return bool true upon success
*/ */
public function upgrade_all_devices(string $type = 'uap'): bool public function upgrade_all_devices(string $type = 'uap'): bool
{ {
@@ -3053,7 +3081,7 @@ class Client
* - please take great care to select a valid firmware file for the device! * - please take great care to select a valid firmware file for the device!
* @param string $firmware_url URL for the firmware file to upgrade the device to * @param string $firmware_url URL for the firmware file to upgrade the device to
* @param string|array $macs MAC address of the device to upgrade or an array of MAC addresses * @param string|array $macs MAC address of the device to upgrade or an array of MAC addresses
* @return bool returns true upon success * @return bool true upon success
*/ */
public function upgrade_device_external(string $firmware_url, $macs): bool public function upgrade_device_external(string $firmware_url, $macs): bool
{ {
@@ -3070,7 +3098,7 @@ class Client
* *
* @note updates all UniFi devices to the latest firmware known to the controller in a * @note updates all UniFi devices to the latest firmware known to the controller in a
* staggered/rolling fashion * staggered/rolling fashion
* @return bool returns true upon success * @return bool true upon success
*/ */
public function start_rolling_upgrade(): bool public function start_rolling_upgrade(): bool
{ {
@@ -3080,7 +3108,7 @@ class Client
/** /**
* Cancel rolling upgrade. * Cancel rolling upgrade.
* *
* @return bool returns true upon success * @return bool true upon success
*/ */
public function cancel_rolling_upgrade(): bool public function cancel_rolling_upgrade(): bool
{ {
@@ -3114,7 +3142,7 @@ class Client
* - the port must be actually providing power * - the port must be actually providing power
* @param string $mac main MAC address of the switch * @param string $mac main MAC address of the switch
* @param int $port_idx port number/index of the port to be affected * @param int $port_idx port number/index of the port to be affected
* @return bool returns true upon success * @return bool true upon success
*/ */
public function power_cycle_switch_port(string $mac, int $port_idx): bool public function power_cycle_switch_port(string $mac, int $port_idx): bool
{ {
@@ -3127,7 +3155,7 @@ class Client
* Trigger an RF scan by an AP * Trigger an RF scan by an AP
* *
* @param string $mac MAC address of the AP * @param string $mac MAC address of the AP
* @return bool returns true upon success * @return bool true upon success
*/ */
public function spectrum_scan(string $mac): bool public function spectrum_scan(string $mac): bool
{ {
@@ -3358,7 +3386,7 @@ class Client
* @param string $method optional, HTTP request type, can be GET (default), POST, PUT, PATCH, or DELETE * @param string $method optional, HTTP request type, can be GET (default), POST, PUT, PATCH, or DELETE
* @param object|array|null $payload optional, stdClass object or associative array containing the payload to pass * @param object|array|null $payload optional, stdClass object or associative array containing the payload to pass
* @param string $return optional, string; determines how to return results, when "boolean" the method must * @param string $return optional, string; determines how to return results, when "boolean" the method must
* return a boolean result (true/false) or "array" when the method must return an array * return a boolean result or "array" when the method must return an array (default)
* @return bool|array returns results as requested, returns false on incorrect parameters * @return bool|array returns results as requested, returns false on incorrect parameters
*/ */
public function custom_api_request(string $path, string $method = 'GET', $payload = null, string $return = 'array') public function custom_api_request(string $path, string $method = 'GET', $payload = null, string $return = 'array')
@@ -3375,7 +3403,9 @@ class Client
if ($return === 'array') { if ($return === 'array') {
return $this->fetch_results($path, $payload); return $this->fetch_results($path, $payload);
} elseif ($return === 'boolean') { }
if ($return === 'boolean') {
return $this->fetch_results_boolean($path, $payload); return $this->fetch_results_boolean($path, $payload);
} }
@@ -3392,9 +3422,9 @@ class Client
* *
* @note changed function/method name to fit its purpose * @note changed function/method name to fit its purpose
* @param string|null $mac optional, the MAC address of a single device for which the call must be made * @param string|null $mac optional, the MAC address of a single device for which the call must be made
* @return array containing known device objects (or a single device when using the <mac> parameter) * @return array|bool containing known device objects (or a single device when using the <mac> parameter)
*/ */
public function list_aps(string $mac = null): array public function list_aps(string $mac = null)
{ {
trigger_error( trigger_error(
'Function list_aps() has been deprecated, use list_devices() instead.', 'Function list_aps() has been deprecated, use list_devices() instead.',
@@ -3497,7 +3527,6 @@ class Client
public function set_site(string $site): string public function set_site(string $site): string
{ {
$this->check_site($site); $this->check_site($site);
$this->site = trim($site); $this->site = trim($site);
return $this->site; return $this->site;
@@ -3901,7 +3930,7 @@ class Client
/** /**
* Capture the latest JSON error when $this->debug is true * Capture the latest JSON error when $this->debug is true
* *
* @return bool returns true upon success, false upon failure * @return bool true upon success, false upon failure
*/ */
protected function catch_json_last_error(): bool protected function catch_json_last_error(): bool
{ {