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