Hace poco instale un SAI de mas capacidad y ohhhhhhh sorpresa no era compatible con QNAP ( que me tienen hasta los webs ) , después de barajar diferentes alternativas decidí usar una Raspberry Pi Zero 2W que tenia libre.
El conexionado es sencillo, por un lado la alimentación y por el otro un cable µUSB OTG al cable USB del SAI
![](https://rivas.cloud/wp-content/uploads/2024/04/image-64.png)
Lo primero será instalar NUT en la Pi
sudo apt-get install nut
Nos creara en el directorio /etc/nut/ una serie de ficheros donde configuraremos NUT
![](https://rivas.cloud/wp-content/uploads/2024/04/image-28.png)
El primero que configuraremos será el archivo nut.conf
MODE=netserver
En el archivo ups.conf crearemos la configuración de nuestro SAI , es importante que el driver sea el correcto , podemos encontrar mas información aquí
maxretry = 3 [sai_2000va] driver = blazer_usb port = auto desc = "SAI 2000VA" pollinterval = 15
En el archivo upsd.conf configuraremos todo lo relacionado con el NUT Server
LISTEN 127.0.0.1 3493 MAXAGE 25 MAXCONN 1024
En el archivo upsd.users configuraremos todo lo relacionado con usuarios y roles
[admin] password = <<PASSWORD>> actions = SET instcmds = ALL [upsmon_local] password = P@ssw0rd upsmon master [upsmon_remote] password = P@ssw0rd upsmon slave [monuser] password = pass upsmon slave
En el archivo upsmon.conf configuraremos todo lo relacionado con la monitorización y el apagado del SAI si es necesario
# -------------------------------------------------------------------------- # DEADTIME - Interval to wait before declaring a stale ups "dead" # # upsmon requires a UPS to provide status information every few seconds # (see POLLFREQ and POLLFREQALERT) to keep things updated. If the status # fetch fails, the UPS is marked stale. If it stays stale for more than # DEADTIME seconds, the UPS is marked dead. # # A dead UPS that was last known to be on battery is assumed to have gone # to a low battery condition. This may force a shutdown if it is providing # a critical amount of power to your system. # # Note: DEADTIME should be a multiple of POLLFREQ and POLLFREQALERT. # Otherwise you'll have "dead" UPSes simply because upsmon isn't polling # them quickly enough. Rule of thumb: take the larger of the two # POLLFREQ values, and multiply by 3. DEADTIME 25 # -------------------------------------------------------------------------- MONITOR sai_2000va@localhost 1 admin <<PASSWORD>> master
Iniciaremos NUT y comprobamos su estado al arrancar
sudo systemctl start nut-driver sudo systemctl status nut-driver
![](https://rivas.cloud/wp-content/uploads/2024/04/image-29.png)
SI nos da un error de conexión entonces reiniciaremos todo los servicios relacionados
sudo service nut-server restart sudo service nut-client restart sudo systemctl restart nut-monitor sudo upsdrvctl stop sudo upsdrvctl start
Tendremos que ver como con sudo systemctl status nut-driver el servicio esta activo y sin errores
![](https://rivas.cloud/wp-content/uploads/2024/04/image-30-1024x451.png)
Con el comando upsc veremos la información del SAI al que nos hemos conectado
sudo upsc sai_2000va@localhost
Esta seria una salida típica a la llamada del comando upsc
![](https://rivas.cloud/wp-content/uploads/2024/04/image-31.png)
Se puede utilizar el comando upslog
para realizar una monitorización contínua del SAI de la siguiente manera:
sudo upslog -ssai_2000va@localhost -l -
![](https://rivas.cloud/wp-content/uploads/2024/04/image-32.png)
Ahora pasaremos a montar nut-cgi para poder verlo en el navegador
Instalaremos apache y nut-cgi
sudo apt install apache2 nut-cgi
Editaremos el fichero upsset.conf y descomentaremos la linea que pone I_HAVE_SECURED_MY_CGI_DIRECTORY
sudo nano /etc/nut/upsset.conf
Quedaria asi :
# # Assuming you have all this done (and it works), then you may uncomment # the line below and start using upsset.cgi through your web browser. # ### I_HAVE_SECURED_MY_CGI_DIRECTORY ###
Habilitaremos el modulo cgi
sudo a2enmod cgi
Editaremos el fichero hosts.conf y añadiremos la siguiente linea
MONITOR sai_2000va@localhost "SAI 2000VA"
Reiniciaremos apache con el comando
sudo systemctl restart apache2
Ahora podremos llamar al CGI mediante el siguiente enlace http://192.168.1.113/cgi-bin/nut/upsstats.cgi
Si todo es correcto deberíamos ver lo siguiente
![](https://rivas.cloud/wp-content/uploads/2024/04/image-33-1024x195.png)
Y si pulsamos el enlace que aparece en el nombre del SAI aparecerá algo similar a esto
![](https://rivas.cloud/wp-content/uploads/2024/04/image-34-1024x591.png)
Y si pulsamos el enlace que aparece en All data nos aparecerá un resumen de los datos del SAI
![](https://rivas.cloud/wp-content/uploads/2024/04/image-35.png)
Podemos hacer la prueba de quitar la alimentación al SAI para ver como pasa de modo OL “en linea” a modo OB “en bateria”
![](https://rivas.cloud/wp-content/uploads/2024/04/image-37.png)
Y veremos que progresivamente en nivel de carga va bajando
![](https://rivas.cloud/wp-content/uploads/2024/04/image-38.png)
Y el estado cambia tambien …
![](https://rivas.cloud/wp-content/uploads/2024/04/image-39.png)
Para asegurarnos que arranca el servicio editaremos /etc/rc.local y añadiremos esto antes de la linea en la que pone “exit 0”
(sudo upsdrvctl start sleep 30 sudo service nut-server start sudo service nut-client start)&
Si vamos al panel de control del NAS lo configuraremos como SAI esclavo en red
![](https://rivas.cloud/wp-content/uploads/2024/04/image-40-1024x668.png)
Pero ohhhhhhhhhhhhhh sorpresa , no hace na de naaaaaaaaaaaaaaaaaaaaa
En QNAP como no la configuración no esta en etc/nut , ellos son mas chulos que un ocho y la ponen en /etc/config/ups
Editaremos el fichero upsmon.conf
[~] # cd /etc/config/ups [/etc/config/ups] # ls ups.conf upsd.conf upsdrv.map upsd.users upsmon.conf [/etc/config/ups] # vi upsmon.conf
Y ohhhhhhhhhh sorpresa cuando en el panel de control cambiamos la IP del servidor NUT la cambia , pero pone a piñón el usuario y la contraseña , por sus web tiene que ser admin y 123456 respectivamente y para mas inri el nombre del sai tiene que ser qnapups
![](https://rivas.cloud/wp-content/uploads/2024/04/image-41.png)
En el archivo upsmon.conf reconfiguraremos con el nuevo nombre , usuario y contraseña
MONITOR qnapups@192.168.1.113 1 admin 123456 slave
En el archivo hosts.conf reconfiguraremos con el nuevo nombre
MONITOR qnapups@localhost "SAI 2000VA"
En el archivo ups.conf reconfiguraremos con el nuevo nombre
maxretry = 3 [qnapups] driver = blazer_usb port = auto desc = "SAI 2000VA" pollinterval = 15 vendorid = "0001" productid = "0000" product = "MEC0003" vendor = "MEC" bus = "001"
En el archivo upsd.conf añadiremos las dos líneas inferiores
LISTEN 0.0.0.0 3493 LISTEN 127.0.0.1 3493 LISTEN 192.168.1.113 3493
En el archivo upsd.users cambiaremos la contraseña del usuario admin
[admin] password = 123456 actions = SET instcmds = ALL [upsmon_local] password = P@ssw0rd upsmon master [upsmon_remote] password = P@ssw0rd upsmon slave [monuser] password = pass upsmon slave
En el archivo upsmon.conf cambiaremos a la nueva configuración
RUN_AS_USER root MONITOR qnapups@localhost 1 upsmon_local P@ssw0rd master
Reiniciaremos los servicios de nuevo para que coja los valores de la nueva configuración
systemctl restart nut-driver systemctl restart nut-server systemctl restart nut-client systemctl restart nut-monitor systemctl status nut-monitor
Comprobamos que arranca bien el servicio nut-monitor y que no hay errores
![](https://rivas.cloud/wp-content/uploads/2024/04/image-42.png)
Al reiniciar el nut-driver veremos que se manda un mensaje broadcast de perdida de comunicación y otro al reestablecer la comunicacion
root@pi2w3:/etc/nut# sudo systemctl restart nut-driver Broadcast message from root@pi2w3 (somewhere) (Wed Apr 10 01:25:29 2024): UPS qnapups@localhost is unavailable Broadcast message from root@pi2w3 (somewhere) (Wed Apr 10 01:25:34 2024): Communications with UPS qnapups@localhost established root@pi2w3:/etc/nut# sudo systemctl status nut-driver
Ahora por fin , ya se ve en la seccion de UPS del panel de control del QNAP
![](https://rivas.cloud/wp-content/uploads/2024/04/image-43-1024x531.png)
Si quitamos la alimentación veremos como detecta el cambio , y si pasase en ese estado el tiempo que le programemos entraria en modo “autoproteccion”
![](https://rivas.cloud/wp-content/uploads/2024/04/image-44-1024x533.png)
También veremos los eventos de perdida y recuperación de la alimentación del SAI
![](https://rivas.cloud/wp-content/uploads/2024/04/image-45.png)
Al final todo el conjunto ocupa nada y menos y cabe en la caja de la pi , quedaria así
![](https://rivas.cloud/wp-content/uploads/2024/04/image-60.png)
Con un disipador interno no se calienta prácticamente si esta solo dedicada a esta dedicado a hacer de servidor NUT
![](https://rivas.cloud/wp-content/uploads/2024/04/image-61.png)
Y con esto y un bizcocho ………