====== Generalidades ======
{{ :proyectos:nuts-logo.png |}}
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**: [[https://www.forzaups.com/products/internal/SL-801UL-eng/|Forza SL-801UL]]
* **Conexión UPS**: USB serial.
* **Nut version**: 2.7.4
Esquema:
{{ :proyectos:nuts-monitor-simple.png?400 |}}
====== 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.
{{ :undefined:installforza_linux_text_x64_html.zip |}} {{ :proyectos: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
{{ :proyectos:nuts-group.png?600 |}}
===== 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''
{{ :proyectos:forza-sl-801ul-lsusb1.png?600 |}}
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''
{{ :proyectos:forza-sl-801ul-lsusb2.png |}}
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
{{ :proyectos:forza-sl-801ul-lsusb3.png |}}
===== 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
{{ :proyectos:nuts-forza-sl-801ul-nutscanner.png?600 |}}
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
{{ :proyectos:nuts-forza-sl-801ul.png |}}
===== 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
{{ :proyectos:nuts-netstat-status.png |}}
===== 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
{{ :proyectos:nuts-web.png |}}
====== Referencias ======
* https://networkupstools.org/
* https://networkupstools.org/features.html
* https://networkupstools.org/docs/user-manual.chunked/ar01s02.html#_documentation *
* https://www.forzaups.com/products/internal/SL-801UL-eng/
* https://wiki.debian.org/nut
* https://wiki.archlinux.org/title/Network_UPS_Tools
* https://support.forzaups.com/483561-Forzatracker---General-Information
* https://networkupstools.org/stable-hcl.html
* https://community.home-assistant.io/t/network-ups-tools-forza-ups/521841
* https://blog.shadypixel.com/monitoring-a-ups-with-nut-on-debian-or-ubuntu-linux
* https://www.howtoforge.com/network-ups-tools-nut-for-usb-upss-on-centos-5.5
* https://community.home-assistant.io/t/network-ups-tools-forza-ups/521841
* https://loganmarchione.com/2017/02/raspberry-pi-ups-monitor-with-nginx-web-monitoring/
* https://github.com/dzomaya/NUTandRpi