🔋 Як підключити і керувати кількома пристроями від одного ДБЖ
Зазвичай в побутових умовах встановлюється один ДБЖ на один комп’ютер, який підключається до нього за допомогою USB-кабелю для налаштування режиму вимкнення.
Для управління вимкненням усіх комп’ютерів мені потрібне якесь централізоване рішення, і ним у даному випадку буде NUT-сервер. Це така утиліта, яка встановлюється як сервіс на вашому комп’ютері або сервері, і яка моніторить стан ДБЖ, а також розсилає цю інформацію всім клієнтам, які на неї підписані. Тобто схема роботи досить проста – один основний сервер для моніторингу, до якого підключений безперебійник через USB, і клієнти, які теж використовують його, але отримують інформацію про нього від сервера. Звучить нескладно, але доведеться попрацювати з кількома командами :)
Також я покажу, як налаштувати вимкнення для сервера Proxmox, комп’ютера на Windows, мережевого сховища та як додати інформацію про ДБЖ до Home Assistant. На цьому закінчимо з довгим вступом і почнемо налаштування!
Як налаштувати сервер для ups
Для свого головного пристрою я обрав Proxmox сервер — він працює майже завжди, і так цікавіше. Кроки налаштування будуть практично ідентичні, якщо ви плануєте встановлювати NUT на Debian-системі. Єдина відмінність — до всіх команд треба буде додати sudo.
Спочатку нам потрібно встановити мережеві утиліти для ДБЖ. Для цього переходимо в консоль Proxmox і оновлюємо репозиторії пакетів командою
apt updateЯкщо бачите помилки в консолі, це, найімовірніше, через увімкнені репозиторії, доступні лише для корпоративних підписок Proxmox. Перейдіть у розділ Updates → Repositories і вимкніть їх.
Після цього можемо встановлювати NUT за допомогою команди
apt install nut nut-client nut-serverДетальну інформацію про саму утиліту ви можете знайти на офіційному сайті: https://networkupstools.org/. Там все дуже докладно описано, але англійською мовою.
Тепер нам потрібна інформація про сам ДБЖ. Переконайтеся, що він підключений до сервера USB-кабелем. Введіть команду **nut-scanner -U**, і ви маєте побачити список наявних безперебійників.
[nutdev1]
driver = "usbhid-ups"
port = "auto"
vendorid = "0764"
productid = "0501"
product = "UT1050EG"
vendor = "CPS"
bus = "001"Ця інформація нам знадобиться пізніше, тож збережіть її.
Наступним кроком буде редагування конфігураційних файлів. Перед цим я рекомендую зробити їх копію, щоб у вас були оригінальні файли під рукою, якщо щось піде не так. Я зазвичай копіюю всю папку, тому зроблю це і зараз.
cp -r /etc/nut /etc/nut.originalЩоб було простіше орієнтуватися давайте проглянемо які взагалі файли присутні в цьому каталозі, бо ми їх всі будемо редагувати
nut.conf: Визначає режим роботи (standalone, netclient або netserver), який вказує, чи система керує UPS, моніторить його або виконує обидві функції.
ups.conf: Визначає пристрої UPS і їхні драйвери. Цей файл використовується для налаштування обладнання UPS, підключеного до системи.
upsd.conf: Налаштовує сервер NUT (upsd), задаючи мережеві параметри та те, як він взаємодіє з пристроями UPS.
upsd.users: Містить облікові записи користувачів для клієнтів, що мають доступ до сервера NUT, з визначенням дозволів на керування або моніторинг UPS.
upssched.conf: Налаштовує розклад і дії на основі подій UPS, наприклад, вимкнення системи при низькому заряді акумулятора.
upsmon.conf: Налаштовує службу моніторингу UPS (upsmon), яка контролює, як система реагує на зміни стану UPS, такі як втрата або відновлення живлення.
UPS.conf
Спочатку нам потрібно оновити конфігурацію ДБЖ. Відкриваємо файл
nano /etc/nut/ups.confДодаємо інформацію про наш ДБЖ — це те, що ми отримали з команди сканування раніше
maxretry = 3
[ups]
driver = "usbhid-ups"
port = "auto"
desc = "CyberPower 1050"
vendorid = "0764"
productid = "0501"В квадратних дужках необхідно вказати унікальне ім’я для ДБЖ, за яким ми будемо налаштовувати моніторинг у подальшому. Оскільки в мене він один, то практично немає значення, як його назвати. Єдине, що варто врахувати: якщо ви плануєте підключати Synology NAS до сервера, то майте на увазі, що в DSM вже вбудована назва ups, а також захардкоджені логін і пароль. Тому тут доведеться або використовувати стандартну назву ups, або вручну налаштовувати конфігурацію в DSM через консоль. Пізніше я покажу, де мають бути вказані стандартні логін і пароль для такого випадку.
У самій конфігурації ми вказали драйвер, який зазвичай є стандартним, далі — порт, до якого підключений ДБЖ (також стандартний), потім — опис, який буде відображатися на панелі моніторингу, а також важливі ідентифікатори пристрою та виробника.
Зберігаємо і закриваємо.
UPSD.conf
Наступний файл це **upsd.conf**
nano /etc/nut/upsd.confТут ми маємо налаштувати адреси, з яких будемо отримувати інформацію про зміни статусу ДБЖ. Щоб інші пристрої в мережі також могли це робити, а не лише основна машина, потрібно вказати адресу 0.0.0.0.
LISTEN 0.0.0.0 3493Порт залишаємо за замовчуванням 3493. Зберігаємо файл.
Підключення ДБЖ моніторингу до proxmox
UPSMon.conf
Це ми налаштували сам сервер, але тепер нам потрібно стежити за станом ДБЖ, тому налаштуємо також моніторинг.
Відкриваємо файл /etc/nut/upsmon.conf
nano /etc/nut/upsmon.confУ цьому файлі також є багато цікавих налаштувань. Видаляємо все і замінюємо на:
#RUN_AS_USER root
MONITOR ups@localhost 1 monuser secret master
# Minimum number of UPS devices that must be active for the system to keep running
MINSUPPLIES 1
# Command to shut down the system
SHUTDOWNCMD "/sbin/shutdown -h"
# Command to call upssched when a notification is triggered
NOTIFYCMD /usr/sbin/upssched
# Frequency for polling UPS status (in seconds)
POLLFREQ 2
# Polling frequency during UPS alerts (in seconds)
POLLFREQALERT 1
# Time to synchronize between UPS client and server before shutdown (in seconds)
HOSTSYNC 15
# Time after which UPS is considered "dead" if there is no response (in seconds)
DEADTIME 15
# File used to shut down UPS power after system shutdown
POWERDOWNFLAG /etc/killpower
### Notification messages for different UPS statuses
NOTIFYMSG ONLINE "UPS %s is back online"
NOTIFYMSG ONBATT "UPS %s is on battery"
NOTIFYMSG LOWBATT "UPS %s battery is low"
NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK "Communication with UPS %s restored"
NOTIFYMSG COMMBAD "Communication with UPS %s lost"
NOTIFYMSG SHUTDOWN "Auto logout and shutdown in progress"
NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM "UPS %s is not reachable"
NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"
### Actions for different UPS statuses
# Switching back to online mode (power restored)
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
# Switching to battery mode
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
# Low battery
NOTIFYFLAG LOWBATT SYSLOG+WALL
# Forced shutdown
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
# Communication with UPS restored
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
# Communication with UPS lost
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
# System shutdown
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
# Battery needs replacement
NOTIFYFLAG REPLBATT SYSLOG+WALL
# UPS is not reachable
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
# upsmon parent process terminated
NOTIFYFLAG NOPARENT SYSLOG+WALLОскільки наш NUT-сервер має вимкнути і Proxmox машину у випадку, коли батарея розряджається, то краще, щоб усі команди виконувалися від головного користувача root, тому прописуємо **RUN_AS_USER** root.
MONITOR: назва нашого ДБЖ, собачка (@), адреса NUT-сервера. У нас сервер та клієнт знаходяться на одному комп’ютері, тому можемо писати localhost. Далі: 1 – це кількість безперебійників, логін та пароль, а також режим master.
Далі йдуть три блоки:
перший — це основні налаштування, необхідні для коректної роботи моніторингу,
другий — це які повідомлення розсилати при настанні тих чи інших станів ДБЖ,
третій — набір команд, які потрібно виконати для цих станів.
Зберігаємо зміни і закриваємо файл
UPSD.users
Ще одним кроком буде додавання користувачів і паролів для доступу до NUT-сервісу. Для цього відкриваємо файл upsd.users.
nano /etc/nut/upsd.usersДодаємо нового користувача, і пароль які ми вже вказували в файлі моніторингу upsmon.conf
[monuser]
password = secret
upsmon masterТут важливо залишити стандартний логін та пароль, якщо потрібен доступ із Synology DSM — monuser і secret, але це не рекомендована практика. Краще використовувати більш надійний пароль. Я залишу стандартні значення, оскільки хочу показати, як підключитися з DSM.
Зберігаємо та закриваємо файл.
UPSSCHED.conf
Цей файл дає можливість керувати подіями із плануванням або затримкою вимкнення, надаючи більше гнучкості в управлінні подіями UPS. Відкриваємо файл upssched.conf
nano /etc/nut/upssched.confІ замінюємо весь вміст на:
# Script that will be executed on events
CMDSCRIPT /etc/nut/upssched-cmd
# Pipe for sending event notifications
PIPEFN /etc/nut/upssched.pipe
# Lock file to prevent simultaneous execution
LOCKFN /etc/nut/upssched.lock
### Configure commands
# Start a timer for 600 seconds when the UPS is on battery
AT ONBATT * START-TIMER onbatt 600
# Cancel the "onbatt" timer when power is restored
AT ONLINE * CANCEL-TIMER onbatt online
# Execute the onbatt command when the battery is low
AT LOWBATT * EXECUTE onbatt
# Execute commbad_message when communication with the UPS is lost
AT COMMBAD * EXECUTE commbad_message
# Execute commok_message when communication with the UPS is restored
AT COMMOK * EXECUTE commok_message
# Execute nocomm_message when the UPS is unreachable
AT NOCOMM * EXECUTE nocomm_message
# Execute shutdown_message during shutdown
AT SHUTDOWN * EXECUTE shutdown_message
# Execute powerdown to cut off UPS power after shutdown
AT SHUTDOWN * EXECUTE powerdownONBATT, ONLINE і так далі — це стани, і в цьому файлі ми прописуємо, які саме команди потрібно виконати при їх настанні. Самі команди ми додамо у наступному файлі upssched-cmd. Цей файл зберігаємо і переходимо до команд.
upssched-cmd
Відкриваємо файл upssched-cmd
nano /etc/nut/upssched-cmdІ додаємо такий код
#!/bin/sh
# UPS event handling script for upssched
case $1 in
onbatt)
# Log message when UPS switches to battery and initiate forced shutdown
logger -t upssched-cmd "UPS is on battery"
/usr/sbin/upsmon -c fsd
;;
commbad_message)
# Log message when communication with UPS is lost
logger -t upssched-cmd "UPS is no longer connected"
;;
online)
# Log message when power is restored
logger -t upssched-cmd "UPS is back online"
;;
commok_message)
# Log message when communication with UPS is restored
logger -t upssched-cmd "UPS connection restored"
;;
nocomm_message)
# Log message when UPS becomes unreachable
logger -t upssched-cmd "UPS is unreachable"
;;
shutdowncritical)
# Log message when battery is critically low and initiate forced shutdown
logger -t upssched-cmd "UPS battery is critically low, forcing shutdown"
;;
upsgone)
# Log message when UPS is unreachable for an extended period
logger -t upssched-cmd "UPS has been unreachable for too long"
;;
shutdown_message)
# Log message when Proxmox is shutting down
logger -t upssched-cmd "Proxmox is shutting down"
;;
*)
# Log message for unrecognized commands
logger -t upssched-cmd "Unrecognized command: $1"
;;
esacЗберігаємо зміни та закриваємо файл. Ще нам потрібно оновити права для цього файлу та зробити його виконуваним, оскільки це все-таки команда, яка буде запускатися. Для цього вводимо:
chmod +x /etc/nut/upssched-cmd Тепер краще перезавантажити Proxmox-машину, щоб усі сервіси перезапустилися з новими конфігураціями.
Для перевірки, чи запрацювали сервер і моніторинг, можна використати команду:
upsc ups@localhostВона має показати інформацію по ДБЖ, таку як заряд, напруга, навантаження і так далі
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 20
battery.mfr.date: CPS
battery.runtime: 10890
battery.runtime.low: 300
battery.type: PbAcid
battery.voltage: 26.2
battery.voltage.nominal: 24
device.mfr: CPS
device.model: UT1050EG
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.productid: 0501
driver.parameter.synchronous: auto
driver.parameter.vendorid: 0764
driver.version: 2.8.0
driver.version.data: CyberPower HID 0.6
driver.version.internal: 0.47
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
input.transfer.high: 295
input.transfer.low: 167
input.voltage: 226.0
input.voltage.nominal: 230
output.voltage: 226.0
ups.beeper.status: disabled
ups.delay.shutdown: 20
ups.delay.start: 30
ups.load: 8
ups.mfr: CPS
ups.model: UT1050EG
ups.productid: 0501
ups.realpower.nominal: 630
ups.status: OL
ups.test.result: Done and passed
ups.timer.shutdown: -60
ups.timer.start: -60
ups.vendorid: 0764Якщо ви побачили ці дані, значить, усе чудово, і ваш сервер та клієнт працюють. Єдине, що я помітив, — це те, що мій ДБЖ вважає критичним рівень заряду батареї при 10%. Це може бути замало, тому я хочу трохи підвищити цей поріг хоча б до 50%, щоб пристрої встигли вимкнутися нормально і під час блекаутів не висаджувати батарею в нуль, бо тоді вона може не встигнути зарядитися.
Для цього повернемося в файл ups.conf
nano /etc/nut/ups.confДодаємо параметри override.battery.charge.low = 50 та override.battery.charge.warning = 60. Тепер зберігаємо файл
maxretry = 3
[ups]
driver = "usbhid-ups"
port = "auto"
desc = "CyberPower 1050"
vendorid = "0764"
productid = "0501"
override.battery.charge.low = 50
override.battery.charge.warning = 60і перезавантажуємося або перезапускаємо сервіси.
service nut-server restart
service nut-client restart
systemctl restart nut-monitor
upsdrvctl stop
upsdrvctl startДля надійності перевіримо що нові конфігурації підтягнулися командою
upsc ups@localhostЧудово, це було складно і довго, як для конфігурації однієї машини, але далі вже буде легше, бо ми зробили більшу частину роботи. Тепер наш Proxmox-хост може моніторити статус безперебійника, повідомляти його мережею і правильно вимикатися. Оскільки перевіряти статус через консоль не дуже зручно, давайте налаштуємо більш зручний інтерфейс для цього, а потім уже налаштуємо інші пристрої.
Створення веб сторінки зі статусом

Утиліта NUT має готовий, хоча і простий, вебінтерфейс, але я не хочу встановлювати його на сам Proxmox, бо вважаю, що краще розділити ці функції і створити легкий контейнер для цього. Підключення ДБЖ та налаштування сервера для нього простіше і надійніше робити прямо на хост-машині без додаткової віртуалізації, але з цим завданням контейнер впорається чудово.
Якщо у вас ще немає шаблонів для контейнерів, спочатку потрібно додати його в сховище.
Обираємо CT Templates → Templates і шукаємо Ubuntu 22.04. Тут ви можете обрати інший дистрибутив, якщо вам зручніше його налаштовувати. Мені простіше з Ubuntu, тому обираю її. З новішою версією у мене були проблеми з інсталяцією пакетів, тому зупинився саме на 22.04. Натискаємо кнопку Download і чекаємо завершення.
Тепер можна створити контейнер. Натискаємо кнопку Create CT.
Створення контейнера
Вводимо назву для контейнера, пароль для адміністратора та, за бажанням, SSH-ключ для простішого доступу через термінал.
Обираємо шаблон.
Розміру диска вистачить навіть 1 ГБ, оскільки ми там нічого особливо зберігати не будемо.
Процесор теж виставляємо по мінімуму — 1 CPU.
Те ж саме з оперативною пам’яттю — у мене все добре працювало навіть з 256 МБ.
У налаштуваннях мережі краще одразу виставити статичну вільну IP-адресу, а також вказати адресу вашого роутера. Для IPv6 можна залишити DHCP.
Натискаємо Finish і запускаємо наш контейнер.
Налаштування веб інтерфейсу
Переходимо в консоль контейнера і вводимо логін
rootта пароль, який ви задавали в налаштуваннях.Спершу переконаймося, що адреса задалася коректно, використовуючи команду
ip address. Також перевіряємо, чи є з’єднання з інтернетом за допомогою командиping 8.8.8.8. Якщо з’єднання є, продовжуємо; якщо ні — перевіряємо налаштування інтернету і пробуємо знову.Оновлюємо інформацію про пакети для встановлення.
apt update4. Тепер встановлюємо веб сервер apache
apt install apache2 -yПісля встановлення ви вже маєте побачити сторінку привітання відкривши в браузері адресу вашого контейнеру http://{ваша.ip.адреса}
5. Але ще треба встановити nut утиліту і веб інтерфейс
apt install nut nut-cgi -y6. Тепер відредагуємо конфігурацію моніторингу статусу безперебійника у файлі, який ми вже знаємо, але цього разу — в самому контейнері.
nano /etc/nut/upsmon.confВидаляємо все та вставляємо такий рядок
MONITOR ups@192.168.91.50 1 monuser secret slaveВказуємо, що ми хочемо моніторити безперебійник під назвою ups за адресою сервера, на якому налаштували ДБЖ-сервіс — нашого Proxmox. Вводимо логін та пароль для доступу до сервісу, а також вказуємо slave, оскільки це буде не основний моніторинговий сервіс.
Зберігаємо файл і переходимо до наступного.
7. У /etc/nut/hosts.conf додаємо
MONITOR ups@192.168.91.50 "Local UPS"8. Створіть необхідні посилання для CGI інтерфейсу NUT
ln -s /usr/lib/cgi-bin /var/www/html/cgi-bin9. Вмикаємо можливість виконувати CGI-скрипти і перезавантажуємо Apache.
a2enmod cgi
systemctl restart apache210. Тепер переходячи за адресою http://192.168.91.36/cgi-bin/nut/upsstats.cgi ви маєте побачити статистику по безперебійнику (не забудьте підставити адресу вашого контейнеру)
Як підключити мережеве сховище до ДБЖ серверу
Тепер настав час підключення зовнішніх клієнтів, і тут все вже набагато простіше. Покажу на прикладі Synology DSM.
Заходимо у вебінтерфейс DSM і відкриваємо Control Panel → Hardware & Power → UPS.
Вмикаємо Enable UPS support, а як тип UPS обираємо Synology UPS server. Наш сервер, звісно, не від Synology, але якщо ви налаштовували стандартні логіни і паролі для NUT, (хоча це і не рекомендований варіант), DSM зможе підключитися до сервера.
У полі з адресою мережевого ДБЖ вводимо IP-адресу нашої Proxmox-машини.
Якщо з’єднання вдалося, то при натисканні кнопки Device Information ви побачите інформацію про статус підключеного безперебійника.
Зазначу, що DSM налаштована таким чином, що при переході на живлення від батареї вона переводить мережеве сховище у сплячий режим, але не вимикає пристрій повністю. Він має вимкнутися лише тоді, коли заряд стає критично низьким. У мене це працює не ідеально, і частіше сам ДБЖ вимикається раніше, ніж NAS. Якщо ви знаєте, як це можна виправити, напишіть, будь ласка, в коментарях.

Як підключити Windows до ДБЖ серверу
Ще один пристрій, який я хочу вимикати, — це комп’ютер на Windows, і для цього йдемо завантажувати Windows-клієнт для мережевих ДБЖ - https://github.com/nutdotnet/WinNUT-Client
Завантажуємо останню версію з розділу релізів та встановлюємо.
Відкриваємо утиліту і переходимо до налаштувань.
На вкладці підключень вводимо адресу Proxmox, порт залишаємо стандартним, якщо ви його не змінювали.
Вказуємо назву ДБЖ, логін та пароль для підключення.
Тиснемо Apply.
Одразу налаштовуємо режим вимкнення комп’ютера на вкладці Shutdown Options.
Обираємо, при якому відсотку заряду вимикати комп’ютер, або коли час роботи від батареї досягне певного порогу.
Вибираємо тип вимкнення: повністю вимикати комп’ютер чи перевести його в режим гібернації або сну.
Останнім налаштовуємо вимкнення комп’ютера при надходженні сигналу від ДБЖсервера про негайне вимкнення. Це може статися, якщо батарея швидко розряджається або виникла інша проблема, і сервер надсилає такий сигнал для примусового завершення роботи комп’ютера.
Тиснемо Apply знову, закриваємо вікно і бачимо дашборд з інформацією про наш ДБЖ.

Можемо перевірити, чи працює наш сервіс і клієнт. Для цього я виставив досить високий відсоток заряду батареї, щоб не чекати довго, і тепер від’єднуємо ДБЖ від мережі. Через деякий час побачимо зміну статусу і параметрів на дашборді. Трохи зачекаємо, і комп’ютер має вимкнутися.

Якщо вимкнення почалося то наш сервер та клієнти працюють як і очікувалося. Ви також можете побачити повідомлення про зміни статусу ДБЖ в консолі Proxmox або системних логах:

Додавання моніторингу до Home Assistant
Бонусом хочу показати, як можна додати моніторинг стану ДБЖ, а також розширити його кроками з автоматизації через Home Assistant — багато моніторингу не буває, правда? :)
Переходимо на сторінку Home Assistant і відкриваємо Settings → Devices & services.
Натискаємо Add Integration і в полі пошуку вводимо NUT.
Обираємо вже знайому нам утиліту, і в поле з ім’ям хоста вводимо адресу нашого Proxmox-сервера, логін та пароль для мережевого ДБЖ.
Тиснемо Submit — маємо отримати повідомлення про успішне додавання пристрою і можливість призначити йому кімнату. Тиснемо Finish.
Тепер можемо перейти до новододаного пристрою і побачити інформацію про безперебійник. Давайте ще додамо його на дашборд.

Тут можна обрати різні варіанти для презентації даних, і це можна детально розглянути в окремому відео. Поки ж давайте зробимо графічне відображення заряду батареї, а основні параметри виведемо у текстовому вигляді.
Також я додав собі повідомлення в Telegram при переході ДБЖ на батарею та поверненні на живлення від мережі.
На цьому все — ДБЖ-сервер готовий, і всі клієнти налаштовані для роботи з ним. Кожен клієнт зможе правильно завершити роботу у випадку, коли мережа зникне і батарея буде занадто розряджена.