1. Go to this page and download the library: Download sunfoxcz/apc-pdu library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
sunfoxcz / apc-pdu example snippets
use Sunfox\ApcPdu\ApcPduFactory;
use Sunfox\ApcPdu\DeviceMetric;
use Sunfox\ApcPdu\OutletMetric;
$pdu = ApcPduFactory::snmpV1('192.168.1.100', 'public');
// Auto-detect best available client (recommended)
$pdu = ApcPduFactory::snmpV3($host, $user, $authPass, $privPass);
// Or explicitly choose a specific client:
// Binary - snmpV3FreeDsx($host, $user, $authPass, $privPass);
// Native -
// Get individual metrics (PDU 1 is default)
$power = $pdu->getDevice(DeviceMetric::Power); // Returns watts
$peak = $pdu->getDevice(DeviceMetric::PeakPower); // Returns watts
$energy = $pdu->getDevice(DeviceMetric::Energy); // Returns kWh
$name = $pdu->getDevice(DeviceMetric::Name); // Returns string
$loadStatus = $pdu->getDevice(DeviceMetric::LoadStatus); // Returns int (1=Normal, 2=LowLoad, 3=NearOverload, 4=Overload)
$apparentPower = $pdu->getDevice(DeviceMetric::ApparentPower); // Returns VA
$powerFactor = $pdu->getDevice(DeviceMetric::PowerFactor); // Returns ratio (0.0-1.0)
// Get all device metrics at once as DTO
$device = $pdu->getDeviceStatus();
echo $device->powerW; // Current power in watts
echo $device->peakPowerW; // Peak power in watts
echo $device->energyKwh; // Total energy in kWh
echo $device->name; // Device name
echo $device->loadStatus->name; // LoadStatus enum (Normal, LowLoad, NearOverload, Overload)
echo $device->apparentPowerVa; // Apparent power in VA
echo $device->powerFactor; // Power factor (0.0-1.0)
echo $device->outletCount; // Number of outlets
echo $device->phaseCount; // Number of phases
// Get individual outlet metrics
$name = $pdu->getOutlet(1, 5, OutletMetric::Name);
$power = $pdu->getOutlet(1, 5, OutletMetric::Power);
$current = $pdu->getOutlet(1, 5, OutletMetric::Current);
$energy = $pdu->getOutlet(1, 5, OutletMetric::Energy);
$state = $pdu->getOutlet(1, 5, OutletMetric::State); // 1=Off, 2=On
// Get all metrics for one outlet as DTO
$outlet = $pdu->getOutletStatus(1, 5);
echo $outlet->name; // Outlet name
echo $outlet->index; // Outlet index
echo $outlet->state->name; // PowerState enum (Off, On)
echo $outlet->currentA; // Current in amps
echo $outlet->powerW; // Power in watts
echo $outlet->peakPowerW; // Peak power in watts
echo $outlet->energyKwh; // Energy in kWh
echo $outlet->outletType; // Outlet type (e.g., "IEC C13")
// Get all outlets for a PDU
$outlets = $pdu->getAllOutlets(1);
use Sunfox\ApcPdu\OutletCommand;
// Get an outlet object for control operations
$outlet = $pdu->getOutlet(1, 5); // PDU 1, Outlet 5
// Power control
$outlet->setState(OutletCommand::On); // Turn on
$outlet->setState(OutletCommand::Off); // Turn off
$outlet->setState(OutletCommand::Reboot); // Reboot (off then on)
// Configuration
$outlet->setName('Web Server');
$outlet->setExternalLink('https://example.com/server1');
// Power thresholds (in Watts)
$outlet->setLowLoadThreshold(10);
$outlet->setNearOverloadThreshold(400);
$outlet->setOverloadThreshold(500);
// Reset device-level counters
$pdu->resetDevicePeakPower(1); // Reset peak power to current load
$pdu->resetDeviceEnergy(1); // Reset energy meter to zero
// Reset all outlet counters
$pdu->resetOutletsPeakPower(1); // Reset all outlets peak power
$pdu->resetOutletsEnergy(1); // Reset all outlets energy meters
// Get complete status for one PDU
$pduInfo = $pdu->getPduInfo(1);
echo $pduInfo->pduIndex;
echo $pduInfo->device->powerW;
foreach ($pduInfo->outlets as $outlet) {
echo $outlet->name . ': ' . $outlet->powerW . 'W';
}
// Get complete dump of all PDUs (stops when PDU not found)
$status = $pdu->getFullStatus();
use Sunfox\ApcPdu\DeviceMetric;
// PDU 1 (Host) - default when no index specified
$hostPower = $pdu->getDevice(DeviceMetric::Power);
$hostPower = $pdu->getDevice(DeviceMetric::Power, 1); // Explicit
// PDU 2 (Guest)
$guest1Power = $pdu->getDevice(DeviceMetric::Power, 2);
// PDU 3 and 4 (additional guests)
$guest2Power = $pdu->getDevice(DeviceMetric::Power, 3);
$guest3Power = $pdu->getDevice(DeviceMetric::Power, 4);
// Get all metrics for specific PDU
$device = $pdu->getDeviceStatus(2); // All metrics for PDU 2
if ($pdu->testConnection()) {
echo "PDU is reachable";
}