devzone.org.ua/post/monitorynh-statusu-ups-v-linux-na-prykladi-nut.md
2026-02-09 04:19:15 +02:00

7.2 KiB
Raw Blame History

Моніторинг статусу UPS в Linux на прикладі NUT

За весь час користування Linux, жодного разу не задумувався про моніторинг безперебійного блоку живлення від ПК, адже він є повністю автономним: завчасно сигналізує про різні проблеми з мережею за допомогою звукових сигналів та автоматично вимикається по таймеру або при розряді батарей.

Але днями виникла задача поміряти частоту мережі, в контексті роботи котла опалювання в умовах перебоїв зі світлом. Не купуючи спеціальний прилад, спочатку було вирішив зняти частоту з трансформатора акустичним способом. Утім згодом, акустичні показники почали збивати мене з толку і я задумався чи не забув про ще якийсь альтернативний індикатор напруги A/C 220V. І тут згадав про порт USB в UPS - поліз в гугл та дізнався, що дійсно, аналіз частоти в моєму UPS дійсно є і безперебійник може йти в захист, якщо це значення виходить за межі допустимого діапазону 50 Гц. Тому занотую цю знахідку для себе та інших!

NUT

NUT (Network UPS Tools) - це програмний комплекс з відкритим кодом для моніторингу статусу безперебійних блоків живлення (UPS), що поширюється за ліцензією GNU/GPL; отже є доступним у всіх дистрибутивах Linux. Все, що потрібно - нагуглити назву драйверу сумісного з вашою моделлю UPS. Я ж наведу історію свого налаштування сервера NUT на прикладі Mustek 1060 в Fedora 43, використовуючи специфіку її шляхів файлової системи і пакетного менеджера.

Підключення

Спочатку, під'єднуємо кабель USB від UPS до ПК і перевіряємо наявність пристрою:

$ lsusb
...
Bus 003 Device 006: ID 0665:5161 Cypress Semiconductor USB to Serial
  • пристрій має бути підключено до мережі 220 Вольт, але не обов'язково увімкненим

Встановлення

sudo dnf install nut nut-client

Налаштування пристрою можна визначити командою:

sudo nut-scanner -U

Результат додаємо до файлу конфігурації, відповідно до моделі UPS:

[mustek]
    driver = nutdrv_qx
    port = auto
    vendorid = 0665
    productid = 5161
    subdriver = cypress
    desc = "Mustek PowerMust 1060"
  • можливо, комусь згодиться драйвер blazer_usb

Тепер потрібно застосувати зміни, якщо сервіси працюють:

sudo systemctl restart nut-driver-enumerator nut-server

І підтягнути вказаний в налаштуваннях драйвер:

sudo upsdrvctl start
  • або upsdrvsvcctl

Перевіряємо, чи пристрій визначено:

$ sudo upsdrvctl status

Network UPS Tools upsdrvctl - UPS driver controller 2.8.4 release
UPSNAME    	     UPSDRV	RUNNING	PF_PID	S_RESPONSIVE	S_PID	S_STATUS
mustek     	  nutdrv_qx	RUNNING	34115	RESPONSIVE	34115	"OL"

Запускаємо сервер: він використовується для збору показників з UPS та взаємодії з сокетом клієнтського API, CLI, GUI або WebUI (для останнього - окремо знадобиться встановлення nut-cgi та конфігурація httpd)

sudo systemctl restart nut-server
  • щоб автоматично запускати сервер при старті системи, слідом виконується аналогічна команда з enable замість replace

Окремо, можна запустити демон інтеграції з середовищем операційної системи. Це може згодитись у випадках, якщо потрібно надсилати сповіщення або керувати живленням підключеного клієнта. Особисто мені це не потрібно, але така можливість в NUT є з коробки:

sudo systemctl restart nut-monitor

Користування

Нарешті, коли сервіси активні - можна зняти показники, найпростіше це зробити в CLI:

$ upsc mustek@localhost

battery.charge: 100
battery.voltage: 13.2
battery.voltage.high: 13.00
battery.voltage.low: 10.40
battery.voltage.nominal: 12.0
device.type: ups
driver.debug: 0
driver.flag.allow_killpower: 0
driver.name: nutdrv_qx
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.productid: 5161
driver.parameter.subdriver: cypress
driver.parameter.synchronous: auto
driver.parameter.vendorid: 0665
driver.state: quiet
driver.version: 2.8.4
driver.version.data: Voltronic-QS 0.10
driver.version.internal: 0.45
driver.version.usb: libusb-1.0.29 (API: 0x0100010B)
input.voltage: 222.7
input.voltage.fault: 223.2
output.current.nominal: 3.0
output.frequency: 52.7
output.frequency.nominal: 50
output.voltage: 223.7
output.voltage.nominal: 220
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.firmware.aux: PM-V
ups.load: 0
ups.productid: 5161
ups.status: OL
ups.type: offline / line interactive
ups.vendorid: 0665
  • назва користувача mustek є відповідною до рядка [mustek] у файлі конфігурації /etc/ups/ups.conf

У прикладі вище мене цікавив саме рядок input.frequency, але як видно, мені доступний тільки output.frequency: 52.7. Це хоч й output але при активному живленні в ups.type: offline / line interactive - йде пряме живлення від мережі, отже частота має бути приблизно такою само, як і на умовному input. Коли UPS піде в захист, то вступить в роботу інвертор і користі від такого вимірювання "зовнішньої" частоти вже буде ніякої.