mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Clean up avtech by making a helper function so it is easier to add devices.
Add support for RoomAlert 4E fixes #3166
This commit is contained in:
@@ -3,65 +3,195 @@
|
|||||||
// AVTECH TEMPPAGER
|
// AVTECH TEMPPAGER
|
||||||
if ($device['os'] == 'avtech') {
|
if ($device['os'] == 'avtech') {
|
||||||
echo 'AVTECH: ';
|
echo 'AVTECH: ';
|
||||||
if (strstr($device['sysObjectID'], '.20916.1.7')) {
|
if (strpos($device['sysObjectID'], '.20916.1.7') !== false) {
|
||||||
// TemPageR 3E
|
// TemPageR 3E
|
||||||
$divisor = 100;
|
$device_oid = '.1.3.6.1.4.1.20916.1.7.';
|
||||||
$internal_oid = '.1.3.6.1.4.1.20916.1.7.1.1.1.1.0'; //internal-tempc.0
|
|
||||||
$internal_temp = snmp_get($device, $internal_oid, '-OvQ');
|
|
||||||
$sen1_oid = '.1.3.6.1.4.1.20916.1.7.1.2.1.1.0'; //digital-sen1-1.0
|
|
||||||
$sen1_temp = snmp_get($device, $sen1_oid, '-OvQ');
|
|
||||||
$sen2_oid = '.1.3.6.1.4.1.20916.1.7.1.2.2.1.0'; //digital-sen2-1.0
|
|
||||||
$sen2_temp = snmp_get($device, $sen2_oid, '-OvQ');
|
|
||||||
|
|
||||||
if (!empty($internal_temp)) {
|
$internal = array(
|
||||||
$internal_desc = trim(snmp_get($device, '.1.3.6.1.4.1.20916.1.7.1.1.2.0', '-OvQ'), '"'); //internal.2.0
|
'id' => 1,
|
||||||
discover_sensor($valid['sensor'], 'temperature', $device, $internal_oid, 0, $device['os'], $internal_desc, $divisor, '1', null, null, null, null, $internal_temp/$divisor);
|
'oid' => $device_oid.'1.1.1.1.0',
|
||||||
}
|
'descr_oid' => $device_oid.'1.1.2.0',
|
||||||
if (!empty($sen1_temp)) {
|
);
|
||||||
$sen1_desc = trim(snmp_get($device, '.1.3.6.1.4.1.20916.1.7.1.2.1.3.0', '-OvQ'), '"'); //digital-sen1-3.0
|
avtech_add_temperature($device, $internal);
|
||||||
discover_sensor($valid['sensor'], 'temperature', $device, $sen1_oid, 1, $device['os'], $sen1_desc, $divisor, '1', null, null, null, null, $sen1_temp/$divisor);
|
|
||||||
}
|
$sen1 = array(
|
||||||
if (!empty($sen2_temp)) {
|
'id' => 2,
|
||||||
$sen2_desc = trim(snmp_get($device, '.1.3.6.1.4.1.20916.1.7.1.2.2.3.0', '-OvQ'), '"'); //digital-sen2-3.0
|
'oid' => $device_oid.'1.2.1.1.0',
|
||||||
discover_sensor($valid['sensor'], 'temperature', $device, $sen2_oid, 2, $device['os'], $sen2_desc, $divisor, '1', null, null, null, null, $sen2_temp/$divisor);
|
'descr_oid' => $device_oid.'1.2.1.3.0',
|
||||||
}
|
);
|
||||||
|
avtech_add_temperature($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);
|
||||||
}
|
}
|
||||||
else if(strstr($device['sysObjectID'], '.20916.1.1')) {
|
else if(strpos($device['sysObjectID'], '.20916.1.1') !== false) {
|
||||||
// TemPageR 4E
|
// TemPageR 4E
|
||||||
$divisor = 100;
|
$device_oid = '.1.3.6.1.4.1.20916.1.1.';
|
||||||
$internal_oid = '.1.3.6.1.4.1.20916.1.1.1.1.1.0'; //internal-tempc.0
|
|
||||||
$internal_temp = snmp_get($device, $internal_oid, '-OvQ');
|
|
||||||
$sen1_oid = '.1.3.6.1.4.1.20916.1.1.1.1.2.0'; //digital-sen1-1.0
|
|
||||||
$sen1_temp = snmp_get($device, $sen1_oid, '-OvQ');
|
|
||||||
$sen2_oid = '.1.3.6.1.4.1.20916.1.1.1.1.3.0'; //digital-sen2-1.0
|
|
||||||
$sen2_temp = snmp_get($device, $sen2_oid, '-OvQ');
|
|
||||||
$sen3_oid = '.1.3.6.1.4.1.20916.1.1.1.1.4.0'; //digital-sen3-1.0
|
|
||||||
$sen3_temp = snmp_get($device, $sen3_oid, '-OvQ');
|
|
||||||
|
|
||||||
if (!empty($internal_temp)) {
|
$internal = array(
|
||||||
$internal_desc = "Internal";
|
'id' => 1,
|
||||||
$internal_max = snmp_get($device, '.1.3.6.1.4.1.20916.1.1.3.1.0', '-OvQ') / $divisor;
|
'oid' => $device_oid.'1.1.1.0',
|
||||||
$internal_min = snmp_get($device, '.1.3.6.1.4.1.20916.1.1.3.2.0', '-OvQ') / $divisor;
|
'descr' => 'Internal',
|
||||||
discover_sensor($valid['sensor'], 'temperature', $device, $internal_oid, 0, $device['os'], $internal_desc, $divisor, '1', $internal_min, null, null, $internal_max,$internal_temp/$divisor);
|
'max_oid' => $device_oid.'3.1.0',
|
||||||
}
|
'min_oid' => $device_oid.'3.2.0',
|
||||||
if (!empty($sen1_temp)) {
|
);
|
||||||
$sen1_desc = "Sensor 1";
|
avtech_add_temperature($device, $internal);
|
||||||
$sen1_max = snmp_get($device, '.1.3.6.1.4.1.20916.1.1.3.3.0', '-OvQ') / $divisor;
|
|
||||||
$sen1_min = snmp_get($device, '.1.3.6.1.4.1.20916.1.1.3.4.0', '-OvQ') / $divisor;
|
|
||||||
discover_sensor($valid['sensor'], 'temperature', $device, $sen1_oid, 1, $device['os'], $sen1_desc, $divisor, '1', $sen1_min, null, null, $sen1_max, $sen1_temp/$divisor);
|
|
||||||
}
|
|
||||||
if (!empty($sen2_temp)) {
|
|
||||||
$sen2_desc = "Sensor 2";
|
|
||||||
$sen2_max = snmp_get($device, '.1.3.6.1.4.1.20916.1.1.3.5.0', '-OvQ') / $divisor;
|
|
||||||
$sen2_min = snmp_get($device, '.1.3.6.1.4.1.20916.1.1.3.6.0', '-OvQ') / $divisor;
|
|
||||||
discover_sensor($valid['sensor'], 'temperature', $device, $sen2_oid, 2, $device['os'], $sen2_desc, $divisor, '1', $sen2_min, null, null, $sen2_max, $sen2_temp/$divisor);
|
|
||||||
}
|
|
||||||
if (!empty($sen3_temp)) {
|
|
||||||
$sen3_desc = "Sensor 3";
|
|
||||||
$sen3_max = snmp_get($device, '.1.3.6.1.4.1.20916.1.1.3.7.0', '-OvQ') / $divisor;
|
|
||||||
$sen3_min = snmp_get($device, '.1.3.6.1.4.1.20916.1.1.3.8.0', '-OvQ') / $divisor;
|
|
||||||
discover_sensor($valid['sensor'], 'temperature', $device, $sen3_oid, 3, $device['os'], $sen3_desc, $divisor, '1', $sen3_min, null, null, $sen3_max, $sen3_temp/$divisor);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
$sen1 = array(
|
||||||
|
'id' => 2,
|
||||||
|
'oid' => $device_oid.'1.1.2.0',
|
||||||
|
'descr' => 'Sensor 1',
|
||||||
|
'max_oid' => $device_oid.'3.3.0',
|
||||||
|
'min_oid' => $device_oid.'3.4.0',
|
||||||
|
);
|
||||||
|
avtech_add_temperature($device, $sen1);
|
||||||
|
|
||||||
|
$sen2 = array(
|
||||||
|
'id' => 3,
|
||||||
|
'oid' => $device_oid.'1.1.3.0',
|
||||||
|
'descr' => 'Sensor 2',
|
||||||
|
'max_oid' => $device_oid.'3.5.0',
|
||||||
|
'min_oid' => $device_oid.'3.6.0',
|
||||||
|
);
|
||||||
|
avtech_add_temperature($device, $sen2);
|
||||||
|
|
||||||
|
$sen3 = array(
|
||||||
|
'id' => 4,
|
||||||
|
'oid' => $device_oid.'1.1.4.0',
|
||||||
|
'descr' => 'Sensor 3',
|
||||||
|
'max_oid' => $device_oid.'3.7.0',
|
||||||
|
'min_oid' => $device_oid.'3.8.0',
|
||||||
|
);
|
||||||
|
avtech_add_temperature($device, $sen3);
|
||||||
|
}
|
||||||
|
else if(strpos($device['sysObjectID'], '.20916.1.6') !== false) {
|
||||||
|
// RoomAlert 4E
|
||||||
|
$device_oid = '.1.3.6.1.4.1.20916.1.6.';
|
||||||
|
$divisor = 1;
|
||||||
|
|
||||||
|
$internal = array(
|
||||||
|
'id' => 1,
|
||||||
|
'oid' => $device_oid.'1.1.1.2.0',
|
||||||
|
'descr_oid' => $device_oid.'1.1.2.1.0',
|
||||||
|
'divisor' => $divisor,
|
||||||
|
);
|
||||||
|
avtech_add_temperature($device, $internal);
|
||||||
|
|
||||||
|
$sen1 = array(
|
||||||
|
'id' => 2,
|
||||||
|
'oid' => $device_oid.'1.2.2.1.0',
|
||||||
|
'descr_oid' => $device_oid.'1.2.1.6.0',
|
||||||
|
'divisor' => $divisor,
|
||||||
|
);
|
||||||
|
avtech_add_temperature($device, $sen1);
|
||||||
|
|
||||||
|
$sen2 = array(
|
||||||
|
'id' => 3,
|
||||||
|
'oid' => $device_oid.'1.2.2.1.0',
|
||||||
|
'descr_oid' => $device_oid.'1.2.2.6.0',
|
||||||
|
'divisor' => $divisor,
|
||||||
|
);
|
||||||
|
avtech_add_temperature($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',
|
||||||
|
);
|
||||||
|
avtech_add_switch($device, $switch);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}//end if
|
}//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;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user