From 39804b047df3607be578c5d4b0b6543e77025c3a Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Tue, 19 Sep 2017 14:12:04 -0500 Subject: [PATCH] refactor: rfc1628 sensor tidy up (#7341) * refactor: rfc1628 tidy up reduce the amount of snmp calls * Did not finish re-writing rfc1628 load * fix type in bypass power oid * remove testing changes --- .../discovery/sensors/charge/rfc1628.inc.php | 35 ++-- .../discovery/sensors/current/rfc1628.inc.php | 153 +++++++++------- .../sensors/frequency/rfc1628.inc.php | 89 +++++++--- .../discovery/sensors/load/rfc1628.inc.php | 41 +++-- .../discovery/sensors/power/rfc1628.inc.php | 113 +++++++----- .../discovery/sensors/state/rfc1628.inc.php | 112 ++++++------ .../sensors/temperature/rfc1628.inc.php | 38 ++-- .../discovery/sensors/voltage/rfc1628.inc.php | 165 ++++++++++-------- 8 files changed, 433 insertions(+), 313 deletions(-) diff --git a/includes/discovery/sensors/charge/rfc1628.inc.php b/includes/discovery/sensors/charge/rfc1628.inc.php index ab93f57cae..e357fa4ea2 100644 --- a/includes/discovery/sensors/charge/rfc1628.inc.php +++ b/includes/discovery/sensors/charge/rfc1628.inc.php @@ -3,22 +3,23 @@ // RFC1628 UPS echo 'RFC1628 '; -$oids = snmp_walk($device, '.1.3.6.1.2.1.33.1.2.4', '-Osqn', 'UPS-MIB'); -d_echo($oids."\n"); +$value = snmp_get($device, 'upsEstimatedChargeRemaining.0', '-OvqU', 'UPS-MIB'); -$oids = trim($oids); -foreach (explode("\n", $oids) as $data) { - $data = trim($data); - if ($data) { - list($oid,$descr) = explode(' ', $data, 2); - $split_oid = explode('.', $oid); - $current_id = $split_oid[(count($split_oid) - 1)]; - $current_oid = ".1.3.6.1.2.1.33.1.2.4.$current_id"; - $current = snmp_get($device, $current_oid, '-O vq'); - $descr = 'Battery charge remaining'.(count(explode("\n", $oids)) == 1 ? '' : ' '.($current_id + 1)); - $type = 'rfc1628'; - $index = (500 + $current_id); - - discover_sensor($valid['sensor'], 'charge', $device, $current_oid, $index, $type, $descr, 1, 1, 15, 50, null, 101, $current); - } +if (is_numeric($value)) { + discover_sensor( + $valid['sensor'], + 'charge', + $device, + '.1.3.6.1.2.1.33.1.2.4.0', + 500, + 'rfc1628', + 'Battery charge remaining', + 1, + 1, + 15, + 50, + null, + 101, + $value + ); } diff --git a/includes/discovery/sensors/current/rfc1628.inc.php b/includes/discovery/sensors/current/rfc1628.inc.php index e0a76eea35..4ec483811a 100644 --- a/includes/discovery/sensors/current/rfc1628.inc.php +++ b/includes/discovery/sensors/current/rfc1628.inc.php @@ -2,80 +2,109 @@ echo 'RFC1628 '; -$oids = snmp_walk($device, '.1.3.6.1.2.1.33.1.2.6', '-Osqn', 'UPS-MIB'); -d_echo($oids."\n"); +$battery_current = snmp_get($device, 'upsBatteryCurrent.0', '-OqvU', 'UPS-MIB'); -$oids = trim($oids); -foreach (explode("\n", $oids) as $data) { - $data = trim($data); - if ($data) { - list($oid,$descr) = explode(' ', $data, 2); - $split_oid = explode('.', $oid); - $current_id = $split_oid[(count($split_oid) - 1)]; - $current_oid = ".1.3.6.1.2.1.33.1.2.6.$current_id"; - $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'current', $current_oid); - $current = (snmp_get($device, $current_oid, '-O vq') / $divisor); - $descr = 'Battery'.(count(explode("\n", $oids)) == 1 ? '' : ' '.($current_id + 1)); - $type = 'rfc1628'; - $index = (500 + $current_id); +if (is_numeric($battery_current)) { + $oid = '.1.3.6.1.2.1.33.1.2.6.0'; + $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'current', $oid); - discover_sensor($valid['sensor'], 'current', $device, $current_oid, $index, $type, $descr, $divisor, '1', null, null, null, null, $current); - } + discover_sensor( + $valid['sensor'], + 'current', + $device, + $oid, + 500, + 'rfc1628', + 'Battery', + $divisor, + 1, + null, + null, + null, + null, + $battery_current / $divisor + ); } -$oids = trim(snmp_walk($device, '.1.3.6.1.2.1.33.1.4.3.0', '-OsqnU')); -d_echo($oids."\n"); - -list($unused,$numPhase) = explode(' ', $oids); -for ($i = 1; $i <= $numPhase; $i++) { - $current_oid = ".1.3.6.1.2.1.33.1.4.4.1.3.$i"; - $descr = 'Output'; - if ($numPhase > 1) { - $descr .= " Phase $i"; +$output_current = snmpwalk_group($device, 'upsOutputCurrent', 'UPS-MIB'); +foreach ($output_current as $index => $data) { + $oid = ".1.3.6.1.2.1.33.1.4.4.1.3.$index"; + $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'current', $oid); + $descr = 'Output'; + if (count($output_current) > 1) { + $descr .= " Phase $index"; } - $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'current', $current_oid); - $current = (snmp_get($device, $current_oid, '-Oqv') / $divisor); - $type = 'rfc1628'; - $index = $i; - - discover_sensor($valid['sensor'], 'current', $device, $current_oid, $index, $type, $descr, $divisor, '1', null, null, null, null, $current); + discover_sensor( + $valid['sensor'], + 'current', + $device, + $oid, + $index, + 'rfc1628', + $descr, + $divisor, + 1, + null, + null, + null, + null, + $data['upsOutputCurrent'] / $divisor + ); } -$oids = trim(snmp_walk($device, '.1.3.6.1.2.1.33.1.3.2.0', '-OsqnU')); -d_echo($oids."\n"); - -list($unused,$numPhase) = explode(' ', $oids); -for ($i = 1; $i <= $numPhase; $i++) { - $current_oid = ".1.3.6.1.2.1.33.1.3.3.1.4.$i"; - $descr = 'Input'; - if ($numPhase > 1) { - $descr .= " Phase $i"; +$input_current = snmpwalk_group($device, 'upsInputCurrent', 'UPS-MIB'); +foreach ($input_current as $index => $data) { + $oid = ".1.3.6.1.2.1.33.1.3.3.1.4.$index"; + $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'current', $oid); + $descr = 'Input'; + if (count($input_current) > 1) { + $descr .= " Phase $index"; } - $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'current', $current_oid); - $current = (snmp_get($device, $current_oid, '-Oqv') / $divisor); - $type = 'rfc1628'; - $index = (100 + $i); - - discover_sensor($valid['sensor'], 'current', $device, $current_oid, $index, $type, $descr, $divisor, '1', null, null, null, null, $current); + discover_sensor( + $valid['sensor'], + 'current', + $device, + $oid, + 100 + $index, + 'rfc1628', + $descr, + $divisor, + 1, + null, + null, + null, + null, + $data['upsInputCurrent'] / $divisor + ); } -$oids = trim(snmp_walk($device, '.1.3.6.1.2.1.33.1.5.2.0', '-OsqnU')); -d_echo($oids."\n"); - -list($unused,$numPhase) = explode(' ', $oids); -for ($i = 1; $i <= $numPhase; $i++) { - $current_oid = ".1.3.6.1.2.1.33.1.5.3.1.3.$i"; - $descr = 'Bypass'; - if ($numPhase > 1) { - $descr .= " Phase $i"; +$bypass_current = snmpwalk_group($device, 'upsBypassCurrent', 'UPS-MIB'); +foreach ($bypass_current as $index => $data) { + $oid = ".1.3.6.1.2.1.33.1.5.3.1.3.$index"; + $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'current', $oid); + $descr = 'Bypass'; + if (count($bypass_current) > 1) { + $descr .= " Phase $index"; } - $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'current', $current_oid); - $current = (snmp_get($device, $current_oid, '-Oqv') / $divisor); - $type = 'rfc1628'; - $index = (200 + $i); - - discover_sensor($valid['sensor'], 'current', $device, $current_oid, $index, $type, $descr, $divisor, '1', null, null, null, null, $current); + discover_sensor( + $valid['sensor'], + 'current', + $device, + $oid, + 200 + $index, + 'rfc1628', + $descr, + $divisor, + 1, + null, + null, + null, + null, + $data['upsBypassCurrent'] / $divisor + ); } + +unset($battery_current, $output_current, $input_current, $bypass_current); diff --git a/includes/discovery/sensors/frequency/rfc1628.inc.php b/includes/discovery/sensors/frequency/rfc1628.inc.php index 6fd2937b35..7968545496 100644 --- a/includes/discovery/sensors/frequency/rfc1628.inc.php +++ b/includes/discovery/sensors/frequency/rfc1628.inc.php @@ -2,42 +2,77 @@ echo 'RFC1628 '; -$oids = trim(snmp_walk($device, '.1.3.6.1.2.1.33.1.3.2.0', '-OsqnU')); -d_echo($oids."\n"); - -list($unused,$numPhase) = explode(' ', $oids); -for ($i = 1; $i <= $numPhase; $i++) { - $freq_oid = ".1.3.6.1.2.1.33.1.3.3.1.2.$i"; +$input_freq = snmpwalk_group($device, 'upsInputFrequency', 'UPS-MIB'); +foreach ($input_freq as $index => $data) { + $freq_oid = ".1.3.6.1.2.1.33.1.3.3.1.2.$index"; + $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'frequency', $freq_oid); $descr = 'Input'; - if ($numPhase > 1) { - $descr .= " Phase $i"; + if (count($input_freq) > 1) { + $descr .= " Phase $index"; } - $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'frequency', $freq_oid); - $current = (snmp_get($device, $freq_oid, '-Oqv') / $divisor); - $type = 'rfc1628'; - $index = '3.2.0.'.$i; - discover_sensor($valid['sensor'], 'frequency', $device, $freq_oid, $index, $type, $descr, $divisor, '1', null, null, null, null, $current); + discover_sensor( + $valid['sensor'], + 'frequency', + $device, + $freq_oid, + "3.2.0.$index", + 'rfc1628', + $descr, + $divisor, + 1, + null, + null, + null, + null, + $data['upsInputFrequency'] / $divisor + ); } -$freq_oid = '.1.3.6.1.2.1.33.1.4.2.0'; -$current_freq = snmp_get($device, $freq_oid, '-Oqv'); -if (is_numeric($current_freq)) { - $descr = 'Output'; +$output_freq = snmp_get($device, 'upsOutputFrequency.0', '-OqvU', 'UPS-MIB'); +if (is_numeric($output_freq)) { + $freq_oid = '.1.3.6.1.2.1.33.1.4.2.0'; $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'frequency', $freq_oid); - $type = 'rfc1628'; - $index = '4.2.0'; - discover_sensor($valid['sensor'], 'frequency', $device, $freq_oid, $index, $type, $descr, $divisor, 1, null, null, null, null, $current_freq / $divisor); + discover_sensor( + $valid['sensor'], + 'frequency', + $device, + $freq_oid, + '4.2.0', + 'rfc1628', + 'Output', + $divisor, + 1, + null, + null, + null, + null, + $output_freq / $divisor + ); } -$freq_oid = '.1.3.6.1.2.1.33.1.5.1.0'; -$current_freq = snmp_get($device, $freq_oid, '-Oqv'); -if (is_numeric($current_freq)) { - $descr = 'Bypass'; +$bypass_freq = snmp_get($device, 'upsBypassFrequency.0', '-OqvU', 'UPS-MIB'); +if (is_numeric($bypass_freq)) { + $freq_oid = '.1.3.6.1.2.1.33.1.5.1.0'; $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'frequency', $freq_oid); - $type = 'rfc1628'; - $index = '5.1.0'; - discover_sensor($valid['sensor'], 'frequency', $device, $freq_oid, $index, $type, $descr, $divisor, 1, null, null, null, null, $current_freq / $divisor); + discover_sensor( + $valid['sensor'], + 'frequency', + $device, + $freq_oid, + '5.1.0', + 'rfc1628', + 'Bypass', + $divisor, + 1, + null, + null, + null, + null, + $bypass_freq / $divisor + ); } + +unset($input_freq, $output_freq, $bypass_freq); diff --git a/includes/discovery/sensors/load/rfc1628.inc.php b/includes/discovery/sensors/load/rfc1628.inc.php index 61e2f91b61..f6e52f8bb0 100644 --- a/includes/discovery/sensors/load/rfc1628.inc.php +++ b/includes/discovery/sensors/load/rfc1628.inc.php @@ -2,23 +2,30 @@ echo 'RFC1628 '; -$oids = snmp_walk($device, '.1.3.6.1.2.1.33.1.4.4.1.5', '-Osqn', 'UPS-MIB'); -d_echo($oids."\n"); +$load_data = snmpwalk_group($device, 'upsOutputPercentLoad', 'UPS-MIB'); -$oids = trim($oids); -foreach (explode("\n", $oids) as $data) { - $data = trim($data); - if ($data) { - list($oid,$descr) = explode(' ', $data, 2); - $split_oid = explode('.', $oid); - $current_id = $split_oid[(count($split_oid) - 1)]; - $current_oid = ".1.3.6.1.2.1.33.1.4.4.1.5.$current_id"; - $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'load', $current_oid); - $current = (snmp_get($device, $current_oid, '-O vq') / $divisor); - $descr = 'Percentage load'.(count(explode("\n", $oids)) == 1 ? '' : ' '.($current_id + 1)); - $type = 'rfc1628'; - $index = (500 + $current_id); - - discover_sensor($valid['sensor'], 'load', $device, $current_oid, $index, $type, $descr, $divisor, '1', null, null, null, null, $current); +foreach ($load_data as $index => $data) { + $load_oid = ".1.3.6.1.2.1.33.1.4.4.1.5.$index"; + $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'load', $load_oid); + $descr = 'Percentage load'; + if (count($load_data) > 1) { + $descr .= " $index"; } + + discover_sensor( + $valid['sensor'], + 'load', + $device, + $load_oid, + 500 + $index, + 'rfc1628', + $descr, + $divisor, + 1, + null, + null, + null, + null, + $data['upsOutputPercentLoad'] / $divisor + ); } diff --git a/includes/discovery/sensors/power/rfc1628.inc.php b/includes/discovery/sensors/power/rfc1628.inc.php index 0563c66e33..ba0325d355 100644 --- a/includes/discovery/sensors/power/rfc1628.inc.php +++ b/includes/discovery/sensors/power/rfc1628.inc.php @@ -1,60 +1,81 @@ 1) { - $descr .= " Phase $i"; +$output_power = snmpwalk_group($device, 'upsOutputPower', 'UPS-MIB'); +foreach ($output_power as $index => $data) { + $descr = 'Output'; + if (count($output_power) > 1) { + $descr .= " Phase $index"; } - $current = snmp_get($device, $current_oid, "-Oqv"); - $type = "rfc1628"; - $precision = 1; - $index = 300+$i; - if (is_numeric($current)) { - discover_sensor($valid['sensor'], 'power', $device, $current_oid, $index, $type, $descr, '1', '1', null, null, null, null, $current); - } + discover_sensor( + $valid['sensor'], + 'power', + $device, + ".1.3.6.1.2.1.33.1.4.4.1.4.$index", + 300+$index, + "rfc1628", + $descr, + 1, + 1, + null, + null, + null, + null, + $data['upsOutputPower'] + ); } -$oids = trim(snmp_walk($device, ".1.3.6.1.2.1.33.1.3.2.0", "-OsqnU")); -d_echo($oids."\n"); -list($unused,$numPhase) = explode(' ', $oids); -for ($i = 1; $i <= $numPhase; $i++) { - $current_oid = ".1.3.6.1.2.1.33.1.3.3.1.5.$i"; - $descr = "Input"; - if ($numPhase > 1) { - $descr .= " Phase $i"; - } - $current = snmp_get($device, $current_oid, "-Oqv"); - $type = "rfc1628"; - $precision = 1; - $index = 100+$i; - if (is_numeric($current)) { - discover_sensor($valid['sensor'], 'power', $device, $current_oid, $index, $type, $descr, '1', '1', null, null, null, null, $current); +$input_power = snmpwalk_group($device, 'upsInputTruePower', 'UPS-MIB'); +foreach ($input_power as $index => $data) { + $descr = 'Input'; + if (count($input_power) > 1) { + $descr .= " Phase $index"; } + + discover_sensor( + $valid['sensor'], + 'power', + $device, + ".1.3.6.1.2.1.33.1.3.3.1.5.$index", + 100+$index, + "rfc1628", + $descr, + 1, + 1, + null, + null, + null, + null, + $data['upsInputTruePower'] + ); } -$oids = trim(snmp_walk($device, ".1.3.6.1.2.1.33.1.5.2.0", "-OsqnU")); -d_echo($oids."\n"); -list($unused,$numPhase) = explode(' ', $oids); -for ($i = 1; $i <= $numPhase; $i++) { - $current_oid = ".1.3.6.1.2.1.33.1.5.3.1.4.$i"; - $descr = "Bypass"; - if ($numPhase > 1) { - $descr .= " Phase $i"; +$bypass_power = snmpwalk_group($device, 'upsBypassPower', 'UPS-MIB'); +foreach ($bypass_power as $index => $data) { + $descr = 'Bypass'; + if (count($bypass_power) > 1) { + $descr .= " Phase $index"; } - $current = snmp_get($device, $current_oid, "-Oqv"); - $type = "rfc1628"; - $precision = 1; - $index = 200+$i; - if (is_numeric($current)) { - discover_sensor($valid['sensor'], 'power', $device, $current_oid, $index, $type, $descr, '1', '1', null, null, null, null, $current); - } + discover_sensor( + $valid['sensor'], + 'power', + $device, + ".1.3.6.1.2.1.33.1.5.3.1.4.$index", + 200+$index, + "rfc1628", + $descr, + 1, + 1, + null, + null, + null, + null, + $data['upsBypassPower'] + ); } + +unset($output_power, $input_power, $bypass_power); diff --git a/includes/discovery/sensors/state/rfc1628.inc.php b/includes/discovery/sensors/state/rfc1628.inc.php index 73e9017145..9478bf5517 100644 --- a/includes/discovery/sensors/state/rfc1628.inc.php +++ b/includes/discovery/sensors/state/rfc1628.inc.php @@ -4,36 +4,37 @@ echo 'RFC1628 '; // Battery Status (Value : 1 unknown, 2 batteryNormal, 3 batteryLow, 4 batteryDepleted) $state = snmp_get($device, "upsBatteryStatus.0", "-Ovqe", 'UPS-MIB'); -$cur_oid = '.1.3.6.1.2.1.33.1.2.1.0'; -$index = '0'; - if (is_numeric($state)) { //Create State Index $state_name = 'upsBatteryStatusState'; - $state_index_id = create_state_index($state_name); + create_state_index( + $state_name, + array( + array('value' => 1, 'generic' => 3, 'graph' => 0, 'descr' => 'Unknown'), + array('value' => 2, 'generic' => 0, 'graph' => 0, 'descr' => 'Normal'), + array('value' => 3, 'generic' => 2, 'graph' => 0, 'descr' => 'Low'), + array('value' => 4, 'generic' => 2, 'graph' => 0, 'descr' => 'Depleted'), + ) + ); - //Create State Translation - if ($state_index_id) { - $states = array( - array($state_index_id,'Unknown',0,1,3) , - array($state_index_id,'Normal',0,2,0) , - array($state_index_id,'Low',0,3,2) , - array($state_index_id,'Depleted',0,4,2) , - ); - foreach ($states as $value) { - $insert = array( - 'state_index_id' => $value[0], - 'state_descr' => $value[1], - 'state_draw_graph' => $value[2], - 'state_value' => $value[3], - 'state_generic_value' => $value[4] - ); - dbInsert($insert, 'state_translations'); - } - } - - //Discover Sensors - discover_sensor($valid['sensor'], 'state', $device, $cur_oid, $index, $state_name, 'Battery Status', '1', '1', null, null, null, null, $state, 'snmp', $index); + discover_sensor( + $valid['sensor'], + 'state', + $device, + '.1.3.6.1.2.1.33.1.2.1.0', + 0, + $state_name, + 'Battery Status', + 1, + 1, + null, + null, + null, + null, + $state, + 'snmp', + 0 + ); //Create Sensor To State Index create_sensor_to_state_index($device, $state_name, $index); @@ -41,39 +42,40 @@ if (is_numeric($state)) { // Output Source (Value : 1 other, 2 none, 3 normal, 4 bypass, 5 battery, 6 booster, 7 reducer) $state = snmp_get($device, "upsOutputSource.0", "-Ovqe", 'UPS-MIB'); -$cur_oid = '.1.3.6.1.2.1.33.1.4.1.0'; -$index = '0'; - if (is_numeric($state)) { //Create State Index $state_name = 'upsOutputSourceState'; - $state_index_id = create_state_index($state_name); + create_state_index( + $state_name, + array( + array('value' => 1, 'generic' => 3, 'graph' => 0, 'descr' => 'Other'), + array('value' => 2, 'generic' => 3, 'graph' => 0, 'descr' => 'None'), + array('value' => 3, 'generic' => 0, 'graph' => 0, 'descr' => 'Normal'), + array('value' => 4, 'generic' => 2, 'graph' => 0, 'descr' => 'Bypass'), + array('value' => 5, 'generic' => 2, 'graph' => 0, 'descr' => 'Battery'), + array('value' => 6, 'generic' => 2, 'graph' => 0, 'descr' => 'Booster'), + array('value' => 7, 'generic' => 2, 'graph' => 0, 'descr' => 'Reducer'), + ) + ); - //Create State Translation - if ($state_index_id) { - $states = array( - array($state_index_id,'Other',0,1,3) , - array($state_index_id,'None',0,2,3) , - array($state_index_id,'Normal',0,3,0) , - array($state_index_id,'Bypass',0,4,2) , - array($state_index_id,'Battery',0,5,2) , - array($state_index_id,'Booster',0,6,2) , - array($state_index_id,'Reducer',0,7,2) , - ); - foreach ($states as $value) { - $insert = array( - 'state_index_id' => $value[0], - 'state_descr' => $value[1], - 'state_draw_graph' => $value[2], - 'state_value' => $value[3], - 'state_generic_value' => $value[4] - ); - dbInsert($insert, 'state_translations'); - } - } - - //Discover Sensors - discover_sensor($valid['sensor'], 'state', $device, $cur_oid, $index, $state_name, 'Output Source', '1', '1', null, null, null, null, $state, 'snmp', $index); + discover_sensor( + $valid['sensor'], + 'state', + $device, + '.1.3.6.1.2.1.33.1.4.1.0', + 0, + $state_name, + 'Output Source', + 1, + 1, + null, + null, + null, + null, + $state, + 'snmp', + 0 + ); //Create Sensor To State Index create_sensor_to_state_index($device, $state_name, $index); diff --git a/includes/discovery/sensors/temperature/rfc1628.inc.php b/includes/discovery/sensors/temperature/rfc1628.inc.php index 8cc551b702..7e69a09373 100644 --- a/includes/discovery/sensors/temperature/rfc1628.inc.php +++ b/includes/discovery/sensors/temperature/rfc1628.inc.php @@ -1,23 +1,25 @@ 1) { - $descr .= " Phase $i"; - } - - $type = 'rfc1628'; +$battery_volts = snmp_get($device, 'upsBatteryVoltage.0', '-OqvU', 'UPS-MIB'); +if (is_numeric($battery_volts)) { + $volt_oid = '.1.3.6.1.2.1.33.1.2.5.0'; $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'voltage', $volt_oid); - $current = (snmp_get($device, $volt_oid, '-Oqv') / $divisor); - $index = $i; - - discover_sensor($valid['sensor'], 'voltage', $device, $volt_oid, $index, $type, $descr, $divisor, '1', null, null, null, null, $current); + discover_sensor( + $valid['sensor'], + 'voltage', + $device, + $volt_oid, + '1.2.5.0', + 'rfc1628', + 'Battery', + $divisor, + 1, + null, + null, + null, + null, + $battery_volts / $divisor + ); } -$oids = trim(snmp_walk($device, '.1.3.6.1.2.1.33.1.3.2.0', '-OsqnU')); -d_echo($oids."\n"); - -list($unused,$numPhase) = explode(' ', $oids); -for ($i = 1; $i <= $numPhase; $i++) { - $volt_oid = ".1.3.6.1.2.1.33.1.3.3.1.3.$i"; - $descr = 'Input'; - if ($numPhase > 1) { - $descr .= " Phase $i"; +$output_volts = snmpwalk_group($device, 'upsOutputVoltage', 'UPS-MIB'); +foreach ($output_volts as $index => $data) { + $volt_oid = ".1.3.6.1.2.1.33.1.4.4.1.2.$index"; + $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'voltage', $volt_oid); + $descr = 'Output'; + if (count($output_volts) > 1) { + $descr .= " Phase $index"; } - $type = 'rfc1628'; - $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'voltage', $volt_oid); - - $current = (snmp_get($device, $volt_oid, '-Oqv') / $divisor); - - $index = (100 + $i); - - discover_sensor($valid['sensor'], 'voltage', $device, $volt_oid, $index, $type, $descr, $divisor, '1', null, null, null, null, $current); + discover_sensor( + $valid['sensor'], + 'voltage', + $device, + $volt_oid, + $index, + 'rfc1628', + $descr, + $divisor, + 1, + null, + null, + null, + null, + $data['upsOutputVoltage'] / $divisor + ); } -$oids = trim(snmp_walk($device, '.1.3.6.1.2.1.33.1.5.2.0', '-OsqnU')); -d_echo($oids."\n"); - -list($unused,$numPhase) = explode(' ', $oids); -for ($i = 1; $i <= $numPhase; $i++) { - $volt_oid = ".1.3.6.1.2.1.33.1.5.3.1.2.$i"; - $descr = 'Bypass'; - if ($numPhase > 1) { - $descr .= " Phase $i"; +$input_volts = snmpwalk_group($device, 'upsInputVoltage', 'UPS-MIB'); +foreach ($input_volts as $index => $data) { + $volt_oid = ".1.3.6.1.2.1.33.1.3.3.1.3.$index"; + $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'voltage', $volt_oid); + $descr = 'Input'; + if (count($input_volts) > 1) { + $descr .= " Phase $index"; } - $type = 'rfc1628'; - $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'voltage', $volt_oid); - - $current = (snmp_get($device, $volt_oid, '-Oqv') / $divisor); - $index = (200 + $i); - - discover_sensor($valid['sensor'], 'voltage', $device, $volt_oid, $index, $type, $descr, $divisor, '1', null, null, null, null, $current); + discover_sensor( + $valid['sensor'], + 'voltage', + $device, + $volt_oid, + 100 + $index, + 'rfc1628', + $descr, + $divisor, + 1, + null, + null, + null, + null, + $data['upsInputVoltage'] / $divisor + ); } + +$bypass_volts = snmpwalk_group($device, 'upsBypassVoltage', 'UPS-MIB'); +foreach ($bypass_volts as $index => $data) { + $volt_oid = ".1.3.6.1.2.1.33.1.5.3.1.2.$index"; + $divisor = get_device_divisor($device, $pre_cache['poweralert_serial'], 'voltage', $volt_oid); + $descr = 'Bypass'; + if (count($bypass_volts) > 1) { + $descr .= " Phase $index"; + } + + discover_sensor( + $valid['sensor'], + 'voltage', + $device, + $volt_oid, + 200 + $index, + 'rfc1628', + $descr, + $divisor, + 1, + null, + null, + null, + null, + $data['upsBypassVoltage'] / $divisor + ); +} + +unset($input_volts, $output_volts, $battery_volts, $bypass_volts);