Compare commits
50 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
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
|
||||
301
README.md
301
README.md
@@ -1,128 +1,17 @@
|
||||
## 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 are supported (version 5.5.20 has been confirmed to work). It is an independent version of the class which is used in the API browser tool [here](https://github.com/Art-of-WiFi/UniFi-API-browser).
|
||||
A PHP class which provides access to Ubiquiti's **UniFi Controller API**, versions 4.X.X and 5.X.X of the UniFi Controller software are supported (version 5.9.29 has been confirmed to work). It's a standalone version of the class which is used in our API browser tool which can be found [here](https://github.com/Art-of-WiFi/UniFi-API-browser).
|
||||
|
||||
The class is now also installable through composer/[packagist](https://packagist.org/packages/art-of-wifi/unifi-api-client) for easy inclusion in your projects.
|
||||
|
||||
### 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.
|
||||
|
||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=M7TVNVX3Z44VN)
|
||||
|
||||
## Methods and functions supported
|
||||
|
||||
This class currently supports the following functions/methods to get/set data through the UniFi controller API:
|
||||
- login()
|
||||
- logout()
|
||||
- adopt_device()
|
||||
- authorize_guest()
|
||||
- block_sta()
|
||||
- count_alarms()
|
||||
- create_hotspotop()
|
||||
- create_network()
|
||||
- create_radius_account()
|
||||
- create_site()
|
||||
- create_usergroup()
|
||||
- create_voucher()
|
||||
- create_wlan()
|
||||
- delete_network()
|
||||
- delete_radius_account()
|
||||
- delete_site()
|
||||
- delete_usergroup()
|
||||
- delete_wlan()
|
||||
- disable_ap()
|
||||
- edit_usergroup()
|
||||
- extend_guest_validity()
|
||||
- led_override()
|
||||
- list_admins()
|
||||
- list_alarms()
|
||||
- list_aps() (deprecated but still available as alias)
|
||||
- list_clients()
|
||||
- list_current_channels()
|
||||
- list_dashboard()
|
||||
- list_devices()
|
||||
- list_dpi_stats()
|
||||
- list_dynamicdns()
|
||||
- list_events()
|
||||
- list_extension()
|
||||
- list_guests()
|
||||
- list_health()
|
||||
- list_hotspotop()
|
||||
- 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_self()
|
||||
- list_settings()
|
||||
- list_sites()
|
||||
- list_tags() (supported on controller version 5.5.19 and higher)
|
||||
- list_usergroups()
|
||||
- list_users()
|
||||
- list_wlan_groups()
|
||||
- list_wlanconf()
|
||||
- locate_ap()
|
||||
- reconnect_sta()
|
||||
- rename_ap()
|
||||
- restart_ap()
|
||||
- revoke_voucher()
|
||||
- set_ap_radiosettings()
|
||||
- set_guestlogin_settings()
|
||||
- set_locate_ap() (deprecated but still available as alias)
|
||||
- set_networksettings_base()
|
||||
- set_radius_account_base()
|
||||
- set_sta_name()
|
||||
- set_sta_note()
|
||||
- set_usergroup()
|
||||
- set_wlan_mac_filter()
|
||||
- set_wlansettings()
|
||||
- set_wlansettings_base()
|
||||
- site_leds()
|
||||
- site_ledsoff() (deprecated but still available as alias)
|
||||
- site_ledson() (deprecated but still available as alias)
|
||||
- spectrum_scan()
|
||||
- spectrum_scan_state()
|
||||
- stat_allusers()
|
||||
- stat_auths()
|
||||
- stat_client()
|
||||
- stat_daily_aps()
|
||||
- stat_daily_site()
|
||||
- stat_hourly_aps()
|
||||
- stat_hourly_site()
|
||||
- stat_payment()
|
||||
- stat_sessions()
|
||||
- stat_sites()
|
||||
- stat_sta_sessions_latest()
|
||||
- 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()
|
||||
- set_site()
|
||||
- get_site()
|
||||
- get_cookie() (renamed from getcookie())
|
||||
- get_last_results_raw()
|
||||
- get_last_error_message()
|
||||
|
||||
Please refer to the source code for more details on each function/method and it's parameters.
|
||||
This class can be installed manually or using composer/[packagist](https://packagist.org/packages/art-of-wifi/unifi-api-client) for easy inclusion in your projects.
|
||||
|
||||
## 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 TCP port 8443) where the UniFi controller is running
|
||||
- a web server with PHP and cURL modules installed (tested on apache2 with PHP Version 5.6.1 and cURL 7.42.1 and with PHP 7.0.7 and cURL 7.37.0)
|
||||
- network connectivity between this web server and the server and port (normally TCP port 8443) where the UniFi Controller is running
|
||||
|
||||
## Installation ##
|
||||
|
||||
You can use **Composer**, **Git** or simply **Download the Release** to install the API client class.
|
||||
You can use [Composer](#composer), [Git](#git) or simply [Download the Release](#download-the-release) to install the API client class.
|
||||
|
||||
### Composer
|
||||
|
||||
@@ -132,6 +21,16 @@ Once composer is installed, simply execute this command from the shell in your p
|
||||
|
||||
```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:
|
||||
@@ -183,22 +82,168 @@ $results = $unifi_connection->list_alarms(); // returns a PHP array con
|
||||
|
||||
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:
|
||||
#### IMPORTANT NOTES:
|
||||
|
||||
In the example above, the last parameter (`true`, without quotes) that is passed to the constructor enables validation of the controller's SSL certificate which is *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, and which is associated with the FQDN of the server as used in the `controller_url` parameter. This option was added with API client version 1.1.16.
|
||||
1. 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, and which is associated with the FQDN of the server as used in the `controller_url` parameter. This option was added with API client version 1.1.16.
|
||||
|
||||
---
|
||||
2. In the example above, `$site_id` is the 8 character short site "name" which is visible in the URL when managing the site in the UniFi Controller:
|
||||
|
||||
In the example above, `$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`
|
||||
|
||||
`https://<controller IP address or FQDN>:8443/manage/site/jl3z2shm/dashboard`
|
||||
In this case, `jl3z2shm` is the value required for $site_id.
|
||||
|
||||
In this case, `jl3z2shm` is the value required for $site_id.
|
||||
## Methods and functions supported
|
||||
|
||||
The class currently supports the following functions/methods to get/post/put/delete data through the UniFi Controller API:
|
||||
|
||||
- login()
|
||||
- logout()
|
||||
- adopt_device()
|
||||
- archive_alarm()
|
||||
- authorize_guest()
|
||||
- block_sta()
|
||||
- count_alarms()
|
||||
- create_firewallgroup()
|
||||
- create_hotspotop()
|
||||
- create_network()
|
||||
- create_radius_account()
|
||||
- create_site()
|
||||
- create_usergroup()
|
||||
- create_user()
|
||||
- create_voucher()
|
||||
- create_wlan()
|
||||
- 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()
|
||||
- revoke_admin()
|
||||
- led_override()
|
||||
- list_admins()
|
||||
- list_all_admins()
|
||||
- list_alarms()
|
||||
- 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_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_self()
|
||||
- list_settings()
|
||||
- list_sites()
|
||||
- list_tags() (supported on controller version 5.5.19 and higher)
|
||||
- list_usergroups()
|
||||
- list_users()
|
||||
- list_wlan_groups()
|
||||
- list_wlanconf()
|
||||
- locate_ap()
|
||||
- move_device()
|
||||
- power_cycle_switch_port()
|
||||
- reconnect_sta()
|
||||
- rename_ap()
|
||||
- restart_ap()
|
||||
- revoke_voucher()
|
||||
- set_ap_radiosettings()
|
||||
- set_device_settings_base()
|
||||
- set_guestlogin_settings()
|
||||
- set_guestlogin_settings_base()
|
||||
- set_ips_settings_base() (supported on controller version 5.9.10 and higher)
|
||||
- set_locate_ap() (deprecated but still available as alias)
|
||||
- set_networksettings_base()
|
||||
- set_radius_account_base()
|
||||
- set_site_connectivity()
|
||||
- set_site_country()
|
||||
- set_site_guest_access()
|
||||
- set_site_locale()
|
||||
- set_site_mgmt()
|
||||
- set_site_name()
|
||||
- set_site_ntp()
|
||||
- set_site_snmp()
|
||||
- set_sta_name()
|
||||
- set_sta_note()
|
||||
- set_usergroup()
|
||||
- set_wlan_mac_filter()
|
||||
- set_wlansettings()
|
||||
- set_wlansettings_base()
|
||||
- site_leds()
|
||||
- site_ledsoff() (deprecated but still available as alias)
|
||||
- site_ledson() (deprecated but still available as alias)
|
||||
- spectrum_scan()
|
||||
- spectrum_scan_state()
|
||||
- stat_allusers()
|
||||
- stat_auths()
|
||||
- stat_client()
|
||||
- stat_5minutes_aps() (supported on controller version 5.5.X and higher)
|
||||
- stat_hourly_aps()
|
||||
- stat_daily_aps()
|
||||
- stat_5minutes_gateway() (supported on controller version 5.7.X and higher)
|
||||
- stat_hourly_gateway() (supported on controller version 5.7.X and higher)
|
||||
- stat_daily_gateway() (supported on controller version 5.7.X and higher)
|
||||
- stat_5minutes_site() (supported on controller version 5.5.X and higher)
|
||||
- stat_hourly_site()
|
||||
- stat_daily_site()
|
||||
- stat_5minutes_user (supported on controller version 5.7.X and higher)
|
||||
- stat_hourly_user() (supported on controller version 5.7.X and higher)
|
||||
- stat_daily_user() (supported on controller version 5.7.X and higher)
|
||||
- stat_payment()
|
||||
- stat_sessions()
|
||||
- stat_sites()
|
||||
- stat_speedtest_results()
|
||||
- stat_ips_events() (supported on controller version 5.9.10 and higher)
|
||||
- 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()
|
||||
- start_rolling_upgrade()
|
||||
- cancel_rolling_upgrade()
|
||||
- cmd_stat()
|
||||
|
||||
Internal functions, getters/setters:
|
||||
|
||||
- set_debug()
|
||||
- get_debug()
|
||||
- set_site()
|
||||
- get_site()
|
||||
- get_cookie() (renamed from getcookie())
|
||||
- get_last_results_raw()
|
||||
- get_last_error_message()
|
||||
|
||||
Please refer to the source code for more details on the functions/methods and their parameters.
|
||||
|
||||
## Need help or have suggestions?
|
||||
|
||||
There is still work to be done to add functionality and improve the usability of this class, so all suggestions/comments are welcome. Please use the github [issue](https://github.com/Art-of-WiFi/UniFi-API-client/issues) list 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 ideas/questions.
|
||||
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
|
||||
|
||||
@@ -206,11 +251,11 @@ If you would like to contribute code (improvements), please open an issue and in
|
||||
|
||||
## Credits
|
||||
|
||||
This class is largely based on the work done by the following developers:
|
||||
This class is based on the work done 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
|
||||
- and the API as published by Ubiquiti: https://dl.ubnt.com/unifi/5.8.24/unifi_sh_api
|
||||
|
||||
## Important Disclaimer
|
||||
|
||||
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.
|
||||
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,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!
|
||||
|
||||
37
examples/ap_upgrade_firmware.php
Executable file
37
examples/ap_upgrade_firmware.php
Executable file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP API usage example
|
||||
*
|
||||
* contributed by: @4oo4
|
||||
* description: example script to check and 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
|
||||
*/
|
||||
$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,7 +3,9 @@
|
||||
* 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
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
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);
|
||||
@@ -37,9 +37,10 @@ $new_password = '<new password goes here>';
|
||||
*/
|
||||
$unifi_connection = new UniFi_API\Client($controlleruser, $controllerpassword, $controllerurl, $site_id, $controllerversion);
|
||||
$set_debug_mode = $unifi_connection->set_debug($debug);
|
||||
$loginresults = $unifi_connection->set_wlansettings($wlan_id, $new_password);
|
||||
$loginresults = $unifi_connection->login();
|
||||
$results = $unifi_connection->set_wlansettings($wlan_id, $new_password);
|
||||
|
||||
/**
|
||||
* provide feedback in json format
|
||||
*/
|
||||
echo json_encode($loginresults, JSON_PRETTY_PRINT);
|
||||
echo json_encode($results, JSON_PRETTY_PRINT);
|
||||
|
||||
@@ -21,4 +21,4 @@ $controllerversion = ''; // the version of the Controller software, eg. '4.6.6'
|
||||
/**
|
||||
* 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);
|
||||
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);
|
||||
@@ -26,25 +26,23 @@ $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();
|
||||
// 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>";
|
||||
|
||||
// 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";
|
||||
}
|
||||
}
|
||||
// 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();
|
||||
$logout_results = $unifi_connection->logout();
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
* 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
|
||||
*/
|
||||
|
||||
@@ -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>';
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
||||
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);
|
||||
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,
|
||||
);
|
||||
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);
|
||||
2928
src/Client.php
2928
src/Client.php
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user