#!/usr/bin/perl -w =head1 NAME Monitor CyberPower UPS Battery Status. =head1 AUTHOR Kai Boenke =head1 LICENSE Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) =back ##### # Enable SNMP-Discovery ### =head1 MAGIC MARKERS #%# family=snmpauto #%# capabilities=snmpconf =cut if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") { print "require 1.3.6.1.2.1.33.1.2.4.0\n"; exit 0; } ##### # Initialize ### use strict; use Munin::Plugin::SNMP; my $session = Munin::Plugin::SNMP->session(); ##### # Declare OIDs ### use constant oid_cps_battery_runtime => ".1.3.6.1.2.1.33.1.2.3.0"; use constant oid_cps_battery_charge => ".1.3.6.1.2.1.33.1.2.4.0"; use constant oid_cps_input_voltage => ".1.3.6.1.2.1.33.1.3.3.1.3.1"; use constant oid_cps_output_voltage => ".1.3.6.1.2.1.33.1.4.4.1.2.1"; use constant oid_cps_output_load => ".1.3.6.1.2.1.33.1.4.4.1.5.1"; use constant oid_cps_env_temp => ".1.3.6.1.4.1.3808.1.1.4.2.1.0"; use constant oid_cps_env_humidity => ".1.3.6.1.4.1.3808.1.1.4.3.1.0"; use constant upsStatus => ".1.3.6.1.4.1.3808.1.1.1.10.1.0"; use constant upsBaseBatteryStatus => ".1.3.6.1.4.1.3808.1.1.1.2.1.1.0"; use constant upsAdvanceInputStatus => ".1.3.6.1.4.1.3808.1.1.1.3.2.6.0"; use constant upsBaseOutputStatus => ".1.3.6.1.4.1.3808.1.1.1.4.1.1.0"; use constant upsAdvanceInputFrequency => ".1.3.6.1.4.1.3808.1.1.1.3.2.4.0"; use constant upsAdvanceOutputFrequency => ".1.3.6.1.4.1.3808.1.1.1.4.2.2.0"; use constant upsAdvanceOutputPower => ".1.3.6.1.4.1.3808.1.1.1.4.2.5.0"; ##### # Config ### if (defined $ARGV[0] and $ARGV[0] eq "config") { my ($host) = Munin::Plugin::SNMP->config_session(); print "host_name $host\n" unless $host eq 'localhost'; print "multigraph cyberpower_load graph_title CyberPower UPS Status graph_info This graph shows battery status information. graph_category sensors graph_vlabel % graph_args --upper-limit 101 -l 0 graph_scale no "; print "load.label Total load load.draw AREA load.type GAUGE load.min 0 load.max 100 "; print "charge.label Battery charge charge.draw LINE1 charge.type GAUGE charge.min 0 charge.max 100 "; print "multigraph cyberpower_runtime graph_title CyberPower UPS Runtime graph_info This graph shows expected runtime information. graph_category sensors graph_vlabel minutes "; print "runtime.label Expected runtime runtime.draw AREA runtime.type GAUGE "; print "multigraph cyberpower_voltage graph_title CyberPower UPS Voltages graph_info This graph shows voltage information. graph_category sensors graph_vlabel V "; print "input.label Input voltage input.draw LINE2 input.type GAUGE "; print "output.label Output voltage output.draw LINE1 output.type GAUGE "; print "multigraph cyberpower_status graph_title CyberPower UPS Statuses graph_info This graph shows status information. graph_category sensors "; print "upsStatus.label UPS status upsStatus.draw LINE1 upsStatus.type GAUGE "; #upsStatus: 1 normal, 2 overheat, 3 hardwarefault print "upsBaseBatteryStatus.label Battery status upsBaseBatteryStatus.draw LINE1 upsBaseBatteryStatus.type GAUGE "; #upsBaseBatteryStatus: 2 normal, 1 unknown, 3 low, 4 notpresent print "upsAdvanceInputStatus.label Input status upsAdvanceInputStatus.draw LINE1 upsAdvanceInputStatus.type GAUGE "; #upsAdvanceInputStatus: 1 normal, 2 high, 3 low, 4 freq, 5 blackout, 6 powerFailure print "upsBaseOutputStatus.label Output status upsBaseOutputStatus.draw LINE1 upsBaseOutputStatus.type GAUGE "; #upsBaseOutputStatus: # unknown(1), # onLine(2), # onBattery(3), # onBoost(4), # onSleep(5), # off(6), # rebooting(7), # onECO(8), # onBypass(9), # onBuck(10), # onOverload(11) print "multigraph cyberpower_frequency graph_title CyberPower UPS Frequency graph_info This graph shows frequencies graph_category sensors graph_vlabel Hz graph_args --upper-limit 80 --lower-limit 40 "; print "upsAdvanceInputFrequency.label Input frequency upsAdvanceInputFrequency.draw LINE1 upsAdvanceInputFrequency.type GAUGE "; print "upsAdvanceOutputFrequency.label Output frequency upsAdvanceOutputFrequency.draw LINE1 upsAdvanceOutputFrequency.type GAUGE "; print "multigraph cyberpower_power graph_title CyberPower UPS Power graph_info This graph shows power usage graph_category sensors graph_vlabel W "; print "upsAdvanceOutputPower.label Output power upsAdvanceOutputPower.draw LINE1 upsAdvanceOutputPower.type GAUGE "; exit 0; } ##### # Get Values ### print "multigraph cyberpower_load\n"; my $load = $session->get_single(oid_cps_output_load); my $charge = $session->get_single(oid_cps_battery_charge); if($load ne 'U'){ print "load.value ", $load, "\n"; } if($charge ne 'U'){ print "charge.value ", $charge, "\n"; } print "multigraph cyberpower_runtime\n"; my $runtime = $session->get_single(oid_cps_battery_runtime); if($runtime ne 'U'){ print "runtime.value ", $runtime, "\n"; } print "multigraph cyberpower_voltage\n"; my $input = $session->get_single(oid_cps_input_voltage); my $output = $session->get_single(oid_cps_output_voltage); if($input ne 'U'){ print "input.value ", $input, "\n"; } if($output ne 'U'){ print "output.value ", $output, "\n"; } print "multigraph cyberpower_status\n"; print "upsStatus.value ", $session->get_single(upsStatus), "\n"; print "upsBaseBatteryStatus.value ", $session->get_single(upsBaseBatteryStatus), "\n"; print "upsAdvanceInputStatus.value ", $session->get_single(upsAdvanceInputStatus), "\n"; print "upsBaseOutputStatus.value ", $session->get_single(upsBaseOutputStatus), "\n"; print "multigraph cyberpower_frequency\n"; print "upsAdvanceInputFrequency.value ", $session->get_single(upsAdvanceInputFrequency)/10, "\n"; print "upsAdvanceOutputFrequency.value ", $session->get_single(upsAdvanceOutputFrequency)/10, "\n"; print "multigraph cyberpower_power\n"; print "upsAdvanceOutputPower.value ", $session->get_single(upsAdvanceOutputPower), "\n";