Compare commits

...

40 Commits

Author SHA1 Message Date
malle-pietje
2a566ad18a API client class v1.1.36
added methods stat_ips_events(), set_ips_settings_base(), supported with controllers 5.9.10 and higher
thanks go to @leonardogyn for providing access to a controller and test network for test/validation purposes
2018-10-24 09:54:43 +02:00
malle-pietje
1714e9587c general code cleanup
added spaces throughout Client.php following PSR-2 guidelines that were skipped with the previous commit
added visibility to constructor and destructor methods following PSR-2 recommendations
declare user and password properties and visibility following PSR-2 recommendations
updated README to add recently added functions/methods
minor general changes to the README
2018-10-20 14:29:08 +02:00
malle-pietje
cd92192cb8 API client class v1.1.34
- added spaces throughout Client.php following PSR-2 guidelines
- changed checks to prevent 0 (zero) values from being submitted to the API for routes where this can have negative side effects
2018-10-10 10:14:00 +02:00
malle-pietje
7c6cd4eb85 removed and added spaces, and changed brackets usage following PSR-2 guidelines 2018-10-02 13:16:48 +02:00
malle-pietje
30f4230cfd Merge branch 'master' of github.com:Art-of-WiFi/UniFi-API-client into tempbranch 2018-10-02 12:10:46 +02:00
Jamie Aitken
88263f6863 getters and setters for private variables (#28)
Merging PR #28
2018-10-02 11:12:34 +02:00
malle-pietje
1017d1461e Commiting some changes to tempbranch before merging in a new PR 2018-10-02 11:10:46 +02:00
malle-pietje
2c035878ed - added stat_speedtest_results() method/function to collect results from scheduled speed tests
- added list_backups() method/function to list auto backups
2018-08-28 14:44:49 +02:00
malle-pietje
de407e6ac0 cleanup of merge conflicts 2018-08-19 12:13:53 +02:00
malle-pietje
006702db0c Merge branch 'master' of github.com:Art-of-WiFi/UniFi-API-client
resilve merge conflicts
2018-08-19 12:02:32 +02:00
malle-pietje
6f1b75b89a updated comments for stats-related methods/function to make clear start/end values must be provided in milliseconds
changed use of objects as payload input for json_encode, to associative arrays for consistency
added functions/methods for firewall groups: list_firewallgroups(), create_firewallgroup(), edit_firewallgroup(), delete_firewallgroup()
added checks for required boolean parameters
2018-08-19 12:00:19 +02:00
Alex Paredes Martinez
287c67c39e Dev edit client fixedip (#24)
* Added Fixed ip function

Sets the value of use_fixedip and fixed_ip fields of a specific client.

* Added network_id field

-Optional fields network_id and fixed_ip
-If use_fixedip is false, network_id and fixed_ip will be ignored
-If else, send the data if defined (if not, previous values)

* fix typo (forgot to includo json_encode)

* Get specific network data by its ID
2018-08-19 11:59:03 +02:00
malle-pietje
871ab82608 added user/client device stats methods/functions:
stat_5minutes_user()
stat_hourly_user()
stat_daily_user()
added example to demonstrate use of these new functions
2018-07-02 15:06:31 +02:00
malle-pietje
4dddd08d8b added unblock_list.php and block_list.php examples, contributed by @malcolmcif
added create_user() method/function
added forget_sta() method/function which is supported on controller version 5.9.* and higher
2018-05-21 13:06:50 +02:00
malle-pietje
ccea0eee99 re-added the upgrade_device() function/method 2018-04-11 07:50:49 +02:00
malle-pietje
a238ced589 added methods/functions start_rolling_upgrade() and cancel_rolling_upgrade() 2018-04-10 15:24:12 +02:00
malle-pietje
bf9a6e801c added invite_admin() and revoke_admin() functions/methods 2018-03-30 13:57:59 +02:00
malle-pietje
d7827fdbf1 General code cleanup (replace tabs by spaces, etc.)
Finalised merge of PRs #10, #11, #12 and #13
Methods/functions added:
- list_country_codes()
- set_guestlogin_settings_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()
Examples added:
- ap_upgrade_firmware.php
- site_provisioning_example
- update_ac-iw_ports.php
2018-03-24 10:46:42 +01:00
malle-pietje
2c45d95965 Merge branch 'master' of github.com:Art-of-WiFi/UniFi-API-client
merge PRs
2018-03-24 09:29:50 +01:00
malle-pietje
ad21ebaad8 added example to change AC-IW port config
renamed update_wlan_settings_5.5.X.php to update_device_wlan_settings_5.5.X.php
2018-03-24 09:28:25 +01:00
Seth Mos
4532df8eac - Foreach the array to verify if we really need to update the settings so we only trigger for real updates. (#13)
- Move Test array settings down so you don't accidentally delete sites
- Don't delete sites in debug mode.
- Automatically adopt device if it matches the configured LAN settings, ofcourse this only works correctly when LAN settings are unique between sites.
2018-03-19 23:22:24 +01:00
4oo4
93d78b2f22 Add ap_upgrade_firmware.php to Examples (#12)
- add ap_upgrade_firmware.php, contributed by @4oo4
2018-03-18 14:28:40 +01:00
malle-pietje
546334c88e Merge pull request #11 from smos/master
Add a few more function for setting site specific parameters. It was …
2018-03-17 14:05:45 +01:00
Seth Mos
9f5aaa9838 Add a few more function for setting site specific parameters. It was neccesary to create several setting functions
for setting the information, although the site configuration is returned whole as one object.

I also added a provisioning example that I use with our internal ERP that automatically creates, updates and deletes sites according to internal ERP
site information. I added a settings template that has a couple of the most useful defaults, like auto upgrade, country and locale.
2018-03-13 13:39:38 +01:00
malle-pietje
757cf68698 Merge pull request #10 from patrice-guillemette/master
PR by @patrice-guillemette to update Client.php
- add method/function set_site_name()
- add method/function set_guestlogin_settings_base()
2018-03-10 09:00:25 +01:00
Patrice Guillemette
774fced2da Update Client.php 2018-03-09 16:24:31 -05:00
malle-pietje
14f4d58b02 minor bugs removed from two examples 2018-02-01 17:11:05 +01:00
malle-pietje
77972aab55 removed donation section from README (...) 2018-02-01 17:04:13 +01:00
malle-pietje
9629cc909d Merge branch 'master' of github.com:Art-of-WiFi/UniFi-API-client 2018-02-01 16:57:18 +01:00
malle-pietje
f6201ec21c minor changes
added an example to update WLAN settings for recent controllers (5.5.X and higher)
2018-02-01 16:56:17 +01:00
malle-pietje
dcf7d2059c removed some spaces for cosmetic reasons only 2018-01-29 13:36:13 +01:00
malle-pietje
7a5e2b5bbb Merge pull request #7 from JaspervRijbroek/master
Allow for extendibility. Thanks to @JaspervRijbroek
2018-01-29 13:34:06 +01:00
Jasper van Rijbroek
1db9040ea8 Allow for extendibility. 2018-01-20 15:46:04 +01:00
malle-pietje
cab0c1a35d Update README.md 2017-10-26 17:14:39 +02:00
malle-pietje
2b5ed31759 Update README.md 2017-10-26 17:12:51 +02:00
malle-pietje
a13ff36409 Merge branch 'master' of github.com:Art-of-WiFi/UniFi-API-client 2017-10-26 17:07:48 +02:00
malle-pietje
c4bc1243eb - minor code cleanup and input validation/sanitization improvements
- added delete_device() function/method
- added move_device() function/method
- added optional `type` parameter to stat_sessions()
- updated README
2017-10-26 17:06:59 +02:00
malle-pietje
c25f4d1937 Update disable_device.php 2017-10-20 09:25:59 +02:00
malle-pietje
e3e70cce72 fixed bug caused by typo with "if (in_array()..." 2017-10-19 11:53:04 +02:00
malle-pietje
449baa70a3 updated README 2017-10-19 11:24:24 +02:00
22 changed files with 3227 additions and 500 deletions

9
.gitignore vendored
View File

@@ -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

View File

@@ -1,44 +1,52 @@
## UniFi Controller API client class
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.6.18 has been confirmed to work). It's a standalone version of the class which is used in our 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.8.24 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).
This class can be installed using composer/[packagist](https://packagist.org/packages/art-of-wifi/unifi-api-client) for easy inclusion in your projects.
### Donations
If you find this PHP API client class useful and wish to support it's further development, please use the PayPal donate button below. All donations go to the project maintainer.
[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=M7TVNVX3Z44VN)
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.
## 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()
@@ -46,6 +54,7 @@ The class currently supports the following functions/methods to get/post/put/del
- list_dynamicdns()
- list_events()
- list_extension()
- list_firewallgroups()
- list_guests()
- list_health()
- list_hotspotop()
@@ -66,6 +75,7 @@ The class currently supports the following functions/methods to get/post/put/del
- list_wlan_groups()
- list_wlanconf()
- locate_ap()
- move_device()
- power_cycle_switch_port()
- reconnect_sta()
- rename_ap()
@@ -74,9 +84,19 @@ The class currently supports the following functions/methods to get/post/put/del
- 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()
@@ -91,15 +111,23 @@ The class currently supports the following functions/methods to get/post/put/del
- stat_allusers()
- stat_auths()
- stat_client()
- stat_5minutes_aps() (supported on controller version 5.5.* and higher)
- stat_5minutes_aps() (supported on controller version 5.5.X and higher)
- stat_hourly_aps()
- stat_daily_aps()
- stat_5minutes_site() (supported on controller version 5.5.* and higher)
- 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()
@@ -109,10 +137,13 @@ The class currently supports the following functions/methods to get/post/put/del
- unset_locate_ap() (deprecated but still available as alias)
- upgrade_device()
- upgrade_device_external()
- start_rolling_upgrade()
- cancel_rolling_upgrade()
Internal functions, getters/setters:
- set_debug()
- set_site()
- get_debug()
- set_site()
- get_site()
- get_cookie() (renamed from getcookie())
@@ -123,12 +154,12 @@ Please refer to the source code for more details on the functions/methods and th
## Requirements
- a web server with PHP and cURL modules installed (tested on apache2 with PHP Version 5.6.1 and cURL 7.42.1)
- 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
@@ -199,22 +230,19 @@ $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`) that is passed to the constructor, 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.
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.
## 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
@@ -222,10 +250,10 @@ 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://dl.ubnt.com/unifi/5.6.18-8261dc5066/unifi_sh_api
- and the API as published by Ubiquiti: https://dl.ubnt.com/unifi/5.8.24/unifi_sh_api
## Important Disclaimer

View File

@@ -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,12 @@ 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.
### 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!

View 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);

View File

@@ -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
View 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);

View File

@@ -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
View 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
View 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
View 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);

View File

@@ -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();
}

View File

@@ -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>';
}
}

View File

@@ -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
View 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);

View 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!

View 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;

View 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;
}
?>

View 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
View 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
View 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);

View 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);

File diff suppressed because it is too large Load Diff