2015-03-01
Установил UPC Powercom KIN-2200AP-RM. Распиновку кабеля взял с сайта производителя http://www.pcm.ru/data/docs/cables.zip, подключил его COM-портом к серверу. Для мониторинга и управления выбрал NUT - Network UPS Tools.
Устанавка.
# cd /usr/ports/sysutils/nut # make install clean # rehash
Набор опций для установки: Options for nut-2.7.2_7
[X] SERIAL SERIAL support [ ] USB USB support [X] SNMP SNMP support [X] NEON NEON XML/HTTP support [ ] PDU Powerman PDU support [ ] HAL HAL support [ ] IPV6 IPV6 support [X] CGI Web CGI interface
Настройка
Необходимо создать каталоги для драйверов и сервера, выставить права:
# mkdir -p /var/state/ups # chmod 0770 /var/state/ups # chown uucp:wheel /var/state/ups
Определение драйвера для данного UPS:
# cat /usr/local/etc/nut/driver.list | grep Powercom
# cat /usr/local/etc/nut/driver.list | grep Powercom "Powercom" "ups" "4" "SMK" "" "blazer_ser" "Powercom" "ups" "4" "SXL" "" "blazer_ser" "Powercom" "ups" "4" "ULT" "" "blazer_ser" "Powercom" "ups" "4" "Trust 425/625" "" "powercom" "Powercom" "ups" "4" "Advice Partner/King Pr750" "" "powercom" "Powercom" "ups" "4" "Black Knight PRO" "" "powercom" "Powercom" "ups" "5" "Black Knight PRO" "USB (2009 models, product id: 00a6)" "usbhid-ups (experimental)" "Powercom" "ups" "4" "Smart KING Pro (all Smart series)" "" "powercom" "Powercom" "ups" "5" "Smart KING Pro (all Smart series)" "USB (2009 models, product id: 00a3)" "usbhid-ups (experimental)" "Powercom" "ups" "4" "Imperial" "" "powercom" "Powercom" "ups" "5" "Imperial" "USB (2009 models, product id: 00a2)" "usbhid-ups (experimental)" "Powercom" "ups" "4" "Vanguard" "" "blazer_ser" "Powercom" "ups" "5" "Vanguard" "USB (2009 models, product id: 0004 or 00a5)" "usbhid-ups (experimental)" "Powercom" "ups" "4" "WOW" "USB (<= 2009 models, product id: 0002)" "powercom (requires 'usbserial' kernel module)" "Powercom" "ups" "5" "WOW" "USB (2009 models, product id: 00a4)" "usbhid-ups (experimental)" "Powercom" "ups" "4" "(various)" "USB (<= 2009 models, product id: 0002)" "powercom (requires 'usbserial' kernel module)" "Powercom" "ups" "5" "(various)" "USB (2009 models, product id: 00a?)" "usbhid-ups (experimental)" "Powercom" "ups" "5" "BNT-xxxAP" "USB (product id: 0004)" "usbhid-ups (experimental)"
Нужно использовать драйвер «powercom», поскольку KIN относится к серии King PRO.
Все конфигурационные файлы NUT находятся в директории «/usr/local/etc/nut».
Назначение:
ups.conf
Необходимо добавить в конфигурационный файл UPS и его настроки подключения.
Скопирую дефолтный конфигурационный файл.
# cd /usr/local/etc/nut && cp ups.conf.sample ups.conf
В результате получим следующий результат:
# cat /usr/local/etc/nut/ups.conf [klotik_ups] driver = powercom port = /dev/cuau1 desc = "PowerCom KIN-2200AP RM" type = KIN
Опции:
Допускается использование дополнительных опций, исходя из специфики оборудования (необходимо смотреть маны по конкретно используемому драйверу). В моем случае не совпадал тип с тем, который используется по умолчанию, соответственно пришлось конкретизировать. Значения по умолчанию для драйвера Powercom:
upsd.conf
upsd отвечает за передачу данных от драйвера клиентским программам в сети. upsd должен находится под управлением и по возможности, как единственный источник состояния и мониторинга клиентов, таких как upsmon. upsd использует этот файл для контроля доступа к серверу и для установки других значений различных конфигурации. Этот файл содержит подробные сведения об управлении доступом, таким образом, обеспечивается безопасность.
Создание файла:
# cp upsd.conf.sample upsd.conf
Редактируем до следующего состояния:
# cat upsd.conf LISTEN 127.0.0.1 3493 LISTEN 195.3.159.250 3493
Доступные опции:
MAXAGE <seconds> - по умолчанию 15 секунд. Это частота обновления данных клиентов после остановки драйвера UPS. Следует использовать только в том случае, если есть трудности с обновлением данных.
LISTEN <address> [<port>] - здесь указывается адрес и порт 3493 (по умолчанию) для прослушивания подключений.
MAXCONN <connections> - по умолчанию используется 1024 подключений. Каждый UPS, каждого LISTEN адреса и каждого клиента считается как одно подключение. Если на сервере заполнятся количество подключений, он больше не будет принимать новых входящих клиентских подключений.
upsd.users
Контроль доступа к UPS-демону (профили пользователей). Именно в этом файле указывается, кто и в какой мере будет контролировать и работать с утилитой.
Создадие файла:
# cp upsd.users.sample upsd.users
Правим конфиг до следующего состояния:
# cat upsd.users [admin] password = adminpass actions = SET instcmds = ALL upsmon master
Доступные опции.
Значения:
password - пароль пользователя
allowfrom - откуда разрешено подключатся
Каждый UPS монитор может определяться как один из трех возможных типов:
upsmon master - полные полномочия управлением питания подключенных к системе UPS под управлением upsmon, эта система отвечает за выключение разряженного аккумулятора. Выключение происходит после безопасного выключения всех Slave систем. Если ваш UPS подключен непосредственно к системе через последовательный порт, то для upsmon системы следует определить этот UPS как Master.
upsmon slave - эта система, под управлением upsmon и она не выключается непосредственно. Операционная система будет выключена перед отключением питания Master. Используйте этот режим при запуске монитора на других компьютерах работающих на том же UPS. И очевидно, что только один сервер может быть подключен к последовательному порту на UPS, коим будет является Master. Все остальные сервера будут Slave.
upsmon monitor-only - при этом режиме будут создаваться уведомления о состоянии или изменении работы батареи, переключении на линию и т.д., но не завершать работу системы.
actions - Действия пользователя с применением upsd.
instcmds - разрешения пользователю на инициирование конкретных команд. «ALL» - разрешает использовать все команды. Существует множество команд, 'upscmd -l' показывает, что поддерживает оборудование. Пример несколько команд.
upsmon.conf
upsmon предоставляет основные функции, которые собирается найти в программе мониторинга UPS, например это безопасное завершений работы при сбое питания. В многоуровневой схеме утилиты NUT это клиент.
Создание файла конфигурации:
# cp upsmon.conf.sample upsmon.conf
Редактируем конфиг до следующего состояния:
# cat upsmon.conf MONITOR Powercom@localhost 1 monmaster masterpass master MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -p now" POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 POWERDOWNFLAG /etc/killpower # Выполнять команду после события NOTIFYFLAG с флагом EXEC. Указывает выполнения запуск событий для таймера. NOTIFYCMD /usr/local/sbin/upssched # NOTIFYFLAG – Изменение поведение при случившихся событиях. # По умолчанию посылает сообщением всем пользователям и записывает их в системный журнал. # Пример флагов: # SYSLOG – писать сообщение в syslog # WALL - писать сообщение всем пользователям системы # EXEC - выполнить команду NOTIFYCMD # IGNORE – нечего не делать NOTIFYFLAG ONLINE SYSLOG+EXEC NOTIFYFLAG ONBATT SYSLOG+EXEC NOTIFYFLAG LOWBATT SYSLOG+EXEC NOTIFYFLAG SHUTDOWN SYSLOG+WALL RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5
Итак, мы добавили monitir, формат записи которого следующий:MONITOR system powervalue username password type
Значение опций:
MINSUPPLIES - указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной. Большинство систем имеют один БП. Но мощные сервера, например HP NetServer LH4, могут работать с 2 из 4 БП и ему нужно ставить 2.
SHUTDOWNCMD - upsmon выполняет эту команду, когда системе необходимо выключить.
NOTIFYCMD - upsmon отправляет сообщение при происшествиях.
POLLFREQ - опрос мониторами с частотой (измеряется в секундах) для обычной деятельности. Вы можете отрегулировать это частоту опроса, чтобы upsmon не “зашумлял” вашу сеть, но не вносите слишком большие значения тк. оно может пропустить отключение питания.
POLLFREQALERT - опрос UPS с частотой в секундах. Можно сделать значение поменьше, чем POLLFREQ для лучшей чувствительности работы батареи.
HOSTSYNC - как долго upsmon будет ждать перед переходом к следующему upsmon. master upsmon использует это число при ожидании slaves чтобы отключиться после того как он установил флаг принудительное завершение работы (FSD). И если slaves не отключаться после этого тайм аута, то выключение продолжится без них.
DEADTIME - интервал ожидания перед объявлением статуса UPS как «мертвый». upsmon требует, чтобы UPS предоставлял свою статус информацию, каждые несколько секунд (см. POLLFREQ и POLLFREQALERT). Если статус загрузки, UPS помечен fails. И если оно остается fails более чем DEADTIME секунд, то UPS помечается «мертвый».
POWERDOWNFLAG - флаг файла для форсирования завершения работы UPS в master системе.
NOTIFYMSG - изменение сообщения, отправленные upsmon при возникновении определенных событий.
NOTIFYFLAG - изменение поведения upsmon при возникновении событий NOTIFY.
RBWARNTIME - предупреждение замены аккумулятора в секундах.
NOCOMMWARNTIME - предупреждение по времени при не общении к UPS в секундах.
FINALDELAY - процент батареи, при котором происходит завершение работы системы.
upssched.conf
В файл /usr/local/etc/nut/upssched.conf можно настроить различные таймеры на события. Я настроил, так что бы после 30 секунд работы от аккумулятора мне на телефон приходила sms вида «ups - on batt», а после восстановления питания через 60 секунд приходила sms - «ups - on line».
# Скрипт с таймерами, должен быть раньше строчек AT CMDSCRIPT /usr/local/bin/upssched-cmd # PIPEFN это файл pire который будет передавать таймер между процессами, LOCKFN предотвращает события когда два события отправлены почти одновременно. Рекомендуется создать отдельный каталог upssched с правами от пользователя который запускает и может иметь доступ записывать в файлы которые мы указали ниже. PIPEFN /var/db/nut/upssched/upssched.pipe LOCKFN /var/db/nut/upssched/upssched.lock # При событии ONBATT запускаем таймер которые выполнит команду "onbatt" через 30 секунд. Команду "onbatt" мы создадим позже в файле /usr/local/bin/upssched-cmd , который был указан в переменной CMDSCRIPT. Если в течение 30 секунд произойдет событие ONLINE, то таймер будет отменен и команда "onbatt" не будет выполнена. AT ONBATT * START-TIMER onbatt 30 AT ONLINE * CANCEL-TIMER onbatt AT ONLINE * START-TIMER online 60 AT ONBATT * CANCEL-TIMER online
Файл /usr/local/bin/upssched-cmd это скрипт который выполняется по таймеру.
case $1 in # Имя нашего таймера, указанного в upssched.conf onbatt) sendsms 8ххххххххх "ups - on batt" ;; *) # Если поступила команда который нет в скрипте, запишем в лог об этом logger -t upssched-cmd "Unrecognized command: $1" ;; esac case $1 in online) sendsms 8ххххххххх "ups - on line" ;; *) esac
В результате теперь когда пропадает электричество в сети и если оно в течение 30 секунд не появилось, то мне приходит sms, что ups работает от аккумуляторов. Соответственно при появлении напряжения на входе ups, через 60 секунд приходит sms, что ups on line.
Права на файлы и каталоги.
Владельцем /var/db/nut должен быть пользователь uucp, права на выставлены на 0750:
# ls -ld /var/db/nut/ drwxr-x--- 2 uucp uucp 512 24 апр 04:50 /var/db/nut/
Права на конфигурационные файлы.
Условия - пользователь uucp должен иметь доступ на чтение:
# chown uucp:uucp upsd.conf upsd.users upsmon.conf # chmod 0640 upsd.conf upsd.users upsmon.conf
Запуск сервиса
Добавляю NUT в /etc/rc.conf и запускаю для сервисы:
# echo '### Network UPS Tools' >> /etc/rc.conf # echo 'nut_enable="YES"' >> /etc/rc.conf # echo 'nut_upsmon_enable="YES"' >> /etc/rc.conf # echo 'nut_upslog_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/nut start Network UPS Tools - UPS driver controller 2.4.1 Network UPS Tools - PowerCom protocol UPS driver 0.12 (2.4.1) Starting nut. Network UPS Tools upsd 2.4.1 listening on 195.3.159.250 port 3493 listening on 127.0.0.1 port 3493 Connected to UPS [Powercom]: powercom-Powercom # sh /usr/local/etc/rc.d/nut_upsmon start Starting nut_upsmon. Network UPS Tools upsmon 2.4.1 UPS: Powercom@localhost (master) (power value 1) Using power down flag file /etc/killpower # sh /usr/local/etc/rc.d/nut_upslog start Starting nut_upslog. Network UPS Tools upslog 2.4.1 logging status of myups@localhost to /var/log/ups.log (300s intervals)
Проверка:
# ps -ax | grep nut 85110 ?? Ss 0:01,53 /usr/local/libexec/nut/powercom -a Powercom # ps -ax | grep ups 90340 ?? Ss 0:00,02 /usr/local/sbin/upsd 90534 ?? Is 0:00,00 /usr/local/sbin/upsmon localhost 90535 ?? S 0:00,00 /usr/local/sbin/upsmon localhost 90551 ?? Is 0:00,00 /usr/local/bin/upslog -s myups@localhost -l /var/log/ups.log -i 300
Сервисы запущены, работают и ведутся логи.
Подключение к UPS для проверки его статуса:
# upsc Powercom@localhost battery.charge: 100.0 driver.name: powercom driver.parameter.pollinterval: 2 driver.parameter.port: /dev/cuad0 driver.parameter.type: KIN driver.version: 2.4.1 driver.version.internal: 0.12 input.frequency: 50.07 input.voltage: 234.0 input.voltage.nominal: 220 output.frequency: 50.07 output.voltage: 234.0 ups.load: 22.0 ups.mfr: PowerCom ups.model: KIN-2200AP ups.model.type: KIN ups.serial: Unknown ups.status: OL
Для проверки только режима работы UPS можно воспользоваться следующей командой (по аналогии можно запрашивать и другие параметры):
# upsc Powercom@localhost ups.status OL
Переменная может принимать следующие значения:
Теперь посмотрим монитором:
# upsmon Network UPS Tools upsmon 2.4.1 UPS: Powercom@localhost (master) (power value 1) Using power down flag file /etc/killpower
Когда upsmon необходимо быстро выключить локальную систему, она устанавливает флаг «FSD» (forced shutdown - принудительное отключение) для любых UPS, на котором она выполняется в master режиме. Данная возможность используется и для синхронизации slaves компьютеров в том случае,если master UPS передает событие и всем рассылается сообщение о немедленном прекращении работы.Можно вручную вызвать этот режим на master upsmon, запустив другой экземпляр с флагом '-c fsd '. Это полезно, когда вы хотите инициировать shutdown перед критическим этапом. Эмулируем падение мощности:# upsmon -c fsd
Система должна корректно завершить работу.
upsstats
web-интерфейс проверки статуса UPS - upsstats.
Скопировал необходимые для работы файлы из предложеных примеров:
# cp upsset.conf.sample upsset.conf # cp upsstats.html.sample upsstats.html # cp upsstats-single.html.sample upsstats-single.html # cp hosts.conf.sample hosts.conf
В конфигурационный файл apache добавил еще один alias.
Alias /nut "/usr/local/www/nut/" <Directory "/usr/local/www/nut/"> Order deny,allow Allow from all </Directory>
Скопировал папку nut из /usr/local/www/cgi-bin/ в /usr/local/www/apache22/cgi-bin
Перезапустил apache, чтобы изменения вступили в силу:
# apachectl graceful
В файле upsset.conf расскоментировал строку I_HAVE_SECURED_MY_CGI_DIRECTORY:
# cat upsset.conf | grep HAVE I_HAVE_SECURED_MY_CGI_DIRECTORY
Добавил UPS в список хостов:
# echo 'MONITOR powercom@localhost "Powercom KIN-2200AP-RM"' >> hosts.conf
При переходе на адрес адрессервера/nut, должна отобразится страница Network UPS Tools с вкладками Statistics и Settings.
Settings – настройки UPS (пользователь согласно содержимому upsd.users)
Statistics – просмотр статуса UPS, а так же текущее состояние в графическом виде.
Ссылки:
http://muff.kiev.ua/content/nut-network-ups-tools
http://www.ignix.ru/book/freebsd/daemon/network_ups_tools
http://ozabo.narod.ru/nut-ippon.html
http://notanony.ru/post/12/