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:
- drivers: Que se comunica directamente con el UPS y corre en el mismo equipo que el server.
- server: Brinda información del driver a travez de la red.
- 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:
- cgi-bin: Que es una clase especial de cliente para monitorear via web.
- scripts: Que contienen ciertos scripts escritos en varios lenguajes para mayor integración con otras aplicaciones.
Información del sistema:
- SO: Debian GNU/Linux 11 (bullseye)
- Arquitectura: ARM64 (Raspberry Pi hardware)
- UPS: Forza SL-801UL
- Conexión UPS: USB serial.
- Nut version: 2.7.4
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
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
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
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