Ultima entrada

  • Controlar SAI incompatible con QNAP mediante una Raspberry Pi Zero 2W y NUT

    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

    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

    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  = <>
    	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  <>  master
    

    Iniciaremos NUT y comprobamos su estado al arrancar

    sudo systemctl start nut-driver
    sudo systemctl status nut-driver

    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

    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

    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 -

    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

    Y si pulsamos el enlace que aparece en el nombre del SAI aparecerá algo similar a esto

    Y si pulsamos el enlace que aparece en All data nos aparecerá un resumen de los datos del SAI

    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”

    Y veremos que progresivamente en nivel de carga va bajando

    Y el estado cambia tambien …

    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

    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

    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

    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

    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”

    También veremos los eventos de perdida y recuperación de la alimentación del SAI

    Al final todo el conjunto ocupa nada y menos y cabe en la caja de la pi , quedaria así

    Con un disipador interno no se calienta prácticamente si esta solo dedicada a esta dedicado a hacer de servidor NUT

    Y con esto y un bizcocho ………

2 comentarios en «Ultima entrada»

  1. Hola Antonio!! LLegue a tu web buscando un tutorial de como instalar un ZBDongle-E en un QNAP TS 251D pero aun ando bastante liado jaja ojala me puedas dar una mano si tienes un tiempo libre!! Abrazo desde Argentina!!

    Responder

Deja un comentario