Настройка NUT для Ippon Back Power Pro II EURO 650

nastrojka-nut-dlya-ippon-back-power-pro-ii-euro-650_1

Пример рабочей конфигурации NUT для Ippon Back Power Pro II EURO 650/850

Вся информация ниже актуальна для данного ИБП со следующими версиями ОС и ПО:

user@testserver:~$ cat /etc/os-release | grep PRETTY_NAME
~~~
PRETTY_NAME="Ubuntu 24.04.2 LTS"
~~~

user@testserver:~$ upsc -V
~~~
Network UPS Tools upsc 2.8.1
~~~

Ниже полный список команд для настройки с нуля, копируем блоки целиком и выполняем от пользователя root:

apt install nut

cp -r /etc/nut /etc/nut.orig
chown root:nut /etc/nut/*
chmod 640 /etc/nut/*

echo "MODE=standalone" > /etc/nut/nut.conf

Создание файла с правилом для udev:

root@testserver:~# lsusb
~~~
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd QEMU Tablet
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 06da:ffff Phoenixtec Power Co., Ltd Offline UPS  <----
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
~~~

cat << 'EOF' > /etc/udev/rules.d/90-nut-ups.rules
#------------------------------------------------------------#
# Ippon Back Power Pro II EURO 650
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="06da", ATTR{idProduct}=="ffff", MODE="0660", GROUP="nut"
#------------------------------------------------------------#
EOF

На этом шаге необходимо переподключить USB кабель от ИБП

Файл с параметрами подключения:

cat << 'EOF' >> /etc/nut/ups.conf
#------------------------------------------------------------#
# Имя ИБП в NUT. Именно по нему мы будем посылать команды ИБП
[ippon]
# Используемый драйвер
driver = usbhid-ups
# Порт подключения. Что то менять в ней нужно только для специфических ИБП
port = auto
# Время в секундах до автоматического отключения ИБП после команды отключения ПК
offdelay = 120
# Время в секундах до автоматического включения ИБП после команды отключения ПК, должно быть больше offdelay. Если питания от сети нет, ИБП включится с задержкой после его появления.
ondelay = 130
# Описание ИБП
desc = "Ippon Back Power Pro II EURO 650"
#------------------------------------------------------------#
EOF

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

Настройка доступа к серверу:

cat << 'EOF' >> /etc/nut/upsd.conf
#------------------------------------------------------------#
# Прослушивать Loopback интерфейс на порту 3493
LISTEN 127.0.0.1 3493
#------------------------------------------------------------#
EOF

Создание пользователя NUT:

cat << 'EOF' >> /etc/nut/upsd.users
#------------------------------------------------------------#
# Имя пользователя
[upsmonitor]
# Пароль пользователя
password = 449933
# Права пользователя на выполение системных действий, то есть выключения и т.д.
actions = SET
# Права на изменение доступных переменных ИБП с помощью команды upscmd
instcmds = ALL
# Использование этого пользователя как управляющего для NUT
upsmon master
#------------------------------------------------------------#
EOF

Настройка мониторинга:

cat << 'EOF' >> /etc/nut/upsmon.conf
#------------------------------------------------------------#
# Подключаться к ippon на localhost через учетные данные пользователя upsmonitor
MONITOR ippon@localhost 1 upsmonitor 449933 master
# Количество подключенных ИБП
MINSUPPLIES 1
# Путь к программе NUT, которая будет вести широковещательную рассылку
NOTIFYCMD /sbin/upssched
# Команда завершения работы ОС
SHUTDOWNCMD "/sbin/shutdown -h +0"
# Частота опроса мониторинга в секундах во время работы от сети
POLLFREQ 5
# Частота опроса мониторинга в секундах во время работы от батареи
POLLFREQALERT 5
# Ожидание отключения дочерних процессов от NUT при завершении работы
HOSTSYNC 15
# Если NUT не может получить отклик от опроса ИБП в течении этого времени то помечает ИБП как "мертвый"
DEADTIME 15
# Специальный флаг, устраняющий проблему, когда питание восстановилось после команды выключения от ИБП к ПК
POWERDOWNFLAG /tmp/killpower
# Посылает сообщение о восстановлении питания во все открытые терминалы
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"
# Посылает сообщение о потере соединения с ИБП во все открытые терминалы, например, при случайном отключении USB шнура
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"
# Посылает сообщение во все открытые терминалы о завершении процесса программы мониторинга NUT upsmon
NOTIFYMSG NOPARENT   "upsmon parent process died - shutdown impossible"
# Выполнение действий по наступлению события, указанного после NOTIFYFLAG.
# SYSLOG это отправка сообщения о событии в логи ПК, в файл /var/log/syslog
# WALL это отправка сообщения о событии во все открытые терминалы
# EXEC это выполнение команды, определенной в файле /etc/nut/upsshed.conf, при наступлении события
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
# Время вывода сообщения о необходимости замены батареи ИБП в секундах (12 часов)
RBWARNTIME 43200
# Если NUT не может связаться с настроенными ИБП, то посылает событие NOCOMM каждые 300 секунд
NOCOMMWARNTIME 300
# Последний интервал ожидания перед выключением системы
FINALDELAY 5
#------------------------------------------------------------#
EOF

Проверка связи с ИБП:

service nut-server start # Запуск сервера NUT

upsc ippon # Получение статуса ИБП
~~~
Init SSL without certificate database
battery.charge: 100
battery.runtime: 4687
battery.type: PbAc
battery.voltage: 13.50
device.mfr: PPC
device.model: Offline UPS
device.serial: 000000000
device.type: ups
driver.debug: 0
driver.flag.allow_killpower: 0
driver.name: usbhid-ups
driver.parameter.offdelay: 180
driver.parameter.ondelay: 200
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.state: quiet
driver.version: 2.8.1
driver.version.data: Phoenixtec/Liebert HID 0.41
driver.version.internal: 0.52
driver.version.usb: libusb-1.0.27 (API: 0x100010a)
experimental.battery.capacity: 100
experimental.battery.capacity.nominal: 100
input.voltage: 243.0
output.frequency: 50.30
output.frequency.nominal: 50
output.voltage: 207.0
output.voltage.nominal: 220
ups.beeper.status: disabled
ups.delay.shutdown: 180
ups.delay.start: 200
ups.load: 3
ups.mfr: PPC
ups.model: Offline UPS
ups.power.nominal: 3
ups.productid: ffff
ups.serial: 000000000
ups.status: OL CHRG TRIM
ups.test.result: No test initiated
ups.vendorid: 06da
~~~

Настройка скриптов на различные сценарии:

sed -i '/CMDSCRIPT/s/^/#/' /etc/nut/upssched.conf
cat << 'EOF' >> /etc/nut/upssched.conf
#------------------------------------------------------------#
# Скрипт, откуда будут выполнятся команды по событиям
CMDSCRIPT /etc/nut/cmd.sh

PIPEFN /tmp/upspipe
LOCKFN /tmp/upslock

# Условия выполнения команд из case конструкции в скрипте /etc/nut/cmd.sh

# При переключении на аккумулятор информируем и запускаем таймер на отключение системы через 5 минут
AT ONBATT * EXECUTE powerout
AT ONBATT * START-TIMER shutdownnormal 300

# При восстановлении питания информируем и прерываем таймер
AT ONLINE * EXECUTE powerup
AT ONLINE * CANCEL-TIMER shutdownnormal

# Выключение системы по низкому заряду АКБ
AT LOWBATT * EXECUTE shutdowncritical
#------------------------------------------------------------#
EOF
cat << 'EOF' > /etc/nut/cmd.sh
#------------------------------------------------------------#
#!/bin/sh
case $1 in
      powerout)
      logger "ИБП работает от аккумулятора, запуск таймера на отключение через 5 минут."
      ;;
      powerup)
      logger "Напряжение восстановлено, прерывание таймера на отключение."
      ;;
      shutdownnormal)
      logger "ИБП работает от аккумулятора уже 5 минут. Завершение работы системы и отключение ИБП через 2 минуты."
      upsmon -c fsd
      ;;
      shutdowncritical)
      logger "Низкое напряжение аккумулятора! Завершение работы системы и отключение ИБП через 2 минуты."
      upsmon -c fsd
      ;;
      *)
      logger "Неподдерживаемая команда: $1"
      ;;
esac
#------------------------------------------------------------#
EOF

Задаем права на скрипт и перезапускаем мониторинг:

chown root:nut /etc/nut/cmd.sh
chmod 654 /etc/nut/cmd.sh
service nut-monitor start

На этом этапе все должно уже работать.

Логика работы следующая:

  • Когда пропадает сеть 230в запускается таймер 5 минут на завершение работы.
  • — если за 5 минут сеть не восстановилась, NUT завершает работу ОС и дает команду ИБП отключиться через 2 минуты.
  • — если до окончания таймера питание сети восстанавливается, то он прерывается и система работает дальше как ни в чем не бывало
  • Если вдруг питание было восстановлено уже во время завершения работы ОС, то ИБП все равно отключится через 2 минуты и через 1 минуту включится обратно. При включенном автозапуске в BIOS система снова запустится.
  • При долгом отсутствии питания ИБП так же сам включается при восстановлении сети и система стартует.
  • Если вдруг аккумулятор разрядится до окончания таймера на 5 минут, то NUT это увидит и начнет немедленное завершение работы ОС, ИБП так же отключится через 2 минуты (если хватит остатка заряда).

Для тестирования можно вывести лог в реальном времени и смотреть сообщения на включение/отключение питания:

tail -f /var/log/syslog | grep nut

Дополнительный список команд:

upsc ippon # Получение статуса ИБП
upscmd -l ippon # Запрос списка поддерживаемых ИБП команд
~~~
Instant commands supported on UPS [ippon]:

beeper.toggle - Toggle the UPS beeper
driver.killpower - Tell the driver daemon to initiate UPS shutdown; should be unlocked with driver.flag.allow_killpower option or variable setting
driver.reload - Reload running driver configuration from the file system (only works for changes in some options)
driver.reload-or-error - Reload running driver configuration from the file system (only works for changes in some options); return an error if something changed and could not be applied live (so the caller can restart it with new options)
driver.reload-or-exit - Reload running driver configuration from the file system (only works for changes in some options); exit the running driver if something changed and could not be applied live (so service management framework can restart it with new options)
load.off - Turn off the load immediately
load.off.delay - Turn off the load with a delay (seconds)
load.on - Turn on the load immediately
load.on.delay - Turn on the load with a delay (seconds)
shutdown.return - Turn off the load and return when power is back
shutdown.stayoff - Turn off the load and remain off
shutdown.stop - Stop a shutdown in progress
test.battery.start - Start a battery test
~~~

upscmd -u upsmonitor -p 449933 ippon beeper.toggle # Пример выполнения команды
upscmd -u upsmonitor -p 449933 ippon test.battery.start # Пример выполнения команды

upsrw -l ippon # Запрос списка поддерживаемых для перезаписи переменных
~~~
[driver.debug]
Current debug verbosity level of the driver program
Type: NUMBER
Value: 0

[driver.flag.allow_killpower]
Safety flip-switch to allow the driver daemon to send UPS shutdown command (accessible via driver.killpower)
Type: NUMBER
Value: 0

[ups.delay.shutdown]
Interval to wait after shutdown with delay command (seconds)
Type: STRING
Maximum length: 10
Value: 180

[ups.delay.start]
Interval to wait before (re)starting the load (seconds)
Type: STRING
Maximum length: 10
Value: 200
~~~

upsrw -u upsmonitor -p 449933  -s driver.flag.allow_killpower=1 ippon
upscmd -u upsmonitor -p 449933 ippon driver.killpower


upsc ippon ups.beeper.status # Вывод значения одного конкретного параметра
Init SSL without certificate database
~~~
disabled
~~~

root@testserver:~# upsdrvctl shutdown ippon # Вываливается ошибка, но все работает если правильно заданы on/off delay.
~~~
Network UPS Tools - UPS driver controller 2.8.1
Network UPS Tools - Generic HID driver 0.52 (2.8.1)
USB communication driver (libusb 1.0) 0.46
select with socket: Invalid argument
Can't claim USB device [06da:ffff]@0/0: Entity not found
upsnotify: failed to notify about state 4: no notification tech defined, will not spam more about it
Driver failed to start (exit status=1)
~~~
# Подробнее о сообщения выше тут: https://github.com/networkupstools/nut/issues/3220#issuecomment-3682715856

# Вывод всех параметров ИБП на экран каждые 3 сек
while true; do sleep 3; clear; upsc ippon;  done

 

Ну и на последок т.к. в этом ИБП нет команды на перманентное отключение пищалки, а после отключения питания она снова включается, можно добавить следующую задачу в cron которая при старте системы отключает пищалку если она включена:

root@testserver:~# crontab -l
~~~
@reboot sleep 30 && [ `upsc ippon ups.beeper.status | grep enabled` ] && upscmd -u upsmonitor -p 449933 ippon beeper.toggle;
~~~

 

Rating: 5.00/5. From 1 vote.
Please wait...

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

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