2020-01-30 10:09:34 +01:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* PHP API usage example to turn the PoE of the selected switch ports to "off" or "auto"
|
|
|
|
*
|
|
|
|
* contributed by: @Kaltt
|
|
|
|
* description: A use case for this script is to turn off the PoE of the port where a camera is connected in order to turn off the camera
|
|
|
|
*
|
|
|
|
* usage: If the file is called via a web URL, it should be called like: update_switch_poe-mode.php?poe_mode=off
|
|
|
|
* If the file is called via the command line, it should be called like: php update_switch_poe-mode.php off
|
|
|
|
* The values can be "off" or "auto"
|
2023-03-28 12:19:29 +02:00
|
|
|
*
|
|
|
|
* IMPORTANT INFORMATION:
|
|
|
|
* This example no longer works with controller versions 7.1.X and higher. You now need to work with port profiles to enable POE on a switch port.
|
2020-01-30 10:09:34 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* using the composer autoloader
|
|
|
|
*/
|
2021-01-21 10:59:27 +01:00
|
|
|
require_once 'vendor/autoload.php';
|
2020-01-30 10:09:34 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* include the config file (place your credentials etc. there if not already present)
|
|
|
|
* see the config.template.php file for an example
|
|
|
|
*/
|
2021-01-21 10:59:27 +01:00
|
|
|
require_once 'config.php';
|
2020-01-30 10:09:34 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* the site to use to log in to the controller
|
|
|
|
*/
|
|
|
|
$site_id = '<short site name of a site the credentials used have access to>';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* the MAC address of the AC-IW device to re-configure
|
|
|
|
*/
|
|
|
|
$device_mac = '<enter MAC address>';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* $lanports is an array that defines which ports should be changed
|
|
|
|
*/
|
|
|
|
$lanports = [6];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This is the function that reads out the current port configuration and changes the value for the poe_mode for the ports defined in $lanports
|
|
|
|
*/
|
2023-12-18 11:11:27 +01:00
|
|
|
function update_ports($running_config, $ports, $poe_mode)
|
|
|
|
{
|
2020-01-30 10:09:34 +01:00
|
|
|
/**
|
|
|
|
* Update already non-default ports
|
|
|
|
*/
|
2020-01-31 12:14:52 +01:00
|
|
|
$running_config_count = count($running_config);
|
2023-12-18 11:11:27 +01:00
|
|
|
for ($i = 0; $i < $running_config_count; $i++) {
|
|
|
|
if (in_array($running_config[$i]->port_idx, $ports)) {
|
2020-01-30 10:09:34 +01:00
|
|
|
$running_config[$i]->poe_mode = $poe_mode;
|
|
|
|
unset($ports[array_search($running_config[$i]->port_idx, $ports)]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$add_conf = [];
|
2023-12-18 11:11:27 +01:00
|
|
|
foreach ($ports as $port) {
|
2020-01-30 10:09:34 +01:00
|
|
|
$add_conf[] = [
|
|
|
|
'port_idx' => $port,
|
|
|
|
'poe_mode' => $poe_mode
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
return array_merge($running_config, $add_conf);
|
|
|
|
}
|
|
|
|
|
2023-12-18 11:11:27 +01:00
|
|
|
$unifi_connection = new UniFi_API\Client(
|
|
|
|
$controlleruser,
|
|
|
|
$controllerpassword,
|
|
|
|
$controllerurl,
|
|
|
|
$site_id,
|
|
|
|
$controllerversion
|
|
|
|
);
|
|
|
|
|
|
|
|
$set_debug_mode = $unifi_connection->set_debug(false);
|
|
|
|
$loginresults = $unifi_connection->login();
|
|
|
|
$data = $unifi_connection->list_devices($device_mac);
|
|
|
|
$device_id = $data[0]->device_id;
|
|
|
|
$current_conf = $data[0]->port_overrides;
|
2020-01-30 10:09:34 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* This reads in the values provided via URL or in the command line, if nothing is set than it will poe_mode will be set to "auto"
|
|
|
|
*/
|
2020-02-04 07:41:43 +01:00
|
|
|
if (isset($_GET['poe_mode'])) {
|
|
|
|
$poe_mode = $_GET['poe_mode'];
|
2020-01-30 10:09:34 +01:00
|
|
|
} elseif (isset($argv[1])) {
|
|
|
|
$poe_mode = $argv[1];
|
|
|
|
} else {
|
|
|
|
$poe_mode = 'auto';
|
|
|
|
}
|
|
|
|
|
|
|
|
$new_ports_config = [
|
|
|
|
'port_overrides' => update_ports($current_conf, $lanports, $poe_mode)
|
|
|
|
];
|
|
|
|
|
|
|
|
$update_device = $unifi_connection->set_device_settings_base($device_id, $new_ports_config);
|
|
|
|
|
|
|
|
if (!$update_device) {
|
|
|
|
$error = $unifi_connection->get_last_results_raw();
|
|
|
|
echo json_encode($error, JSON_PRETTY_PRINT);
|
|
|
|
}
|
|
|
|
|
2023-03-28 12:19:29 +02:00
|
|
|
echo json_encode($update_device, JSON_PRETTY_PRINT);
|