1<?php 2 3echo 'Printer Status and Error State '; 4$state = snmp_get($device, 'hrDeviceStatus.1', '-Ovqe', 'HOST-RESOURCES-MIB'); 5if (is_numeric($state)) { 6 //Create State Index 7 $state_name = 'hrDeviceStatus'; 8 create_state_index( 9 $state_name, 10 [ 11 ['value' => 1, 'generic' => 3, 'graph' => 0, 'descr' => 'Unknown'], 12 ['value' => 2, 'generic' => 0, 'graph' => 0, 'descr' => 'Running'], 13 ['value' => 3, 'generic' => 1, 'graph' => 0, 'descr' => 'Warning'], 14 ['value' => 4, 'generic' => 0, 'graph' => 0, 'descr' => 'Testing'], 15 ['value' => 5, 'generic' => 2, 'graph' => 0, 'descr' => 'Down'], 16 ] 17 ); 18 $sensor_index = 0; 19 discover_sensor( 20 $valid['sensor'], 21 'state', 22 $device, 23 '.1.3.6.1.2.1.25.3.2.1.5.1', 24 $sensor_index, 25 $state_name, 26 'Printer Device Status', 27 1, 28 1, 29 null, 30 null, 31 null, 32 null, 33 $state, 34 'snmp', 35 0 36 ); 37 //Create Sensor To State Index 38 create_sensor_to_state_index($device, $state_name, $sensor_index); 39} 40 41$state = snmp_get($device, 'hrPrinterDetectedErrorState.1', '-Ovqe', 'HOST-RESOURCES-MIB'); 42if ($state) { 43 // https://www.ietf.org/rfc/rfc1759.txt hrPrinterDetectedErrorState 44 //Create State Index 45 $printer_states = 46 [ 47 ['value' => 0, 'generic' => 0, 'graph' => 0, 'descr' => 'Normal'], 48 ['value' => 1, 'generic' => 1, 'graph' => 0, 'descr' => 'Paper Low'], 49 ['value' => 2, 'generic' => 2, 'graph' => 0, 'descr' => 'No Paper'], 50 ['value' => 3, 'generic' => 1, 'graph' => 0, 'descr' => 'Toner Low'], 51 ['value' => 4, 'generic' => 2, 'graph' => 0, 'descr' => 'No Toner'], 52 ['value' => 5, 'generic' => 2, 'graph' => 0, 'descr' => 'Door Open'], 53 ['value' => 6, 'generic' => 2, 'graph' => 0, 'descr' => 'Jammed'], 54 ['value' => 7, 'generic' => 2, 'graph' => 0, 'descr' => 'Offline'], 55 ['value' => 8, 'generic' => 2, 'graph' => 0, 'descr' => 'Service Needed'], 56 ['value' => 9, 'generic' => 1, 'graph' => 0, 'descr' => 'Warning, multiple issues'], 57 ['value' => 10, 'generic' => 2, 'graph' => 0, 'descr' => 'Critical, multiple issues'], 58 ]; 59 $bit_flags = q_bridge_bits2indices($state); 60 $is_critical = false; 61 if (count($bit_flags) == 0) { 62 $state = 0; 63 } else { 64 for ($i = 0; $i < count($bit_flags); $i++) { 65 // second octet of error flags not reliable, skipping 66 if ($bit_flags[$i] > 8) { 67 continue; 68 } 69 $state = $printer_states[$bit_flags[$i]]['value']; 70 if ($printer_states[$bit_flags[$i]]['generic'] == 2) { 71 $is_critical = true; 72 break; 73 } 74 } 75 // cannot create an index for each bit combination, instead warning or critical 76 if (count($bit_flags) > 1) { 77 $state = $is_critical ? 10 : 9; 78 } 79 } 80 81 $state_name = 'hrPrinterDetectedErrorState'; 82 create_state_index($state_name, $printer_states); 83 84 d_echo('Printer error state: ' . $state_name . ': ' . $state); 85 $sensor_index = 0; 86 discover_sensor( 87 $valid['sensor'], 88 'state', 89 $device, 90 '.1.3.6.1.2.1.25.3.5.1.2.1', 91 $sensor_index, 92 $state_name, 93 'Printer Error Status', 94 1, 95 1, 96 null, 97 null, 98 null, 99 null, 100 $state, 101 'snmp', 102 0 103 ); 104 105 //Create Sensor To State Index 106 create_sensor_to_state_index($device, $state_name, $sensor_index); 107} 108