gemlog/public/uk/monitoring-ups-status-on-linux-with-nut.gmi
2026-02-09 04:16:04 +02:00

137 lines
No EOL
7.5 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Моніторинг статусу 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 до ПК і перевіряємо наявність пристрою:
``` bash
$ lsusb
...
Bus 003 Device 006: ID 0665:5161 Cypress Semiconductor USB to Serial
```
* пристрій має бути підключено до мережі 220 Вольт, але не обов'язково увімкненим
### Встановлення
``` bash
sudo dnf install nut nut-client
```
Налаштування пристрою можна визначити командою:
``` bash
sudo nut-scanner -U
```
Результат додаємо до файлу конфігурації, відповідно до моделі UPS:
``` /etc/ups/ups.conf
[mustek]
driver = nutdrv_qx
port = auto
vendorid = 0665
productid = 5161
subdriver = cypress
desc = "Mustek PowerMust 1060"
```
* можливо, комусь згодиться драйвер `blazer_usb`
Тепер потрібно застосувати зміни, якщо сервіси працюють:
``` bash
sudo systemctl restart nut-driver-enumerator nut-server
```
І підтягнути вказаний в налаштуваннях драйвер:
``` bash
sudo upsdrvctl start
```
* або upsdrvsvcctl
Перевіряємо, чи пристрій визначено:
``` bash
$ 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`)
``` bash
sudo systemctl restart nut-server
```
* щоб автоматично запускати сервер при старті системи, слідом виконується аналогічна команда з `enable` замість `replace`
Окремо, можна запустити демон інтеграції з середовищем операційної системи. Це може згодитись у випадках, якщо потрібно надсилати сповіщення або керувати живленням підключеного клієнта. Особисто мені це не потрібно, але така можливість в NUT є з коробки:
``` bash
sudo systemctl restart nut-monitor
```
Нарешті, коли сервіси активні - можна зняти показники, найпростіше це зробити в CLI:
``` bash
$ 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 піде в захист, то вступить в роботу інвертор і користі від такого вимірювання "зовнішньої" частоти вже буде ніякої.
## Посилання
=> https://en.wikipedia.org/wiki/Network_UPS_Tools
### Дивіться також
=> measuring-220v-ac-mains-frequency-acoustic-method.gmi Вимірювання частоти змінного струму 220В акустичним способом
=> diy-online-router-ups-based-on-interactive-pc-ups.gmi Саморобний online-UPS для роутера на базі 12В безперебійника для ПК