Многие
источники бесперебойного питания (далее
ИБП) имеют интерфейс для подключения к
компьютеру, для возможности безопасно
отключить его после исчерпания заряда
батареи. Как правило, это интерефейс
RS-232 (или COM-порт), но на некоторых моделях
также присутствует USB (а на новых он
единственный). У меня есть ИБП Ippon Back
Power Pro 600. Думаю многим он знаком:
ИБП довольно старенький, имеет в наличии как COM-порт, так и USB. Для управления им, и настройки отключения питания компьютера, с ним поставляется специальное ПО – Winpower Manager. Данное ПО написано на Java, и доступно на широком спектре платформ (в том числе и Linux). К сожалению, мне так и не удалось нормально завести её в Linux, не поломав систему. Справедливости ради отмечу, что и в Windows она работала из рук вон плохо. Регулярно теряла связь с ИБП, пару раз сбивался планировщик. В общем, мне это не подошло. В итоге, было решено не париться, и сделать всё штатными средствами, доступными в любом дистрибутиве Linux.
Речь
пойдёт о программе NUT (Network UPS Tools) –
клиент-серверной программе для управления и мониторинга
ИБП как по COM и USB, так и по локальной
сети. Пример буду проводить на Debian 8
Jessie.
Для
начала установим необходимые пакеты:
sudo
apt install nut
По
зависимостям подтянутся дополнительные
утилиты. Для начала, укажем серверу nut,
что мы не хотим подключаться к нему
удалённо (из соображений безопасности,
да и многим ли это нужно дома?). Открываем
файл /etc/nut/nut.conf в любимом текстовом
редакторе (я использую nano), ищем строку
MODE= и пишем рядом standalone
MODE=standalone
Предполагается,
что ИБП подключён по USB. Драйвер для
работы с USB в моём ИБП называется
blazer_usb. Для вашей модели, смотрим тут
http://www.networkupstools.org/stable-hcl.html
Открываем
файл /etc/nut/ups.conf и приводим к такому виду:
[ippon]driver = blazer_usbport = /dev/usb/hiddev0desc = "Ippon Back Power Pro 600"default.battery.voltage.high = 13.60default.battery.voltage.low = 11.7offdelay = 12ondelay = 13
[ippon]
– имя нашего ИБП, можете написать любое.
driver
– драйвер, так как подключение идёт по
USB, то это blazer_usb
port
– порт подключения. Я указал стандартный,
можете просто указать auto
desc
– комментарий.
default.battery.voltage.high
= 13.60 – номинальное напряжение аккумулятора
default.battery.voltage.low
= 11.7 – минимальное напряжение аккумулятора
offdelay
– задержка в секундах, после которой
ИБП отключится (после того как отключил
ПК)
ondelay
– задержка в минутах, после которой ИБП
включится сам.
Теперь
настроим доступ к нашему ИБП. Открываем
/etc/nut/upsd.conf и пишем:
ACL all 0.0.0.0/0ACL localhost 127.0.0.1/32ACCEPT localhostREJECT allLISTEN 127.0.0.1 3493LISTEN ::1 3493
Здесь
всё просто. Указываем доступ к ИБП с
нашего компа (localhost) по порту 3493 (порт
стандартный).
Служба
UPS, а равно как и монитор, должны запускаться
от отдельного пользователя, находящегося
в группе nut.
Группа nut
создаётся автоматически при установке
пакета.
Создадим
нового пользователя ipponmaster, через
которого будем управлять ИБП:
sudo adduser ipponmaster
Добавим пользователя ipponmaster в группу nut:
sudo usermod -G nut ipponmaster Теперь пропишем нового пользователя в настройках. Открываем /etc/nut/upsd.users
[ipponmaster]
password = password #здесь укажите пароль, который указали при создании ipponmaster
allowfrom = localhost
upsmon master
instcmds = ALL
actions = SET
Теперь настроим мониторинг. Открываем /etc/nut/upsmon.conf и приводим к такому виду:
MONITOR ippon@localhost 1 ipponmaster password master
MINSUPPLIES 1
NOTIFYCMD /sbin/upssched
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
SHUTDOWNCMD "/sbin/shutdown -Ph +0"
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
NOTIFYMSG ONLINE "UPS %s on line power"
NOTIFYMSG ONBATT "UPS %s on battery"
NOTIFYMSG LOWBATT "UPS %s battery is low"
NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK "Communications with UPS %s established"
NOTIFYMSG COMMBAD "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM "UPS %s is unavailable"
NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC
SHUTDOWNCMD "/sbin/shutdown -Ph +0" - команда для выключения компьютера при низком заряде батареи. Однако мне это не подходит по той причине, что батарея в моём ИБП уже на исходе сил, и держит лишь полторы-две минуты. Поэтому мне нужно настроить отключение компьютера спустя минуту посл перехода ИБП на батарею. Вы возможно тоже захотите указать определённое время отключения.Приступим. Открываем /etc/nut/upssched.conf
CMDSCRIPT /bin/upssched-cmdЭто планировщик. Здесь я указал, что нужно запустить скрипт для выключения ПК спустя одну минуту после переключения ИБП на батарею
PIPEFN /tmp/upspipe
LOCKFN /tmp/upslock
AT COMMBAD * EXECUTE commbad
AT COMMOK * EXECUTE commok
AT NOCOMM * EXECUTE nocomm
AT ONBATT * EXECUTE powerout
AT ONBATT * START-TIMER pwdown 60
AT LOWBATT * EXECUTE pwcritical
AT ONLINE * CANCEL-TIMER pwdown
AT ONLINE * EXECUTE powerup
(время в секундах, в моём случае 60).
Далее открываем /bin/upssched-cmd и заменяем его содержимое на:
#!/bin/bash
case $1 in
commbad)
logger "UPS communications failure"
;;
commok)
logger "UPS communications restored"
;;
nocomm)
logger "UPS communications cannot be established"
;;
powerout)
logger "UPS on battery. Shutdown in 60 seconds...."
/sbin/upscmd -u ipponmaster -p password ippon@localhost shutdown.return
;;
pwdown)
logger "UPS has been on battery for 60 seconds. Starting orderly shutdown"
/sbin/upsmon -c fsd
;;
pwcritical)
logger "UPS battery level CRITICAL. Shutting down NOW!!!!"
/sbin/upsmon -c fsd
;;
powerup)
logger "UPS on line. Shutdown aborted."
/sbin/upscmd -u ipponmaster -p password ippon@localhost shutdown.stop
;;
*)
logger "Unrecognized command: $1"
;;
esac
Теперь, спустя минуту, компьютер корректно отключится.
Осталось запустить nut:
sudo systemctl enable nut-server.service
sudo systemctl start nut-server.service
Рекомендую перезагрузиться. Проверим работосопособность следующей командой:
upsc ippon@localhost
battery.charge: 100
battery.voltage: 13.60
battery.voltage.high: 13.60
battery.voltage.low: 11.7
battery.voltage.nominal: 12.0
device.type: ups
driver.name: blazer_usb
driver.parameter.offdelay: 12
driver.parameter.ondelay: 13
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/usb/hiddev0
driver.version: 2.7.2
driver.version.internal: 0.11
input.current.nominal: 3.0
input.frequency: 49.6
input.frequency.nominal: 50
input.voltage: 225.4
input.voltage.fault: 225.4
input.voltage.nominal: 220
output.voltage: 225.0
ups.beeper.status: enabled
ups.delay.shutdown: 12
ups.delay.start: 780
ups.load: 22
ups.productid: 0003
ups.status: OL
ups.temperature: 25.0
ups.type: offline / line interactive
ups.vendorid: 06da
Для наглядного мониторинга, установим графический клиент. Я использую рабочую среду KDE, потому ставлю knutclient:
sudo apt install knutclient
Запустим программу. Выбираем Настройка - Настроить KnutClient, далее вкладку UPS, затем Добавить. И вводим нужные данные:
Слева есть список доступных датчиков. Добавьте нужные в правую колонку и нажмите ОК. Результат:
Желаю долгого аптайма!
Спасибо, очень помог! С наступающим)
ОтветитьУдалитьТеперь, спустя минуту, компьютер корректно отключится.
ОтветитьУдалитьА у меня не отключается.
Третий день бьюсь.
Помогите!!