Page 1 of 1

Подключение ИБП (UPS) через USB и настройка NUT в Porteus

Posted: 03 Jan 2016, 12:09
by Blaze
Настройка автоматического выключения при low battery от UPS с помощью nut (Network UPS Tools)
В моем распоряжении ИБП IPPON Smart Power Pro 1400. Подключен через USB.
Необходимо, при отсутствии питания от сети, настроить автоматическое выключение Porteus компьютера под учетной записью root.

1. Скачиваем и устанавливаем nut (При загрузке nut будет предложено скачать зависимость neon. Загружаем оба - nut и neon)
Network UPS Tools (NUT) – программа для контроля ИБП

Code: Select all

usm -u usm
usm -u all
usm -g nut
получаем два пакета

Code: Select all

root@porteus:~# ls /tmp/usm/nut-2.6.5/
neon-0.29.6-x86_64-2.xzm
nut-2.6.5-x86_64-1_slack.xzm
копируем оба модуля в папку модулей /mnt/sdXX/porteus/modules/
sdXX - это раздел, где установлен Porteus.
и там их активируем, нажав два раза левой кнопкой мыши.

2. Открываем консоль и вводим команды для добавления
группы nut и пользователя nut

Code: Select all

groupadd -g 218 nut
useradd -u 218 -g nut -s /bin/false nut
3. Вводим команду lsusb

Code: Select all

root@porteus:~# lsusb
Bus 001 Device 002: ID 8087:8009 Intel Corp. 
Bus 002 Device 002: ID 8087:8001 Intel Corp. 
Bus 003 Device 003: ID 0665:5161 Cypress Semiconductor USB to Serial
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
root@porteus:~#                        
Ищем среди них что-то типа:
Bus 003 Device 003: ID 0665:5161 Cypress Semiconductor USB to Seriall
Если такого нет (если есть, то пропускаем), то надо пошаманить с модулями ядра. В частности, нужны модули usb, usbhid.
Теперь меняем права, где цифры - номера шины (Bus) и устройства (Device) из предыдущей команды:
chown root:nut /dev/bus/usb/003/003
4. Необходимо переименовать файлы с конфигурациями (содержащими настройки) nut.

Для этого в консоле вводим команды:

Code: Select all

mv /etc/nut/upsd.users.sample /etc/nut/upsd.users
mv /etc/nut/upsd.conf.sample /etc/nut/upsd.conf
mv /etc/nut/ups.conf.sample /etc/nut/ups.conf
mv /etc/nut/upsmon.conf.sample /etc/nut/upsmon.conf
Так же, можно это проделать вручную.

5. Открываем /etc/nut/upsd.users и добавляем в самый конец данного файла

Code: Select all

[root]
password = toor
upsmon master
для справки:
root - имя учетной записи
toor - пароль от учетной записи
режим master - на локальной машине
еще есть режим slave - на удаленной машине
6. Открываем /etc/nut/upsd.conf и находим

Code: Select all

# LISTEN <address> [<port>]
# LISTEN 127.0.0.1 3493
# LISTEN ::1 3493         
заменяем на

Code: Select all

# LISTEN <address> [<port>]
LISTEN 127.0.0.1 3493
# LISTEN ::1 3493         
7. Открываем /etc/nut/ups.conf и добавляем в самый конец данного файла

Code: Select all

[ippon]
driver = blazer_usb
vendorid = 0665
productid = 5161
port = /dev/ttyUSB1
desc = "IPPON Smart Power Pro 1400"
override.battery.voltage.nominal = 24.00
default.battery.voltage.high = 27.60
default.battery.voltage.low = 20.40
Если у Вас другая модель источника бесперебойного питания, то в поле driver необходимо будет указывать другой драйвер - смотрите офиц. документацию, а лучше поищите необходимое название драйвера в /usr/share/nut/driver.list

Для удобства, можно открыть список драйверов в консоле

Code: Select all

cat /usr/share/nut/driver.list 
vendorid и productid см. в шаге 3 данной инструкции.
port - это порт, к которому подключен ИБП.
Если ИБП подключен к USB порту, то можно посмотреть какие устройства подключены к USB командами:

Code: Select all

lsusb

Code: Select all

dmesg|grep USB
Если ИБП подключен к COM порту, то можно посмотреть номера COM портов командой:

Code: Select all

dmesg|grep ttyS
desc - описание (может быть произвольным)
Значения default.battery.voltage.high и default.battery.voltage.low служат для вычисления примерного заряда батареи в процентах. Также при снижении напряжения до уровня default.battery.voltage.low запускается скрипт выключения системы. На других ИБП значения могут отличаться. Можете их сначала не указывать, а добавить после замера напряжения при полном заряде ИБП и незадолго до его разряда. Значения можно получить командой upsc <имя_ибп>. Имя указано в начале секции в квадратных скобках (у меня ippon).
Я данные значения высчитывал так. В ИБП IPPON Smart Power Pro 1400 установлены 2 батареи с номиналом 12 В, согласно оф. сайту IPPON Smart Power Pro 1000/1400/2000
Складываем номинал одной и второй батареи 12V + 12V = 24V от сюда получаем, что override.battery.voltage.nominal = 24.00

0,15 или 15% это
При отклонении входного напряжения на величину от 10% до 25% ниже номинала, ИБП (UPS) выдает выходное напряжение с 15%-ным повышением входного. При отклонении входного напряжения на величину от 10% до 25% выше номинала, ИБП (UPS) выдает выходное напряжение с 15%-ным понижением входного.
24V x 0.15 = 3.6V
24V + 3.6V = 27.6V от сюда получаем, что default.battery.voltage.high = 27.60
24V - 3.6V = 20.4V от сюда получаем, что default.battery.voltage.low = 20.40

Если у Вас одна батарея с номиналом 12V, например как у ИБП IPPON Back Power Pro 400/500/600/700/800, то от сюда получаем, что override.battery.voltage.nominal = 12.00
12V x 0.15 = 1.8V
12V + 1.8V = 13.8V от сюда получаем, что default.battery.voltage.high = 13.80
12V - 1.8V = 10.20V от сюда получаем, что default.battery.voltage.low = 10.20

8. Открываем /etc/nut/upsmon.conf и добавляем в самый конец данного файла (добавляем строчку с описанием нашего конкретного ИБП - данные пользователя должны соответствовать тому, что писали в upsd.users)

Code: Select all

MONITOR ippon@localhost 1 root toor master
9. В консоле, для безопасности, выставляем следующие права командами (ранее Вами должен быть выполнен шаг 2 с добавлением группы nut и пользователя nut):

Code: Select all

cd /etc/nut/
chown root:nut upsd.conf upsd.users
chmod 0640 upsd.conf upsd.users
chown root:nut upsmon.conf
chmod 0640 upsmon.conf
10. В консоле запускаем службу nut командой

Code: Select all

/etc/rc.d/rc.ups start
получаем:

Code: Select all

root@porteus:~# /etc/rc.d/rc.ups start
Network UPS Tools - UPS driver controller 2.6.5-Unversioned directory
Network UPS Tools - Megatec/Q1 protocol USB driver 0.09 (2.6.5-Unversioned directory)
Supported UPS detected with megatec protocol
Vendor information unavailable
Battery runtime will not be calculated (runtimecal not set)
Network UPS Tools upsd 2.6.5-Unversioned directory
fopen /var/run/nut/upsd.pid: No such file or directory
listening on 127.0.0.1 port 3493
Connected to UPS [ippon]: blazer_usb-ippon
Network UPS Tools upsmon 2.6.5-Unversioned directory
fopen /var/run/nut/upsmon.pid: No such file or directory
Using power down flag file /etc/killpower
UPS: ippon@localhost (master) (power value 1) 
Заметка. Для остановки службы nut выполняем команду

Code: Select all

/etc/rc.d/rc.ups stop
11. Проверим поступают-ли данные от нашего ИБП. Для этого в консоле вводим команду:

Code: Select all

upsc ippon@localhost
получаем:

Code: Select all

root@porteus:~# upsc ippon@localhost
battery.charge: 100
battery.voltage: 27.70
battery.voltage.high: 27.60
battery.voltage.low: 20.40
battery.voltage.nominal: 24.00
device.type: ups
driver.name: blazer_usb
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ttyUSB1
driver.parameter.productid: 5161
driver.parameter.vendorid: 0665
driver.version: 2.6.5-Unversioned directory
driver.version.internal: 0.09
input.current.nominal: 6.0
input.frequency: 50.0
input.frequency.nominal: 50
input.voltage: 241.0
input.voltage.fault: 241.0
input.voltage.nominal: 230
output.voltage: 238.8
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.load: 0
ups.productid: 5161
ups.status: OL
ups.temperature: 25.0
ups.type: offline / line interactive
ups.vendorid: 0665
root@porteus:~# 
если ups.status: OL - значит, что ИБП найден, работает и питание от сети есть.

Заметка. ups.status может ринимать следующие параметры:

Code: Select all

OL – on line (ИБП подключен к сети 220)
OB – on battery (ИБП работает от аккамуляторов)
LB – low battery (низкий заряд батареи ИБП)