Подключаем ИБП через NUT

Nut UPSДостался мне уже старенький ИБП (источник бесперебойного питания) модели APC SMART 420. Подключается к компьютеру через com порт. Стал смотреть программы для корректного подключения его к компьютеру. На диске с этим ИБП нашел программу под linux размером аж 27Mb! Я так понял, она целиком графическая и требует для работы Java. А у меня на этом компьютере даже графического интерфейса нет, зачем роутеру графика? 🙂 Погуглив выбор пал на программу nut.
Данная программа может работать со многими типами ИБП, например такими как ippon, dell, mge, powercom и множество других моделей. Полный перечень смотрите тут.
Итак, задача вести логи состояния UPS, а также хочется web графический интерфейс для наглядного представления.

Первым делом идем на сайт проекта nut и смотрим есть ли поддержка вашего ИБП. Мне повезло, модели APC имеют хорошую поддержку в данной программе.

Установка nut и правка конфигов

Установка стандартная для каждой ОС, но при установке обязательно закажите собрать cgi скрипты (опция –with-cgi). По умолчанию они не устанавливаются. Эти скрипты будем использовать с web сервером, чтобы наблюдать красивые картинки 🙂

После установки мы увидим достаточно много примеров конфигурационных файлов


-rw-r--r-- 1 root root  1072 2009-03-13 12:50 hosts.conf.sample
-rw-r--r-- 1 root root  1365 2009-03-13 12:50 nut.conf.sample
-rw-r--r-- 1 root root  3662 2009-03-13 12:50 ups.conf.sample
-rw-r--r-- 1 root root  1717 2009-03-13 12:50 upsd.conf.sample
-rw-r--r-- 1 root root  1970 2009-03-13 12:50 upsd.users.sample
-rw-r--r-- 1 root root 11961 2009-03-13 12:50 upsmon.conf.sample
-rw-r--r-- 1 root root  3905 2009-03-13 12:50 upssched.conf.sample
-rw-r--r-- 1 root root  1420 2009-03-13 12:50 upsset.conf.sample
-rw-r--r-- 1 root root  4003 2009-03-13 12:50 upsstats.html.sample
-rw-r--r-- 1 root root  5817 2009-03-13 12:50 upsstats-single.html.sample

Для работы переименуем их в нормальные конфиги без префикса sample и выставим права.


-rw-r--r-- 1 root  root   1103 2009-03-19 15:48 hosts.conf
-rw------- 1 root  root   1365 2009-03-13 12:50 nut.conf
-rw------- 1 root  root   3802 2009-03-19 15:49 ups.conf
-rw------- 1 root  root   1715 2009-03-13 14:03 upsd.conf
-rw------- 1 root  root   2062 2010-08-03 12:54 upsd.users
-rw------- 1 root  root  12002 2010-08-03 12:53 upsmon.conf
-rw------- 1 root  root   3905 2009-03-13 12:50 upssched.conf
-rw------- 1 root  root   1420 2009-03-13 12:50 upsset.conf
-rw-r--r-- 1 root root  3611 2009-05-05 15:48 upsstats.html
-rw-r--r-- 1 root root  5817 2009-03-13 12:50 upsstats-single.html

Обратите внимание на права файлов nut.conf, ups.conf, upsd.conf, upsd.users, upsmon.conf, upssched.conf, upsset.conf. Права должны быть 600, а иначе при запуске nut будет выдаваться предупреждение.
Лучше всего показать на примерах моих файлов как заводить новый ИБП.
Первый файл host.conf – нужен для cgi скриптов. Если вам не надо cgi, то можете ничего не заносить сюда.


# cat ./hosts.conf | grep -v ^#
MONITOR ups420@localhost "mik"

Файл nut.conf. Тип запуска программы.


MODE = none

Файл ups.conf. Сюда заносим ИБП, которые собираемся мониторить или контролировать. Обратите внимания, что для каждой модели ИБП надо правильно подобрать название драйвера, а иногда даже указать правильно тип кабеля. Но у меня в данном случае проблем не возникло. Еще задайте порт, на котором подключен ваш ИБП. Для linux обычно это порты /dev/ttyS0-1, а для freebsd /dev/cua0-1, что соответствуют портам com1-2


 [apc420]
       driver = apcsmart
 #   driver = apcsmart
       port = /dev/ttyS0
    #   cable = 940-0095B
       desc = "mik"

Файл – upsd.conf. Задаем порт и адрес, который будет слушать nut. В нашем случае управлять nut можно только с локальной машины.


LISTEN 127.0.0.1 3493

Файл – upsd.users. Как видно из названия файлов задает параметры доступа по пользователю. Тут такие важные параметры как пароль и какой уровень команд пользователь может выполнять. Почитайте файл, там разобраны различные примеры настроек. В данном примере у меня разрешено все.


[mik]
                password = your_password
                actions = SET
                instcmds = ALL
                upsmon master

Файл – upsmon.conf. В этом файле собраны переменные для контроля за ИБП. Например до какого времени доводить критический уровень, команда отключения и др. В примерах все написано. Самое главное проверьте команду выключения компьютера. В разных ОС она может отличаться.


RUN_AS_USER root
MONITOR apc420@localhost 1 mik your_password master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

Остальные конфиги upssched.conf, upsset.conf, upsstats.html, upsstats-single.html я не трогал.
CGI скрипты я положил в папку cfi-bin на своем apache сервере.

Запуск nut

Запуск осуществляется в несколько этапов.
1. Загрузка драйверов для ИБП и установка с ним связи. Самый главный этап.
От рута выполняем


# /usr/local/ups/bin/upsdrvctl -u root start
etwork UPS Tools - UPS driver controller 2.4.1
Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1)
APC command table version 2.0
Detected Smart-UPS 420    [NS0028242214] on /dev/ttyS0

Если программа не нашла ваш ИБП, то следующие шаги запуска будут бесполезны. Проверьте в тот ли порт подключен ИБП, попробуйте заменить драйвер или указать ваш тип кабеля в файле ups.conf. Возможно это поможет.
2. Загрузка демона upsd и синхронизация с вашим ИБП


# /usr/local/ups/sbin/upsd -u root
Network UPS Tools upsd 2.4.1
listening on 127.0.0.1 port 3493
Connected to UPS [apc420]: apcsmart-apc420

3. Запуск мониторинга ИБП. Тут программа работает с теми переменными, что вы задали в файле upsmon.conf.


# /usr/local/ups/sbin/upsmon
Network UPS Tools upsmon 2.4.1
UPS: apc420@localhost (master) (power value 1)
Using power down flag file /etc/killpower

Это все, теперь ваш ИБП настроен и будет работать при отлючении сети как вы задали.

Для просмотра через web заходим по адресу cgi скриптов. http://ваш_комьютер/cgi-bin/upsstats.cgi. В конфигурации web сервера должен быть разрешен запуск скриптов из этой папки. В apache сервере по умолчанию разрешены скрипты из папки cgi-bin.

Информация о ИБП

Визуальная информация в графиках

Ведем логи ИБП

Я делаю это с помощью программы upslog, которая ставится вместе с программой nut.
Запускаем


/usr/local/ups/bin/upslog -s apc420@localhost -l /var/log/ups.log

и в файле ups.log каждые 30 секунд создается запись с основными характеристиками ИБП. Из этой команды я сделал скрипт и назвал его log. Файл положил рядом с остальными бинарными файлами nut.


20100803 161601 100.0 224.6 048.1 [OL] NA 50.00
20100803 161631 100.0 224.6 048.1 [OL] NA 50.00
20100803 161701 100.0 224.6 048.1 [OL] NA 50.00
20100803 161731 100.0 224.6 053.3 [OL] NA 50.00
20100803 161801 100.0 227.5 048.1 [OL] NA 50.00
20100803 161831 100.0 227.5 057.8 [OL] NA 50.00
20100803 161901 100.0 227.5 047.4 [OL] NA 50.00
20100803 161931 100.0 224.6 058.5 [OL] NA 50.00
20100803 162001 100.0 224.6 060.4 [OL] NA 50.00

Колонки – дата, время, емкость батареи, входное напряжение, загрузка ИБП, статус, температура, частота сети.
С помощью этого файла в будущем можно анализировать какое состояние электрической сети в вашем здании и как реагирует на это ваш ИБП.

Ну и на закуску команды, которыми можно управлять напрямую вашим ИБП. Вот перечень команд с их описанием. Не пробуйте выполнять команды, если не знаете их назначение, можете запросто выключить компьютер.
показать


А выполнять их надо через команду upscmd, а в качестве параметров необходимо указать пользователя, пароль, имя_ибп@компьютера ну и команду.
Например тест передней панели – ИБП проверит состояние диодов и звуковой сигнал тревоги.


upscmd -u mik -p your_password apc420@localhost test.panel.start

Теперь остается сделать только общий скрипт скрипт запуска программы и положить в стартовые скрипты компьютера.
У меня скрипт для linux получился такой.


#!/bin/sh

if [ x$1 = xstart ]; then
        /usr/local/ups/bin/upsdrvctl -u root start
        /usr/local/ups/sbin/upsd -u root
        /usr/local/ups/sbin/upsmon
        /usr/local/ups/bin/log
elif [ "x$1" = "xstop" ]; then
        killall upslog
        killall upsmon
        /usr/local/ups/sbin/upsd -c stop
        killall apcsmart

fi

Если что-то не получается сделать первым делом читайте документацию на сайте или в man файлах.

Запись опубликована в рубрике UPS, Программы с метками , , . Добавьте в закладки постоянную ссылку.

2 комментариев Подключаем ИБП через NUT

  1. Carpsat говорит:

    Здравствуйте!
    Спасибо за превосходный материал, который попался мне в нужное время! Хотел бы уточнить: удалось ли вам сделать e-mail уведомления о событиях ИБП на русском языке?
    Т.е. если директива”NOTIFYMSG FSD “UPS %s: forced shutdown in progress”” не содержит в себе русских букв, то все нормально отправляется и на e-mail, в и syslog. Но если директива имеет вид “NOTIFYMSG FSD “UPS %s: происходит форсированная перезагрузка””, то в syslog попадает только пустая строка от процесса upsmon, а почта не отправляется.

    • mik говорит:

      и вам спасибо за отзыв.
      про русский язык не разбирался. возможно дело в том что программа не поддерживает юникод (все современные дистрибутивы уже на юникоде). Возможно стоит попробовать какой-нибудь KOI8-R.
      Я как-то не заморачивался с русским 🙂

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

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