Compare commits
92 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d26cba1f66 | ||
|
|
69b43df148 | ||
|
|
2b34890a67 | ||
|
|
0d99d4a776 | ||
|
|
89ce2fd8dd | ||
|
|
c77913fded | ||
|
|
329ad595c9 | ||
|
|
badb615627 | ||
|
|
49d0986bd7 | ||
|
|
0ebbb4efac | ||
|
|
903d3e47d5 | ||
|
|
e72dea7357 | ||
|
|
17d895076f | ||
|
|
961d692125 | ||
|
|
796ad9a82d | ||
|
|
a3fc0732e2 | ||
|
|
ca25c8ab52 | ||
|
|
6754eb5041 | ||
|
|
2ac791a353 | ||
|
|
3fd8e69b4a | ||
|
|
c7d1eee3e3 | ||
|
|
17bfe0087c | ||
|
|
b3521d8c1d | ||
|
|
727cd6dc9c | ||
|
|
09db47affd | ||
|
|
55867197e3 | ||
|
|
78bed0895d | ||
|
|
77cc1d87a4 | ||
|
|
5389f3a486 | ||
|
|
2a566ad18a | ||
|
|
1714e9587c | ||
|
|
cd92192cb8 | ||
|
|
7c6cd4eb85 | ||
|
|
30f4230cfd | ||
|
|
88263f6863 | ||
|
|
1017d1461e | ||
|
|
2c035878ed | ||
|
|
de407e6ac0 | ||
|
|
006702db0c | ||
|
|
6f1b75b89a | ||
|
|
287c67c39e | ||
|
|
871ab82608 | ||
|
|
4dddd08d8b | ||
|
|
ccea0eee99 | ||
|
|
a238ced589 | ||
|
|
bf9a6e801c | ||
|
|
d7827fdbf1 | ||
|
|
2c45d95965 | ||
|
|
ad21ebaad8 | ||
|
|
4532df8eac | ||
|
|
93d78b2f22 | ||
|
|
546334c88e | ||
|
|
9f5aaa9838 | ||
|
|
757cf68698 | ||
|
|
774fced2da | ||
|
|
14f4d58b02 | ||
|
|
77972aab55 | ||
|
|
9629cc909d | ||
|
|
f6201ec21c | ||
|
|
dcf7d2059c | ||
|
|
7a5e2b5bbb | ||
|
|
1db9040ea8 | ||
|
|
cab0c1a35d | ||
|
|
2b5ed31759 | ||
|
|
a13ff36409 | ||
|
|
c4bc1243eb | ||
|
|
c25f4d1937 | ||
|
|
e3e70cce72 | ||
|
|
449baa70a3 | ||
|
|
2dc5136eba | ||
|
|
e1f3cd6e73 | ||
|
|
141b0ff55f | ||
|
|
e6ffb2e5de | ||
|
|
746a29fbcf | ||
|
|
6fd7e6e598 | ||
|
|
4611dbb28c | ||
|
|
cc486f652d | ||
|
|
008280e870 | ||
|
|
971c77ab5f | ||
|
|
03cb083986 | ||
|
|
8df2fcc522 | ||
|
|
eba7819c17 | ||
|
|
462d8a81a1 | ||
|
|
0373c8369f | ||
|
|
cf41e75269 | ||
|
|
e235267a8a | ||
|
|
9896f6d85f | ||
|
|
4f84cfc550 | ||
|
|
efa6704c97 | ||
|
|
5c893c1237 | ||
|
|
ab38e6f7ad | ||
|
|
0ac6653ec0 |
9
.gitignore
vendored
9
.gitignore
vendored
@@ -1,2 +1,9 @@
|
||||
# Ignore personal config file
|
||||
examples/config.php
|
||||
/examples/config.php
|
||||
|
||||
# ignore accidentally generated vendor directory and composer.lock file, just in case...
|
||||
/vendor/
|
||||
/composer.lock
|
||||
|
||||
# ignore XML files
|
||||
*.xml
|
||||
307
README.md
307
README.md
@@ -1,51 +1,173 @@
|
||||
## UniFi controller API client class
|
||||
## UniFi Controller API client class
|
||||
|
||||
This PHP class provides access to Ubiquiti's **UniFi Controller API**. Versions 4.x.x and 5.x.x of the UniFi Controller software (version 5.5.20 has been confirmed to work) are supported.
|
||||
A PHP class that provides access to Ubiquiti's [**UniFi Network Controller**](https://unifi-network.ui.com/) API, versions 4.X.X and 5.X.X of the UniFi Network Controller software are supported (version 5.12.72 has been confirmed to work) as well as UbiOS-based controllers (version 5.12.59 has been confirmed to work). This class is used by our API browser tool which can be found [here](https://github.com/Art-of-WiFi/UniFi-API-browser).
|
||||
|
||||
### Donations
|
||||
If you'd like to support further development of this PHP API client class, please use the PayPal donate button below. All donations go to the project maintainer.
|
||||
The package can be installed manually or using composer/[packagist](https://packagist.org/packages/art-of-wifi/unifi-api-client) for easy inclusion in your projects.
|
||||
|
||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=M7TVNVX3Z44VN)
|
||||
## Requirements
|
||||
|
||||
### Methods and functions supported
|
||||
- a server with PHP, version 5.5.0 or higher, and the PHP cURL module installed (tested on Apache 2.4 with PHP Version 5.6.1 and cURL 7.42.1 and with PHP 7.2.24 and cURL 7.58.0)
|
||||
- direct network connectivity between this server and the host and port (normally TCP port 8443) where the UniFi Controller is running
|
||||
- you must use **local accounts**, not UniFi Cloud accounts, to access the UniFi Controller API through this class
|
||||
|
||||
|
||||
## UbiOS Support
|
||||
|
||||
Support for UbiOS-based controllers (UniFi Dream Machine Pro) has been added as of version 1.1.47. The class automatically detects UbiOS devices and adjusts URLs and several functions/methods accordingly. If your own code applies strict validation of the URL that is passed to the constructor, please adapt your logic to allow URLs without a port suffix when dealing with a UbiOS-based controller.
|
||||
|
||||
Please test all methods you plan on using thoroughly before using the API Client with UbiOS devices in a production environment.
|
||||
|
||||
## Installation
|
||||
|
||||
You can 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 do not already have composer installed.
|
||||
|
||||
Once composer is installed, simply execute this command from the shell in your project directory:
|
||||
|
||||
```sh
|
||||
composer require art-of-wifi/unifi-api-client
|
||||
```
|
||||
|
||||
Or you can manually add the package to your composer.json file:
|
||||
|
||||
```javascript
|
||||
{
|
||||
"require": {
|
||||
"art-of-wifi/unifi-api-client": "^1.1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Finally, be sure to include the autoloader in your code:
|
||||
|
||||
```php
|
||||
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, you can simply [download the package](https://github.com/Art-of-WiFi/UniFi-API-client/archive/master.zip), uncompress 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:
|
||||
|
||||
```php
|
||||
/**
|
||||
* load the class using the composer autoloader
|
||||
*/
|
||||
require_once('vendor/autoload.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 used)
|
||||
*/
|
||||
$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
|
||||
```
|
||||
|
||||
Please refer to the `examples/` directory for some more detailed examples which you can use 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:
|
||||
|
||||
`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 last 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 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.
|
||||
|
||||
## 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 the functions/methods and their respective parameters.
|
||||
|
||||
This class currently supports the following functions/methods to get/set data through the UniFi controller API:
|
||||
- login()
|
||||
- logout()
|
||||
- add_site()
|
||||
- adopt_device()
|
||||
- archive_alarm()
|
||||
- assign_existing_admin()
|
||||
- authorize_guest()
|
||||
- unauthorize_guest()
|
||||
- block_sta()
|
||||
- unblock_sta()
|
||||
- cancel_rolling_upgrade()
|
||||
- cmd_stat()
|
||||
- count_alarms()
|
||||
- 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_device()
|
||||
- delete_firewallgroup()
|
||||
- delete_network()
|
||||
- delete_radius_account()
|
||||
- delete_site()
|
||||
- delete_usergroup()
|
||||
- delete_wlan()
|
||||
- disable_ap()
|
||||
- edit_client_fixedip()
|
||||
- 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()
|
||||
- count_alarms()
|
||||
- upgrade_device()
|
||||
- upgrade_device_external()
|
||||
- spectrum_scan()
|
||||
- spectrum_scan_state()
|
||||
- list_devices()
|
||||
- list_all_admins()
|
||||
- list_aps() (deprecated but still available as alias)
|
||||
- list_backups()
|
||||
- list_clients()
|
||||
- list_country_codes()
|
||||
- list_current_channels()
|
||||
- list_dashboard()
|
||||
- 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()
|
||||
@@ -54,107 +176,122 @@ This class currently supports the following functions/methods to get/set data th
|
||||
- list_users()
|
||||
- list_wlan_groups()
|
||||
- list_wlanconf()
|
||||
- list_current_channels()
|
||||
- list_dpi_stats()
|
||||
- locate_ap()
|
||||
- move_device()
|
||||
- power_cycle_switch_port()
|
||||
- reboot_cloudkey()
|
||||
- reconnect_sta()
|
||||
- rename_ap()
|
||||
- restart_ap()
|
||||
- restart_ap() (deprecated but still available as alias)
|
||||
- restart_device()
|
||||
- revoke_admin()
|
||||
- revoke_voucher()
|
||||
- extend_guest_validity()
|
||||
- set_ap_radiosettings()
|
||||
- set_device_settings_base()
|
||||
- set_dynamicdns()
|
||||
- set_element_adoption() (supported on controller version 5.13.X and higher)
|
||||
- set_guestlogin_settings()
|
||||
- locate_ap()
|
||||
- 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)
|
||||
- unset_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()
|
||||
- edit_usergroup()
|
||||
- add_usergroup()
|
||||
- delete_usergroup()
|
||||
- edit_usergroup()
|
||||
- add_usergroup()
|
||||
- delete_usergroup()
|
||||
- set_wlan_mac_filter()
|
||||
- set_wlansettings()
|
||||
- create_wlan()
|
||||
- delete_wlan()
|
||||
- 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_site()
|
||||
- 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_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_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()
|
||||
|
||||
Internal functions, getters/setters:
|
||||
- set_debug()
|
||||
- set_site()
|
||||
- get_site()
|
||||
- get_cookie() (renamed from getcookie())
|
||||
- get_last_results_raw()
|
||||
Other functions, getters/setters:
|
||||
|
||||
- get_class_version()
|
||||
- get_connection_timeout()
|
||||
- get_cookie() (renamed from getcookie(), deprecated but still available, use get_cookies() instead)
|
||||
- get_cookies()
|
||||
- get_debug()
|
||||
- get_is_unifi_os()
|
||||
- get_last_error_message()
|
||||
- get_last_results_raw()
|
||||
- get_request_type()
|
||||
- get_site()
|
||||
- get_ssl_verify_host()
|
||||
- get_ssl_verify_peer()
|
||||
- set_connection_timeout()
|
||||
- set_cookies()
|
||||
- set_debug()
|
||||
- set_is_unifi_os()
|
||||
- set_request_type()
|
||||
- set_site()
|
||||
- set_ssl_verify_host()
|
||||
- set_ssl_verify_peer()
|
||||
|
||||
Please refer to the source code for more details on each function/method and it's parameters.
|
||||
|
||||
### Credits
|
||||
This class is largely based on the work done by the following developers:
|
||||
## 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 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.
|
||||
|
||||
## Credits
|
||||
|
||||
This class is based on the initial work by the following developers:
|
||||
|
||||
- domwo: http://community.ubnt.com/t5/UniFi-Wireless/little-php-class-for-unifi-api/m-p/603051
|
||||
- fbagnol: https://github.com/fbagnol/class.unifi.php
|
||||
- and the API as published by Ubiquiti: https://www.ubnt.com/downloads/unifi/5.5.20/unifi_sh_api
|
||||
|
||||
### Requirements
|
||||
- a web server with PHP and cURL modules installed (tested on apache2 with PHP Version 5.6.1 and cURL 7.42.1)
|
||||
- network connectivity between this web server and the server and port (normally port 8443) where the UniFi controller is running
|
||||
and the API as published by Ubiquiti:
|
||||
|
||||
### Install
|
||||
Simply execute this command from your project directory:
|
||||
|
||||
```
|
||||
$ composer require art-of-wifi/unifi-api-client
|
||||
```
|
||||
|
||||
### Example usage
|
||||
A basic example how to use the class:
|
||||
|
||||
```php
|
||||
|
||||
...
|
||||
/**
|
||||
* load the class using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.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 used)
|
||||
*/
|
||||
$unifi_connection = new UniFi_API\Client($controller_user, $controller_password, $controller_url, $site_id, $controller_version);
|
||||
$login = $unifi_connection->login();
|
||||
$results = $unifi_connection->list_alarms(); // returns the alarms in a PHP array
|
||||
...
|
||||
|
||||
```
|
||||
|
||||
Please refer to the `examples` directory for some more detailed examples which you can use as a starting point for your own PHP code.
|
||||
|
||||
>**NOTE:**
|
||||
>
|
||||
>$site_id is the 8 character short site "name" which is visible in the URL when managing the site in the UniFi controller:
|
||||
>
|
||||
>```
|
||||
>https://<controller IP address or FQDN>:8443/manage/site/jl3z2shm/dashboard
|
||||
>```
|
||||
>
|
||||
>Here `jl3z2shm` is the value required for $site_id.
|
||||
- https://dl.ui.com/unifi/5.12.35/unifi_sh_api
|
||||
|
||||
## Important Disclaimer
|
||||
Many of these functions are not officially supported by UBNT and as such, may not be supported in future versions of the UniFi controller API.
|
||||
|
||||
Many of the functions in this API client class are not officially supported by UBNT and as such, may not be supported in future versions of the UniFi Controller API.
|
||||
|
||||
@@ -1,27 +1,28 @@
|
||||
{
|
||||
"name": "art-of-wifi/unifi-api-client",
|
||||
"type": "library",
|
||||
"description": "API client class for use with Ubiquiti's UniFi controller",
|
||||
"name": "art-of-wifi/unifi-api-client",
|
||||
"type": "library",
|
||||
"description": "API client class for use with Ubiquiti's UniFi controller",
|
||||
"keywords": [
|
||||
"ubnt",
|
||||
"ubiquiti",
|
||||
"unifi",
|
||||
"controller",
|
||||
"api",
|
||||
"client"
|
||||
],
|
||||
"homepage": "https://github.com/Art-of-WiFi/UniFi-API-client",
|
||||
"license": "MIT",
|
||||
"ubnt",
|
||||
"ubiquiti",
|
||||
"unifi",
|
||||
"controller",
|
||||
"api",
|
||||
"client"
|
||||
],
|
||||
"homepage": "https://github.com/Art-of-WiFi/UniFi-API-client",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Art of WiFi",
|
||||
"email": "info@artofowifi.net",
|
||||
"name": "Art of WiFi",
|
||||
"email": "info@artofowifi.net",
|
||||
"homepage": "http://artofwifi.net"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.4.0",
|
||||
"ext-curl": "*"
|
||||
"php": ">=5.5.0",
|
||||
"ext-curl": "*",
|
||||
"ext-json": "*"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
## API client class usage examples
|
||||
|
||||
This directory contains some PHP code examples which demonstrate usage of the PHP API client class and can be used as a good starting point for your own custom code.
|
||||
|
||||
### Usage
|
||||
@@ -6,10 +7,23 @@ This directory contains some PHP code examples which demonstrate usage of the PH
|
||||
Copy the appropriate example file to your working directory together with a copy of the config.template.php file which should be renamed to config.php.
|
||||
Then update the contents of your new config.php with your controller details and credentials and modify the example file as required to fit your needs.
|
||||
|
||||
Also make sure to update the path for the composer autoloader file (`vendor/autoload.php`) or the file containing the Class itself (`src/Client.php`) in your `require_once()` statement as required.
|
||||
|
||||
#### Executing scripts from the CLI
|
||||
|
||||
Most of the included example scripts can be run from the CLI or shell as follows after the necessary credentials and parameters have been added or updated:
|
||||
|
||||
|
||||
```sh
|
||||
$ php list_site_health.php
|
||||
```
|
||||
|
||||
NOTE: this does require the `php-cli` module to be installed
|
||||
|
||||
### Contribute
|
||||
|
||||
If you would like to share your own example file(s), please open an issue and include your code there or else create a pull request.
|
||||
|
||||
## Important Disclaimer
|
||||
|
||||
Use these examples at your own risk!
|
||||
Use these examples at your own risk!
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.php";
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* include the config file (place your credentials etc. there if not already present)
|
||||
@@ -19,6 +19,7 @@ require_once('config.php');
|
||||
|
||||
/**
|
||||
* site id and MAC address of AP to query
|
||||
* https://github.com/Art-of-WiFi/UniFi-API-client#important-notes
|
||||
*/
|
||||
$site_id = '<enter your site id here>';
|
||||
$ap_mac = '<enter MAC address of Access Point to check>';
|
||||
|
||||
38
examples/ap_upgrade_firmware.php
Executable file
38
examples/ap_upgrade_firmware.php
Executable file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: @4oo4
|
||||
* description: example script to upgrade device firmware (can be scheduled with systemd/cron)
|
||||
* to the most current version
|
||||
*/
|
||||
require_once('vendor/autoload.php');
|
||||
require_once('config.php');
|
||||
|
||||
/**
|
||||
* site id of the AP to update
|
||||
* https://github.com/Art-of-WiFi/UniFi-API-client#important-notes
|
||||
*/
|
||||
$site_id = '<enter your site id here>';
|
||||
|
||||
/**
|
||||
* device MAC address formatted with colons, e.g. 'de:ad:be:ef:01:23'
|
||||
*/
|
||||
$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();
|
||||
|
||||
/**
|
||||
* Run the actual upgrade
|
||||
*/
|
||||
$results = $unifi_connection->upgrade_device($device_mac);
|
||||
|
||||
/**
|
||||
* provide feedback in json format from $response given by upgrade_device();
|
||||
*/
|
||||
echo json_encode($results, JSON_PRETTY_PRINT);
|
||||
@@ -3,13 +3,13 @@
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to perform a basic auth of a guest device
|
||||
* description: example PHP script to perform a basic auth of a guest device
|
||||
*/
|
||||
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.php";
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* include the config file (place your credentials etc. there if not already present)
|
||||
@@ -22,6 +22,16 @@ require_once('config.php');
|
||||
*/
|
||||
$mac = '<enter MAC address of guest device to auth>';
|
||||
|
||||
/**
|
||||
* the MAC address of the Access Point the guest is currently connected to, enter null (without quotes)
|
||||
* if not known or unavailable
|
||||
*
|
||||
* NOTE:
|
||||
* although the AP MAC address is not a required parameter for the authorize_guest() function,
|
||||
* adding this parameter will speed up the initial authorization process
|
||||
*/
|
||||
$ap_mac = '<enter MAC address of Access Point>';
|
||||
|
||||
/**
|
||||
* the duration to authorize the device for in minutes
|
||||
*/
|
||||
@@ -42,7 +52,7 @@ $loginresults = $unifi_connection->login();
|
||||
/**
|
||||
* then we authorize the device for the requested duration
|
||||
*/
|
||||
$auth_result = $unifi_connection->authorize_guest($mac, $duration);
|
||||
$auth_result = $unifi_connection->authorize_guest($mac, $duration, null, null, null, $ap_mac);
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
|
||||
@@ -3,13 +3,15 @@
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to auth a guest device and attach a note to it
|
||||
* description: example basic PHP script to auth a guest device and attach a note to it,
|
||||
* this requires the device to be connected to the WLAN/LAN at moment of
|
||||
* authorization
|
||||
*/
|
||||
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.php";
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* include the config file (place your credentials etc. there if not already present)
|
||||
|
||||
84
examples/block_list.php
Executable file
84
examples/block_list.php
Executable file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: @malcolmcif, based on another Art of WiFi example
|
||||
* description: basic PHP script to block a list of mac addresses passed in via command line,
|
||||
* output is to console in non json format
|
||||
*
|
||||
* usage:
|
||||
* php block_list.php <list of comma seperated mac addresses>
|
||||
*
|
||||
* example:
|
||||
* php block_list.php 09:09:09:09:09:09,10:10:10:10:10:10
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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');
|
||||
$debug = false;
|
||||
|
||||
/**
|
||||
* the MAC address(es) of the device(s) to block
|
||||
*/
|
||||
$macs_to_block = explode(',', $argv[1]);
|
||||
|
||||
/**
|
||||
* The site to authorize the device with
|
||||
*/
|
||||
$site_id = 'MUST_DEFINE_THIS';
|
||||
if ($site_id == "MUST_DEFINE_THIS") {
|
||||
print 'ERROR: set the site id in your script';
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
||||
foreach ($macs_to_block as $mac) {
|
||||
// block_result is always true even if mac address does not exist :(
|
||||
$block_result = $unifi_connection->block_sta($mac);
|
||||
|
||||
/**
|
||||
* NOTE:
|
||||
* during testing I had some strange behavior where clients were not reconnecting to the network correctly,
|
||||
* they appeared unblocked and received a valid IP address but could not actually get any data.
|
||||
* the clients did not come to life until I disabled the SSID and then re enabled it.
|
||||
* I guessed maybe these commands were occurring too quickly for the controller so I have slowed them down;
|
||||
* since introducing the sleep I have not seen the above behavior so it might be fixed
|
||||
*/
|
||||
sleep(1);
|
||||
|
||||
$getid_result = $unifi_connection->stat_client($mac);
|
||||
|
||||
if (property_exists($getid_result[0], "oui")) {
|
||||
// this field(manufacturer) seems to exist on valid mac addresses
|
||||
if (property_exists($getid_result[0], "name")) {
|
||||
// this is the alias field if it has been defined
|
||||
$name = $getid_result[0]->name;
|
||||
} else {
|
||||
$name = $getid_result[0]->hostname;
|
||||
}
|
||||
print 'blocked ' . $name . PHP_EOL;
|
||||
} else {
|
||||
print 'ERROR: could not block ' . $mac . PHP_EOL;
|
||||
print ' check mac address is valid and part of your network' . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* No json formatted data
|
||||
*/
|
||||
//echo json_encode($block_result, JSON_PRETTY_PRINT);
|
||||
65
examples/change_super_mgmt.php
Executable file
65
examples/change_super_mgmt.php
Executable file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to modify the super_mgmt settings for UniFi controller and output results
|
||||
* in json format
|
||||
*/
|
||||
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* UniFi controller credentials and the site to use, in this case since we are modifying global settings you can select
|
||||
* any site here that is available on the UniFi controller
|
||||
*
|
||||
* NOTE: in this case you need to enter Super Administrator account credentials in config.php
|
||||
*/
|
||||
require_once('config.php');
|
||||
$site_id = 'default';
|
||||
$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();
|
||||
|
||||
$super_mgmt_settings = [];
|
||||
$super_mgmt_settings_id = '';
|
||||
|
||||
if (!empty($site_settings)) {
|
||||
foreach($site_settings as $section) {
|
||||
echo 'section key: ' . $section->key . PHP_EOL;
|
||||
if ($section->key === 'super_mgmt') {
|
||||
$super_mgmt_settings = $section;
|
||||
$super_mgmt_settings_id = $section->_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* modify the super_mgmt settings, in this example we only modify the Live Chat settings
|
||||
* uncomment the required new value below:
|
||||
*/
|
||||
//$super_mgmt_settings->live_chat = 'disabled';
|
||||
//$super_mgmt_settings->live_chat = 'enabled';
|
||||
$super_mgmt_settings->live_chat = 'super-only';
|
||||
|
||||
/**
|
||||
* we echo the parameters which we will be passing to the UniFi controller API
|
||||
*/
|
||||
echo $super_mgmt_settings_id . PHP_EOL;
|
||||
echo json_encode($super_mgmt_settings, JSON_PRETTY_PRINT) . PHP_EOL . PHP_EOL;
|
||||
|
||||
$update_results = $unifi_connection->set_super_mgmt_settings_base($super_mgmt_settings_id, $super_mgmt_settings);
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($update_results, JSON_PRETTY_PRINT);
|
||||
46
examples/change_wlan_password.php
Executable file
46
examples/change_wlan_password.php
Executable file
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to change the WPA2 password/PSK of a WLAN, returns true on success
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 which the WLAN you want to modify belongs
|
||||
*/
|
||||
$site_id = '<enter your (short) site name here>';
|
||||
|
||||
/**
|
||||
* the id of the WLAN you wish to modify
|
||||
*/
|
||||
$wlan_id = '<the value of _id for the WLAN you wish to change>';
|
||||
|
||||
/**
|
||||
* the new WPA2 password/PSK to apply to the above WLAN
|
||||
*/
|
||||
$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);
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($results, JSON_PRETTY_PRINT);
|
||||
@@ -15,10 +15,11 @@
|
||||
*/
|
||||
$controlleruser = ''; // the user name for access to the UniFi Controller
|
||||
$controllerpassword = ''; // the password for access to the UniFi Controller
|
||||
$controllerurl = ''; // full url to the UniFi Controller, eg. 'https://22.22.11.11:8443'
|
||||
$controllerversion = ''; // the version of the Controller software, eg. '4.6.6' (must be at least 4.0.0)
|
||||
$controllerurl = ''; // full url to the UniFi Controller, eg. 'https://22.22.11.11:8443', for UniFi OS-based
|
||||
// controllers a port suffix isn't required, no trailing slashes should be added
|
||||
$controllerversion = ''; // the version of the Controller software, e.g. '4.6.6' (must be at least 4.0.0)
|
||||
|
||||
/**
|
||||
* set to true (without quotes) to enable debug output to the browser and the PHP error log
|
||||
*/
|
||||
$debug = false;
|
||||
$debug = false;
|
||||
|
||||
40
examples/create_site.php
Executable file
40
examples/create_site.php
Executable file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to create a new site, returns true upon success
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 to log in to the controller
|
||||
*/
|
||||
$site_id = '<short site name of a site the credentials used have access to>';
|
||||
|
||||
/**
|
||||
* description of the new site
|
||||
*/
|
||||
$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);
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($results, JSON_PRETTY_PRINT);
|
||||
@@ -3,13 +3,13 @@
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to create a set of vouchers
|
||||
* description: example basic PHP script to create a set of vouchers, returns an array containing the newly created vouchers
|
||||
*/
|
||||
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.php";
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* include the config file (place your credentials etc. there if not already present)
|
||||
@@ -18,9 +18,9 @@ require "vendor/autoload.php";
|
||||
require_once('config.php');
|
||||
|
||||
/**
|
||||
* the voucher duration in minutes
|
||||
* minutes the voucher is valid after activation (expiration time)
|
||||
*/
|
||||
$voucher_duration = 2000;
|
||||
$voucher_expiration = 2000;
|
||||
|
||||
/**
|
||||
* the number of vouchers to create
|
||||
@@ -40,11 +40,16 @@ $set_debug_mode = $unifi_connection->set_debug($debug);
|
||||
$loginresults = $unifi_connection->login();
|
||||
|
||||
/**
|
||||
* then we create the required number of vouchers for the requested duration
|
||||
* then we create the required number of vouchers with the requested expiration value
|
||||
*/
|
||||
$voucher_result = $unifi_connection->create_voucher($voucher_duration, $voucher_count);
|
||||
$voucher_result = $unifi_connection->create_voucher($voucher_expiration, $voucher_count);
|
||||
|
||||
/**
|
||||
* provide feedback (the newly created voucher code, without the dash) in json format
|
||||
* we then fetch the newly created vouchers by the create_time returned
|
||||
*/
|
||||
echo json_encode($voucher_result, JSON_PRETTY_PRINT);
|
||||
$vouchers = $unifi_connection->stat_voucher($voucher_result[0]->create_time);
|
||||
|
||||
/**
|
||||
* provide feedback (the newly created vouchers) in json format
|
||||
*/
|
||||
echo json_encode($vouchers, JSON_PRETTY_PRINT);
|
||||
|
||||
41
examples/delete_site.php
Executable file
41
examples/delete_site.php
Executable file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to delete a site, returns true upon success
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 to log in to the controller
|
||||
*/
|
||||
$site_id = '<short site name of a site the credentials used have access to>';
|
||||
|
||||
|
||||
/**
|
||||
* the site to delete, must not be the same site as referenced by $site_id
|
||||
*/
|
||||
$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);
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($results, JSON_PRETTY_PRINT);
|
||||
50
examples/disable_device.php
Executable file
50
examples/disable_device.php
Executable file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to disable/enable a device, returns true upon success
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 24 character id of the device to disable/enable
|
||||
*/
|
||||
$device_id = '<enter the id of your device here>';
|
||||
|
||||
/**
|
||||
* the site to which the device belongs
|
||||
*/
|
||||
$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();
|
||||
|
||||
/**
|
||||
* then we disable the device
|
||||
*/
|
||||
$disable_result = $unifi_connection->disable_ap($device_id, true);
|
||||
|
||||
/**
|
||||
* or we enable the device, uncomment as neccesary (then also comment the previous call)
|
||||
*/
|
||||
//$disable_result = $unifi_connection->disable_ap($device_id, false);
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($disable_result, JSON_PRETTY_PRINT);
|
||||
78
examples/disable_switch_port.php
Executable file
78
examples/disable_switch_port.php
Executable file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example PHP script to disable/enable the port of a UniFi switch
|
||||
* note: Requires controller version 5.5.X or higher. This example assumes an override alreay exists for the desired port.
|
||||
* To create a new port override simply append one (similar in structure to $updated_override) as needed to the
|
||||
* $existing_overrides array
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 to log in to the controller
|
||||
*/
|
||||
$site_id = '<enter your site id here>';
|
||||
|
||||
/**
|
||||
* the MAC address of the UniFi switch to re-configure
|
||||
*/
|
||||
$device_mac = '<enter MAC address>';
|
||||
|
||||
/**
|
||||
* index of port to modify/add
|
||||
*/
|
||||
$port_idx = 24;
|
||||
|
||||
/**
|
||||
* port configuration id to apply when enabling/disabling the port
|
||||
*
|
||||
* NOTE:
|
||||
* port configurations are available through list_portconf()
|
||||
*/
|
||||
$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);
|
||||
$set_debug_mode = $unifi_connection->set_debug($debug);
|
||||
$loginresults = $unifi_connection->login();
|
||||
$data = $unifi_connection->list_devices($device_mac);
|
||||
$device_id = $data[0]->device_id;
|
||||
$existing_overrides = $data[0]->port_overrides;
|
||||
|
||||
foreach ($existing_overrides as $key => $value) {
|
||||
if (!empty($value->port_idx) && $value->port_idx === $port_idx) {
|
||||
$updated_override = [
|
||||
'portconf_id' => $port_conf_id,
|
||||
'port_idx' => $port_idx,
|
||||
'poe_mode' => $value->poe_mode,
|
||||
'name' => 'Your-port-name',
|
||||
];
|
||||
|
||||
$existing_overrides[$key] = $updated_override;
|
||||
}
|
||||
}
|
||||
|
||||
$payload = [
|
||||
'port_overrides' => $existing_overrides
|
||||
];
|
||||
|
||||
$update_device = $unifi_connection->set_device_settings_base($device_id, $payload);
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($update_device, JSON_PRETTY_PRINT);
|
||||
47
examples/execute_custom_api_request.php
Executable file
47
examples/execute_custom_api_request.php
Executable file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to execute a custom API request using the
|
||||
* custom_api_request() function/method
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 authorize the device with
|
||||
* https://github.com/Art-of-WiFi/UniFi-API-client#important-notes
|
||||
*/
|
||||
$site_id = '<enter your site id here>';
|
||||
|
||||
/**
|
||||
* parameters
|
||||
*/
|
||||
$url = '/api/s/' . $site_id . '/stat/fwupdate/latest-version';
|
||||
$request_type = 'GET';
|
||||
$payload = null;
|
||||
$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_type, $payload, $return);
|
||||
|
||||
/**
|
||||
* provide feedback in JSON format or as PHP Object
|
||||
*/
|
||||
echo json_encode($results, JSON_PRETTY_PRINT);
|
||||
//print_r($results);
|
||||
@@ -9,7 +9,7 @@
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.php";
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* include the config file (place your credentials etc. there if not already present)
|
||||
@@ -17,7 +17,9 @@ require "vendor/autoload.php";
|
||||
*/
|
||||
require_once('config.php');
|
||||
|
||||
// must be adapted to your site!
|
||||
/**
|
||||
* must be adapted to your site!
|
||||
*/
|
||||
$site_id = "default";
|
||||
$site_name = "*enter your site name*";
|
||||
|
||||
@@ -26,25 +28,44 @@ $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";
|
||||
print "UniFi controller login failure, please check your credentials in config.php.\n";
|
||||
} else {
|
||||
$guestlist = $unifi_connection->list_guests();
|
||||
// print "<pre>"; print_r ($guestlist); print "</pre>";
|
||||
// loop thru all known guests
|
||||
foreach ($guestlist as $guest) {
|
||||
// print "<pre>"; print_r ($guest); print "</pre>";
|
||||
print "<pre>" . $guest->_id . " (" . $guest->mac . "), valid until " . date (DATE_ATOM, $guest->end) . " (" . $guest->end . ")</pre>";
|
||||
$guestlist = $unifi_connection->list_guests();
|
||||
|
||||
// just a sample: only extend validity of guests which have end date after 2017-04-02
|
||||
if ($guest->end > 1491166482) {
|
||||
// extend clients five times = five days
|
||||
if (!$unifi_connection->extend_guest_validity ($guest->_id)) print "Extend failed for guest with id " . $guest->_id . "\n";
|
||||
if (!$unifi_connection->extend_guest_validity ($guest->_id)) print "Extend failed for guest with id " . $guest->_id . "\n";
|
||||
if (!$unifi_connection->extend_guest_validity ($guest->_id)) print "Extend failed for guest with id " . $guest->_id . "\n";
|
||||
if (!$unifi_connection->extend_guest_validity ($guest->_id)) print "Extend failed for guest with id " . $guest->_id . "\n";
|
||||
if (!$unifi_connection->extend_guest_validity ($guest->_id)) print "Extend failed for guest with id " . $guest->_id . "\n";
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 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>";
|
||||
|
||||
$logout_results = $unifi_connection->logout();
|
||||
/**
|
||||
* just a sample: only extend validity of guests which have end date after 2017-04-02
|
||||
*/
|
||||
if ($guest->end > 1491166482) {
|
||||
/**
|
||||
* extend clients five times = five days
|
||||
*/
|
||||
if (!$unifi_connection->extend_guest_validity($guest->_id)) {
|
||||
print "Extend failed for guest with id " . $guest->_id . "\n";
|
||||
}
|
||||
|
||||
if (!$unifi_connection->extend_guest_validity($guest->_id)) {
|
||||
print "Extend failed for guest with id " . $guest->_id . "\n";
|
||||
}
|
||||
|
||||
if (!$unifi_connection->extend_guest_validity($guest->_id)) {
|
||||
print "Extend failed for guest with id " . $guest->_id . "\n";
|
||||
}
|
||||
|
||||
if (!$unifi_connection->extend_guest_validity($guest->_id)) {
|
||||
print "Extend failed for guest with id " . $guest->_id . "\n";
|
||||
}
|
||||
|
||||
if (!$unifi_connection->extend_guest_validity($guest->_id)) {
|
||||
print "Extend failed for guest with id " . $guest->_id . "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$logout_results = $unifi_connection->logout();
|
||||
}
|
||||
@@ -9,7 +9,7 @@
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.php";
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* include the config file (place your credentials etc. there if not already present)
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example to pull connected user numbers for Access Points from the Unifi controller and output the results
|
||||
* description: example to pull connected user numbers for Access Points from the UniFi controller and output the results
|
||||
* in raw HTML format
|
||||
*/
|
||||
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.php";
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* include the config file (place your credentials etc there if not already present)
|
||||
@@ -36,7 +36,7 @@ $aps_array = $unifi_connection->list_aps();
|
||||
*/
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
foreach ($aps_array as $ap) {
|
||||
if ($ap->type === 'uap') {
|
||||
echo '<b>AP name:</b>' . $ap->name . ' <b>model:</b>' . $ap->model . ' <b># connected clients:</b>' . $ap->num_sta . '<br>';
|
||||
}
|
||||
if ($ap->type === 'uap') {
|
||||
echo '<b>AP name:</b>' . $ap->name . ' <b>model:</b>' . $ap->model . ' <b># connected clients:</b>' . $ap->num_sta . '<br>';
|
||||
}
|
||||
}
|
||||
37
examples/list_connected_users.php
Executable file
37
examples/list_connected_users.php
Executable file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: @gahujipo
|
||||
* description: example to pull connected users and their details from the UniFi controller and output the results
|
||||
* in JSON format
|
||||
*/
|
||||
/**
|
||||
* 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 short name of the site which you wish to query
|
||||
*/
|
||||
$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();
|
||||
|
||||
/**
|
||||
* output the results in JSON format
|
||||
*/
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode($clients_array);
|
||||
@@ -3,14 +3,14 @@
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example to pull site health metrics from the Unifi controller and output the results
|
||||
* description: example to pull site health metrics from the UniFi controller and output the results
|
||||
* in json format
|
||||
*/
|
||||
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.php";
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* include the config file (place your credentials etc. there if not already present)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.php";
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* include the config file (place your credentials etc. there if not already present)
|
||||
|
||||
51
examples/list_user_stats.php
Executable file
51
examples/list_user_stats.php
Executable file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to pull stats for s epcific user/client device from the UniFi controller and output in json format
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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>';
|
||||
|
||||
/**
|
||||
* MAC address of client to fetch stats for
|
||||
*/
|
||||
$mac = '<MAC address>';
|
||||
|
||||
/**
|
||||
* array of attributes to collect
|
||||
* valid attributes:
|
||||
* rx_bytes, tx_bytes, signal, rx_rate, tx_rate, rx_retries, tx_retries, rx_packets, tx_packets
|
||||
*/
|
||||
//$attribs = ['rx_bytes', 'tx_bytes', 'signal', 'rx_rate', 'tx_rate', 'rx_retries', 'tx_retries', 'rx_packets', 'tx_packets'];
|
||||
$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();
|
||||
//$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);
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($data, JSON_PRETTY_PRINT);
|
||||
84
examples/modify_smartpower_pdu_outlet.php
Executable file
84
examples/modify_smartpower_pdu_outlet.php
Executable file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to toggle power of an outlet on the UniFi SmartPower PDU Pro,
|
||||
* last tested with UniFi controller version 6.1.19
|
||||
*/
|
||||
require '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 = 'default';
|
||||
|
||||
/**
|
||||
* MAC of UniFi SmartPower PDU Pro to work with
|
||||
*/
|
||||
$pdu_mac = '<MAC ADDRESS of PDU>';
|
||||
|
||||
/**
|
||||
* index value of the outlet to modify
|
||||
*/
|
||||
$outlet_idx = 20;
|
||||
|
||||
/**
|
||||
* new values for relay_state (enable/disable Power) and cycle_enabled (disable/enable Modem Power Cycle) for the above outlet,
|
||||
* values must be boolean (true/false)
|
||||
*
|
||||
* NOTES:
|
||||
* - here you can choose to also change the name of the outlet
|
||||
* - outlet overrides are structured like this:
|
||||
* {
|
||||
* "index": 1,
|
||||
* "name": "USB Outlet 1",
|
||||
* "cycle_enabled": false,
|
||||
* "relay_state": true
|
||||
* }
|
||||
*/
|
||||
$new_relay_state = true;
|
||||
$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);
|
||||
|
||||
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 {
|
||||
echo 'we encountered a login error!';
|
||||
echo PHP_EOL;
|
||||
}
|
||||
45
examples/reconnect_client.php
Executable file
45
examples/reconnect_client.php
Executable file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to force a client device to reconnect
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 MAC address to reconnect
|
||||
*/
|
||||
$mac_to_reconnect = '<MAC address>';
|
||||
|
||||
/**
|
||||
* site where the above MAC address is connected
|
||||
*/
|
||||
$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();
|
||||
|
||||
/**
|
||||
* then we force the device to reconnect
|
||||
*/
|
||||
$reconnect_result = $unifi_connection->reconnect_sta($mac_to_reconnect);
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($reconnect_result, JSON_PRETTY_PRINT);
|
||||
10
examples/site_provisioning_example/README.md
Executable file
10
examples/site_provisioning_example/README.md
Executable file
@@ -0,0 +1,10 @@
|
||||
## Site provisioning script
|
||||
|
||||
Contributed by @smos
|
||||
|
||||
This directory contains an example provisioning script to create a large number of sites with comparable network configurations. It sets the LAN config to site specific configuration. Copy the settings.template.php and config.template.php to their respective files for testing.
|
||||
This is meant as a basic provisioning only system. Currently used against controller 5.6.30.
|
||||
|
||||
## Important Disclaimer
|
||||
|
||||
Use all examples at your own risk!
|
||||
24
examples/site_provisioning_example/config.template.php
Executable file
24
examples/site_provisioning_example/config.template.php
Executable file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (c) 2017, Art of WiFi
|
||||
*
|
||||
* This file is subject to the MIT license that is bundled
|
||||
* with this package in the file LICENSE.md
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Controller configuration
|
||||
* ===============================
|
||||
* Copy this file to your working directory, rename it to config.php and update the section below with your UniFi
|
||||
* controller details and credentials
|
||||
*/
|
||||
$controlleruser = ''; // the user name for access to the UniFi Controller
|
||||
$controllerpassword = ''; // the password for access to the UniFi Controller
|
||||
$controllerurl = ''; // full url to the UniFi Controller, eg. 'https://22.22.11.11:8443'
|
||||
$controllerversion = ''; // the version of the Controller software, eg. '4.6.6' (must be at least 4.0.0)
|
||||
|
||||
/**
|
||||
* set to true (without quotes) to enable debug output to the browser and the PHP error log
|
||||
*/
|
||||
$debug = false;
|
||||
396
examples/site_provisioning_example/provision.php
Executable file
396
examples/site_provisioning_example/provision.php
Executable file
@@ -0,0 +1,396 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: @smos
|
||||
* description: example provisioning script to create a large number of sites with comparable network configurations
|
||||
*/
|
||||
|
||||
/* include important files */
|
||||
require_once('UniFi-API-client/src/Client.php');
|
||||
|
||||
/* Set the default timezone */
|
||||
date_default_timezone_set('Europe/Amsterdam');
|
||||
|
||||
// Example array with site information, includes numeric reference
|
||||
$fil_array = array();
|
||||
$fil_array[600]['aktief'] = 1; // Active
|
||||
$fil_array[600]['kassa_aantal'] = 1; // Cash registers
|
||||
$fil_array[600]['divisie_code'] = "D"; // Brand
|
||||
$fil_array[600]['corr_woonplaats'] = "Amsterdam"; // City
|
||||
|
||||
|
||||
echo "<pre>";
|
||||
// Import the controller auth config
|
||||
include("config.php");
|
||||
|
||||
/**
|
||||
* set to true (without quotes) to enable debug output to the browser and the PHP error log
|
||||
*/
|
||||
$debug = true;
|
||||
|
||||
$site_id = "default";
|
||||
|
||||
/**
|
||||
* 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 used)
|
||||
*/
|
||||
$unifi_connection = new UniFi_API\Client($controller_user, $controller_password, $controller_url, $site_id, $controller_version, false);
|
||||
$login = $unifi_connection->login();
|
||||
|
||||
if($login > 400) {
|
||||
echo "Failed to log into controller";
|
||||
die;
|
||||
}
|
||||
// $sites = $unifi_connection->list_sites(); // returns a PHP array containing sites
|
||||
|
||||
$open_shops = array();
|
||||
// Mogrify shop info into useable arrays
|
||||
foreach($fil_array as $filnr => $shop) {
|
||||
if(floatval($shop['aktief']) == 0)
|
||||
continue;
|
||||
if($shop['divisie_code'] != "D")
|
||||
continue;
|
||||
|
||||
if((floatval($shop['kassa_aantal']) > 0))
|
||||
$open_shops[$filnr] = ucfirst(strtolower($shop['corr_woonplaats']));
|
||||
}
|
||||
|
||||
// If debug, create Fake open shops array, otherwise unset test shops
|
||||
if($debug === true) {
|
||||
$open_shops = array();
|
||||
$open_shops[943] = "Test 1";
|
||||
$open_shops[965] = "Test 2";
|
||||
} else {
|
||||
unset($open_shops[943]);
|
||||
unset($open_shops[965]);
|
||||
unset($close_shops[943]);
|
||||
unset($close_shops[965]);
|
||||
}
|
||||
|
||||
// Check if we can find all our shop sites, otherwise add to todo list for creation, close list for deletion
|
||||
$todo_shops = $open_shops;
|
||||
$active_shops = array();
|
||||
$close_shops = array();
|
||||
foreach($unifi_connection->list_sites() as $site){
|
||||
$desc = $site->desc;
|
||||
// Does it look like a shop?
|
||||
if(preg_match("/([0-9][0-9][0-9]+)/", $desc, $matches)) {
|
||||
// echo "Found site {$desc}\n";
|
||||
unset($todo_shops[floatval($matches[1])]);
|
||||
$active_shops[floatval($matches[1])] = $site->name;
|
||||
|
||||
if(!$open_shops[floatval($matches[1])]) {
|
||||
// echo "Shop {$matches[1]} does not have hardware\n";
|
||||
$close_shops[floatval($matches[1])] = $site->name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Any sites we need to create before we can continue?
|
||||
foreach($todo_shops as $filnr => $city){
|
||||
$filnr = sprintf("%04d", $filnr);
|
||||
$desc = "{$filnr} {$city}";
|
||||
echo "Create site for {$filnr}\n";
|
||||
$createsite = $unifi_connection->create_site($desc);
|
||||
if($createsite === false) {
|
||||
echo "Failed to create site for {$filnr}, id {$siteid}\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Refresh site list
|
||||
if(count($todo_shops > 0)) {
|
||||
foreach($unifi_connection->list_sites() as $site){
|
||||
$desc = $site->desc;
|
||||
// Does it look like a shop?
|
||||
if(preg_match("/([0-9][0-9][0-9]+)/", $desc, $matches)) {
|
||||
// echo "Found site {$desc}\n";
|
||||
unset($todo_shops[floatval($matches[1])]);
|
||||
$active_shops[floatval($matches[1])] = $site->name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If debug, create Fake site entries array, otherwise unset test shops
|
||||
if($debug === true) {
|
||||
$close_shops = array();
|
||||
$active_shops = array();
|
||||
$active_shops[965] = "j103b83q";
|
||||
$active_shops[943] = "winkels";
|
||||
} else {
|
||||
unset($active_shops[943]);
|
||||
unset($active_shops[965]);
|
||||
unset($close_shops[943]);
|
||||
unset($close_shops[965]);
|
||||
}
|
||||
// We should have 0 todo shops now
|
||||
// print_r($todo_shops);
|
||||
|
||||
/*
|
||||
echo "Open\n";
|
||||
print_r($open_shops);
|
||||
echo "Active\n";
|
||||
print_r($active_shops);
|
||||
echo "Close\n";
|
||||
print_r($close_shops);
|
||||
die();
|
||||
*/
|
||||
|
||||
// Foreach shop, select the site.
|
||||
foreach($active_shops as $filnr => $siteid) {
|
||||
$filnr = sprintf("%04d", $filnr);
|
||||
$select = $unifi_connection->set_site($siteid);
|
||||
|
||||
// fetch configured group settings, we need those later, we only use the Default group.
|
||||
$wlangroups = $unifi_connection->list_wlan_groups($siteid);
|
||||
$usergroups = $unifi_connection->list_usergroups($siteid);
|
||||
|
||||
if(isset($close_shops[floatval($filnr)])) {
|
||||
echo "Delete site {$siteid} with id ". $usergroups[0]->site_id ." for shop {$filnr}\n";
|
||||
if($debug===false) {
|
||||
$delete = $unifi_connection->delete_site($usergroups[0]->site_id);
|
||||
}
|
||||
if($delete === false) {
|
||||
echo "Failed to delete site for {$filnr}, id {$siteid}\n";
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// fetch configured group settings, we need those later, we only use the Default group.
|
||||
$wlangroups = $unifi_connection->list_wlan_groups($siteid);
|
||||
$usergroups = $unifi_connection->list_usergroups($siteid);
|
||||
if($debug===true) {
|
||||
//var_export ($wlangroups);
|
||||
//var_export ($usergroups);
|
||||
}
|
||||
foreach($wlangroups as $group){
|
||||
// Check if template networks exist
|
||||
if($group->name == "Default") {
|
||||
$shawlangroup_id = $group->_id;
|
||||
}
|
||||
}
|
||||
foreach($usergroups as $group){
|
||||
// Check if template networks exist
|
||||
if($group->name == "Default") {
|
||||
$shausergroup_id = $group->_id;
|
||||
}
|
||||
}
|
||||
|
||||
// Include each time so site specific settings based on shop number are picked up
|
||||
unset($wirednetworks);
|
||||
unset($wlannetworks);
|
||||
unset($siteconf);
|
||||
include("settings.php");
|
||||
|
||||
refresh_networks();
|
||||
refresh_wlans();
|
||||
fetch_site_conf();
|
||||
|
||||
if($debug===true) {
|
||||
// var_export ($siteconf);
|
||||
//var_export ($wlanconf);
|
||||
// var_export ($networkconf);
|
||||
//print_r($wlannetworks);
|
||||
}
|
||||
|
||||
|
||||
foreach($sitesettings as $key => $values) {
|
||||
if(compare_array_item($sitesettings[$key], $setting[$key])) {
|
||||
echo "Update site setting {$key} id {$setting_id[$key]} for {$filnr}, id {$siteid}\n";
|
||||
switch($key){
|
||||
case "country":
|
||||
$update_site[$key] = $unifi_connection->set_site_country($setting_id[$key], $sitesettings[$key]);
|
||||
break;
|
||||
case "locale":
|
||||
$update_site[$key] = $unifi_connection->set_site_locale($setting_id[$key], $sitesettings[$key]);
|
||||
break;
|
||||
case "connectivity ":
|
||||
$update_site[$key] = $unifi_connection->set_site_connectivity($setting_id[$key], $sitesettings[$key]);
|
||||
break;
|
||||
case "mgmt":
|
||||
$update_site[$key] = $unifi_connection->set_site_mgmt($setting_id[$key], $sitesettings[$key]);
|
||||
break;
|
||||
case "guest_access":
|
||||
$update_site[$key] = $unifi_connection->set_site_guest_access($setting_id[$key], $sitesettings[$key]);
|
||||
break;
|
||||
case "snmp":
|
||||
$update_site[$key] = $unifi_connection->set_site_snmp($setting_id[$key], $sitesettings[$key]);
|
||||
break;
|
||||
case "ntp":
|
||||
$update_site[$key] = $unifi_connection->set_site_ntp($setting_id[$key], $sitesettings[$key]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if($update_site[$key] === false)
|
||||
echo "Failed to update setting {$key} for {$filnr}, id {$siteid} ". print_r($sitesettings[$key], true) ."\n";
|
||||
}
|
||||
|
||||
foreach($wirednetworks as $key => $values) {
|
||||
// Template network didn't exist, create
|
||||
if($wired[$key] === false) {
|
||||
echo "Create new vlan {$key} for {$filnr}, id {$siteid}\n";
|
||||
$addnetwork[$key] = $unifi_connection->create_network($wirednetworks[$key]);
|
||||
// echo json_encode($addvlan, JSON_PRETTY_PRINT);
|
||||
}
|
||||
if($addnetwork[$key] === false)
|
||||
echo "Failed to add network {$key} for {$filnr}, id {$siteid}\n";
|
||||
|
||||
// Do we need to update?
|
||||
if(compare_array_item($wirednetworks[$key], $wired[$key])) {
|
||||
echo "Update network {$key} id {$wired_id[$key]} for {$filnr}, id {$siteid}\n";
|
||||
$updatenetwork[$key] = $unifi_connection->set_networksettings_base($wired_id[$key], $wirednetworks[$key]);
|
||||
}
|
||||
if($updatenetwork[$key] === false)
|
||||
echo "Failed to update network {$key} for {$filnr}, id {$siteid} ". print_r($wirednetworks[$key], true) . print_r($wired_id, true) ."\n";
|
||||
|
||||
}
|
||||
|
||||
foreach($wlannetworks as $key => $values) {
|
||||
// Template network didn't exist, create
|
||||
if($wlan[$key] === false) {
|
||||
echo "Create new disabled wlan {$key} for {$filnr}, id {$siteid}\n";
|
||||
$addwlan[$key] = $unifi_connection->create_wlan($wlannetworks[$key]['name'], $wlannetworks[$key]['x_passphrase'], $wlannetworks[$key]['usergroup_id'], $wlannetworks[$key]['wlangroup_id'], false);
|
||||
}
|
||||
if($addwlan[$key] === false)
|
||||
echo "Failed to add wlan {$key} for {$filnr}, id {$siteid} ". print_r($wlannetworks[$key], true) ."\n";
|
||||
else
|
||||
refresh_wlans();
|
||||
|
||||
// Do we need to update?
|
||||
if(compare_array_item($wlannetworks[$key], $wlan[$key])) {
|
||||
echo "Update wlan {$key} id {$wlan_id[$key]} for {$filnr}, id {$siteid}\n";
|
||||
$updatewlan[$key] = $unifi_connection->set_wlansettings_base($wlan_id[$key], $wlannetworks[$key]);
|
||||
}
|
||||
if($updatewlan[$key] === false)
|
||||
echo "Failed to update wlan {$key} for {$filnr}, id {$siteid} ". print_r($wlannetworks[$key], true) . print_r($wlan_id, true) ."\n";
|
||||
|
||||
}
|
||||
|
||||
// Any devices for adoption?
|
||||
$devices[$filnr] = $unifi_connection->list_devices();
|
||||
foreach($devices[$filnr] as $device) {
|
||||
if($device->adopted == 1)
|
||||
continue;
|
||||
|
||||
// Does this unadopted device belong to this shop network?
|
||||
if(netMatch($wirednetworks['LAN']['ip_subnet'], $device->ip)) {
|
||||
// Adopt device in IP range. adopt_device($mac)
|
||||
echo "Adopting device {$device->mac} with ip {$device->ip} in network {$wirednetworks['LAN']['ip_subnet']} for shop {$filnr}\n";
|
||||
$unifi_connection->adopt_device($device->mac);
|
||||
// print_r($device);
|
||||
}
|
||||
}
|
||||
|
||||
if($debug===true) {
|
||||
//break;
|
||||
}
|
||||
}
|
||||
|
||||
$logout = $unifi_connection->logout();
|
||||
|
||||
function refresh_networks() {
|
||||
global $unifi_connection;
|
||||
global $networkconf;
|
||||
global $wired;
|
||||
global $wired_id;
|
||||
global $shasite_id;
|
||||
global $wirednetworks;
|
||||
|
||||
// Fetch configured wired networks
|
||||
$networkconf = $unifi_connection->list_networkconf();
|
||||
|
||||
foreach($wirednetworks as $key => $values) {
|
||||
$wired[$key] = false;
|
||||
}
|
||||
// Lan netwerken
|
||||
foreach($networkconf as $network){
|
||||
// Check if template networks exist
|
||||
foreach($wirednetworks as $key => $values) {
|
||||
if(($network->name == "$key")) {
|
||||
$wired[$key] = $network;
|
||||
$wired_id[$key] = $network->_id;
|
||||
$shasite_id = $network->site_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function refresh_wlans() {
|
||||
global $unifi_connection;
|
||||
global $wlanconf;
|
||||
global $wlan;
|
||||
global $wlan_id;
|
||||
global $shasite_id;
|
||||
global $wlannetworks;
|
||||
|
||||
// Fetch Wireless networks
|
||||
$wlanconf = $unifi_connection->list_wlanconf();
|
||||
|
||||
foreach($wlannetworks as $key => $values)
|
||||
$wlan[$key] = false;
|
||||
|
||||
foreach($wlanconf as $network){
|
||||
// Check if template networks exist
|
||||
foreach($wlannetworks as $key => $values) {
|
||||
if($network->name == "$key") {
|
||||
$wlan[$key] = $network;
|
||||
$wlan_id[$key] = $network->_id;
|
||||
$shasite_id = $network->site_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fetch_site_conf() {
|
||||
global $unifi_connection;
|
||||
global $siteconf;
|
||||
global $siteid;
|
||||
global $sitesettings;
|
||||
global $setting;
|
||||
global $setting_id;
|
||||
|
||||
// Fetch site settings
|
||||
$siteconf = $unifi_connection->list_settings($siteid);
|
||||
foreach($sitesettings as $key => $values)
|
||||
$sitesetting[$key] = false;
|
||||
|
||||
$setting = array();
|
||||
foreach($siteconf as $arr) {
|
||||
$setting[$arr->key] = $arr;
|
||||
$setting_id[$arr->key] = $arr->_id;
|
||||
}
|
||||
}
|
||||
|
||||
// Return true or false
|
||||
function compare_array_item($setting, $existing) {
|
||||
$existing = (array)$existing;
|
||||
unset($setting['site_id']);
|
||||
unset($setting['_id']);
|
||||
unset($existing['_id']);
|
||||
unset($existing['site_id']);
|
||||
foreach($setting as $key => $value) {
|
||||
if(!is_array($setting[$key])) {
|
||||
if($setting[$key] != $existing[$key]){
|
||||
echo "setting key {$key} value {$value} differs from {$existing[$key]} - ";
|
||||
// print_r($setting);
|
||||
// print_r($existing);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(is_array($setting[$key])) {
|
||||
$diff = array();
|
||||
$diff = array_diff_assoc($setting[$key], $existing[$key]);
|
||||
if(!empty($diff)) {
|
||||
echo "setting subkey {$key} differs diff count ". count($diff)."\n";
|
||||
// print_r($diff);
|
||||
// print_r($setting);
|
||||
// print_r($existing);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
?>
|
||||
197
examples/site_provisioning_example/settings.template.php
Executable file
197
examples/site_provisioning_example/settings.template.php
Executable file
@@ -0,0 +1,197 @@
|
||||
<?php
|
||||
/**
|
||||
* template settings file for site provisioning example script
|
||||
*
|
||||
* contributed by: @smos
|
||||
*/
|
||||
|
||||
// Extract shop IP addressing from numeric shop number, you could use something else, static or using a database lookup.
|
||||
$octet1 = 10;
|
||||
if(strlen($filnr) == 3) {
|
||||
$octet2 = floatval(substr($filnr,0,1));
|
||||
$octet3 = floatval(substr($filnr,1,2));
|
||||
} else {
|
||||
$octet2 = floatval(substr($filnr,0,2));
|
||||
$octet3 = floatval(substr($filnr,2,2));
|
||||
}
|
||||
|
||||
// Wired networks
|
||||
$wirednetworks['LAN'] = array(
|
||||
'dhcpd_enabled' => true,
|
||||
'dhcpd_start' => "{$octet1}.{$octet2}.{$octet3}.100",
|
||||
'dhcpd_stop' => "{$octet1}.{$octet2}.{$octet3}.150",
|
||||
'domain_name' => 'foo.bar.nl',
|
||||
'dhcpd_dns_1' => '10.56.154.13',
|
||||
'dhcpd_dns_2' => '10.34.234.66',
|
||||
'dhcpd_ip_1' => "{$octet1}.{$octet2}.{$octet3}.254",
|
||||
'dhcpguard_enabled' => true,
|
||||
'ip_subnet' => "{$octet1}.{$octet2}.{$octet3}.254/24",
|
||||
'is_nat' => true,
|
||||
'name' => 'LAN',
|
||||
'networkgroup' => 'LAN',
|
||||
'purpose' => 'corporate',
|
||||
'site_id' => $shasite_id,
|
||||
'vlan_enabled' => false,
|
||||
);
|
||||
$wirednetworks['shop-wifi'] = array(
|
||||
'enabled' => true,
|
||||
'is_nat' => true,
|
||||
'dhcpd_ip_1' => '192.168.2.254',
|
||||
'dhcpguard_enabled' => true,
|
||||
'name' => 'shop-wifi',
|
||||
'purpose' => 'vlan-only',
|
||||
'site_id' => $shasite_id,
|
||||
'vlan_enabled' => true,
|
||||
'vlan' => 10,
|
||||
);
|
||||
// Wireless networks
|
||||
$wlannetworks["UBNT-{$filnr}"] = array(
|
||||
'enabled' => true,
|
||||
'is_guest' => true,
|
||||
'mac_filter_enabled' => false,
|
||||
'mac_filter_list' => array (),
|
||||
'mac_filter_policy' => 'allow',
|
||||
'name' => "UBNT-{$filnr}",
|
||||
'usergroup_id' => $shausergroup_id,
|
||||
'wlangroup_id' => $shawlangroup_id,
|
||||
'schedule' =>
|
||||
array (
|
||||
0 => 'mon|0800-1800',
|
||||
1 => 'tue|0800-1800',
|
||||
2 => 'wed|0800-1800',
|
||||
3 => 'thu|0800-1800',
|
||||
4 => 'fri|0800-1800',
|
||||
5 => 'sat|0800-1800',
|
||||
6 => 'sun|0800-1800',
|
||||
),
|
||||
'schedule_enabled' => true,
|
||||
'security' => 'wpapsk',
|
||||
'site_id' => $shasite_id,
|
||||
'vlan' => '10',
|
||||
'vlan_enabled' => true,
|
||||
'wep_idx' => 1,
|
||||
'wpa_enc' => 'ccmp',
|
||||
'wpa_mode' => 'wpa2',
|
||||
'x_passphrase' => 'datisgeheim',
|
||||
);
|
||||
$wlannetworks['CorporateWifi'] = array(
|
||||
'enabled' => true,
|
||||
'is_guest' => false,
|
||||
'mac_filter_enabled' => false,
|
||||
'mac_filter_list' => array (),
|
||||
'mac_filter_policy' => 'allow',
|
||||
'name' => "CorporateWifi",
|
||||
'usergroup_id' => $shausergroup_id,
|
||||
'wlangroup_id' => $shawlangroup_id,
|
||||
'schedule' =>
|
||||
array (
|
||||
0 => 'mon|0800-1800',
|
||||
1 => 'tue|0800-1800',
|
||||
2 => 'wed|0800-1800',
|
||||
3 => 'thu|0800-1800',
|
||||
4 => 'fri|0800-1800',
|
||||
5 => 'sat|0800-1800',
|
||||
6 => 'sun|0800-1800',
|
||||
),
|
||||
'schedule_enabled' => true,
|
||||
'security' => 'wpapsk',
|
||||
'site_id' => $shasite_id,
|
||||
'wep_idx' => 1,
|
||||
'wpa_enc' => 'ccmp',
|
||||
'wpa_mode' => 'wpa2',
|
||||
'x_passphrase' => 'SuperSecretPassword',
|
||||
);
|
||||
|
||||
// Unset this network for test shops
|
||||
if(preg_match("/[0-9][9][0-9]+)/si", $filnr))
|
||||
unset($wlannetworks['CorporateWifi']);
|
||||
|
||||
// Site settings template
|
||||
$sitesettings['connectivity'] = array(
|
||||
'enabled' => true,
|
||||
'key' => 'connectivity',
|
||||
'site_id' => $shasite_id,
|
||||
'uplink_type' => 'gateway',
|
||||
);
|
||||
$sitesettings['guest_access'] = array(
|
||||
'auth' => 'none',
|
||||
'key' => 'guest_access',
|
||||
'redirect_https' => true,
|
||||
'redirect_to_https' => false,
|
||||
'restricted_subnet_1' => '192.168.0.0/16',
|
||||
'restricted_subnet_2' => '172.16.0.0/12',
|
||||
'restricted_subnet_3' => '10.0.0.0/8',
|
||||
'site_id' => $shasite_id,
|
||||
);
|
||||
$sitesettings['country'] = array(
|
||||
'code' => '528',
|
||||
'key' => 'country',
|
||||
'site_id' => $shasite_id,
|
||||
);
|
||||
$sitesettings['locale'] = array(
|
||||
'key' => 'locale',
|
||||
'site_id' => $shasite_id,
|
||||
'timezone' => 'Europe/Amsterdam',
|
||||
);/*
|
||||
$sitesettings['porta'] = array(
|
||||
'key' => 'porta',
|
||||
'site_id' => $shasite_id,
|
||||
'ugw3_wan2_enabled' => false,
|
||||
);*/
|
||||
$sitesettings['snmp'] = array(
|
||||
'community' => 'esenempee',
|
||||
'key' => 'snmp',
|
||||
'site_id' => $shasite_id,
|
||||
);
|
||||
$sitesettings['rsyslogd'] = array(
|
||||
'key' => 'rsyslogd',
|
||||
'port' => '514',
|
||||
'site_id' => $shasite_id,
|
||||
);/*
|
||||
$sitesettings['auto_speedtest'] = array(
|
||||
'enabled' => false,
|
||||
'interval' => 20,
|
||||
'key' => 'auto_speedtest',
|
||||
'site_id' => $shasite_id,
|
||||
);*/
|
||||
$sitesettings['ntp'] = array(
|
||||
'key' => 'ntp',
|
||||
'ntp_server_1' => 'ntp.xs4all.nl',
|
||||
'ntp_server_2' => '0.ubnt.pool.ntp.org',
|
||||
'site_id' => $shasite_id,
|
||||
);
|
||||
/*
|
||||
$sitesettings['usg'] = array(
|
||||
'broadcast_ping' => false,
|
||||
'ftp_module' => true,
|
||||
'gre_module' => true,
|
||||
'h323_module' => true,
|
||||
'key' => 'usg',
|
||||
'mdns_enabled' => false,
|
||||
'mss_clamp' => 'auto',
|
||||
'offload_accounting' => true,
|
||||
'offload_l2_blocking' => true,
|
||||
'offload_sch' => true,
|
||||
'pptp_module' => true,
|
||||
'receive_redirects' => false,
|
||||
'send_redirects' => true,
|
||||
'sip_module' => true,
|
||||
'site_id' => $shasite_id,
|
||||
'syn_cookies' => true,
|
||||
'tftp_module' => true,
|
||||
'upnp_enabled' => false,
|
||||
'upnp_nat_pmp_enabled' => true,
|
||||
'upnp_secure_mode' => true,
|
||||
);*/
|
||||
$sitesettings['mgmt'] = array(
|
||||
'advanced_feature_enabled' => false,
|
||||
'alert_enabled' => true,
|
||||
'auto_upgrade' => true,
|
||||
'key' => 'mgmt',
|
||||
'led_enabled' => true,
|
||||
'site_id' => $shasite_id,
|
||||
'unifi_idp_enabled' => true,
|
||||
'x_ssh_auth_password_enabled' => true,
|
||||
'x_ssh_bind_wildcard' => false,
|
||||
'x_ssh_enabled' => true,
|
||||
);
|
||||
72
examples/test_connection.php
Executable file
72
examples/test_connection.php
Executable file
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
* Test the connection to your UniFi controller
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: PHP script to check/debug the connection to your controller using PHP and cURL
|
||||
*/
|
||||
|
||||
/**
|
||||
* Include the config file (place your credentials etc. there if not already present),
|
||||
* see the config.template.php file for an example.
|
||||
* (will only be used here to get the URL to the controller)
|
||||
*/
|
||||
require_once('config.php');
|
||||
|
||||
/**
|
||||
* Check whether the cURL module supports SSL
|
||||
*/
|
||||
if (!curl_version()['features'] & CURL_VERSION_SSL) {
|
||||
print PHP_EOL . 'SSL is not supported with this cURL installation!' . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* create cURL resource
|
||||
*/
|
||||
$ch = curl_init();
|
||||
|
||||
if (is_resource($ch)) {
|
||||
/**
|
||||
* If we have a resource, we proceed and set the required cURL options
|
||||
*/
|
||||
curl_setopt($ch, CURLOPT_URL, $controllerurl);
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||||
|
||||
/**
|
||||
* This cURL option can have a value of 0-6
|
||||
* see this URL for more details:
|
||||
* http://php.net/manual/en/function.curl-setopt.php
|
||||
* 0 is the default value and is used by the PHP API client class
|
||||
*/
|
||||
curl_setopt($ch, CURLOPT_SSLVERSION, 0);
|
||||
|
||||
/**
|
||||
* Be more verbose
|
||||
*/
|
||||
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
||||
|
||||
/**
|
||||
* $results contains the output as returned by the cURL request,
|
||||
* returns true when successful, else returns false
|
||||
*/
|
||||
print PHP_EOL . 'verbose output from the cURL request:' . PHP_EOL;
|
||||
$results = curl_exec($ch);
|
||||
|
||||
print PHP_EOL . 'curl_getinfo output:' . PHP_EOL;
|
||||
print_r(curl_getinfo($ch));
|
||||
|
||||
/**
|
||||
* If we receive a cURL error, output it before the results
|
||||
*/
|
||||
if (curl_errno($ch)) {
|
||||
print PHP_EOL . 'cURL error: ' . curl_error($ch) . PHP_EOL;
|
||||
}
|
||||
|
||||
print PHP_EOL . '$results:' . PHP_EOL;
|
||||
print_r($results);
|
||||
print PHP_EOL;
|
||||
} else {
|
||||
print PHP_EOL . 'ERROR: cURL could not be initialized!' . PHP_EOL;
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
/**
|
||||
* using the composer autoloader
|
||||
*/
|
||||
require "vendor/autoload.php";
|
||||
require_once('vendor/autoload.php');
|
||||
|
||||
/**
|
||||
* include the config file (place your credentials etc. there if not already present)
|
||||
|
||||
83
examples/unblock_list.php
Executable file
83
examples/unblock_list.php
Executable file
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: @malcolmcif, based on another Art of WiFi example
|
||||
* description: basic PHP script to unblock a list of mac addresses passed in via command line,
|
||||
* output is to console in non json format
|
||||
*
|
||||
* usage:
|
||||
* php unblock_list.php <list of comma seperated mac addresses>
|
||||
*
|
||||
* example:
|
||||
* php unblock_list.php 09:09:09:09:09:09,10:10:10:10:10:10
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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');
|
||||
$debug = false;
|
||||
|
||||
/**
|
||||
* the MAC addresses of the device(s) to unblock
|
||||
*/
|
||||
$macs_to_unblock = explode(',', $argv[1]);
|
||||
|
||||
/**
|
||||
* The site to authorize the device with
|
||||
*/
|
||||
$site_id = 'MUST_DEFINE_THIS';
|
||||
if ($site_id == "MUST_DEFINE_THIS") {
|
||||
print 'ERROR: set the site id in your script';
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
|
||||
foreach ($macs_to_unblock as &$mac) {
|
||||
// block_result is always true even if mac address does not exist :(
|
||||
$block_result = $unifi_connection->unblock_sta($mac);
|
||||
|
||||
/**
|
||||
* NOTE:
|
||||
* during testing I had some strange behavior where clients were not reconnecting to the network correctly,
|
||||
* they appeared unblocked and received a valid IP address but could not actually get any data.
|
||||
* the clients did not come to life until I disabled the SSID and then re enabled it.
|
||||
* I guessed maybe these commands were occurring too quickly for the controller so I have slowed them down;
|
||||
* since introducing the sleep I have not seen the above behavior so it might be fixed
|
||||
*/
|
||||
sleep(1);
|
||||
|
||||
$getid_result = $unifi_connection->stat_client($mac);
|
||||
|
||||
if (property_exists($getid_result[0], "oui")) {
|
||||
// this field(manufacturer) seems to exist on valid mac addresses
|
||||
if (property_exists($getid_result[0], "name")) {
|
||||
$name = $getid_result[0]->name;
|
||||
} else {
|
||||
$name = $getid_result[0]->hostname;
|
||||
}
|
||||
print 'unblocked ' . $name . PHP_EOL;
|
||||
} else {
|
||||
print 'ERROR: could not unblock ' . $mac . PHP_EOL;
|
||||
print ' check mac address is valid and part of your network' . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
//echo json_encode($block_result, JSON_PRETTY_PRINT);
|
||||
78
examples/update_ac-iw_ports.php
Executable file
78
examples/update_ac-iw_ports.php
Executable file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to update the port settings of an AC-IW device
|
||||
* FYI: the AC-IW device has three ports, one for the wired uplink and two with external connectors
|
||||
* note: requires controller version 5.5.X or higher (to be verified)
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 to log in to the controller
|
||||
*/
|
||||
$site_id = '<short site name of a site the credentials used have access to>';
|
||||
|
||||
/**
|
||||
* the MAC address of the AC-IW device to re-configure
|
||||
*/
|
||||
$device_mac = '<enter MAC address>';
|
||||
|
||||
/**
|
||||
* port configuration id to apply to port #1 of the AC-IW device
|
||||
* NOTE: port configurations are available through list_portconf()
|
||||
*/
|
||||
$port_conf_id_port_1 = '<_id of port configuration to apply to port #1>';
|
||||
|
||||
/**
|
||||
* port configuration id to apply to port #2 of the AC-IW device
|
||||
* NOTE: port configurations are available through list_portconf()
|
||||
*/
|
||||
$port_conf_id_port_2 = '<_id of port configuration to apply to port #2>';
|
||||
|
||||
/**
|
||||
* prepare the payload to pass on to the API endpoint
|
||||
*/
|
||||
$new_ports_config = [
|
||||
'port_overrides' => [
|
||||
[
|
||||
'port_idx' => 1,
|
||||
'portconf_id' => $port_conf_id_port_1
|
||||
],
|
||||
[
|
||||
'port_idx' => 2,
|
||||
'portconf_id' => $port_conf_id_port_2
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
/**
|
||||
* 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);
|
||||
|
||||
if (!$update_device) {
|
||||
$error = $unifi_connection->get_last_results_raw();
|
||||
echo json_encode($error, JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($update_device, JSON_PRETTY_PRINT);
|
||||
83
examples/update_device_wlan_settings_5.5.X.php
Executable file
83
examples/update_device_wlan_settings_5.5.X.php
Executable file
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: Art of WiFi
|
||||
* description: example basic PHP script to update WLAN settings of a device when using a controller version 5.5.X or higher
|
||||
* where set_ap_radiosettings() throws an error
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 to log in to the controller
|
||||
*/
|
||||
$site_id = '<short site name of a site the credentials used have access to>';
|
||||
|
||||
/**
|
||||
* the MAC address of the access point to modify
|
||||
*/
|
||||
$ap_mac = '<enter MAC address>';
|
||||
|
||||
/**
|
||||
* power level for 2.4GHz
|
||||
*/
|
||||
$ng_tx_power_mode = 'low';
|
||||
|
||||
/**
|
||||
* channel for 2.4GHz
|
||||
*/
|
||||
$ng_channel = 6;
|
||||
|
||||
/**
|
||||
* power level for 5GHz
|
||||
*/
|
||||
$na_tx_power_mode = 'medium';
|
||||
|
||||
/**
|
||||
* channel for 5GHz
|
||||
*/
|
||||
$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;
|
||||
|
||||
foreach ($radio_table as $radio) {
|
||||
if ($radio->radio === 'ng') {
|
||||
$radio->tx_power_mode = $ng_tx_power_mode;
|
||||
$radio->channel = $ng_channel;
|
||||
}
|
||||
|
||||
if ($radio->radio === 'na') {
|
||||
$radio->tx_power_mode = $na_tx_power_mode;
|
||||
$radio->channel = $na_channel;
|
||||
}
|
||||
}
|
||||
|
||||
$update_device = $unifi_connection->set_device_settings_base($device_id, ['radio_table' => $radio_table]);
|
||||
|
||||
if (!$update_device) {
|
||||
$error = $unifi_connection->get_last_results_raw();
|
||||
echo json_encode($error, JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($update_device, JSON_PRETTY_PRINT);
|
||||
94
examples/update_switch_poe-mode.php
Executable file
94
examples/update_switch_poe-mode.php
Executable file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example to turn the PoE of the selected switch ports to "off" or "auto"
|
||||
*
|
||||
* contributed by: @Kaltt
|
||||
* description: A use case for this script is to turn off the PoE of the port where a camera is connected in order to turn off the camera
|
||||
*
|
||||
* 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"
|
||||
*/
|
||||
|
||||
/**
|
||||
* 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 to log in to the controller
|
||||
*/
|
||||
$site_id = '<short site name of a site the credentials used have access to>';
|
||||
|
||||
/**
|
||||
* the MAC address of the AC-IW device to re-configure
|
||||
*/
|
||||
$device_mac = '<enter MAC address>';
|
||||
|
||||
/**
|
||||
* $lanports is an array that defines which ports should be changed
|
||||
*/
|
||||
$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){
|
||||
/**
|
||||
* 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)){
|
||||
$running_config[$i]->poe_mode = $poe_mode;
|
||||
unset($ports[array_search($running_config[$i]->port_idx, $ports)]);
|
||||
}
|
||||
}
|
||||
|
||||
$add_conf = [];
|
||||
foreach($ports as $port){
|
||||
$add_conf[] = [
|
||||
'port_idx' => $port,
|
||||
'poe_mode' => $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;
|
||||
|
||||
/**
|
||||
* 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"
|
||||
*/
|
||||
if (isset($_GET['poe_mode'])) {
|
||||
$poe_mode = $_GET['poe_mode'];
|
||||
} elseif (isset($argv[1])) {
|
||||
$poe_mode = $argv[1];
|
||||
} else {
|
||||
$poe_mode = 'auto';
|
||||
}
|
||||
|
||||
$new_ports_config = [
|
||||
'port_overrides' => update_ports($current_conf, $lanports, $poe_mode)
|
||||
];
|
||||
|
||||
$update_device = $unifi_connection->set_device_settings_base($device_id, $new_ports_config);
|
||||
|
||||
if (!$update_device) {
|
||||
$error = $unifi_connection->get_last_results_raw();
|
||||
echo json_encode($error, JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
echo json_encode($update_device, JSON_PRETTY_PRINT);
|
||||
3384
src/Client.php
3384
src/Client.php
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user