Пример рабочей конфигурации NUT для Ippon Back Power Pro II EURO 650/850
Вся информация ниже актуальна для данного ИБП со следующими версиями ОС и ПО:
|
1 2 3 4 5 6 7 8 9 |
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:
|
1 2 3 4 5 6 7 |
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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 кабель от ИБП
Файл с параметрами подключения:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 минуту.
Настройка доступа к серверу:
|
1 2 3 4 5 6 |
cat << 'EOF' >> /etc/nut/upsd.conf #------------------------------------------------------------# # Прослушивать Loopback интерфейс на порту 3493 LISTEN 127.0.0.1 3493 #------------------------------------------------------------# EOF |
Создание пользователя NUT:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
cat << 'EOF' >> /etc/nut/upsd.users #------------------------------------------------------------# # Имя пользователя [upsmonitor] # Пароль пользователя password = 449933 # Права пользователя на выполение системных действий, то есть выключения и т.д. actions = SET # Права на изменение доступных переменных ИБП с помощью команды upscmd instcmds = ALL # Использование этого пользователя как управляющего для NUT upsmon master #------------------------------------------------------------# EOF |
Настройка мониторинга:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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 |
Проверка связи с ИБП:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
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 ~~~ |
Настройка скриптов на различные сценарии:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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 |
Задаем права на скрипт и перезапускаем мониторинг:
|
1 2 3 |
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 минуты (если хватит остатка заряда).
Для тестирования можно вывести лог в реальном времени и смотреть сообщения на включение/отключение питания:
|
1 |
tail -f /var/log/syslog | grep nut |
Дополнительный список команд:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
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 которая при старте системы отключает пищалку если она включена:
|
1 2 3 4 |
root@testserver:~# crontab -l ~~~ @reboot sleep 30 && [ `upsc ippon ups.beeper.status | grep enabled` ] && upscmd -u upsmonitor -p 449933 ippon beeper.toggle; ~~~ |

Свежие комментарии