]>
Commit | Line | Data |
---|---|---|
3decc5d1 JR |
1 | #!/usr/bin/perl -w |
2 | ||
3 | =head1 NAME | |
4 | ||
5 | Monitor CyberPower UPS Battery Status. | |
6 | ||
7 | ||
8 | =head1 AUTHOR | |
9 | ||
10 | Kai Boenke | |
11 | ||
12 | =head1 LICENSE | |
13 | ||
14 | Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) | |
15 | ||
16 | =back | |
17 | ||
18 | ||
19 | ##### | |
20 | # Enable SNMP-Discovery | |
21 | ### | |
22 | =head1 MAGIC MARKERS | |
23 | #%# family=snmpauto | |
24 | #%# capabilities=snmpconf | |
25 | =cut | |
26 | if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") { | |
27 | print "require 1.3.6.1.2.1.33.1.2.4.0\n"; | |
28 | exit 0; | |
29 | } | |
30 | ||
31 | ||
32 | ##### | |
33 | # Initialize | |
34 | ### | |
35 | use strict; | |
36 | use Munin::Plugin::SNMP; | |
37 | my $session = Munin::Plugin::SNMP->session(); | |
38 | ||
39 | ||
40 | ##### | |
41 | # Declare OIDs | |
42 | ### | |
43 | use constant oid_cps_battery_runtime => ".1.3.6.1.2.1.33.1.2.3.0"; | |
44 | use constant oid_cps_battery_charge => ".1.3.6.1.2.1.33.1.2.4.0"; | |
45 | use constant oid_cps_input_voltage => ".1.3.6.1.2.1.33.1.3.3.1.3.1"; | |
46 | use constant oid_cps_output_voltage => ".1.3.6.1.2.1.33.1.4.4.1.2.1"; | |
47 | use constant oid_cps_output_load => ".1.3.6.1.2.1.33.1.4.4.1.5.1"; | |
48 | use constant oid_cps_env_temp => ".1.3.6.1.4.1.3808.1.1.4.2.1.0"; | |
49 | use constant oid_cps_env_humidity => ".1.3.6.1.4.1.3808.1.1.4.3.1.0"; | |
50 | ||
51 | use constant upsStatus => ".1.3.6.1.4.1.3808.1.1.1.10.1.0"; | |
52 | use constant upsBaseBatteryStatus => ".1.3.6.1.4.1.3808.1.1.1.2.1.1.0"; | |
53 | use constant upsAdvanceInputStatus => ".1.3.6.1.4.1.3808.1.1.1.3.2.6.0"; | |
54 | use constant upsBaseOutputStatus => ".1.3.6.1.4.1.3808.1.1.1.4.1.1.0"; | |
55 | use constant upsAdvanceInputFrequency => ".1.3.6.1.4.1.3808.1.1.1.3.2.4.0"; | |
56 | use constant upsAdvanceOutputFrequency => ".1.3.6.1.4.1.3808.1.1.1.4.2.2.0"; | |
57 | use constant upsAdvanceOutputPower => ".1.3.6.1.4.1.3808.1.1.1.4.2.5.0"; | |
58 | ||
59 | ||
60 | ##### | |
61 | # Config | |
62 | ### | |
63 | if (defined $ARGV[0] and $ARGV[0] eq "config") { | |
64 | my ($host) = Munin::Plugin::SNMP->config_session(); | |
65 | print "host_name $host\n" unless $host eq 'localhost'; | |
66 | print "multigraph cyberpower_load | |
67 | graph_title CyberPower UPS Status | |
68 | graph_info This graph shows battery status information. | |
69 | graph_category sensors | |
70 | graph_vlabel % | |
71 | graph_args --upper-limit 101 -l 0 | |
72 | graph_scale no | |
73 | "; | |
74 | print "load.label Total load | |
75 | load.draw AREA | |
76 | load.type GAUGE | |
77 | load.min 0 | |
78 | load.max 100 | |
79 | "; | |
80 | print "charge.label Battery charge | |
81 | charge.draw LINE1 | |
82 | charge.type GAUGE | |
83 | charge.min 0 | |
84 | charge.max 100 | |
85 | "; | |
86 | ||
87 | print "multigraph cyberpower_runtime | |
88 | graph_title CyberPower UPS Runtime | |
89 | graph_info This graph shows expected runtime information. | |
90 | graph_category sensors | |
91 | graph_vlabel minutes | |
92 | "; | |
93 | print "runtime.label Expected runtime | |
94 | runtime.draw AREA | |
95 | runtime.type GAUGE | |
96 | "; | |
97 | ||
98 | print "multigraph cyberpower_voltage | |
99 | graph_title CyberPower UPS Voltages | |
100 | graph_info This graph shows voltage information. | |
101 | graph_category sensors | |
102 | graph_vlabel V | |
103 | "; | |
104 | print "input.label Input voltage | |
105 | input.draw LINE2 | |
106 | input.type GAUGE | |
107 | "; | |
108 | print "output.label Output voltage | |
109 | output.draw LINE1 | |
110 | output.type GAUGE | |
111 | "; | |
112 | ||
113 | print "multigraph cyberpower_status | |
114 | graph_title CyberPower UPS Statuses | |
115 | graph_info This graph shows status information. | |
116 | graph_category sensors | |
117 | "; | |
118 | print "upsStatus.label UPS status | |
119 | upsStatus.draw LINE1 | |
120 | upsStatus.type GAUGE | |
121 | "; | |
122 | #upsStatus: 1 normal, 2 overheat, 3 hardwarefault | |
123 | print "upsBaseBatteryStatus.label Battery status | |
124 | upsBaseBatteryStatus.draw LINE1 | |
125 | upsBaseBatteryStatus.type GAUGE | |
126 | "; | |
127 | #upsBaseBatteryStatus: 2 normal, 1 unknown, 3 low, 4 notpresent | |
128 | print "upsAdvanceInputStatus.label Input status | |
129 | upsAdvanceInputStatus.draw LINE1 | |
130 | upsAdvanceInputStatus.type GAUGE | |
131 | "; | |
132 | #upsAdvanceInputStatus: 1 normal, 2 high, 3 low, 4 freq, 5 blackout, 6 powerFailure | |
133 | print "upsBaseOutputStatus.label Output status | |
134 | upsBaseOutputStatus.draw LINE1 | |
135 | upsBaseOutputStatus.type GAUGE | |
136 | "; | |
137 | #upsBaseOutputStatus: | |
138 | # unknown(1), | |
139 | # onLine(2), | |
140 | # onBattery(3), | |
141 | # onBoost(4), | |
142 | # onSleep(5), | |
143 | # off(6), | |
144 | # rebooting(7), | |
145 | # onECO(8), | |
146 | # onBypass(9), | |
147 | # onBuck(10), | |
148 | # onOverload(11) | |
149 | ||
150 | print "multigraph cyberpower_frequency | |
151 | graph_title CyberPower UPS Frequency | |
152 | graph_info This graph shows frequencies | |
153 | graph_category sensors | |
154 | graph_vlabel Hz | |
155 | graph_args --upper-limit 80 --lower-limit 40 | |
156 | "; | |
157 | print "upsAdvanceInputFrequency.label Input frequency | |
158 | upsAdvanceInputFrequency.draw LINE1 | |
159 | upsAdvanceInputFrequency.type GAUGE | |
160 | "; | |
161 | print "upsAdvanceOutputFrequency.label Output frequency | |
162 | upsAdvanceOutputFrequency.draw LINE1 | |
163 | upsAdvanceOutputFrequency.type GAUGE | |
164 | "; | |
165 | ||
166 | print "multigraph cyberpower_power | |
167 | graph_title CyberPower UPS Power | |
168 | graph_info This graph shows power usage | |
169 | graph_category sensors | |
170 | graph_vlabel W | |
171 | "; | |
172 | print "upsAdvanceOutputPower.label Output power | |
173 | upsAdvanceOutputPower.draw LINE1 | |
174 | upsAdvanceOutputPower.type GAUGE | |
175 | "; | |
176 | ||
177 | ||
178 | exit 0; | |
179 | } | |
180 | ||
181 | ||
182 | ##### | |
183 | # Get Values | |
184 | ### | |
185 | ||
186 | print "multigraph cyberpower_load\n"; | |
187 | my $load = $session->get_single(oid_cps_output_load); | |
188 | my $charge = $session->get_single(oid_cps_battery_charge); | |
189 | if($load ne 'U'){ | |
190 | print "load.value ", $load, "\n"; | |
191 | } | |
192 | if($charge ne 'U'){ | |
193 | print "charge.value ", $charge, "\n"; | |
194 | } | |
195 | ||
196 | print "multigraph cyberpower_runtime\n"; | |
197 | my $runtime = $session->get_single(oid_cps_battery_runtime); | |
198 | if($runtime ne 'U'){ | |
199 | print "runtime.value ", $runtime, "\n"; | |
200 | } | |
201 | ||
202 | print "multigraph cyberpower_voltage\n"; | |
203 | my $input = $session->get_single(oid_cps_input_voltage); | |
204 | my $output = $session->get_single(oid_cps_output_voltage); | |
205 | if($input ne 'U'){ | |
206 | print "input.value ", $input, "\n"; | |
207 | } | |
208 | if($output ne 'U'){ | |
209 | print "output.value ", $output, "\n"; | |
210 | } | |
211 | ||
212 | print "multigraph cyberpower_status\n"; | |
213 | print "upsStatus.value ", $session->get_single(upsStatus), "\n"; | |
214 | print "upsBaseBatteryStatus.value ", $session->get_single(upsBaseBatteryStatus), "\n"; | |
215 | print "upsAdvanceInputStatus.value ", $session->get_single(upsAdvanceInputStatus), "\n"; | |
216 | print "upsBaseOutputStatus.value ", $session->get_single(upsBaseOutputStatus), "\n"; | |
217 | ||
218 | print "multigraph cyberpower_frequency\n"; | |
219 | print "upsAdvanceInputFrequency.value ", $session->get_single(upsAdvanceInputFrequency)/10, "\n"; | |
220 | print "upsAdvanceOutputFrequency.value ", $session->get_single(upsAdvanceOutputFrequency)/10, "\n"; | |
221 | ||
222 | print "multigraph cyberpower_power\n"; | |
223 | print "upsAdvanceOutputPower.value ", $session->get_single(upsAdvanceOutputPower), "\n"; |