Tabla de Contenidos

Generalidades

NUT es un sistema para administrar los UPS (Uninterruptible power supply) que nos permite saber cuando hay una interrupción de energía eléctrica y tomar acciones en nuestras computadoras para ese evento (como apagarlo o hacer respaldo o notificar).

NUT tiene tres capas:

  1. drivers: Que se comunica directamente con el UPS y corre en el mismo equipo que el server.
  2. server: Brinda información del driver a travez de la red.
  3. clients: Se comunican con el server a travez de la red, y obtienen información de estado del UPS

Además nut tiene algunos componentes adicionales tales como:

Información del sistema:

Esquema:

Instalación

apt update && apt upgrade apt install nut

Para detener los servicios utilizamos

systemctl stop nut-driver.service
systemctl stop nut-server.service
systemctl stop nut-monitor.service

Para iniciar los servicios

systemctl start nut-driver.service
systemctl start nut-server.service
systemctl start nut-monitor.service

Configuración

Aunque los de forza tenían un monitoreo para linux desarrollado por ellos en Java para arquitecturas i386 y AMD64, lo han descontinuado. De todos modos aca dejo el instalador que logré descargar.

installforza_linux_text_x64_html.zip linux_installation_guide.pdf

Lastimosamente además de estar descontinuado, no tenían versión para arquitectura ARM64, es por ello que utilizo nut.

Grupos de nut

Antes de comenzar, debemos agregar el usuario nut a los siguientes grupos

Dispositivo Serial USB

Como el UPS está conectado a la compu a traves de USB con comunicación serial, debemos conocer que dispositivo es el UPS Forza, y utilizamos el comando lsusb El dispositivo es un Cypress VendorID 0665 y ProductID 5161 Bus 001 Device 004: ID 0665:5161 Cypress Semiconductor USB to Serial Podemos ver mas información con lsusb -v

Para que nut no tenga problemas de permisos debemos agregar las reglas udev

ln -s /lib/udev/rules.d/62-nut-usbups.rules /etc/udev/rules.d/62-nut-usbups.rules
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", GROUP="nut"'>>/etc/udev/rules.d/63-nut-usbups.rules  

Reiniciamos el udev o el sistema Y al verificar el dispositivo usb con

ls -ahl /dev/bus/usb/001/ Si esta conectado el puerto USB-1

Driver

Lo primero que debemos hacer es revisar si nuestro UPS esta soportado, en https://networkupstools.org/stable-hcl.html

Para luego ver que configuración de driver nos sugiere nut con:

nut-scanner

Se agrega la configuración al archivo /etc/nut/ups.conf y se prueba con el comando

upsdrvctl start

El cual no debe de dar ningún error.

Y después de tanto probar, aún con al driver blazer_usb , la configuración que funcionó es /etc/nut/ups.conf:

 [cypress-c]
#	driver = "blazer_usb"
	driver = "nutdrv_qx"
	port = "auto"
	vendorid = "0665"
	productid = "5161"
	product = "USB to Serial"
	vendor = "INNO TECH"
	bus = "001"
        override.battery.packs = 1
        default.battery.voltage.nominal = 12
        default.battery.voltage.high = 13.47
        default.battery.voltage.low = 11.0
        runtimecal = 2,100,360,50,1290,25
        chargetime = 14400

Luego iniciamos el servicio del driver

systemctl start nut-driver.service

Y probamos la comunicación con el UPS y nos debe devolver

Server

Agregamos la configuración siguiente al archivo /etc/nut/nut.conf:

MODE=standalone

Iniciamos el server

systemctl start nut-server.service

Monitor

Agregamos la configuración siguiente al archivo /etc/nut/upsmon.conf:

MONITOR cypress-c@localhost 1 monuser secret master

Luego queda definir las acciones cuando la energ[ia falla, la cual no se hará aca.

Podemos revisar los puertos habiertos para nut con el comandos

netstat -putona

Monitor web

Para agregar el sistema web se instalar nginx y los siguientes paquetes

apt-get install nginx nut-cgi fcgiwrap

Agregamos el nombre y configuración para nuestro UPS

cat 'MONITOR cypress-c@localhost "Forza SL-801UL" '>> /etc/nut/hosts.conf 

Configuramos el nginx, agregado al servidor (/etc/nginx/sites-enabled/default)

server {
...
        location /nut {
        alias /usr/share/nut/www/;
        try_files $uri $uri/ /index.html;
        }
 
        location /cgi-bin/ {
                gzip off;
                root /usr/lib;
 
                include fastcgi_params;
                fastcgi_pass unix:/var/run/fcgiwrap.socket;
                fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        }
...
}

Cambiamos permisos y reiniciamos los servicios

sudo chmod 644 /etc/nut/hosts.conf
sudo chmod 644 /etc/nut/*.html
sudo chown www-data:www-data /usr/lib/cgi-bin/nut/*.cgi
sudo systemctl restart fcgiwrap.service
sudo systemctl restart fcgiwrap.socket
sudo systemctl restart nginx

Luego nos vamos a la direccion: http://localhost/nut/ y deberiamos ver

Referencias