Compare commits

...

89 Commits

Author SHA1 Message Date
malle-pietje
2cc60dbc3c - minor changes to apply consistent formatting/case 2025-03-09 12:12:03 +01:00
malle-pietje
3e99b7b9a0 Merge branch 'main' of github.com:Art-of-WiFi/UniFi-API-client into main
merging PRs
2025-03-07 17:47:00 +01:00
malle-pietje
23b931a663 added an API reference document
minor tweaks
added methods to handle DNS Records
2025-03-07 17:45:46 +01:00
Jacob Timmerman
ee0bfe430b UniFi OS updates (#267)
* Add list active devices endpoint

* Add list clients history endpoint

* Add OS console update endpoints
2025-03-04 14:14:00 +01:00
malle-pietje
73ae5a4630 minor formatting change 2025-03-03 14:23:57 +01:00
Jacob Timmerman
13cb313cd9 Client devices history (#266)
* Add list active devices endpoint

* Add list clients history endpoint
2025-03-03 14:14:34 +01:00
malle-pietje
1d363deb18 added code examples demonstrating how to work with PPSKs 2025-03-03 14:06:49 +01:00
malle-pietje
f343d3ccc4 changed install instructions to only use composer 2025-01-03 13:39:16 +01:00
malle-pietje
f34cbd675b further clarifications on the availability of versions 1.x.x 2025-01-03 13:34:17 +01:00
malle-pietje
64dcf6e4ad added note on branch version_1 2025-01-03 13:30:55 +01:00
malle-pietje
5d48e57c06 Merge branch 'version_2' into main
merging branch version_2 into main
2025-01-03 13:16:18 +01:00
malle-pietje
f9ce6bf54f added curl option to specifically support http (originally suggested by @Kyouma54 in PR #251)
bumped version to 2.0.4
2025-01-02 10:59:34 +01:00
malle-pietje
11c132b263 bumped version to 1.1.104 2025-01-02 10:54:03 +01:00
malle-pietje
5a64a0c844 added curl option to specifically support http (originally suggested by @Kyouma54 in PR #251) 2025-01-02 10:47:01 +01:00
malle-pietje
898703db5c further tweaks to README 2024-12-19 12:17:45 +01:00
malle-pietje
551c1c3741 further tweaks 2024-12-19 12:15:58 +01:00
malle-pietje
a2bfd29590 tweaks to table 2024-12-19 12:14:05 +01:00
malle-pietje
146495d4a1 added note re support for versions 9.X 2024-12-19 12:12:50 +01:00
malle-pietje
1aa8956445 added note re support for version 9.X 2024-12-19 12:11:25 +01:00
malle-pietje
77c4b17003 added shields to README 2024-12-19 12:05:51 +01:00
malle-pietje
a5ca53a5b8 - applied changes from PR #258, contributed by @mvarian 2024-12-19 11:52:19 +01:00
malle-pietje
089b0b77ae bumped version for next release 2024-12-19 11:15:12 +01:00
malle-pietje
0263c47be9 minor changes 2024-12-19 11:13:10 +01:00
malle-pietje
d722d7b843 completed merge of #258, contributed by @mvarian 2024-12-19 10:55:53 +01:00
malle-pietje
3cf7b4d173 Merge branch 'main' of github.com:Art-of-WiFi/UniFi-API-client into main
merge #258 and review
2024-12-19 10:39:33 +01:00
Michael Varian
6b230753a0 Fix for implicit null declarations resulting in PHP 8.4+ warnings (#258)
Merge #258
2024-12-19 10:39:10 +01:00
malle-pietje
19dc76ddfb consistent use of "PHP DocBlocks" 2024-11-28 12:24:35 +01:00
malle-pietje
3a1d1ff0cd minor tweak to example 2024-11-28 12:21:42 +01:00
malle-pietje
8eeeb447c9 reformatted Exception handling example 2024-11-28 12:19:33 +01:00
malle-pietje
8acaa694ca - updated the README file
- updated @throws tags in the doc blocks to reflect the correct exception classes where necessary, in other cases "Exception" is mentioned
- minor changes
- bumped version to 2.0.2
2024-11-28 12:11:08 +01:00
malle-pietje
d81a371239 further improvements to the README.md file and the list_alarms.php example 2024-11-26 12:04:10 +01:00
malle-pietje
7a47bda1c0 updates to README.md to explain how to get older 1.x versions. 2024-11-26 11:53:59 +01:00
malle-pietje
fb493f4dc8 updated the PHP example in the README to include the Exception classes imports 2024-11-26 11:27:06 +01:00
malle-pietje
1f19891d90 updated the README file
updated the `examples/list_alarms.php` file to demonstrate Exception handling
2024-11-25 17:56:06 +01:00
malle-pietje
9a2432f067 added Exception classes
implement Exceptions in the main class
2024-11-25 17:34:18 +01:00
malle-pietje
97510ec5ec prepared new version number 2024-11-24 11:58:49 +01:00
malle-pietje
9726378e3c bumped version to 1.1.101 2024-11-15 10:33:11 +01:00
malle-pietje
494375f8b5 - added a private property $cookies_created_at to store the timestamp when the cookies were created/updated.
- added a getter method get_cookies_created_at() to return the timestamp when the cookies were created/updated.
  This information can be useful to determine how old the cookies are.
- minor comments clean up
2024-11-15 10:31:10 +01:00
malle-pietje
3dbc24daca further tweaks 2024-11-04 13:43:57 +01:00
malle-pietje
93d1d8ec3f tweaked hyperlink 2024-11-04 13:38:18 +01:00
malle-pietje
b8620f7672 changed link to hyperlink 2024-11-04 13:37:01 +01:00
malle-pietje
1e2e709d4a inserted link to installation instructions 2024-11-04 13:34:41 +01:00
malle-pietje
472d2eaa68 restructured and updated supported versions info 2024-11-04 13:32:34 +01:00
malle-pietje
1522992e49 bumped version to 1.1.100
fixed incorrect return type for `create_voucher()`, reported by @pa-
2024-10-29 12:14:00 +01:00
malle-pietje
70f6a374e2 - added get_system_log() method to get data from the system logs, returns pages results
- minor formatting changes
2024-10-23 13:30:34 +02:00
malle-pietje
ff9e6f0225 merged #244 for a small change to the start_rolling_upgrade() method, contributed by @Jacobtims
minor additional change to allow changes to the payload of the `start_rolling_upgrade()` method
2024-10-17 16:41:45 +02:00
Jacob Timmerman
00a637dbc4 Add "uxg" to start_rolling_upgrade payload (#244)
* Fix payload start_rolling_upgrade method

* Add "uxg" to start_rolling_upgrade payload
2024-10-17 16:31:25 +02:00
malle-pietje
6498b0255b Merge branch 'master' of github.com:Art-of-WiFi/UniFi-API-client
merging #243
2024-10-17 14:56:47 +02:00
malle-pietje
05e791bcf0 minor changes 2024-10-17 14:56:36 +02:00
Jacob Timmerman
192a1262c3 Fix payload start_rolling_upgrade method (#243) 2024-10-17 14:55:54 +02:00
malle-pietje
30056f50fc - bumped version to 1.1.96
- removed @version tag in docblock as it contained redundant information
- merged #241 which adds a method to download a generated backup, (contributed by @Jacobtims)
2024-10-14 14:34:48 +02:00
Jacob Timmerman
d040c512a7 Add method to download generated backup (#241)
Merged PR #241
2024-10-14 14:31:44 +02:00
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
malle-pietje
fd69d844a6 API client class v1.1.93
- added the migrate_device() method to migrate one or more devices from one controller to another
- added the cancel_migrate_device() method to cancel the migration for one or more devices
- added the upgrade_all_devices() method to upgrade all devices of a selected type to the latest firmware version
- changed the force_provision() method to allow for multiple MAC addresses to be passed as a parameter
- minor changes to a number of doc-blocks
- general changes for improved consistency and readability
2024-08-07 16:03:09 +02:00
malle-pietje
12b85ce9db moved 2 properties to constants which seems more appropriate
reformatted single-line comments
2024-08-06 12:30:47 +02:00
malle-pietje
54ec631d4b added a new example demonstrating the change of site settings 2024-08-04 15:35:26 +02:00
Jacob Timmerman
fdea77fce0 Add days paramater to generate_backup method (#232) 2024-08-02 17:12:29 +02:00
malle-pietje
108ddd3995 further cleanup of notes in doc blocks 2024-07-31 11:16:02 +02:00
malle-pietje
63600f4da1 - added delete_admin()` method, contributed by @Jacobtims
- reformatting of notes in the doc blocks
2024-07-31 10:55:21 +02:00
malle-pietje
20aa3e1377 merging PR #228 2024-07-31 10:25:02 +02:00
malle-pietje
d36a088101 API client class v1.1.90
- remove existing x-csrf-token headers before adding a new one, UniFi OS does not like multiple x-csrf-tokens in the same request
2024-02-27 18:48:41 +01:00
malle-pietje
007117cbfc API client class v1.1.89
- added `create_tag()`, `set_tagged_devices()`, `get_tag()`, and `delete_tag()` methods to manage tags, contributed by @brenard, #205
2024-02-11 17:24:31 +01:00
malle-pietje
7e60ce3e87 API client class v1.1.88
- added list_fingerprint_devices() method to list fingerprints for clients devices, contributed by @dream-rhythm, #213
- minor code cleanup
2024-02-11 14:46:30 +01:00
malle-pietje
83d4f121ed API client class v1.1.87
- further code cleanup and refactoring to pass more phpstan tests
2024-02-11 12:33:37 +01:00
malle-pietje
bd39c325d2 API client class v1.1.86
- fixes issue with curl_init() returning CurlHandle class objects instead of curl handlers with PHP 8 and higher
2024-02-10 13:26:47 +01:00
malle-pietje
4b175ddf9b API client class v1.1.85
- removed unnecessary type casting in several methods
- fixed return type hinting in several methods where return type would be an array|bool instead of just array
- relaxed parameter type hinting in the constructor to allow for null values for several parameters ($site and $version) that have sensible defaults, reported by @pbksol
- using phpstan, the class now passes level 5 checks
2024-02-10 12:13:00 +01:00
malle-pietje
48482d661a API client class v1.1.84
- PHP 7.4 is now the minimum required version
- updated the code for 7.4. specific features such as parameter type hinting, return types, etc.
- added the ability to the constructor to change the key that is used to store the unificookie in the session,
  ($_SESSION['unificookie'] is used by default), this is useful when running multiple applications on the same server
2024-02-09 18:11:43 +01:00
malle-pietje
563739345c applied tweaks to the README file 2024-01-05 11:08:06 +01:00
malle-pietje
fdc5f06765 applied tweaks to the README file 2024-01-05 11:04:39 +01:00
malle-pietje
35b2fb37f3 applied tweaks to the README file 2024-01-05 11:02:38 +01:00
malle-pietje
8c1b33ed09 added note to README regarding Issues that are not related to the PHP API client 2024-01-05 10:47:11 +01:00
malle-pietje
b6a22abc01 further changes and updates to the README file 2023-12-21 11:09:36 +01:00
malle-pietje
3aa658eab0 minor changes to the instructions in the README file 2023-12-21 10:41:38 +01:00
malle-pietje
a4258f1963 updated the instructions in the README file 2023-12-21 10:36:10 +01:00
malle-pietje
cf5ba015b0 removed statement about cookies no longer being supported... 2023-12-18 15:15:19 +01:00
malle-pietje
2970f79290 API client class v1.1.83
- added a 'accept: application/json' header to the login requests
- re-added support for cookies when working with a UniFi OS-based controller
2023-12-18 15:08:24 +01:00
malle-pietje
7fe7a40873 further updates to README 2023-12-18 12:35:58 +01:00
malle-pietje
df1f70547c updated README
added announcement of minimum PHP version moving to 7.4
2023-12-18 12:32:03 +01:00
malle-pietje
e89daaf1a3 API client class v1.1.82
- allow filtering by multiple MAC addresses in list_devices(), contributed by @sgrodzicki, #189
2023-12-18 11:42:56 +01:00
malle-pietje
d66c3ddd75 API client class v1.1.81
- hotfix to address cookie issues in UniFi OS 3.2.7, reported by @tflatebo
- fixed minor typos
- minor code reformatting of the examples
- starting with this release, cookies are no longer supported when connecting to a UniFi OS-based controller
- added set_vlan_to_port.php example, contributed by @SamuelSchnelly, #203
- allow additional parameters in `create_wlan()`'s payload, contributed by @sgrodzicki, #191
2023-12-18 11:11:27 +01:00
malle-pietje
9e092f8b85 Merge branch 'master' of github.com:Art-of-WiFi/UniFi-API-client
merge for device-basic
2023-03-28 12:22:42 +02:00
Sebastian Grodzicki
e4dc2e273c Add stat/device-basic endpoint (#188)
Merge to include device-basic endpoint
2023-03-28 12:21:43 +02:00
malle-pietje
67d318ca91 - bumped version to class v1.1.80
- added generate_backup_site() method, contributed by @labo-jad
2023-03-28 12:19:29 +02:00
50 changed files with 4927 additions and 2090 deletions

1276
API_REFERENCE.md Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
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
of this software and associated documentation files (the "Software"), to deal

437
README.md
View File

@@ -1,103 +1,116 @@
## UniFi Controller API client class
A PHP class that provides access to Ubiquiti's [**UniFi Network Controller**](https://unifi-network.ui.com/) API.
[![License](https://img.shields.io/github/license/Art-of-WiFi/UniFi-API-client)](https://github.com/Art-of-WiFi/UniFi-API-client/blob/main/LICENSE)
[![Packagist Version](https://img.shields.io/packagist/v/art-of-wifi/unifi-api-client)](https://packagist.org/packages/art-of-wifi/unifi-api-client)
[![Downloads](https://img.shields.io/packagist/dt/art-of-wifi/unifi-api-client)](https://packagist.org/packages/art-of-wifi/unifi-api-client)
[![PHP Version](https://img.shields.io/packagist/php-v/art-of-wifi/unifi-api-client)](https://packagist.org/packages/art-of-wifi/unifi-api-client)
UniFi Network Controller software versions 4.X.X, 5.X.X, 6.X.X, and 7.X.X (version 7.0.23 has been confirmed to work)
are supported as well as UniFi OS-based controllers. This class is used by our API browser tool which can be found
A PHP class that provides access to Ubiquiti's [**UniFi Network Application**](https://unifi-network.ui.com/) API.
This class is used by our API Browser tool, which can be found
[here](https://github.com/Art-of-WiFi/UniFi-API-browser).
The package can be installed manually or by using
composer/[packagist](https://packagist.org/packages/art-of-wifi/unifi-api-client) for
easy inclusion in your projects.
easy inclusion in your projects. See the [installation instructions](#Installation) below for more details.
## Supported Versions
| Software | Versions |
|--------------------------------------|------------------------------------------------------|
| UniFi Network Application/controller | 5.x, 6.x, 7.x, 8.x, 9.0.x (**9.0.101 is confirmed**) |
| UniFi OS | 3.x, 4.1.x (**4.1.9 is confirmed**) |
## Requirements
- a server with:
- PHP 5.5.0 or higher
- PHP json and PHP cURL modules
- tested on Apache 2.4 with PHP 5.6.1 and cURL 7.42.1 and with PHP 7.4.9 and cURL 7.68.0
- 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 enabled
- 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
- you must use **accounts with local access**, not UniFi Cloud accounts, 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
## UniFi OS Support
Support for UniFi OS-based controllers has been added as of version 1.1.47:
Besides the "software-based" UniFi controllers, this class also supports UniFi OS-based controllers starting from
version **1.1.47**.
These devices/services have been verified to work:
- UniFi Dream Router (UDR)
- UniFi Dream Machine (UDM)
- UniFi Dream Machine Pro (UDM PRO)
- Cloud Key Gen2 (UCK G2), firmware version 2.0.24 or higher
- Cloud Key Gen2 Plus (UCK G2 Plus), firmware version 2.0.24 or higher
- UniFi Cloud Key Gen2 (UCK G2), firmware version 2.0.24 or higher
- UniFi Cloud Key Gen2 Plus (UCK G2 Plus), firmware version 2.0.24 or higher
- UniFi Express (UX)
- UniFi Dream Wall (UDW)
- UniFi Cloud Gateway Ultra (UCG-Ultra)
- UniFi CloudKey Enterprise (CK-Enterprise)
- UniFi Enterprise Fortress Gateway (EFG)
- Official UniFi Hosting, details [here](https://help.ui.com/hc/en-us/articles/4415364143511)
The class automatically detects UniFi OS-based controllers and adjusts URLs and several functions/methods accordingly.
If your own code implements strict validation of the URL that is passed to the constructor, please adapt your
logic to allow URLs without a port suffix or with port 443 when working with a UniFi OS-based controller.
The class automatically detects UniFi OS consoles and adjusts the URLs and several functions/methods accordingly.
UniFi OS-based controllers require you to connect using port **443** instead of **8443** which is used for
"software-based" controllers. If your own code implements strict validation of the URL that is passed to the
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
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:
https://artofwifi.net/blog/how-to-access-the-unifi-controller-by-wan-ip-or-hostname-on-a-udm-pro
The "custom firewall rule" approach described there is the recommended method.
## Upgrading from previous versions
When upgrading from a version before **2.0.0**, please:
- change your code to use the new Exceptions that are thrown by the class
- test the client with your code for any breaking changes
- make sure you are using [Composer](#composer) to install the class because the code is no longer held within a single file
- see the note [here](#looking-for-version-1xx) regarding the single file version (1.x.x) of the API client
Please test all methods you plan on using thoroughly before using the API Client with
UniFi OS devices in a production environment.
## Installation
Use [Composer](#composer), [Git](#git) or simply [Download the Release](#download-the-release) to install the
API client class.
### Composer
The preferred installation method is through [composer](https://getcomposer.org).
Follow these [installation instructions](https://getcomposer.org/doc/00-intro.md) if you don't have composer
The preferred installation method is through [Composer](https://getcomposer.org).
Follow these [installation instructions](https://getcomposer.org/doc/00-intro.md) if you don't have Composer
installed already.
Once composer is installed, simply execute this command from the shell in your project
directory:
Once Composer is installed, execute this command from the shell in your project directory:
```sh
composer require art-of-wifi/unifi-api-client
```
Or manually add the package to your composer.json file:
Or manually add the package to your `composer.json` file:
```javascript
{
"require": {
"art-of-wifi/unifi-api-client": "^1.1"
"art-of-wifi/unifi-api-client": "^2.0"
}
}
```
Finally, be sure to include the autoloader in your code:
Finally, be sure to include the composer autoloader in your code if your framework doesn't already do this for you:
```php
/**
* load the class using the composer autoloader
*/
require_once 'vendor/autoload.php';
```
### Git
Execute the following `git` command from the shell in your project directory:
```sh
git clone https://github.com/Art-of-WiFi/UniFi-API-client.git
```
When git is done cloning, include the file containing the class like so in your code:
```php
require_once 'path/to/src/Client.php';
```
### Download the Release
If you prefer not to use composer or git,
simply [download the package](https://github.com/Art-of-WiFi/UniFi-API-client/archive/master.zip), unpack the zip
file, then include the file containing the class in your code like so:
```php
require_once 'path/to/src/Client.php';
```
## Example usage
A basic example how to use the class:
A basic example of how to use the class:
```php
/**
@@ -114,20 +127,17 @@ $login = $unifi_connection->login();
$results = $unifi_connection->list_alarms(); // returns a PHP array containing alarm objects
```
Please refer to the `examples/` directory for some more detailed examples which can be used as a starting point for your
own PHP code.
#### IMPORTANT NOTES:
1. In the above example, `$site_id` is the short site "name" (usually 8 characters long) that is visible in the URL when
managing the site in the UniFi Network Controller. For example with this URL:
managing the site in the UniFi Network Controller. For example, with this URL:
`https://<controller IP address or FQDN>:8443/manage/site/jl3z2shm/dashboard`
`jl3z2shm` is the short site "name" and the value to assign to $site_id.
2. The 6th optional parameter that is passed to the constructor in the above example (`true`), enables validation of
the controller's SSL certificate which is otherwise **disabled** by default. It is **highly recommended** to enable
the controller's SSL certificate, which is otherwise **disabled** by default. It is **highly recommended** to enable
this feature in production environments where you have a valid SSL cert installed on the UniFi Controller that is
associated with the FQDN in the `controller_url` parameter. This option was added with API client version 1.1.16.
@@ -137,211 +147,126 @@ own PHP code.
[issue](https://github.com/Art-of-WiFi/UniFi-API-browser/issues/94) for an example where the WPA2 password isn't
visible for **read-only** administrator accounts.
## Exception handling
The class now throws **Exceptions** for various error conditions instead of using PHP's `trigger_error()` function. This
allows for more granular error handling in your application code.
Here is an example of how to catch these Exceptions:
```php
<?php
/**
* PHP API usage example with Exception handling
*/
use UniFi_API\Exceptions\CurlExtensionNotLoadedException;
use UniFi_API\Exceptions\CurlGeneralErrorException;
use UniFi_API\Exceptions\CurlTimeoutException;
use UniFi_API\Exceptions\InvalidBaseUrlException;
use UniFi_API\Exceptions\InvalidSiteNameException;
use UniFi_API\Exceptions\JsonDecodeException;
use UniFi_API\Exceptions\LoginFailedException;
use UniFi_API\Exceptions\LoginRequiredException;
/**
* load the class using the composer autoloader
*/
require_once 'vendor/autoload.php';
/**
* include the config file (place your credentials etc. there if not already present)
*/
require_once 'config.php';
/**
* initialize the UniFi API connection class, log in to the controller and request the alarms collection
* (this example assumes you have already assigned the correct values to the variables in config.php)
*/
try {
$unifi_connection = new UniFi_API\Client($controller_user, $controller_password, $controller_url, $site_id, $controller_version, true);
$login = $unifi_connection->login();
$results = $unifi_connection->list_alarms(); // returns a PHP array containing alarm objects
} catch (CurlExtensionNotLoadedException $e) {
echo 'CurlExtensionNotLoadedException: ' . $e->getMessage(). PHP_EOL;
} catch (InvalidBaseUrlException $e) {
echo 'InvalidBaseUrlException: ' . $e->getMessage(). PHP_EOL;
} catch (InvalidSiteNameException $e) {
echo 'InvalidSiteNameException: ' . $e->getMessage(). PHP_EOL;
} catch (JsonDecodeException $e) {
echo 'JsonDecodeException: ' . $e->getMessage(). PHP_EOL;
} catch (LoginRequiredException $e) {
echo 'LoginRequiredException: ' . $e->getMessage(). PHP_EOL;
} catch (CurlGeneralErrorException $e) {
echo 'CurlGeneralErrorException: ' . $e->getMessage(). PHP_EOL;
} catch (CurlTimeoutException $e) {
echo 'CurlTimeoutException: ' . $e->getMessage(). PHP_EOL;
} catch (LoginFailedException $e) {
echo 'LoginFailedException: ' . $e->getMessage(). PHP_EOL;
} catch (Exception $e) {
/** catch any other Exceptions that might be thrown */
echo 'General Exception: ' . $e->getMessage(). PHP_EOL;
}
```
Although the PHP DocBlocks for most public methods/functions contain `@throws Exception`, it is recommended to catch
other specific Exceptions that can be thrown by the API Client class to provide more detailed error messages to your
application code.
In most cases, the class will let Exceptions bubble up to the calling code, but in some cases it will catch them and
throw a new Exception with a more specific message.
The `list_alarms.php` example in the `examples/` directory is a good starting point to see how you can implement
Exception handling.
## Functions/methods supported
The class currently supports the following functions/methods to GET/POST/PUT/DELETE data
through the UniFi Controller API. Please refer to the comments in the source code for
more details on each of the functions/methods and their respective parameters.
The class currently supports a large and growing number of functions/methods to access the UniFi Controller API.
Please refer to the comments/PHP DocBlocks in the source code for more details on each of the functions/methods,
their purpose, and their respective parameters.
- login()
- logout()
- adopt_device()
- archive_alarm()
- assign_existing_admin()
- authorize_guest()
- block_sta()
- cancel_rolling_upgrade()
- check_controller_update()
- check_firmware_update()
- cmd_stat()
- count_alarms()
- create_apgroup() (supported with controller versions 6.0.X and higher)
- create_dynamicdns()
- create_firewallgroup()
- create_hotspotop()
- create_network()
- create_radius_account()
- create_site()
- create_user()
- create_usergroup()
- create_voucher()
- create_wlan()
- custom_api_request()
- delete_apgroup() (supported with controller versions 6.0.X and higher)
- delete_device()
- delete_firewallgroup()
- delete_network()
- delete_radius_account()
- delete_site()
- delete_usergroup()
- delete_wlan()
- disable_ap()
- edit_apgroup() (supported with controller versions 6.0.X and higher)
- edit_client_fixedip()
- edit_client_name()
- edit_firewallgroup()
- edit_usergroup()
- extend_guest_validity()
- forget_sta() (supported on controller version 5.9.X and higher)
- invite_admin()
- led_override()
- list_admins()
- list_alarms()
- list_all_admins()
- list_apgroups() (supported with controller versions 6.0.X and higher)
- list_aps() (deprecated but still available as alias)
- list_backups()
- list_clients()
- list_country_codes()
- list_current_channels()
- list_dashboard()
- list_device_name_mappings()
- list_devices()
- list_dpi_stats()
- list_dynamicdns()
- list_events()
- list_extension()
- list_firewallgroups()
- list_firmware()
- list_guests()
- list_health()
- list_hotspotop()
- list_known_rogueaps()
- list_networkconf()
- list_portconf()
- list_portforward_stats()
- list_portforwarding()
- list_radius_accounts() (supported on controller version 5.5.19 and higher)
- list_radius_profiles()
- list_rogueaps()
- list_routing()
- list_self()
- list_settings()
- list_sites()
- list_tags() (supported on controller version 5.5.19 and higher)
- list_usergroups()
- list_users()
- list_wlan_groups()
- list_wlanconf()
- locate_ap()
- move_device()
- power_cycle_switch_port()
- reboot_cloudkey()
- reconnect_sta()
- rename_ap()
- restart_ap() (deprecated but still available as alias)
- restart_device()
- revoke_admin()
- revoke_voucher()
- set_ap_radiosettings()
- set_device_settings_base()
- set_dynamicdns()
- set_element_adoption() (supported on controller version 5.13.X and higher)
- set_guestlogin_settings()
- set_guestlogin_settings_base()
- set_ips_settings_base() (supported on controller version 5.9.10 and higher)
- set_locate_ap() (deprecated but still available as alias)
- set_networksettings_base()
- set_radius_account_base()
- set_site_connectivity()
- set_site_country()
- set_site_guest_access()
- set_site_locale()
- set_site_mgmt()
- set_site_name()
- set_site_ntp()
- set_site_snmp()
- set_sta_name()
- set_sta_note()
- set_super_identity_settings_base()
- set_super_mgmt_settings_base()
- set_super_smtp_settings_base()
- set_usergroup()
- set_wlan_mac_filter()
- set_wlansettings()
- set_wlansettings_base()
- site_leds()
- site_ledsoff() (deprecated but still available as alias)
- site_ledson() (deprecated but still available as alias)
- spectrum_scan()
- spectrum_scan_state()
- start_rolling_upgrade()
- stat_5minutes_aps() (supported on controller version 5.5.X and higher)
- stat_5minutes_gateway() (supported on controller version 5.7.X and higher)
- stat_5minutes_site() (supported on controller version 5.5.X and higher)
- stat_5minutes_user (supported on controller version 5.7.X and higher)
- stat_allusers()
- stat_auths()
- stat_client()
- stat_daily_aps()
- stat_daily_gateway() (supported on controller version 5.7.X and higher)
- stat_daily_site()
- stat_daily_user() (supported on controller version 5.7.X and higher)
- stat_full_status()
- stat_hourly_aps()
- stat_hourly_gateway() (supported on controller version 5.7.X and higher)
- stat_hourly_site()
- stat_hourly_user() (supported on controller version 5.7.X and higher)
- stat_ips_events() (supported on controller version 5.9.10 and higher)
- stat_monthly_aps()
- stat_monthly_gateway()
- stat_monthly_site()
- stat_monthly_user()
- stat_payment()
- stat_sessions()
- stat_sites()
- stat_speedtest_results()
- stat_sta_sessions_latest()
- stat_status()
- stat_sysinfo()
- stat_voucher()
- unauthorize_guest()
- unblock_sta()
- unset_locate_ap() (deprecated but still available as alias)
- upgrade_device()
- upgrade_device_external()
If you are using an advanced IDE such as PHPStorm or VS Code, you can use its code completion and other
features to explore the available functions/methods thanks to the extensive PHP DocBlocks throughout the code.
Other functions, getters/setters:
For a quick overview of the available functions/methods, you can also check the API Reference here:
- get_class_version()
- get_cookie() (renamed from getcookie(), deprecated but still available, use get_cookies() instead)
- get_cookies()
- get_curl_connection_timeout()
- get_curl_http_version()
- get_curl_method()
- get_curl_request_timeout()
- get_curl_request_timeout()
- get_curl_ssl_verify_host()
- get_curl_ssl_verify_peer()
- get_debug()
- get_is_unifi_os()
- get_last_error_message()
- get_last_results_raw()
- get_site()
- set_connection_timeout()
- set_cookies()
- set_curl_http_version()
- set_curl_request_timeout()
- set_curl_ssl_verify_host()
- set_curl_ssl_verify_peer()
- set_debug()
- set_is_unifi_os()
- set_request_method()
- set_request_timeout()
- set_site()
[API Reference](API_REFERENCE.md)
## Looking for version 1.x.x?
With versions 1.x.x of the API client, the entire client was contained within a single file which can be useful in
specific cases.
This has changed with version 2.0.0 where the code is now split across multiple files and is managed using composer.
If you are looking for the version 1.x.x code, you can tell composer to install that version by using the following
syntax in your `composer.json` file:
```javascript
{
"require": {
"art-of-wifi/unifi-api-client": "^1.1"
}
}
```
Alternatively, you can download the latest 1.x.x code from the [releases page](https://github.com/Art-of-WiFi/UniFi-API-client/releases).
Whenever necessary, we will make sure to update the **version_1** branch with the latest 1.x.x code.
## Need help or have suggestions?
There is still work to be done to add functionality and further improve the usability of
this class, so all suggestions/comments are welcome. Please use the GitHub
[issue list](https://github.com/Art-of-WiFi/UniFi-API-client/issues) or the Ubiquiti
[Issues section](https://github.com/Art-of-WiFi/UniFi-API-client/issues) or the Ubiquiti
Community forums (https://community.ubnt.com/t5/UniFi-Wireless/PHP-class-to-access-the-UniFi-controller-API-updates-and/td-p/1512870)
to share your suggestions and questions.
## Contribute
If you would like to contribute code (improvements), please open an issue and include
your code there or else create a pull request.
#### IMPORTANT NOTE:
When encountering issues with the UniFi API using other libraries, cURL or Postman, please do **not** open an Issue. Such issues will be closed immediately.
Please use the [Discussions](https://github.com/Art-of-WiFi/UniFi-API-client/discussions) section instead.
## Credits
@@ -352,7 +277,17 @@ This class is based on the initial work by the following developers:
and the API as published by Ubiquiti:
- https://dl.ui.com/unifi/7.0.23/unifi_sh_api
- https://dl.ui.com/unifi/8.6.9/unifi_sh_api
## Contributors
A big thanks to all the contributors who have helped with this project!
[![Contributors](https://img.shields.io/github/contributors/Art-of-WiFi/UniFi-API-client)](https://github.com/Art-of-WiFi/UniFi-API-client/graphs/contributors)
If you would like to contribute to this project, please open an issue and include
your suggestions or code there or else create a pull request.
## Important Disclaimer

View File

@@ -8,7 +8,8 @@
"unifi",
"controller",
"api",
"client"
"client",
"unifi os"
],
"homepage": "https://github.com/Art-of-WiFi/UniFi-API-client",
"license": "MIT",
@@ -20,7 +21,7 @@
}
],
"require": {
"php": ">=5.5.0",
"php": ">=7.4.0",
"ext-curl": "*",
"ext-json": "*"
},

View File

@@ -28,7 +28,14 @@ $ap_mac = '<enter MAC address of Access Point to check>';
* initialize the UniFi API connection class and log in to the controller and do our thing
* spectrum_scan_state()
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->spectrum_scan_state($ap_mac);

View File

@@ -24,8 +24,15 @@ $device_mac = '<enter MAC address of device to update>';
* initialize the UniFi API connection class, log in to the controller
* (this example assumes you have already assigned the correct values in config.php to the variables used)
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion, false);
$login = $unifi_connection->login();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$login = $unifi_connection->login();
/**
* Run the actual upgrade

View File

@@ -45,9 +45,16 @@ $site_id = '<enter your site id here>';
/**
* initialize the UniFi API connection class and log in to the controller
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
/**
* then we authorize the device for the requested duration

View File

@@ -42,9 +42,16 @@ $note = 'Note to attach to newly authorized device';
/**
* initialize the UniFi API connection class and log in to the controller
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
/**
* we authorize the device for the requested duration and attach the note to it's object

View File

@@ -42,9 +42,16 @@ if ($site_id == "MUST_DEFINE_THIS") {
/**
* initialize the UniFi API connection class and log in to the controller
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login(); // always true regardless of site id
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login(); // always true regardless of site id
foreach ($macs_to_block as $mac) {
// block_result is always true even if mac address does not exist :(

View File

@@ -25,19 +25,26 @@ $debug = false;
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion, true);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$site_settings = $unifi_connection->list_settings();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$super_mgmt_settings = [];
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$site_settings = $unifi_connection->list_settings();
$super_mgmt_settings = [];
$super_mgmt_settings_id = '';
if (!empty($site_settings)) {
foreach($site_settings as $section) {
foreach ($site_settings as $section) {
echo 'section key: ' . $section->key . PHP_EOL;
if ($section->key === 'super_mgmt') {
$super_mgmt_settings = $section;
$super_mgmt_settings = $section;
$super_mgmt_settings_id = $section->_id;
}
}

View File

@@ -35,10 +35,17 @@ $new_password = '<new password goes here>';
/**
* initialize the UniFi API connection class and log in to the controller
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$results = $unifi_connection->set_wlansettings($wlan_id, $new_password);
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$results = $unifi_connection->set_wlansettings($wlan_id, $new_password);
/**
* provide feedback in json format

View File

@@ -30,9 +30,16 @@ $description = 'new site';
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$loginresults = $unifi_connection->login();
$results = $unifi_connection->create_site($description);
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$loginresults = $unifi_connection->login();
$results = $unifi_connection->create_site($description);
/**
* provide feedback in json format

View File

@@ -35,9 +35,16 @@ $site_id = '<enter your site id here>';
/**
* initialize the UniFi API connection class and log in to the controller
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
/**
* then we create the required number of vouchers with the requested expiration value

View File

@@ -31,9 +31,16 @@ $site_to_delete = '<_id value of the site>';
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$loginresults = $unifi_connection->login();
$results = $unifi_connection->delete_site($site_to_delete);
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$loginresults = $unifi_connection->login();
$results = $unifi_connection->delete_site($site_to_delete);
/**
* provide feedback in json format

View File

@@ -30,9 +30,16 @@ $site_id = '<enter your site id here>';
/**
* initialize the UniFi API connection class and log in to the controller
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
/**
* then we disable the device

View File

@@ -46,7 +46,14 @@ $port_conf_id = '<enter _id value of desired port configuration>';
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion, false);
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->list_devices($device_mac);

View File

@@ -35,10 +35,17 @@ $return = 'array';
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$results = $unifi_connection->custom_api_request($url, $request_method, $payload, $return);
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$results = $unifi_connection->custom_api_request($url, $request_method, $payload, $return);
/**
* provide feedback in JSON format or as PHP Object

View File

@@ -23,9 +23,16 @@ require_once 'config.php';
$site_id = "default";
$site_name = "*enter your site name*";
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
if ($loginresults === 400) {
print "UniFi controller login failure, please check your credentials in config.php.\n";
@@ -36,7 +43,8 @@ if ($loginresults === 400) {
* loop thru all known guests
*/
foreach ($guestlist as $guest) {
print "<pre>" . $guest->_id . " (" . $guest->mac . "), valid until " . date(DATE_ATOM, $guest->end) . " (" . $guest->end . ")</pre>";
print "<pre>" . $guest->_id . " (" . $guest->mac . "), valid until " .
date(DATE_ATOM, $guest->end) . " (" . $guest->end . ")</pre>";
/**
* just a sample: only extend validity of guests which have end date after 2017-04-02

View File

@@ -3,8 +3,17 @@
* PHP API usage example
*
* contributed by: Art of WiFi
* description: example basic PHP script to pull current alarms from the UniFi controller and output in json format
* description: An example basic PHP script to pull current alarms from the UniFi controller and output in JSON format,
* also demonstrates how to catch exceptions.
*/
use UniFi_API\Exceptions\CurlExtensionNotLoadedException;
use UniFi_API\Exceptions\CurlGeneralErrorException;
use UniFi_API\Exceptions\CurlTimeoutException;
use UniFi_API\Exceptions\InvalidBaseUrlException;
use UniFi_API\Exceptions\InvalidSiteNameException;
use UniFi_API\Exceptions\JsonDecodeException;
use UniFi_API\Exceptions\LoginFailedException;
use UniFi_API\Exceptions\LoginRequiredException;
/**
* using the composer autoloader
@@ -12,8 +21,14 @@
require_once 'vendor/autoload.php';
/**
* include the config file (place your credentials etc. there if not already present)
* see the config.template.php file for an example
* Include the config file (place your credentials etc. there if not already present), see the config.template.php
* file for an example.
*
* @var array $controlleruser
* @var array $controllerpassword
* @var array $controllerurl
* @var array $controllerversion
* @var array $debug
*/
require_once 'config.php';
@@ -25,12 +40,40 @@ $site_id = '<enter your site id here>';
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->list_alarms();
try {
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
/**
* provide feedback in json format
*/
echo json_encode($data, JSON_PRETTY_PRINT);
$set_debug_mode = $unifi_connection->set_debug($debug);
$login_results = $unifi_connection->login();
$data = $unifi_connection->list_alarms();
/**
* echo the results in JSON format
*/
echo json_encode($data, JSON_PRETTY_PRINT);
} catch (CurlExtensionNotLoadedException $e) {
echo 'CurlExtensionNotLoadedException: ' . $e->getMessage(). PHP_EOL;
} catch (InvalidBaseUrlException $e) {
echo 'InvalidBaseUrlException: ' . $e->getMessage(). PHP_EOL;
} catch (InvalidSiteNameException $e) {
echo 'InvalidSiteNameException: ' . $e->getMessage(). PHP_EOL;
} catch (JsonDecodeException $e) {
echo 'JsonDecodeException: ' . $e->getMessage(). PHP_EOL;
} catch (LoginRequiredException $e) {
echo 'LoginRequiredException: ' . $e->getMessage(). PHP_EOL;
} catch (CurlGeneralErrorException $e) {
echo 'CurlGeneralErrorException: ' . $e->getMessage(). PHP_EOL;
} catch (CurlTimeoutException $e) {
echo 'CurlTimeoutException: ' . $e->getMessage(). PHP_EOL;
} catch (LoginFailedException $e) {
echo 'LoginFailedException: ' . $e->getMessage(). PHP_EOL;
} catch (Exception $e) {
/** catch any other Exceptions that might be thrown */
echo 'General Exception: ' . $e->getMessage(). PHP_EOL;
}

View File

@@ -26,10 +26,17 @@ $site_id = '<enter your site id here>';
/**
* initialize the UniFi API connection class and log in to the controller and pull the requested data
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$aps_array = $unifi_connection->list_aps();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$aps_array = $unifi_connection->list_aps();
/**
* output the results in HTML format

View File

@@ -25,10 +25,17 @@ $site_id = '<enter your site id here>';
/**
* initialize the UniFi API connection class and log in to the controller and pull the requested data
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$clients_array = $unifi_connection->list_clients();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$clients_array = $unifi_connection->list_clients();
/**
* output the results in JSON format

View File

@@ -26,14 +26,20 @@ $site_id = '<enter your site id here>';
/**
* initialize the UniFi API connection class and log in to the controller and pull the requested data
*/
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$result = $unifi_connection->list_health();
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$result = $unifi_connection->list_health();
/**
* output the results in correct json formatting
*/
header('Content-Type: application/json');
echo (json_encode($result, JSON_PRETTY_PRINT));
echo(json_encode($result, JSON_PRETTY_PRINT));

View File

@@ -26,10 +26,17 @@ $site_id = 'default';
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->list_sites();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->list_sites();
/**
* we can render the full results in json format

View File

@@ -26,10 +26,17 @@ $site_id = '<enter your site id here>';
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->stat_payment();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->stat_payment();
/**
* cycle through the results and print social auth details if set,

View File

@@ -38,12 +38,19 @@ $attribs = ['rx_bytes', 'tx_bytes'];
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion, true);
$set_debug_mode = $unifi_connection->set_debug(false);
$loginresults = $unifi_connection->login();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug(false);
$loginresults = $unifi_connection->login();
//$data = $unifi_connection->stat_5minutes_user($mac, null, null, $attribs);
//$data = $unifi_connection->stat_hourly_user($mac, null, null, $attribs);
$data = $unifi_connection->stat_daily_user($mac, null, null, $attribs);
$data = $unifi_connection->stat_daily_user($mac, null, null, $attribs);
/**
* provide feedback in json format

View File

@@ -49,39 +49,52 @@ $new_cycle_enabled = false;
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
if ($loginresults) {
$pdu_details = $unifi_connection->list_devices($pdu_mac);
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
/**
* change the model below from USPPDUP to UP1 when using a USP-Plug (thanks to @thesohoguy for contributing this)
*/
if (!empty($pdu_details) && property_exists($pdu_details[0], 'model') && $pdu_details[0]->model === 'USPPDUP' && property_exists($pdu_details[0], 'outlet_overrides')) {
$device_id = $pdu_details[0]->_id;
$outlet_overrides = $pdu_details[0]->outlet_overrides;
foreach ($outlet_overrides as $key => $value) {
if ($value->index === $outlet_idx) {
$outlet_overrides[$key]->relay_state = $new_relay_state;
$outlet_overrides[$key]->cycle_enabled = $new_cycle_enabled;
}
}
$pdu_update = $unifi_connection->set_device_settings_base($device_id, ['outlet_overrides' => $outlet_overrides]);
/**
* provide feedback in json format
*/
echo 'results:' . PHP_EOL . PHP_EOL;
echo json_encode($pdu_update, JSON_PRETTY_PRINT);
echo PHP_EOL;
} else {
echo 'not a PDU device?';
echo PHP_EOL;
}
} else {
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
if (!$loginresults) {
echo 'we encountered a login error!';
echo PHP_EOL;
}
exit();
}
$pdu_details = $unifi_connection->list_devices($pdu_mac);
/**
* change the model below from USPPDUP to UP1 when using a USP-Plug (thanks to @thesohoguy for contributing this)
*/
if (
!empty($pdu_details) &&
property_exists($pdu_details[0], 'model') &&
$pdu_details[0]->model === 'USPPDUP' &&
property_exists($pdu_details[0], 'outlet_overrides')
) {
$device_id = $pdu_details[0]->_id;
$outlet_overrides = $pdu_details[0]->outlet_overrides;
foreach ($outlet_overrides as $key => $value) {
if ($value->index === $outlet_idx) {
$outlet_overrides[$key]->relay_state = $new_relay_state;
$outlet_overrides[$key]->cycle_enabled = $new_cycle_enabled;
}
}
$pdu_update = $unifi_connection->set_device_settings_base($device_id,
['outlet_overrides' => $outlet_overrides]);
/**
* provide feedback in json format
*/
echo 'results:' . PHP_EOL . PHP_EOL;
echo json_encode($pdu_update, JSON_PRETTY_PRINT);
} else {
echo 'not a PDU device?';
}
echo PHP_EOL;

View File

@@ -0,0 +1,131 @@
<?php
/**
* PHP API usage example
*
* contributed by: Art of WiFi
* description: example basic PHP script to create a new PPSK for a WLAN on the UniFi controller
*/
use UniFi_API\Exceptions\CurlExtensionNotLoadedException;
use UniFi_API\Exceptions\CurlGeneralErrorException;
use UniFi_API\Exceptions\CurlTimeoutException;
use UniFi_API\Exceptions\InvalidBaseUrlException;
use UniFi_API\Exceptions\InvalidSiteNameException;
use UniFi_API\Exceptions\JsonDecodeException;
use UniFi_API\Exceptions\LoginFailedException;
use UniFi_API\Exceptions\LoginRequiredException;
require 'vendor/autoload.php';
/**
* Record start time.
*/
$start_time = microtime(true);
/**
* Include the config file (place your credentials etc. there if not already present),
* see the config.template.php file for an example.
*
* @var array $controller_user
* @var array $controller_password
* @var array $controller_url
* @var array $controller_version
* @var array $debug
*/
require_once 'config.php';
/**
* The id of the site to use.
*/
$site_id = 'default';
/**
* The new PPSK details.
*/
$new_ppsk_password = 'mysecretppsk'; // the password for the new PPSK, this password must be unique for the SSID
$new_ppsk_network_id = 'zzzzzzzzzzzzzzzzzzzzz'; // id for the required VLAN, taken from the output of list_networkconf()
$new_ppsk_wlan_id = 'xxxxxxxxxxxxxxxxxxxxx'; // id for the required WLAN, taken from the output of list_wlanconf()
try {
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client(
$controller_user,
$controller_password,
$controller_url,
$site_id,
$controller_version
);
$request_start_time = microtime(true);
$set_debug_mode = $unifi_connection->set_debug($debug);
$login_results = $unifi_connection->login();
$wlan_conf = $unifi_connection->list_wlanconf();
/**
* Get the details for the WLAN the PPSK will be created for.
*/
$wlan_details = [];
foreach ($wlan_conf as $wlan) {
if ($wlan->_id === $new_ppsk_wlan_id) {
$wlan_details = $wlan;
break;
}
}
if (empty($wlan_details)) {
echo 'WLAN not found, exiting... Please check the $new_ppsk_wlan_id value 🤨' . PHP_EOL;
exit;
}
/**
* Create the new PPSK, then append it to the existing PPSKs array.
*/
$new_ppsk = [
'password' => $new_ppsk_password,
'networkconf_id' => $new_ppsk_network_id,
];
$wlan_details->private_preshared_keys[] = $new_ppsk;
$unifi_connection->set_wlansettings_base($new_ppsk_wlan_id, $wlan_details);
$request_end_time = microtime(true);
/**
* Record end time.
*/
$end_time = microtime(true);
/**
* Calculate and display the execution time.
*/
$execution_time = $end_time - $start_time;
echo 'The PPSK has been created successfully!👍' . PHP_EOL;
echo 'Full execution time: ' . $execution_time . ' seconds' . PHP_EOL;
echo 'Time to fetch, process and push data back: ' . ($request_end_time - $request_start_time) . ' seconds' . PHP_EOL;
} catch (CurlExtensionNotLoadedException $e) {
echo 'CurlExtensionNotLoadedException: ' . $e->getMessage(). PHP_EOL;
} catch (InvalidBaseUrlException $e) {
echo 'InvalidBaseUrlException: ' . $e->getMessage(). PHP_EOL;
} catch (InvalidSiteNameException $e) {
echo 'InvalidSiteNameException: ' . $e->getMessage(). PHP_EOL;
} catch (JsonDecodeException $e) {
echo 'JsonDecodeException: ' . $e->getMessage(). PHP_EOL;
} catch (LoginRequiredException $e) {
echo 'LoginRequiredException: ' . $e->getMessage(). PHP_EOL;
} catch (CurlGeneralErrorException $e) {
echo 'CurlGeneralErrorException: ' . $e->getMessage(). PHP_EOL;
} catch (CurlTimeoutException $e) {
echo 'CurlTimeoutException: ' . $e->getMessage(). PHP_EOL;
} catch (LoginFailedException $e) {
echo 'LoginFailedException: ' . $e->getMessage(). PHP_EOL;
} catch (Exception $e) {
echo 'General Exception: ' . $e->getMessage(). PHP_EOL;
}

View File

@@ -0,0 +1,108 @@
<?php
/**
* PHP API usage example
*
* contributed by: Art of WiFi
* description: example basic PHP script to list all PPSKs for all WLANs in a specific UniFi site
*/
use UniFi_API\Exceptions\CurlExtensionNotLoadedException;
use UniFi_API\Exceptions\CurlGeneralErrorException;
use UniFi_API\Exceptions\CurlTimeoutException;
use UniFi_API\Exceptions\InvalidBaseUrlException;
use UniFi_API\Exceptions\InvalidSiteNameException;
use UniFi_API\Exceptions\JsonDecodeException;
use UniFi_API\Exceptions\LoginFailedException;
use UniFi_API\Exceptions\LoginRequiredException;
require 'vendor/autoload.php';
/**
* Record start time.
*/
$start_time = microtime(true);
/**
* Include the config file (place your credentials etc. there if not already present),
* see the config.template.php file for an example.
*
* @var array $controller_user
* @var array $controller_password
* @var array $controller_url
* @var array $controller_version
* @var array $debug
*/
require_once 'config.php';
/**
* The id of the site to use.
*/
$site_id = 'default';
try {
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client(
$controller_user,
$controller_password,
$controller_url,
$site_id,
$controller_version
);
$request_start_time = microtime(true);
$set_debug_mode = $unifi_connection->set_debug($debug);
$login_results = $unifi_connection->login();
$wlan_conf = $unifi_connection->list_wlanconf();
/**
* Get the details for the WLAN the PPSK will be created for.
*/
$wlan_details = [];
foreach ($wlan_conf as $wlan) {
/**
* Skip this SSID if private_pre_shared_keys is not set or empty.
*/
if (empty($wlan->private_preshared_keys)) {
continue;
}
echo json_encode($wlan->private_preshared_keys, JSON_PRETTY_PRINT) . PHP_EOL;
}
$request_end_time = microtime(true);
/**
* Record end time.
*/
$end_time = microtime(true);
/**
* Calculate and display the execution time.
*/
$execution_time = $end_time - $start_time;
echo 'Full execution time: ' . $execution_time . ' seconds' . PHP_EOL;
echo 'Time to fetch, process and push data back: ' . ($request_end_time - $request_start_time) . ' seconds' . PHP_EOL;
} catch (CurlExtensionNotLoadedException $e) {
echo 'CurlExtensionNotLoadedException: ' . $e->getMessage(). PHP_EOL;
} catch (InvalidBaseUrlException $e) {
echo 'InvalidBaseUrlException: ' . $e->getMessage(). PHP_EOL;
} catch (InvalidSiteNameException $e) {
echo 'InvalidSiteNameException: ' . $e->getMessage(). PHP_EOL;
} catch (JsonDecodeException $e) {
echo 'JsonDecodeException: ' . $e->getMessage(). PHP_EOL;
} catch (LoginRequiredException $e) {
echo 'LoginRequiredException: ' . $e->getMessage(). PHP_EOL;
} catch (CurlGeneralErrorException $e) {
echo 'CurlGeneralErrorException: ' . $e->getMessage(). PHP_EOL;
} catch (CurlTimeoutException $e) {
echo 'CurlTimeoutException: ' . $e->getMessage(). PHP_EOL;
} catch (LoginFailedException $e) {
echo 'LoginFailedException: ' . $e->getMessage(). PHP_EOL;
} catch (Exception $e) {
echo 'General Exception: ' . $e->getMessage(). PHP_EOL;
}

View File

@@ -0,0 +1,141 @@
<?php
/**
* PHP API usage example
*
* contributed by: Art of WiFi
* description: example basic PHP script to remove a PPSK from a specific UniFi site
*/
use UniFi_API\Exceptions\CurlExtensionNotLoadedException;
use UniFi_API\Exceptions\CurlGeneralErrorException;
use UniFi_API\Exceptions\CurlTimeoutException;
use UniFi_API\Exceptions\InvalidBaseUrlException;
use UniFi_API\Exceptions\InvalidSiteNameException;
use UniFi_API\Exceptions\JsonDecodeException;
use UniFi_API\Exceptions\LoginFailedException;
use UniFi_API\Exceptions\LoginRequiredException;
require 'vendor/autoload.php';
/**
* Record start time.
*/
$start_time = microtime(true);
$total_removals = 0;
/**
* Include the config file (place your credentials etc. there if not already present),
* see the config.template.php file for an example.
*
* @var array $controller_user
* @var array $controller_password
* @var array $controller_url
* @var array $controller_version
* @var array $debug
*/
require_once 'config.php';
/**
* The id of the site to use.
*/
$site_id = 'default';
/**
* The password value of the PPSK to remove.
*/
$ppsk_to_remove = 'mysecretppsk';
try {
/**
* Initialize the UniFi API connection class and log in to the controller and do our thing.
*/
$unifi_connection = new UniFi_API\Client(
$controller_user,
$controller_password,
$controller_url,
$site_id,
$controller_version
);
$request_start_time = microtime(true);
$set_debug_mode = $unifi_connection->set_debug($debug);
$login_results = $unifi_connection->login();
$wlan_conf = $unifi_connection->list_wlanconf();
foreach ($wlan_conf as $wlan) {
/**
* Skip this SSID if the private_pre_shared_keys array is not set or empty.
*/
if (empty($wlan->private_preshared_keys)) {
continue;
}
$removals = 0;
foreach ($wlan->private_preshared_keys as $ppsk) {
if ($ppsk->password === $ppsk_to_remove) {
echo 'Removing PPSK with password: "' . $ppsk_to_remove . '"' . PHP_EOL;
/**
* Remove the PPSK from the private_preshared_keys array.
*/
$wlan->private_preshared_keys = array_values(array_filter($wlan->private_preshared_keys, function ($value) use ($ppsk_to_remove) {
return $value->password !== $ppsk_to_remove;
}));
$removals++;
}
}
/**
* Push the updated WLAN configuration back to the controller if we removed one or more PPSKs.
*/
if ($removals > 0) {
echo 'Pushing updated WLAN configuration back to the controller...' . PHP_EOL;
$unifi_connection->set_wlansettings_base($wlan->_id, $wlan);
$total_removals += $removals;
}
}
$request_end_time = microtime(true);
/**
* Record end time.
*/
$end_time = microtime(true);
/**
* Calculate the execution time.
*/
$execution_time = $end_time - $start_time;
if ($total_removals === 0) {
echo 'No PPSKs were removed, exiting...' . PHP_EOL;
exit;
}
echo 'Total PPSKs removed: ' . $total_removals . PHP_EOL;
echo 'Full execution time: ' . $execution_time . ' seconds' . PHP_EOL;
echo 'Time to fetch, process and push data back: ' . ($request_end_time - $request_start_time) . ' seconds' . PHP_EOL;
} catch (CurlExtensionNotLoadedException $e) {
echo 'CurlExtensionNotLoadedException: ' . $e->getMessage(). PHP_EOL;
} catch (InvalidBaseUrlException $e) {
echo 'InvalidBaseUrlException: ' . $e->getMessage(). PHP_EOL;
} catch (InvalidSiteNameException $e) {
echo 'InvalidSiteNameException: ' . $e->getMessage(). PHP_EOL;
} catch (JsonDecodeException $e) {
echo 'JsonDecodeException: ' . $e->getMessage(). PHP_EOL;
} catch (LoginRequiredException $e) {
echo 'LoginRequiredException: ' . $e->getMessage(). PHP_EOL;
} catch (CurlGeneralErrorException $e) {
echo 'CurlGeneralErrorException: ' . $e->getMessage(). PHP_EOL;
} catch (CurlTimeoutException $e) {
echo 'CurlTimeoutException: ' . $e->getMessage(). PHP_EOL;
} catch (LoginFailedException $e) {
echo 'LoginFailedException: ' . $e->getMessage(). PHP_EOL;
} catch (Exception $e) {
echo 'General Exception: ' . $e->getMessage(). PHP_EOL;
}

View File

@@ -30,9 +30,16 @@ $site_id = '<enter your site id here>';
/**
* initialize the UniFi API connection class and log in to the controller
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
/**
* then we force the device to reconnect

153
examples/set_vlan_to_port.php Executable file
View File

@@ -0,0 +1,153 @@
<?php
/**
* PHP API usage example
*
* contributed by: Samuel Schnelly
* description: example basic PHP script to change VLAN on port
*/
/**
* using the composer autoloader
*/
require_once 'vendor/autoload.php';
/**
* include the config file (place your credentials etc. there if not already present)
* see the config.template.php file for an example
*/
require_once 'config.php';
/**
* the site to use
*/
$site_id = '<enter your site id here>';
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
/**
* change VLAN on port
*/
$port = 1;
$vlan = 200;
/**
* MAC Address of the UniFi device
*/
$mac = '<enter your device mac address here>';
set_port_vlan($mac, $port, $vlan, $unifi_connection);
/**
* Set specific VLAN on device port
*
* @param string $device_mac MAC Address of UNIFI device
* @param int $port_idx Port number of UNIFI device, note: started by 1
* @param int $vlan_id VLAN ID to set
* @param UniFi_API\Client $unifi_connection
*
* @return bool true if result is success, false upon failure
*/
function set_port_vlan($device_mac, $port_idx, $vlan_id, $unifi_connection)
{
$device = $unifi_connection->list_devices($device_mac);
// if no device found
if (count($device) == 0) {
trigger_error('set_port_vlan() device not found');
return false;
}
$port_table = $device[0]->port_table;
$def_port = null;
// check if port exists
$exist = false;
foreach ($port_table as $key => $port) {
if ($port->port_idx == $port_idx) {
$exist = true;
$def_port = $port;
break;
}
}
if (!$exist) {
trigger_error('set_port_vlan() port_idx not found on device');
return false;
}
// check if vlan exists
$native_networkconf_id = null;
foreach ($unifi_connection->list_networkconf() as $key => $network) {
if ($network->purpose == 'vlan-only' && $network->vlan == $vlan_id) {
$native_networkconf_id = $network->_id;
}
}
if ($native_networkconf_id === null) {
trigger_error('set_port_vlan() vlan not exist');
return false;
}
$exist = false;
foreach ($device[0]->port_overrides as $key => $port) {
if ($port->port_idx == $port_idx) {
$exist = true;
$device[0]->port_overrides[$key]->native_networkconf_id = $native_networkconf_id;
break;
}
}
if (!$exist) {
$device[0]->port_overrides[] = [
'port_idx' => isset($port_idx) ? $port_idx : 1,
'setting_preference' => isset($setting_preference) ? $setting_preference : 'auto',
'name' => isset($def_port->name) ? $def_port->name : 'Port 1',
'op_mode' => isset($def_port->op_mode) ? $def_port->op_mode : 'switch',
'port_security_enabled' => isset($def_port->port_security_enabled) ? $def_port->port_security_enabled : false,
'port_security_mac_address' => isset($def_port->port_security_mac_address) ? $def_port->port_security_mac_address : [],
'native_networkconf_id' => isset($native_networkconf_id) ? $native_networkconf_id : '',
'excluded_networkconf_ids' => isset($def_port->excluded_networkconf_ids) ? $def_port->excluded_networkconf_ids : [],
'show_traffic_restriction_as_allowlist' => isset($def_port->show_traffic_restriction_as_allowlist) ? $def_port->show_traffic_restriction_as_allowlist : false,
'forward' => isset($def_port->forward) ? $def_port->forward : 'customize',
'lldpmed_enabled' => isset($def_port->lldpmed_enabled) ? $def_port->lldpmed_enabled : true,
'voice_networkconf_id' => isset($def_port->voice_networkconf_id) ? $def_port->voice_networkconf_id : '',
'stormctrl_bcast_enabled' => isset($def_port->stormctrl_bcast_enabled) ? $def_port->stormctrl_bcast_enabled : false,
'stormctrl_bcast_rate' => isset($def_port->stormctrl_bcast_rate) ? $def_port->stormctrl_bcast_rate : 100,
'stormctrl_mcast_enabled' => isset($def_port->stormctrl_mcast_enabled) ? $def_port->stormctrl_mcast_enabled : false,
'stormctrl_mcast_rate' => isset($def_port->stormctrl_mcast_rate) ? $def_port->stormctrl_mcast_rate : 100,
'stormctrl_ucast_enabled' => isset($def_port->stormctrl_ucast_enabled) ? $def_port->stormctrl_ucast_enabled : false,
'stormctrl_ucast_rate' => isset($def_port->stormctrl_ucast_rate) ? $def_port->stormctrl_ucast_rate : 100,
'egress_rate_limit_kbps_enabled' => isset($def_port->egress_rate_limit_kbps_enabled) ? $def_port->egress_rate_limit_kbps_enabled : false,
'autoneg' => isset($def_port->autoneg) ? $def_port->autoneg : true,
'isolation' => isset($def_port->isolation) ? $def_port->isolation : false,
'stp_port_mode' => isset($def_port->stp_port_mode) ? $def_port->stp_port_mode : true,
'port_keepalive_enabled' => isset($def_port->port_keepalive_enabled) ? $def_port->port_keepalive_enabled : false
];
}
$payload = [
'port_overrides' => $device[0]->port_overrides
];
$result = $unifi_connection->set_device_settings_base($device[0]->device_id, $payload);
if ($result) {
return true;
}
return false;
}

View File

@@ -0,0 +1,69 @@
<?php
/**
* PHP API usage example
*
* contributed by: Art of WiFi
* description: example to toggle the site-wide auto upgrade setting on a UniFi controller
*/
/**
* using the composer autoloader
*/
require_once('vendor/autoload.php');
/**
* include the config file (place your credentials etc. there if not already present)
* see the config.template.php file for an example
*
* @var string $controlleruser the user name for access to the UniFi Controller
* @var string $controllerpassword the password for access to the UniFi Controller
* @var string $controllerurl full url to the UniFi Controller, eg. 'https://
* @var string $controllerversion the version of the Controller software, eg. '4.6.6' (must be at least 4.0.0)
* @var bool $debug set to true (without quotes) to enable debug output to the browser and the PHP error log
*/
require_once('config.php');
/**
* site id for the site where settings are to be updated
*/
$site_id = 'zzzzz';
/**
* initialize the UniFi API connection class and log in to the controller to do our thing
*/
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$login_results = $unifi_connection->login();
if ($login_results) {
/**
* we get the current site mgmt settings
*/
$current_site_settings = $unifi_connection->list_settings();
$mgmt_settings = [];
foreach ($current_site_settings as $section) {
if ($section->key == 'mgmt') {
$mgmt_settings = $section;
}
}
/**
* toggle the auto upgrade setting and set the auto upgrade hour to 3
*/
$mgmt_settings->auto_upgrade = !$mgmt_settings->auto_upgrade;
$mgmt_settings->auto_upgrade_hour = 3;
$mgmt_id = $mgmt_settings->_id;
$set_result = $unifi_connection->set_site_mgmt($mgmt_id, $mgmt_settings);
echo 'done' . PHP_EOL;
exit();
}
echo 'login failed' . PHP_EOL;

View File

@@ -31,9 +31,16 @@ $mac = '<enter MAC address of your AP here>';
/**
* initialize the UniFi API connection class and log in to the controller to do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion); // initialize the class instance
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login();
/**
* using the new method/function

View File

@@ -43,9 +43,16 @@ if ($site_id == "MUST_DEFINE_THIS") {
/**
* initialize the UniFi API connection class and log in to the controller
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login(); // always true regardless of site id
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug($debug);
$loginresults = $unifi_connection->login(); // always true regardless of site id
foreach ($macs_to_unblock as &$mac) {
// block_result is always true even if mac address does not exist :(

View File

@@ -47,11 +47,11 @@ $port_conf_id_port_2 = '<_id of port configuration to apply to port #2>';
$new_ports_config = [
'port_overrides' => [
[
'port_idx' => 1,
'port_idx' => 1,
'portconf_id' => $port_conf_id_port_1
],
[
'port_idx' => 2,
'port_idx' => 2,
'portconf_id' => $port_conf_id_port_2
]
]
@@ -60,12 +60,19 @@ $new_ports_config = [
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion, false);
$set_debug_mode = $unifi_connection->set_debug(false);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->list_devices($device_mac);
$device_id = $data[0]->device_id;
$update_device = $unifi_connection->set_device_settings_base($device_id, $new_ports_config);
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug(false);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->list_devices($device_mac);
$device_id = $data[0]->device_id;
$update_device = $unifi_connection->set_device_settings_base($device_id, $new_ports_config);
if (!$update_device) {
$error = $unifi_connection->get_last_results_raw();

View File

@@ -51,22 +51,29 @@ $na_channel = 44;
/**
* initialize the UniFi API connection class and log in to the controller and do our thing
*/
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion, false);
$set_debug_mode = $unifi_connection->set_debug(false);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->list_devices($ap_mac);
$radio_table = $data[0]->radio_table;
$device_id = $data[0]->device_id;
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug(false);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->list_devices($ap_mac);
$radio_table = $data[0]->radio_table;
$device_id = $data[0]->device_id;
foreach ($radio_table as $radio) {
if ($radio->radio === 'ng') {
$radio->tx_power_mode = $ng_tx_power_mode;
$radio->channel = $ng_channel;
$radio->channel = $ng_channel;
}
if ($radio->radio === 'na') {
$radio->tx_power_mode = $na_tx_power_mode;
$radio->channel = $na_channel;
$radio->channel = $na_channel;
}
}

View File

@@ -8,6 +8,9 @@
* usage: If the file is called via a web URL, it should be called like: update_switch_poe-mode.php?poe_mode=off
* If the file is called via the command line, it should be called like: php update_switch_poe-mode.php off
* The values can be "off" or "auto"
*
* IMPORTANT INFORMATION:
* This example no longer works with controller versions 7.1.X and higher. You now need to work with port profiles to enable POE on a switch port.
*/
/**
@@ -39,20 +42,21 @@ $lanports = [6];
/**
* This is the function that reads out the current port configuration and changes the value for the poe_mode for the ports defined in $lanports
*/
function update_ports($running_config, $ports, $poe_mode){
function update_ports($running_config, $ports, $poe_mode)
{
/**
* Update already non-default ports
*/
$running_config_count = count($running_config);
for($i = 0; $i < $running_config_count; $i++){
if(in_array($running_config[$i]->port_idx, $ports)){
for ($i = 0; $i < $running_config_count; $i++) {
if (in_array($running_config[$i]->port_idx, $ports)) {
$running_config[$i]->poe_mode = $poe_mode;
unset($ports[array_search($running_config[$i]->port_idx, $ports)]);
}
}
$add_conf = [];
foreach($ports as $port){
foreach ($ports as $port) {
$add_conf[] = [
'port_idx' => $port,
'poe_mode' => $poe_mode
@@ -62,12 +66,19 @@ function update_ports($running_config, $ports, $poe_mode){
return array_merge($running_config, $add_conf);
}
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion, false);
$set_debug_mode = $unifi_connection->set_debug(false);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->list_devices($device_mac);
$device_id = $data[0]->device_id;
$current_conf = $data[0]->port_overrides;
$unifi_connection = new UniFi_API\Client(
$controlleruser,
$controllerpassword,
$controllerurl,
$site_id,
$controllerversion
);
$set_debug_mode = $unifi_connection->set_debug(false);
$loginresults = $unifi_connection->login();
$data = $unifi_connection->list_devices($device_mac);
$device_id = $data[0]->device_id;
$current_conf = $data[0]->port_overrides;
/**
* This reads in the values provided via URL or in the command line, if nothing is set than it will poe_mode will be set to "auto"
@@ -91,4 +102,4 @@ if (!$update_device) {
echo json_encode($error, JSON_PRETTY_PRINT);
}
echo json_encode($update_device, JSON_PRETTY_PRINT);
echo json_encode($update_device, JSON_PRETTY_PRINT);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class CurlExtensionNotLoadedException extends Exception
{
public function __construct()
{
parent::__construct('The PHP curl extension is not loaded. Please correct this before proceeding!');
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class CurlGeneralErrorException extends Exception
{
/** @var mixed $_http_response_code */
private $_http_response_code;
/** @var mixed $_curl_getinfo_results */
private $_curl_getinfo_results;
public function __construct(string $message, $http_response_code, $_curl_getinfo_results)
{
$this->_http_response_code = $http_response_code;
$this->_curl_getinfo_results = $_curl_getinfo_results;
parent::__construct($message);
}
/**
* Get the HTTP response code.
*
* @return mixed
*/
public function getHttpResponseCode()
{
return $this->_http_response_code;
}
/**
* Get the cURL curl_getinfo results.
*
* @return mixed
*/
public function getCurlGetinfoResults()
{
return $this->_curl_getinfo_results;
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class CurlTimeoutException extends Exception
{
/** @var mixed $_http_response_code */
private $_http_response_code;
/** @var mixed $_curl_getinfo_results */
private $_curl_getinfo_results;
public function __construct(string $message, $http_response_code, $curl_getinfo_results)
{
$this->_http_response_code = $http_response_code;
$this->_curl_getinfo_results = $curl_getinfo_results;
parent::__construct($message);
}
/**
* Get the HTTP response code.
*
* @return mixed
*/
public function getHttpResponseCode()
{
return $this->_http_response_code;
}
/**
* Get the cURL curl_getinfo results.
*
* @return mixed
*/
public function getCurlGetinfoResults()
{
return $this->_curl_getinfo_results;
}
}

View File

@@ -0,0 +1,13 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class EmailInvalidException extends Exception
{
public function __construct()
{
parent::__construct('Invalid email address provided.');
}
}

View File

@@ -0,0 +1,13 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class InvalidBaseUrlException extends Exception
{
public function __construct()
{
parent::__construct('The base URL provided is invalid.');
}
}

View File

@@ -0,0 +1,13 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class InvalidCurlMethodException extends Exception
{
public function __construct()
{
parent::__construct('Invalid cURL method provided.');
}
}

View File

@@ -0,0 +1,13 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class InvalidSiteNameException extends Exception
{
public function __construct()
{
parent::__construct('Invalid site name provided.');
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class JsonDecodeException extends Exception
{
//
}

View File

@@ -0,0 +1,10 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class LoginFailedException extends Exception
{
//
}

View File

@@ -0,0 +1,13 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class LoginRequiredException extends Exception
{
public function __construct()
{
parent::__construct('This method requires the API client to be logged in first.');
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class MethodDeprecatedException extends Exception
{
//
}

View File

@@ -0,0 +1,13 @@
<?php
namespace UniFi_API\Exceptions;
use Exception;
class NotAUnifiOsConsoleException extends Exception
{
public function __construct()
{
parent::__construct('This is not a UniFi OS console.');
}
}