diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index c7fcfb874a..7845d70a39 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -713,3 +713,95 @@ function check_entity_sensor($string, $device) { return $valid; } + +/** + * Helper function to improve readability + * Can't use mib based polling, because the snmp implentation and mibs are terrible + * + * @param (device) array - device array + * @param (sensor) array(id, oid, type, descr, descr_oid, min, max, divisor) + */ +function avtech_add_sensor($device, $sensor) { + global $valid; + + // set the id, must be unique + if ($sensor['id']) { + $id = $sensor['id']; + } + else { + d_echo('Error: No id set for this sensor' . "\n"); + return false; + } + d_echo('Sensor id: ' . $id . "\n"); + + + // set the sensor oid + if ($sensor['oid']) { + $oid = $sensor['oid']; + } + else { + d_echo('Error: No oid set for this sensor' . "\n"); + return false; + } + d_echo('Sensor oid: ' . $oid . "\n"); + + // get the sensor value + $value = snmp_get($device, $oid, '-OvQ'); + // if the sensor doesn't exist abort + if ($value === false || $value == 0) { //issue unfortunately non-existant sensors return 0 + d_echo('Error: sensor returned no data, skipping' . "\n"); + return false; + } + d_echo('Sensor value: ' . $value . "\n"); + + // get the type + $type = $device['type'] ? $device['type'] : 'temperature'; + d_echo('Sensor type: ' . $type . "\n"); + + + // set the description + if ($sensor['descr_oid']) { + $descr = snmp_get($device, $sensor['descr_oid'], '-OvQ'); + } + elseif ($sensor['descr']) { + $descr = $sensor['descr']; + } + else { + d_echo('Error: No description set for this sensor' . "\n"); + return false; + } + d_echo('Sensor description: ' . $descr . "\n"); + + // set divisor + if ($sensor['divisor']) { + $divisor = $sensor['divisor']; + } + else { + $divisor = 100; + } + d_echo('Sensor divisor: ' . $divisor . "\n"); + + + // set min for alarm + if ($sensor['min_oid']) { + $min = snmp_get($device, $sensor['min_oid'], '-OvQ') / $divisor; + } + else { + $min = null; + } + d_echo('Sensor alarm min: ' . $min . "\n"); + + // set max for alarm + if ($sensor['max_oid']) { + $max = snmp_get($device, $sensor['max_oid'], '-OvQ') / $divisor; + } + else { + $max = null; + } + d_echo('Sensor alarm max: ' . $max . "\n"); + + // add the sensor + discover_sensor($valid['sensor'], $type, $device, $oid, $id, $device['os'], $descr, $divisor, '1', $min, null, null, $max, $value/$divisor); + return true; +} + diff --git a/includes/discovery/sensors/temperatures/avtech.inc.php b/includes/discovery/sensors/temperatures/avtech.inc.php index 829b019e1f..a9f907fc10 100644 --- a/includes/discovery/sensors/temperatures/avtech.inc.php +++ b/includes/discovery/sensors/temperatures/avtech.inc.php @@ -12,23 +12,23 @@ if ($device['os'] == 'avtech') { 'oid' => $device_oid.'1.1.1.1.0', 'descr_oid' => $device_oid.'1.1.2.0', ); - avtech_add_temperature($device, $internal); + avtech_add_sensor($device, $internal); $sen1 = array( 'id' => 2, 'oid' => $device_oid.'1.2.1.1.0', 'descr_oid' => $device_oid.'1.2.1.3.0', ); - avtech_add_temperature($device, $sen1); + avtech_add_sensor($device, $sen1); $sen2 = array( 'id' => 3, 'oid' => $device_oid.'1.2.2.1.0', 'descr_oid' => $device_oid.'1.2.2.3.0', ); - avtech_add_temperature($device, $sen2); + avtech_add_sensor($device, $sen2); } - else if(strpos($device['sysObjectID'], '.20916.1.1') !== false) { + elseif (strpos($device['sysObjectID'], '.20916.1.1') !== false) { // TemPageR 4E $device_oid = '.1.3.6.1.4.1.20916.1.1.'; @@ -39,7 +39,7 @@ if ($device['os'] == 'avtech') { 'max_oid' => $device_oid.'3.1.0', 'min_oid' => $device_oid.'3.2.0', ); - avtech_add_temperature($device, $internal); + avtech_add_sensor($device, $internal); $sen1 = array( 'id' => 2, @@ -48,7 +48,7 @@ if ($device['os'] == 'avtech') { 'max_oid' => $device_oid.'3.3.0', 'min_oid' => $device_oid.'3.4.0', ); - avtech_add_temperature($device, $sen1); + avtech_add_sensor($device, $sen1); $sen2 = array( 'id' => 3, @@ -57,7 +57,7 @@ if ($device['os'] == 'avtech') { 'max_oid' => $device_oid.'3.5.0', 'min_oid' => $device_oid.'3.6.0', ); - avtech_add_temperature($device, $sen2); + avtech_add_sensor($device, $sen2); $sen3 = array( 'id' => 4, @@ -66,9 +66,9 @@ if ($device['os'] == 'avtech') { 'max_oid' => $device_oid.'3.7.0', 'min_oid' => $device_oid.'3.8.0', ); - avtech_add_temperature($device, $sen3); + avtech_add_sensor($device, $sen3); } - else if(strpos($device['sysObjectID'], '.20916.1.6') !== false) { + elseif (strpos($device['sysObjectID'], '.20916.1.6') !== false) { // RoomAlert 4E $device_oid = '.1.3.6.1.4.1.20916.1.6.'; $divisor = 1; @@ -79,7 +79,7 @@ if ($device['os'] == 'avtech') { 'descr_oid' => $device_oid.'1.1.2.1.0', 'divisor' => $divisor, ); - avtech_add_temperature($device, $internal); + avtech_add_sensor($device, $internal); $sen1 = array( 'id' => 2, @@ -87,7 +87,7 @@ if ($device['os'] == 'avtech') { 'descr_oid' => $device_oid.'1.2.1.6.0', 'divisor' => $divisor, ); - avtech_add_temperature($device, $sen1); + avtech_add_sensor($device, $sen1); $sen2 = array( 'id' => 3, @@ -95,103 +95,15 @@ if ($device['os'] == 'avtech') { 'descr_oid' => $device_oid.'1.2.2.6.0', 'divisor' => $divisor, ); - avtech_add_temperature($device, $sen2); + avtech_add_sensor($device, $sen2); /* we don't support switches at this time $switch = array( 'oid' => $device_oid.'1.3.1.0', 'descr_oid' => $device_oid.'1.3.2.0', + 'type' => 'switch' ); - avtech_add_switch($device, $switch); + avtech_add_sensor($device, $switch); */ } }//end if - - - -/** - * Helper function to improve readability - * Can't use mib based polling, because the snmp implentation and mibs are terrible - * - * @param (device) array - device array - * @param (valid) array - valid array - * @param (sensor) array(id, oid, descr, descr_oid, min, max, divisor) - */ -function avtech_add_temperature($device, $sensor) { - global $valid; - - // set the id, must be unique - if ($sensor['id']) { - $id = $sensor['id']; - } - else { - d_echo('Error: No id set for this sensor' . "\n"); - return false; - } - d_echo('Sensor id: ' . $id . "\n"); - - - // set the sensor oid - if ($sensor['oid']) { - $oid = $sensor['oid']; - } - else { - d_echo('Error: No oid set for this sensor' . "\n"); - return false; - } - d_echo('Sensor oid: ' . $oid . "\n"); - - // get the sensor value - $value = snmp_get($device, $oid, '-OvQ'); - // if the sensor doesn't exist abort - if ($value === false || $value == 0) { //issue unfortunately non-existant sensors return 0 - d_echo('Error: sensor returned no data, skipping' . "\n"); - return false; - } - d_echo('Sensor value: ' . $value . "\n"); - - // set the description - if ($sensor['descr_oid']) { - $descr = snmp_get($device, $sensor['descr_oid'], '-OvQ'); - } - elseif ($sensor['descr']) { - $descr = $sensor['descr']; - } - else { - d_echo('Error: No description set for this sensor' . "\n"); - return false; - } - d_echo('Sensor description: ' . $descr . "\n"); - - // set divisor - if ($sensor['divisor']) { - $divisor = $sensor['divisor']; - } - else { - $divisor = 100; - } - d_echo('Sensor divisor: ' . $divisor . "\n"); - - - // set min for alarm - if ($sensor['min_oid']) { - $min = snmp_get($device, $sensor['min_oid'], '-OvQ') / $divisor; - } - else { - $min = null; - } - d_echo('Sensor alarm min: ' . $min . "\n"); - - // set max for alarm - if ($sensor['max_oid']) { - $max = snmp_get($device, $sensor['max_oid'], '-OvQ') / $divisor; - } - else { - $max = null; - } - d_echo('Sensor alarm max: ' . $max . "\n"); - - // add the sensor - discover_sensor($valid['sensor'], 'temperature', $device, $oid, $id, $device['os'], $descr, $divisor, '1', $min, null, null, $max, $value/$divisor); - return true; -}