Прикручиваем APC к Linux

что требуется:

мониторинг UPS при помощи дата кабеля

Что есть:

APC RS 800, Тазик с установленным линуксом

Вы скажите а зачем заморачиваться если есть SMART UPS от APC, я отвечу просто:

1. Зачем переплачивать 100-120 у.е. только за смарт, и если этого всего можно добится не столь сложными путями?

2. Ваши смарты, держат счтолько-же (имеется ввиду по одинаковым Вольт-Амперным характеристика )

Оговорюсь сразу что 98% новых УПСов идут с USB дата-кабелем, поэтому COM рассматривать не будем, но по аналогии можно сделать все тоже 😉

Итак приступимс:

Смотрим какие девайсы подключены по USB:
cat /proc/bus/usb/devices

находим что-то типа:
T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=1.5 MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=051d ProdID=0002 Rev= 1.06
S:  Manufacturer=American Power Conversion
S:  Product=Back-UPS BR  800 FW:9.o4 .I USB FW:o4
S:  SerialNumber=3B0749X89999
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 24mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
E:  Ad=81(I) Atr=03(Int.) MxPS=   6 Ivl=10ms

Далее создаём файл /etc/udev/rules.d/50-udev.rules и прописываем в него:

BUS="usb", SYSFS{idVendor}="051d", NAME="usb/hiddev%n"

(возможно данный файл автоматом создастя, и в нем будет это все 😉 )
051d берётся из вывода /proc/bus/usb/devices (строки Vendor )

в apcupsd.conf

UPSCABLE usb
UPSTYPE usb
DEVICE
LOCKFILE /var/lock
UPSCLASS standalone
UPSMODE disable

Стартуем демон и проверяем командой apcaccess что у нас есть, если получаем список:

APC      : 001,044,1108
DATE     : Thu Jan 15 22:12:44 EET 2009
HOSTNAME : status.ks.ua
RELEASE  : 3.14.2
VERSION  : 3.14.2 (15 September 2007) redhat
UPSNAME  : status.ks.ua
CABLE    : USB Cable
MODEL    : Back-UPS BR  800
UPSMODE  : Stand Alone
STARTTIME: Thu Jan 15 20:57:29 EET 2009
STATUS   : ONLINE
LINEV    : 234.0 Volts
LOADPCT  :  16.0 Percent Load Capacity
BCHARGE  : 100.0 Percent
TIMELEFT :  45.9 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
OUTPUTV  : 230.0 Volts
SENSE    : Medium
DWAKE    : 000 Seconds
DSHUTD   : 000 Seconds
LOTRANS  : 194.0 Volts
HITRANS  : 264.0 Volts
RETPCT   : 000.0 Percent
ITEMP    : 29.2 C Internal
ALARMDEL : Always
BATTV    : 27.3 Volts
LINEFREQ : 51.0 Hz
LASTXFER : Low line voltage
NUMXFERS : 5
XONBATT  : Thu Jan 15 22:12:10 EET 2009
TONBATT  : 0 seconds
CUMONBATT: 12 seconds
XOFFBATT : Thu Jan 15 22:12:13 EET 2009
SELFTEST : NO
STATFLAG : 0x07000008 Status Flag
SERIALNO : 3B0749X83473
BATTDATE : 2001-09-25
NOMOUTV  : 230
NOMINV   : 230
NOMBATTV :  24.0
FIRMWARE : 9.o4 .I USB FW:o4
APCMODEL : Back-UPS BR  800
END APC  : Thu Jan 15 22:12:53 EET 2009

Поздравляю Ваш УПС заехал красиво 🙂

это все хорошо, при потери питания на рута (или его алиас будет слаться мыло и т.п. при 5% остатка мощности на батареи тазик будет тушиться, если нам это не надо можно поменять в конфиге) но нам надо чтоб приходили СМСки в случае любых изминений происходящих в сети, для этого есть скрипты в /etc/apcupsd

changeme  commfailure  commok offbattery  onbattery

можно подредактировать их содержание и указать нечто:

cat offbattery
#!/bin/sh
#
# This shell if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when the
# UPS goes back on to the mains after a power failure.
# We send an email message to root to notify him.
#
SYSADMIN=root
SMS=хххххххххххх@sms.kyivstar.net
APCUPSD_MAIL="/bin/mail"

HOSTNAME=`hostname`
MSG="$HOSTNAME Power has returned"
#
(
echo "Subject: $MSG"
echo " "
echo "$MSG"
echo " "
/usr/sbin/apcaccess status
) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN

MSG="$HOSTNAME Power has returned"
#
(
echo "ALERT"
echo " "
) | $APCUPSD_MAIL -s "$MSG" $SMS

exit 0

так же неплохо просматривать что происходит с УПСом через браузер (ну это для таких ленивых как я (= )

вот скриптик (можно либо через крон раз в 5 минут выполнять, либо стартонуть через бесконечный цыкл)

#!/bin/sh
/usr/sbin/apcaccess > /home/apcaccess.output
OUTFILE="/www/htdocs/ups/index.html"
INFILE="/home/apcaccess.output"
eval `cat "${INFILE}" |
grep '^\(DATE\|HOSTNAME\|CABLE\|MODEL\|STARTTIME\|STATUS\|LINEV\|UPSMODE\|LOTRANS\|HITRANS\|LOADPCT\|BCHARGE\|MBATTCHG\|TIMELEFT\|MINTIMEL\|BATTV\|NOMBATTV\|temperature\|BATTDATE\)' |
sed 's! *: *!="!;s!$!"!'`

case ${STATUS} in
*ONLINE*)
StatusColor="#00FF00"
;;
*OFFLINE*)
StatusColor="#FF0000"
;;
esac

ChargeGrn1=`echo ${BCHARGE}|sed 's!\([0-9.]\+\).*!\1!'`
ChargeRed=
LoadGrn=`echo "${LOADPCT}"|sed 's!\..*!!'`
LoadRed=
ChargeGrn=`echo "${MBATTCHG}"|sed 's!\..*!!'`
ChargeRed=
ChargeGrn=`echo "${ChargeGrn}"|sed 's!\Percent!!'`
let "ChargeRed=100-${ChargeGrn}"
let "LoadRed=100-${LoadGrn}"

cat <<EOF > "${OUTFILE}"
<html>
<head><title>APC UPS Status</title></head>
<body>
<center>
<table border="1">
<tr>
<td>Status for $MODEL ($CABLE) on $HOSTNAME</td>
<td align="center">
<a href="http://www.apc.com">
<img src="http://www.apc.com/resource/images/header/logo.gif" alt="APC Home"/>
</a>
</td></tr>

<tr>
<td>Current State</td>
<td align="center"><span style="color:$StatusColor">$STATUS</span></td>
</tr>

<tr>
<td>UPS Mode</td>
<td align="center"><span style="color:$StatusColor">$UPSMODE</span></td>
</tr>

<tr>
<td>Current Date/Time</td>
<td align="center">$DATE</td>
</tr>

<tr>
<td>Daemon Started</td>
<td align="center">$STARTTIME</td>
</tr>

<tr>
<td>Current Voltage</td>
<td align="center">$LINEV</td>
</tr>

<tr>
<td>Low Trans Voltage</td>
<td align="center">$LOTRANS</td>
</tr>

<tr>
<td>High Trans Voltage</td>
<td align="center">$HITRANS</td>
</tr>

<tr>
<td>Load Percentage</td>
<td align="center">$LOADPCT<br>
<table border="1" width="100%">
<tr>
<td width="$LoadGrn%" bgcolor="#0000FF"></td>
<td width="$LoadRed%" bgcolor="#FFFFFF"></td>
</tr>
</table>
</td>
</tr>

<tr>
<td>Current Battery Charge %</td>
<td align="center">$BCHARGE%<br>
<table border="1" width="100%">
<tr>
<td width="$ChargeRed%" bgcolor="#00FF00"></td>
<td width="$ChargeGrn%" bgcolor="#FF0000"></td>
</tr>
</table>
</td>
</tr>

<tr>
<td>Minimum Battery Charge %</td>
<td align="center">$MBATTCHG%<br>
<table border="1" width="100%">
<tr>
<td width="$ChargeGrn%" bgcolor="#00FF00"></td>
<td width="$ChargeRed%" bgcolor="#FF0000"></td>
</tr>
</table>
</td>
</tr>

<tr>
<td>Time Left</td>
<td align="center">$TIMELEFT</td>
</tr>

<tr>
<td>Minimum Time Left</td>
<td align="center">$MINTIMEL</td>
</tr>

<tr>
<td>Current Battery Voltage</td>
<td align="center">$BATTV</td>
</tr>

<tr>
<td>Nominal Battery Voltage</td>
<td align="center">$NOMBATTV Volts</td>
</tr>

<tr>
<td>Date of last verify Battery</td>
<td align="center">$BATTDATE</td>
</tr>

</table>
</center>
</body>
</html>

так же можно поизвращаться и запихнуть выводимые данные по SNMP для дальнейшего построения графиков, но этим займусь позже, как будет настроение, возможно будет 🙂

9 comments on “Прикручиваем APC к Linux

  1. с некоторыми УПСами идет серийный кабель. Можно мониторить через него с помощью , например, демона «apcupsd» (debian way):

    aptitude show apcupsd

    Description: APC UPS Power Management (daemon)
    apcupsd provides UPS power management for APC products, including most BackUPS series models (including USB), SmartUPS V/S, SmartUPS (NET/RM), and Matrix series.

    It controls and monitors the status of UPS and allows your computer to run for a specified length of time on UPS power, and then executes a controlled shutdown in the case of an extended power failure.
    Homepage: http://www.apcupsd.com/

    GUI интерфейс для демона:

    gapcmon

    GUI gapcmon
    GUI gapcmon detail

    Возможно кому то пригодится 🙂

    • Привет,
      1. почитать apcupsd.conf
      2. после прочтения — подправить конфиг
      3. Не тушить по правильному сервант — это ИМХО изврат, это из серии пусть лучше неправильно таз выключается, падают базы и т.п.
      4. при появлении питания на УПСе если в биосе стоит опция «повер он ат повер рекавери» … то таз поднимится
      5. если стоит более мощная батарея на УПСе — можно откалибровать УПС под аккум.

      • apcupsd.conf читал,
        конфиг правил, BATTERYLEVEL 0 и MINUTES 0, бестолку.
        согласен, но если упс по-правильному начнет тушить сервант и появится свет то все, ноги в руки ехать тыкать кнопку, сервант сам уже никогда не включится.
        само собой батарея более мощная, как откалибравать упс?

        • еще раз. в биосе поставьте один раз опцию:
          AC PWR Loss Restart (включить компьютер после пропадания питания) — разрешение этого параметра позволяет включить компьютер после пропадания питания. В противном случае после восстановления питания компьютер не включится и необходимо будет снова нажать кнопку подачи питания (Power). Может принимать значения:
          Enabled — разрешено
          Disabled — запрещено

          Automatic Power Up (автоматическое включение) — используя этот параметр, можно включать компьютер ежедневно в указанное время или включить его в указанный день и час. Может принимать значения:
          Everday (ежедневно) — при вводе времени компьютер будет включаться ежедневно в назначенное время. Время вводится в поле Time (hh:mm:ss) Alarm в порядке часы:минуты:секунды либо клавишами PgUp, PgDn, либо непосредственным вводом чисел.
          By Date (по дате) — компьютер включится в заданный день и в заданное время. При выборе этого параметра появляется поле для ввода времени (такое же, как и для Everyday) и поле для ввода дня месяца Date of Month Alarm — день месяца — в этом поле вводится число в месяце. Это автоматически означает, что запрограммировать включение компьютера можно только внутри одного месяца.
          Disabled — запрещено

          http://www.pc-bios.net/bios_power.html

  2. выдергиваете упс из разетки, ждете когда упс потушит сервер, втыкаете упс в разетку, на выходе упса напряжение не пропадало стало быть сервер можно включить только руками или wol

    • хм, или я делаю что-то неправильно или ХЗ, я никогда не бегаю когда УПС полностью сядет (исключение переход на генератор), было дело в Декабре потухло все, я был в карпатах, серв находится в Херсоне, все поднялось после появления питания.
      Отсюда вывод:
      1. либо Вы плохо ознакомились с БИОСом
      2. либо просто кривая мать, которая нормально не работает с APU. Как вариант попробуйте все опции в Enable поставить.

      п.с. У меня на брендовых Деллах, ИБМах и хюлитах все ок, есть варианты где работает на ура обычные писюки… что в биосе поставил, так и работает…

      • Как у вас тут весело 🙂

        BUM, кажется я понимаю автора вопроса.

        У меня была ситуация, когда упс дал команду на выключение тазика, он (тазик) стал успешно тушиться.
        Но за несколько секунд до poweroff, упс получил питание. Соответственно получилась некая эмуляция выключения по кнопке и тазик в итоге не включился сам.

        Пришлось ждать понедельника (как обычно, сбой по питанию был в пятницу вечером).

        • Ну для особых гурманов:
          1. идем в /etc/apcupsd/apccontrol
          2. ~63 строка содержит: ${APCUPSD} —killpower
          3. ставим в начале строки #
          4. сохраняем
          5. ????????
          6. profit!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*