459 lines
20 KiB
PHP
459 lines
20 KiB
PHP
<?php
|
|
/**
|
|
* Observium
|
|
*
|
|
* This file is part of Observium.
|
|
*
|
|
* @package observium
|
|
* @subpackage discovery
|
|
* @copyright (C) Adam Armstrong
|
|
*
|
|
*/
|
|
|
|
echo(" PDU2-MIB ");
|
|
$mib = 'PDU2-MIB';
|
|
|
|
$pduId = '1'; // PX2/3 and transfer switch: pduiId = 1
|
|
|
|
// SensorTypeEnumeration
|
|
$oid_types = [
|
|
'rmsCurrent' => ['type' => 'current', 'index' => 1],
|
|
'peakCurrent' => ['type' => 'current', 'index' => 2],
|
|
'unbalancedCurrent' => ['type' => 'current', 'index' => 3],
|
|
'rmsVoltage' => ['type' => 'voltage', 'index' => 4],
|
|
'activePower' => ['type' => 'power', 'index' => 5],
|
|
'apparentPower' => ['type' => 'apower', 'index' => 6],
|
|
'powerFactor' => ['type' => 'powerfactor', 'index' => 7],
|
|
'activeEnergy' => ['type' => 'energy', 'index' => 8],
|
|
'apparentEnergy' => ['type' => 'aenergy', 'index' => 9],
|
|
'temperature' => ['type' => 'temperature', 'index' => 10],
|
|
'humidity' => ['type' => 'humidity', 'index' => 11],
|
|
'airFlow' => ['type' => '', 'index' => 12],
|
|
'airPressure' => ['type' => '', 'index' => 13],
|
|
'onOff' => ['type' => '', 'index' => 14],
|
|
'trip' => ['type' => '', 'index' => 15],
|
|
'vibration' => ['type' => '', 'index' => 16],
|
|
'waterDetection' => ['type' => '', 'index' => 17],
|
|
'smokeDetection' => ['type' => '', 'index' => 18],
|
|
'binary' => ['type' => '', 'index' => 19],
|
|
//'contact' => [ 'type' => '', 'index' => 20 ],
|
|
'fanSpeed' => ['type' => 'fanspeed', 'index' => 21],
|
|
'surgeProtectorStatus' => ['type' => '', 'index' => 22],
|
|
'frequency' => ['type' => 'frequency', 'index' => 23],
|
|
//'phaseAngle' => [ 'type' => '', 'index' => 24 ],
|
|
'rmsVoltageLN' => ['type' => 'voltage', 'index' => 25],
|
|
'residualCurrent' => ['type' => 'current', 'index' => 26],
|
|
'rcmState' => ['type' => '', 'index' => 27],
|
|
'absoluteHumidity' => ['type' => 'humidity', 'index' => 28],
|
|
'reactivePower' => ['type' => 'rpower', 'index' => 29],
|
|
'other' => ['type' => '', 'index' => 30],
|
|
'none' => ['type' => '', 'index' => 31],
|
|
'powerQuality' => ['type' => '', 'index' => 32],
|
|
'overloadStatus' => ['type' => '', 'index' => 33],
|
|
'overheatStatus' => ['type' => '', 'index' => 34],
|
|
'displacementPowerFactor' => ['type' => '', 'index' => 35],
|
|
'fanStatus' => ['type' => '', 'index' => 37],
|
|
//'inletPhaseSyncAngle' => [ 'type' => '', 'index' => 38 ],
|
|
//'inletPhaseSync' => [ 'type' => '', 'index' => 39 ],
|
|
'operatingState' => ['type' => '', 'index' => 40],
|
|
'activeInlet' => ['type' => '', 'index' => 41],
|
|
'illuminance' => ['type' => 'illuminance', 'index' => 42],
|
|
'doorContact' => ['type' => '', 'index' => 43],
|
|
'tamperDetection' => ['type' => '', 'index' => 44],
|
|
'motionDetection' => ['type' => '', 'index' => 45],
|
|
'i1smpsStatus' => ['type' => '', 'index' => 46],
|
|
'i2smpsStatus' => ['type' => '', 'index' => 47],
|
|
'switchStatus' => ['type' => '', 'index' => 48],
|
|
];
|
|
|
|
// SensorUnitsEnumeration
|
|
$oid_units = [
|
|
//none(-1),
|
|
//other(0),
|
|
'volt' => ['type' => 'voltage'],
|
|
'amp' => ['type' => 'current'],
|
|
'watt' => ['type' => 'power'],
|
|
'voltamp' => ['type' => 'apower'],
|
|
'wattHour' => ['type' => 'energy'],
|
|
'voltampHour' => ['type' => 'aenergy'],
|
|
'degreeC' => ['type' => 'temperature', 'unit' => 'C'],
|
|
'hertz' => ['type' => 'frequency'],
|
|
'percent' => ['type' => 'humidity'],
|
|
'meterpersec' => ['type' => 'velocity'],
|
|
'pascal' => ['type' => 'pressure'],
|
|
'psi' => ['type' => 'pressure', 'unit' => 'psi'],
|
|
//g(13),
|
|
'degreeF' => ['type' => 'temperature', 'unit' => 'F'],
|
|
//feet(15),
|
|
//inches(16),
|
|
//cm(17),
|
|
//meters(18),
|
|
'rpm' => ['type' => 'fanspeed'],
|
|
//degrees(20),
|
|
'lux' => ['type' => 'illuminance'],
|
|
//grampercubicmeter(22),
|
|
'var' => ['type' => 'rpower'],
|
|
];
|
|
|
|
// Inlets
|
|
$names = snmpwalk_cache_oid($device, "inletName", [], $mib);
|
|
$oids = snmpwalk_cache_oid($device, "inletSensorUnits", [], $mib);
|
|
$oids = snmpwalk_cache_oid($device, "inletSensorDecimalDigits", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "inletSensorEnabledThresholds", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "inletSensorLowerCriticalThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "inletSensorLowerWarningThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "inletSensorUpperWarningThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "inletSensorUpperCriticalThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsInletSensorIsAvailable", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsInletSensorState", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsInletSensorValue", $oids, $mib);
|
|
print_debug_vars($names);
|
|
print_debug_vars($oids);
|
|
|
|
foreach ($oids as $index => $entry) {
|
|
[$pduId, $id, $sensorType] = explode('.', $index);
|
|
$index_id = $pduId . '.' . $id;
|
|
$index = $index_id . '.' . $oid_types[$sensorType]['index']; // Convert to numeric index
|
|
|
|
if (!isset($oid_types[$sensorType]) || $entry['measurementsInletSensorIsAvailable'] === 'false') {
|
|
continue;
|
|
}
|
|
|
|
if ($names[$index_id]['inletName'] != '') {
|
|
$descr = "Inlet $index_id: " . $names[$index_id]['inletName'];
|
|
} else {
|
|
$descr = "Inlet $index_id";
|
|
}
|
|
|
|
$scale = si_to_scale($entry['inletSensorDecimalDigits'] * -1);
|
|
$oid_name = 'measurementsInletSensorValue';
|
|
$oid_num = '.1.3.6.1.4.1.13742.6.5.2.3.1.4.' . $index;
|
|
$type = $mib . '-' . $oid_name;
|
|
$value = $entry[$oid_name];
|
|
|
|
// Limits (based on enabled thresholds)
|
|
// SYNTAX BITS {
|
|
// lowerCritical(0),
|
|
// lowerWarning(1),
|
|
// upperWarning(2),
|
|
// upperCritical(3),
|
|
// }
|
|
$options = [];
|
|
$limits_flags = base_convert(str_replace(' ', '', $entry['inletSensorEnabledThresholds']), 16, 10);
|
|
if (is_flag_set(bindec(10000000), $limits_flags)) // 0b 1000 0000
|
|
{
|
|
$options['limit_low'] = $entry['inletSensorLowerCriticalThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(1000000), $limits_flags)) // 0b 0100 0000
|
|
{
|
|
$options['limit_low_warn'] = $entry['inletSensorLowerWarningThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(100000), $limits_flags)) // 0b 0010 0000
|
|
{
|
|
$options['limit_high_warn'] = $entry['inletSensorUpperWarningThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(10000), $limits_flags)) // 0b 0001 0000
|
|
{
|
|
$options['limit_high'] = $entry['inletSensorUpperCriticalThreshold'] * $scale;
|
|
}
|
|
|
|
// Detect type & unit
|
|
$unit = [];
|
|
if ($entry['inletSensorUnits'] === 'percent' && !in_array($sensorType, ['humidity', 'absoluteHumidity'])) {
|
|
$unit = ['type' => 'load'];
|
|
} elseif (isset($oid_units[$entry['inletSensorUnits']])) {
|
|
$unit = $oid_units[$entry['inletSensorUnits']];
|
|
} elseif (!empty($oid_types[$sensorType]['type'])) {
|
|
// Other sensors based on SensorTypeEnumeration
|
|
$unit = $oid_types[$sensorType];
|
|
} else {
|
|
$oid_name = 'measurementsInletSensorState';
|
|
$oid_num = '.1.3.6.1.4.1.13742.6.5.2.3.1.3.' . $index;
|
|
$type = 'pdu2-sensorstate';
|
|
$value = $entry[$oid_name];
|
|
|
|
discover_status($device, $oid_num, $oid_name . '.' . $index, $type, $descr, $value, ['entPhysicalClass' => 'other']);
|
|
continue;
|
|
}
|
|
|
|
if (isset($unit['type'])) {
|
|
if (isset($unit['unit'])) {
|
|
$options['sensor_unit'] = $unit['unit'];
|
|
}
|
|
|
|
if (isset($config['counter_types'][$unit['type']])) {
|
|
// Counters
|
|
discover_counter($device, $unit['type'], $mib, $oid_name, $oid_num, $index, $descr, $scale, $value, $options);
|
|
} else {
|
|
// FIXME convert to discover_sensor_ng()
|
|
discover_sensor($unit['type'], $device, $oid_num, $index, $type, $descr, $scale, $value, $options);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Outlets
|
|
$names = snmpwalk_cache_oid($device, "outletName", [], $mib);
|
|
$oids = snmpwalk_cache_oid($device, "outletSensorUnits", [], $mib);
|
|
$oids = snmpwalk_cache_oid($device, "outletSensorDecimalDigits", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "outletSensorEnabledThresholds", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "outletSensorLowerCriticalThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "outletSensorLowerWarningThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "outletSensorUpperWarningThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "outletSensorUpperCriticalThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsOutletSensorIsAvailable", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsOutletSensorState", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsOutletSensorValue", $oids, $mib);
|
|
print_debug_vars($names);
|
|
print_debug_vars($oids);
|
|
|
|
foreach ($oids as $index => $entry) {
|
|
[$pduId, $id, $sensorType] = explode('.', $index);
|
|
$index_id = $pduId . '.' . $id;
|
|
$index = $index_id . '.' . $oid_types[$sensorType]['index']; // Convert to numeric index
|
|
|
|
if (!isset($oid_types[$sensorType]) || $entry['measurementsOutletSensorIsAvailable'] === 'false') {
|
|
continue;
|
|
}
|
|
|
|
if ($names[$index_id]['outletName'] != '') {
|
|
$descr = "Outlet $index_id: " . $names[$index_id]['outletName'];
|
|
} else {
|
|
$descr = "Outlet $index_id";
|
|
}
|
|
|
|
$scale = si_to_scale($entry['outletSensorDecimalDigits'] * -1);
|
|
$oid_name = 'measurementsOutletSensorValue';
|
|
$oid_num = '.1.3.6.1.4.1.13742.6.5.4.3.1.4.' . $index;
|
|
$type = $mib . '-' . $oid_name;
|
|
$value = $entry[$oid_name];
|
|
|
|
// Limits (based on enabled thresholds)
|
|
// SYNTAX BITS {
|
|
// lowerCritical(0),
|
|
// lowerWarning(1),
|
|
// upperWarning(2),
|
|
// upperCritical(3),
|
|
// }
|
|
$options = [];
|
|
$limits_flags = base_convert(str_replace(' ', '', $entry['outletSensorEnabledThresholds']), 16, 10);
|
|
if (is_flag_set(bindec(10000000), $limits_flags)) // 0b 1000 0000
|
|
{
|
|
$options['limit_low'] = $entry['outletSensorLowerCriticalThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(1000000), $limits_flags)) // 0b 0100 0000
|
|
{
|
|
$options['limit_low_warn'] = $entry['outletSensorLowerWarningThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(100000), $limits_flags)) // 0b 0010 0000
|
|
{
|
|
$options['limit_high_warn'] = $entry['outletSensorUpperWarningThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(10000), $limits_flags)) // 0b 0001 0000
|
|
{
|
|
$options['limit_high'] = $entry['outletSensorUpperCriticalThreshold'] * $scale;
|
|
}
|
|
|
|
// Detect type & unit
|
|
$unit = [];
|
|
if (isset($oid_units[$entry['outletSensorUnits']])) {
|
|
$unit = $oid_units[$entry['outletSensorUnits']];
|
|
} elseif (!empty($oid_types[$sensorType]['type'])) {
|
|
// Other sensors based on SensorTypeEnumeration
|
|
$unit = $oid_types[$sensorType];
|
|
} else {
|
|
$oid_name = 'measurementsOutletSensorState';
|
|
$oid_num = '.1.3.6.1.4.1.13742.6.5.4.3.1.3.' . $index;
|
|
$type = 'pdu2-sensorstate';
|
|
$value = $entry[$oid_name];
|
|
|
|
discover_status($device, $oid_num, $oid_name . '.' . $index, $type, $descr, $value, ['entPhysicalClass' => 'other']);
|
|
continue;
|
|
}
|
|
|
|
if (isset($unit['type'])) {
|
|
if (isset($unit['unit'])) {
|
|
$options['sensor_unit'] = $unit['unit'];
|
|
}
|
|
|
|
discover_sensor($unit['type'], $device, $oid_num, $index, $type, $descr, $scale, $value, $options);
|
|
}
|
|
}
|
|
|
|
// Over Current Protectors
|
|
$names = snmpwalk_cache_oid($device, "overCurrentProtectorName", [], $mib);
|
|
$oids = snmpwalk_cache_oid($device, "overCurrentProtectorSensorUnits", [], $mib);
|
|
$oids = snmpwalk_cache_oid($device, "overCurrentProtectorSensorDecimalDigits", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "overCurrentProtectorSensorEnabledThresholds", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "overCurrentProtectorSensorLowerCriticalThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "overCurrentProtectorSensorLowerWarningThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "overCurrentProtectorSensorUpperWarningThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "overCurrentProtectorSensorUpperCriticalThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsOverCurrentProtectorSensorIsAvailable", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsOverCurrentProtectorSensorState", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsOverCurrentProtectorSensorValue", $oids, $mib);
|
|
print_debug_vars($names);
|
|
print_debug_vars($oids);
|
|
|
|
foreach ($oids as $index => $entry) {
|
|
[$pduId, $id, $sensorType] = explode('.', $index);
|
|
$index_id = $pduId . '.' . $id;
|
|
$index = $index_id . '.' . $oid_types[$sensorType]['index']; // Convert to numeric index
|
|
|
|
if (!isset($oid_types[$sensorType]) || $entry['measurementsOverCurrentProtectorSensorIsAvailable'] === 'false') {
|
|
continue;
|
|
}
|
|
|
|
if ($names[$index_id]['overCurrentProtectorName'] != '') {
|
|
$descr = "Over Current Protector $index_id: " . $names[$index_id]['overCurrentProtectorName'];
|
|
} else {
|
|
$descr = "Over Current Protector $index_id";
|
|
}
|
|
|
|
$scale = si_to_scale($entry['overCurrentProtectorSensorDecimalDigits'] * -1);
|
|
$oid_name = 'measurementsOverCurrentProtectorSensorValue';
|
|
$oid_num = '.1.3.6.1.4.1.13742.6.5.3.3.1.4.' . $index;
|
|
$type = $mib . '-' . $oid_name;
|
|
$value = $entry[$oid_name];
|
|
|
|
// Limits (based on enabled thresholds)
|
|
// SYNTAX BITS {
|
|
// lowerCritical(0),
|
|
// lowerWarning(1),
|
|
// upperWarning(2),
|
|
// upperCritical(3),
|
|
// }
|
|
$options = [];
|
|
$limits_flags = base_convert(str_replace(' ', '', $entry['overCurrentProtectorSensorEnabledThresholds']), 16, 10);
|
|
if (is_flag_set(bindec(10000000), $limits_flags)) // 0b 1000 0000
|
|
{
|
|
$options['limit_low'] = $entry['overCurrentProtectorSensorLowerCriticalThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(1000000), $limits_flags)) // 0b 0100 0000
|
|
{
|
|
$options['limit_low_warn'] = $entry['overCurrentProtectorSensorLowerWarningThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(100000), $limits_flags)) // 0b 0010 0000
|
|
{
|
|
$options['limit_high_warn'] = $entry['overCurrentProtectorSensorUpperWarningThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(10000), $limits_flags)) // 0b 0001 0000
|
|
{
|
|
$options['limit_high'] = $entry['overCurrentProtectorSensorUpperCriticalThreshold'] * $scale;
|
|
}
|
|
|
|
// Detect type & unit
|
|
$unit = [];
|
|
if (isset($oid_units[$entry['overCurrentProtectorSensorUnits']])) {
|
|
$unit = $oid_units[$entry['overCurrentProtectorSensorUnits']];
|
|
} elseif (!empty($oid_types[$sensorType]['type'])) {
|
|
// Other sensors based on SensorTypeEnumeration
|
|
$unit = $oid_types[$sensorType];
|
|
} else {
|
|
$oid_name = 'measurementsOverCurrentProtectorSensorState';
|
|
$oid_num = '.1.3.6.1.4.1.13742.6.5.3.3.1.3.' . $index;
|
|
$type = 'pdu2-sensorstate';
|
|
$value = $entry[$oid_name];
|
|
|
|
discover_status($device, $oid_num, $oid_name . '.' . $index, $type, $descr, $value, ['entPhysicalClass' => 'other']);
|
|
continue;
|
|
}
|
|
|
|
if (isset($unit['type'])) {
|
|
if (isset($unit['unit'])) {
|
|
$options['sensor_unit'] = $unit['unit'];
|
|
}
|
|
|
|
discover_sensor($unit['type'], $device, $oid_num, $index, $type, $descr, $scale, $value, $options);
|
|
}
|
|
}
|
|
|
|
// External Sensors
|
|
$oids = snmpwalk_cache_oid($device, "externalSensorName", [], $mib);
|
|
$oids = snmpwalk_cache_oid($device, "externalSensorDescription", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "externalSensorType", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "externalSensorUnits", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "externalSensorDecimalDigits", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "externalSensorEnabledThresholds", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "externalSensorLowerCriticalThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "externalSensorLowerWarningThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "externalSensorUpperWarningThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "externalSensorUpperCriticalThreshold", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsExternalSensorIsAvailable", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsExternalSensorState", $oids, $mib);
|
|
$oids = snmpwalk_cache_oid($device, "measurementsExternalSensorValue", $oids, $mib);
|
|
print_debug_vars($oids);
|
|
|
|
foreach ($oids as $index => $entry) {
|
|
$sensorType = $entry['externalSensorType'];
|
|
|
|
if (!isset($oid_types[$sensorType]) || $entry['measurementsExternalSensorIsAvailable'] === 'false') {
|
|
continue;
|
|
}
|
|
|
|
$descr = "Sensor $index";
|
|
if ($entry['externalSensorName'] != '') {
|
|
$descr .= ": " . $entry['externalSensorName'];
|
|
} elseif ($entry['externalSensorDescription'] != '') {
|
|
$descr .= ": " . $entry['externalSensorDescription'];
|
|
}
|
|
|
|
$scale = si_to_scale($entry['externalSensorDecimalDigits'] * -1);
|
|
$oid_name = 'measurementsExternalSensorValue';
|
|
$oid_num = '.1.3.6.1.4.1.13742.6.5.5.3.1.4.' . $index;
|
|
$type = $mib . '-' . $oid_name;
|
|
$value = $entry[$oid_name];
|
|
|
|
// Limits (based on enabled thresholds)
|
|
// SYNTAX BITS {
|
|
// lowerCritical(0),
|
|
// lowerWarning(1),
|
|
// upperWarning(2),
|
|
// upperCritical(3),
|
|
// }
|
|
$options = [];
|
|
$limits_flags = base_convert(str_replace(' ', '', $entry['externalSensorEnabledThresholds']), 16, 10);
|
|
if (is_flag_set(bindec(10000000), $limits_flags)) // 0b 1000 0000
|
|
{
|
|
$options['limit_low'] = $entry['externalSensorLowerCriticalThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(1000000), $limits_flags)) // 0b 0100 0000
|
|
{
|
|
$options['limit_low_warn'] = $entry['externalSensorLowerWarningThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(100000), $limits_flags)) // 0b 0010 0000
|
|
{
|
|
$options['limit_high_warn'] = $entry['externalSensorUpperWarningThreshold'] * $scale;
|
|
}
|
|
if (is_flag_set(bindec(10000), $limits_flags)) // 0b 0001 0000
|
|
{
|
|
$options['limit_high'] = $entry['externalSensorUpperCriticalThreshold'] * $scale;
|
|
}
|
|
|
|
// Detect type & unit
|
|
$unit = [];
|
|
if (isset($oid_units[$entry['externalSensorUnits']])) {
|
|
$unit = $oid_units[$entry['externalSensorUnits']];
|
|
} elseif (!empty($oid_types[$sensorType]['type'])) {
|
|
// Other sensors based on SensorTypeEnumeration
|
|
$unit = $oid_types[$sensorType];
|
|
} else {
|
|
$oid_name = 'measurementsExternalSensorState';
|
|
$oid_num = '.1.3.6.1.4.1.13742.6.5.5.3.1.3.' . $index;
|
|
$type = 'pdu2-sensorstate';
|
|
$value = $entry[$oid_name];
|
|
|
|
discover_status($device, $oid_num, $oid_name . '.' . $index, $type, $descr, $value, ['entPhysicalClass' => 'other']);
|
|
continue;
|
|
}
|
|
|
|
if (isset($unit['type'])) {
|
|
if (isset($unit['unit'])) {
|
|
$options['sensor_unit'] = $unit['unit'];
|
|
}
|
|
|
|
discover_sensor($unit['type'], $device, $oid_num, $index, $type, $descr, $scale, $value, $options);
|
|
}
|
|
}
|
|
|
|
// EOF
|