Достался мне уже старенький ИБП (источник бесперебойного питания) модели 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 файлах.
Здравствуйте!
Спасибо за превосходный материал, который попался мне в нужное время! Хотел бы уточнить: удалось ли вам сделать e-mail уведомления о событиях ИБП на русском языке?
Т.е. если директива”NOTIFYMSG FSD “UPS %s: forced shutdown in progress”” не содержит в себе русских букв, то все нормально отправляется и на e-mail, в и syslog. Но если директива имеет вид “NOTIFYMSG FSD “UPS %s: происходит форсированная перезагрузка””, то в syslog попадает только пустая строка от процесса upsmon, а почта не отправляется.
и вам спасибо за отзыв.
про русский язык не разбирался. возможно дело в том что программа не поддерживает юникод (все современные дистрибутивы уже на юникоде). Возможно стоит попробовать какой-нибудь KOI8-R.
Я как-то не заморачивался с русским 🙂