diff --git a/post/monitorynh-statusu-ups-v-linux-na-prykladi-nut.md b/post/monitorynh-statusu-ups-v-linux-na-prykladi-nut.md new file mode 100644 index 0000000..ba88b0e --- /dev/null +++ b/post/monitorynh-statusu-ups-v-linux-na-prykladi-nut.md @@ -0,0 +1,115 @@ +# Моніторинг статусу UPS в Linux на прикладі NUT + +За весь час користування Linux, жодного разу не задумувався про моніторинг безперебійного блоку живлення від ПК, адже він є повністю автономним: завчасно сигналізує про різні проблеми з мережею за допомогою звукових сигналів та автоматично вимикається по таймеру або при розряді батарей. + +Але днями виникла задача поміряти частоту мережі, в контексті роботи котла опалювання в умовах перебоїв зі світлом. Не купуючи спеціальний прилад, спочатку було вирішив [зняти частоту з трансформатора акустичним способом](https://devzone.org.ua/post/vymiriuvannia-chastoty-zminnoho-strumu-220v-pidruchnymy-zasobamy). Утім згодом, акустичні показники почали збивати мене з толку і я задумався чи не забув про ще якийсь альтернативний індикатор напруги A/C 220V. І тут згадав про порт USB в UPS - поліз в гугл та дізнався, що дійсно, аналіз частоти в моєму UPS дійсно є і безперебійник може йти в захист, якщо це значення виходить за межі допустимого діапазону 50 Гц. Тому занотую цю знахідку для себе та інших! + +## NUT + +NUT ([Network UPS Tools](https://en.wikipedia.org/wiki/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 +``` + +Редагуємо файл конфігурації, відповідно до моделі 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 upsdrvctl start +``` + +Перевіряємо, чи пристрій визначено: + +``` 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 піде в захист, то вступить в роботу інвертор і користі від такого вимірювання "зовнішньої" частоти вже буде ніякої. \ No newline at end of file