Menu
Мониторинг UPS APC и EATON

Мониторинг UPS APC и EATON

Сборник рецептов для мониторинга и управления УПС

Cкрипт мониторинга APC и EATON, оснащенных сетевыми платами посредством SNMP

Не секрет, что ПО для мониторинга состояния UPS тяжеловесно и не бесплатно. Установка Zabbix только для этой задачи громоздка

Требуется установленный Apache/nginx и PHP с модулем php-snmp.

Отредактируйте массивы $urls для Eatonов и $urls2 для APC, разрешите SNMP-1 public на чтениеp и настройте крон для отправки ежедневных писем.

<?php
//  apt-get install php-snmp
// snmp 1 public readonly

    $urls = array( // eatons
        "192.168.1.55",
"192.168.1.57",
"192.168.1.16",
"192.168.1.60"
); $urls2 = array( // APC "192.168.1.25", "192.168.1.239",
"192.168.1.230",
"192.168.1.231" ); // APC OIDs: // https://www.opsview.com/resources/monitoring/blog/monitoring-apc-ups-useful-oids // https://wiki.it-kb.ru/apc/apc-nmc-oids-for-snmp-monitoring // EATON OIDs // https://wiki.it-kb.ru/eaton/eaton-powerware-nmc-oids-for-snmp-monitoring // if(isset($_GET['act'])) $act=$_GET["act"]; else $act=''; $act=$argv[1]; #$db = new SQLite3(dirname(__FILE__).'/phpliteadmin/stats.db'); $pr="<html><body><table width= \"100%\" border=\"1\" cellpadding='5' cellspacing=\"0\"> <tr bgcolor=\"#ddd\" style=\"background-color:#ddd\"> <td>IP</td> <td>Расположение</td> <td>Модель</td> <td>Источник питания</td> <td>Нагрузка<br />%</td> <td>Зарядка<br />%</td> <td>Оставшееся<br>время</td> <td>Состояние<br />батареи</td> <td>Температура <br />(вн/нар)/Влажн.</td> </tr>"; for ($i = 0; $i<count($urls); $i++) { $pr.="<tr><td><a href=\"http://".$urls[$i]."/\" target=\"_blank\">".$urls[$i]."</a></td>"; $session = new SNMP(SNMP::VERSION_1, $urls[$i], "public"); $session->valueretrieval = SNMP_VALUE_PLAIN; $s = $session->walk("1.3.6.1.2.1.1.5.0", TRUE); foreach ($s as $val) { $pr.= "<td><b>$val</b></td>"; } $s = $session->walk("1.3.6.1.2.1.33.1.1.2.0", TRUE); foreach ($s as $val) { $pr.= "<td><b><font color=\"#00f\" style=\"color:#00f;\">$val</font></b></td>"; } $s = $session->walk("1.3.6.1.4.1.534.1.3.4.1.2.1", TRUE); foreach ($s as $val) { $pr.= "<td>$val Volt</b></td>"; } $s = $session->walk("1.3.6.1.4.1.534.1.4.1.0", TRUE); foreach ($s as $val) { $pr.= "<td align='right'></b>$val %</td>"; } $s = $session->walk("1.3.6.1.4.1.534.1.2.4.0", TRUE); foreach ($s as $val) { $pr.= "<td align='right'>$val %</td>"; } $s = $session->walk("1.3.6.1.4.1.534.1.2.1.0", TRUE); foreach ($s as $val) { $pr.= "<td>".round($val/60)." min</td>"; } $s = $session->walk("1.3.6.1.4.1.705.1.5.9.0", TRUE); foreach ($s as $val) if($val=="2") $res1 = 2; else $res1 = 1; $s = $session->walk("1.3.6.1.4.1.705.1.5.15.0", TRUE); foreach ($s as $val) if($val=="2") $res2 = 2; else $res2 = 1; $s = $session->walk("1.3.6.1.4.1.705.1.5.11.0", TRUE); foreach ($s as $val) if($val=="2") $res3 = 2; else $res3 = 1; if($res1==2 && $res2==2 && $res3==2) $pr.="<td bgcolor=\"#9d9\" style=\"background-color:#9d9\">OK</td>"; else $pr.="<td bgcolor=\"#d99\" style=\"background-color:#d99\">fault</td>"; $s = $session->walk("1.3.6.1.4.1.534.1.6.1.0", TRUE); foreach ($s as $val) { $pr.= "<td>$val &deg;C / "; } $s = $session->walk("1.3.6.1.4.1.534.1.6.5.0", TRUE); foreach ($s as $val) { $pr.= " $val &deg;C /"; } $s = $session->walk("1.3.6.1.4.1.534.1.6.6.0", TRUE); foreach ($s as $val) { $pr.= " $val %</td>"; } $session->close(); $pr.="</tr>\r\n"; } for ($i = 0; $i<count($urls2); $i++) { $pr.="<tr><td><a href=\"http://".$urls2[$i]."/\" target=\"_blank\">".$urls2[$i]."</a></td>"; $session = new SNMP(SNMP::VERSION_1, $urls2[$i], "public"); $session->valueretrieval = SNMP_VALUE_PLAIN; $s = $session->walk("1.3.6.1.4.1.318.1.1.1.1.1.2.0", TRUE); foreach ($s as $val) { $pr.= "<td><b>$val</font></b></td>"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.1.1.1.1.0", TRUE); foreach ($s as $val) { $pr.= "<td><b><font color=\"#f00\" style=\"color:#f00;\">$val</font></b></td>"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.1.3.2.1.0", TRUE); foreach ($s as $val) { $pr.= "<td>$val Volt</b></td>"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.1.4.2.3.0", TRUE); foreach ($s as $val) { $pr.= "<td align='right'></b>$val %</td>"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.1.2.2.1.0", TRUE); foreach ($s as $val) { $pr.= "<td align='right'>$val %</td>"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.1.2.2.3.0", TRUE); foreach ($s as $val) { $pr.= "<td>".($val/100/60)." min</td>"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.1.2.2.4.0", TRUE); foreach ($s as $val) if($val=="1") { $pr.= "<td bgcolor=\"#9d9\" style=\"background-color:#9d9\">OK</td>"; } else { $pr.= "<td bgcolor=\"#d99\" style=\"background-color:#d99\">fault</td>"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.1.2.2.2.0", TRUE); foreach ($s as $val) { $pr.= "<td>$val &deg;C /"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.25.1.2.1.6", TRUE); foreach ($s as $val) { $pr.= "$val &deg;C /"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.25.1.2.1.7", TRUE); foreach ($s as $val) { $pr.= "$val %</td>"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.1.3.2.5.0", TRUE); // Reason for last transfer foreach ($s as $val) { $pr.= "<td>LTtB:$val</td>"; } $session->close(); $pr.="</tr>\r\n"; } $pr.="</table>"; $pr.="<br /><font color=\"#00f\" style=\"color:#00f;\">EATON</font> <font color=\"#f00\" style=\"color:#f00;\">APC</font><br />"; $pr.="APC reason for last transfer (LTtB) to battery power<br /> <p>1 No events<br /> 2 High line voltage<br /> 3 Brownout<br /> 4 Loss of mains power<br /> 5 Small temporary power drop<br /> 6 Large temporary power drop<br /> 7 Small spike<br /> 8 Large spike<br /> 9 UPS self test<br /> 10 Excessive input voltage fluctuation</p><br /> <a href=\"#\">Обновить скрипт УПС</a></body></html>"; if($act=='') echo $pr; if($act=='dailyreport') { $to="st@domain.ru"; // Адрес получателя $subject="UPSs daily report"; $body="$pr"; $headers = "Content-type: text/html; charset=utf-8\r\n"; $headers .= "From: ups@domain.ru "; mail($to, $subject, $body, $headers); } ?>

Протокол работы Smart APC

Как создать плату мониторинга на основе esp8266 рассказано тут

Используется специальный (с хитрым распаем) кабель.

Скорость соединения 2400.

Основные Команды
Y        Enter smart mode    SM
R        Exit smart mode    SM
^A        Model string        SMART-UPS 700
^N        Turn on UPS
K 1?5s K    Turn off        237.9
L        Input line voltage
P        Power load %        000.0
Q        Status flags        08
    08 = on line, battery OK
    10 = on battery, battery OK
    50 = on battery, battery low
Z        Shutdown immediately    n/a
f        Battery level        099.0
Сообщения
!!!        нет входного напряжения
$        появление входного напряжения

Более подробно отсюда

Character Meaning Typical results Other info

^A

Model string

SMART-UPS 700

Spotty support for this query on older models

^N

Turn on UPS

n/a

Send twice with > 1.5s delay between chars

Only on 3rd gen SmartUPS and Black Back-UPS Pros

^Z

Capability string

(long string)

See "Capabilities" section for more info

A

Front panel test

Light show + "OK"

Also sounds the beeper for 2 seconds

B

Battery voltage

27.87

This obviously varies a lot based on the current charge.

Compare this to the nominal battery voltage

C

Internal temperature

036.0

Units are degrees C

D

Runtime calibration

!, then $

Runs until battery is below 25% (35% for Matrix)

This updates the j values - only works at 100% battery charge

Can be aborted with a second "D"

E

Automatic selftest intervals

336

Writable variable

Values:

  • 336 (14 days)

  • 168 (7 days)

  • ON (at power on) (note extra space)

  • OFF (never)

F

Line frequency, Hz

60.00

If this varies much, have a word with your local electrician

G

Cause of transfer

O

Writable variable

Values:

  • R (unacceptable utility voltage rate of change)

  • H (high utility voltage)

  • L (low utility voltage)

  • T (line voltage notch or spike)

  • O (no transfers yet since turnon)

  • S (transfer due to U command or activation of UPS test)

I

Measure-UPS: Alarm enable

FF

(not yet decoded)(bitmapped table, coming soon)

J

Measure-UPS: Alarm status

0F,00

(not yet decoded)(bitmapped table, coming soon)

K

Shutdown with grace period

OK

Send twice with > 1.5s delay between chars

Older units may send "*" instead of "OK"

Also see grace period

L

Input line voltage

118.3

Does not necessarily read 000.0 on line failure

M

Maximum line voltage

118.9

This is the max voltage since the last time this query was run

N

Minimum line voltage

118.9

Like the one above, this one also resets itself on every query

O

Output voltage

118.3

Also see on battery output voltage

P

Power load %

023.5

Relative to the capacity of the UPS

Q

Status flags

08

See status flags section for more info

R

Turn dumb

BYE

Only on 3rd gen Smart-UPS, Smart-UPS v/s, Back-UPS Pro

UPS must receive command to enter smart mode continue communications after sending this

S

Soft shutdown

OK

Command executes after grace period

UPS goes online when power returns

Only works when on battery

U

Simulate power failure

!, then $

See async notifier section for info on ! and $

V

Firmware revision

GWD

Can be used to determine abilities of hardware

W

Self test

OK

Tests battery, like pushing the test button on the front panel

Also see test results entry

X

Self-test results

OK

Values:

  • OK → good battery

  • BT → failed due to insufficient capacity

  • NG → failed due to overload

  • NO → no results available (no test performed in last 5 minutes)

Y

Enter smart mode

SM

This must be sent before anything else on this page will work.

Also see turn dumb command to exit smart mode

Z

Shutdown immediately

n/a

Send twice with > 1.5s delay between chars

UPS switches the load off immediately (no grace period)

a

Protocol info

(long string)

Returns three main sections:

Sections are separated with a period

b

Firmware revision

50.9.D

Decoding above info:

50

SKU (variable length)

9

firmware revision

D

country code (used in capability decoding)

c

UPS local id

UPS_IDEN

Writable variable

Up to 8 letter identifier for keeping track of your hardware

e

Return threshold

00

Writable variable

Minimum battery charge % to return from shutdown after power returns

Values:

  • 00 = 0% (UPS switches on immediately)

  • 01 = 15%

  • 02 = 25%

  • 03 = 90%

This prevents excessive cycling during multiple power failures

g

Nominal battery voltage

024

The battery voltage that’s expected to be present in the UPS normally

Compare to the actual voltage reading

f

Battery level

099.0

Percentage

It’s much easier to use this rather than doing math on the current battery voltage and the nominal battery voltage

h

Measure-UPS: Ambient humidity

042.4

Percentage

Only works on models with the Measure-UPS SmartSlot card

i

Measure-UPS: Dry contacts

00

Bitmapped hex variable

Component values:

  • 10 = contact 1

  • 20 = contact 2

  • 40 = contact 3

  • 80 = contact 4

j

Estimated runtime

0327:

Minutes

Must be calibrated to be effective

k

Alarm delay

0

Writable variable

Values:

  • 0 = 5 second delay after power failure

  • T = 30 second delay

  • L = alarm at low battery only

  • N = alarm disabled

Does not affect low battery warning

l

Low transfer voltage

103

Writable variable

See capabilities to get values for a UPS

UPS goes on battery after voltage drops below this point

m

Manufacturing date

11/29/96

Format may vary by country (MM/DD/YY vs DD/MM/YY)

n

Serial number

WS9643050926

Unique for each UPS

o

On-battery voltage

115

May be a writable variable on 220/230/240 VAC units

p

Shutdown grace delay

020

Writable variable - seconds

See capabilities to read values

Sets the delay before soft shutdown completes

q

Low battery warning

02

Writable variable - minutes

See capabilities to read values

The UPS will report a low battery this many minutes before it runs out of power

r

Wakeup delay

000

Writable variable - seconds

See capabilities to read values

The UPS will wait this many seconds after reaching the minimum charge before returning online

s

Sensitivity

H

Writable variable

See capabilities to read values

Meaning of values:

  • H → highest

  • M → medium

  • L → lowest

  • A → autoadjust (Matrix only)

u

Upper transfer voltage

132

Writable variable

See capabilities to read values

UPS goes on battery after voltage rises above this point

v

Measure-UPS: Firmware

4Kx

Firmware information for Measure-UPS board

t

Measure-UPS: Ambient temperature

80.5

Degrees C

Only works on models with the Measure-UPS SmartSlot card

x

Last battery change

11/29/96

Writable variable

This holds whatever the user sets in it, much like the UPS local id variable

y

Copyright notice

© APCC

Only works if firmware letter is later than O

z

Reset to factory settings

CLEAR

Resets most variables to initial factory values except identity or battery change date

Not on SmartUPS v/s or BackUPS Pro

-

Capability cycle

(various)

Cycle through possible capability values

UPS sends | afterward to confirm change to PROM

@nnn

Shutdown and return

OK

UPS shuts down after grace period with delayed wakeup after nnn tenths of an hour plus any wakeup delay time

Some older models send * instead of OK

0x7f

Abort shutdown

OK

Abort shutdown - use to abort @, S, K

Also known as the delete key in some places

~

Register #1

n/a

See register 1 table

'

Register #2

n/a

See register 2 table

7

Dip switch positions

n/a

See dip switch table

Only makes sense on models which actually have dip switches

8

Register #3

n/a

See register 3 table

9

Line quality

FF

Values

  • 00 → unacceptable

  • FF → acceptable

>

Battery packs

n/a

SmartCell models: returns number of connected packs

Non-SmartCell models: returns number set by user (use + and -)

[

Measure-UPS: Upper temp limit

NO,NO

Degrees C

Writable variable

Values: 55, 50, 45, …, 05 for both

Use - to enumerate through left side, + to enumerate through right side

]

Measure-UPS: Lower temp limit

NO,NO

Degrees C

Writable variable

See lower temp limit above

{

Measure-UPS: Upper humidity limit

NO,NO

%

Writable variable

Values: 90, 80, 70, …, 10 for both

Use - and + to change values

}

Measure-UPS: Lower humidity limit

NO,NO

%

Writable variable

Values: 90, 80, 70, …, 10 for both

Use - and + to change values

Matrix-UPS and Symmetra commands

^

Run in bypass mode

n/a

If online, "BYP" response is received as bypass mode starts

If already in bypass, "INV" is received and UPS goes online

If UPS can’t transfer, "ERR" received

<

Number of bad battery packs

000

Returns count of bad packs connected to the UPS

/

Load current

n/a

True RMS load current drawn by UPS

\

Apparent load power

n/a

Output load as percentage of full rated load

^V

Output voltage selection

n/a

Writable variable

Values:

  • A → Automatic (based on input tap)

  • M → 208 VAC

  • I → 240 VAC

^L

Front panel language

n/a

Writable variable

Values:

  • E → English

  • F → French

  • G → German

  • S → Spanish

  • Also 1, 2, 3, 4 → unknown

w

Run time conservation

n/a

Writable variable

Values:

  • NO → disabled

  • 02 → leave 2 minutes of runtime in battery

  • 05 → leave 5 minutes

  • 08 → leave 8 minutes

Информация по форматам клемм батарей:

Как правило, батареи с клеммами F1 используются в слаботочных приборах, охранная сигнализация и тд.) В ИБП используются батареи с клеммами F2

Формат  F1 F2
длина 6,35 7,95
ширина 4,75 6,35

Настройка apcupsd 

apt install apcupsd setserial

Проверка портов сервера

setserial /dev/ttyS0

Lisolog (C) / 2023