Configurando el SAI Riello iDialog 800VA en Proxmox con NUT: apagado automático y notificaciones

SAI Riello conectado a servidor Proxmox
5 min. Lectura
27 Vistas
0 Valoración

El SAI en cuestión es un Riello iDialog 800VA, comprado en agosto de 2012. Ya tiene más de 13 años. En mayo de 2020 le cambié la batería por una CSB GP1272F2 12V 7Ah — la original aguantó casi 8 años, que no está nada mal. Las baterías de plomo-ácido selladas que usan este tipo de SAIs tienen una vida útil teórica de 3-5 años, aunque en la práctica, con buenas condiciones de temperatura y sin ciclos de descarga profunda continuos, pueden llegar a los 7-8 años perfectamente. La que puse en 2020 ya lleva casi 6 años, así que toca ir pensando en cambiarla pronto.

Desde hace tiempo tenía pendiente configurar correctamente NUT para que el SAI hiciera algo más que estar enchufado. Lo intenté en varias ocasiones sin éxito — siempre acababa atascado en algún punto de la configuración y lo dejaba para otro día. Esta vez, con la ayuda de la IA, el proceso ha sido mucho más fluido y productivo. Lo que antes me llevaba horas de prueba y error dando vueltas por foros, esta vez quedó resuelto en una sola sesión.

Este post recoge el proceso completo: diagnóstico, configuración del driver, apagado automático de las VMs y notificaciones por Telegram y email.

El estado inicial

NUT estaba instalado pero el driver no comunicaba bien con el SAI. El mensaje de error era constante:

Broadcast message from root@pve:
UPS riello@localhost is unavailable

Lo primero fue verificar que NUT realmente estaba instalado:

which upsc upsd upsmon nut-scanner

Sí estaba. El problema era otro.

Diagnóstico: el driver

Revisando los archivos de configuración, /etc/nut/ups.conf tenía el driver correcto para el Riello:

[riello]
    driver = riello_usb
    port = auto
    desc = "Riello AIDG8001RU"

Y nut-scanner detectaba el SAI sin problemas:

nut-scanner -U
[nutdev1]
    driver = "riello_usb"
    port = "auto"
    vendorid = "04B4"
    productid = "5500"
    product = "USB to Serial"
    vendor = "Cypress Semiconductor"
    bus = "001"

El SAI usa un adaptador USB-Serie de Cypress Semiconductor. Detectado perfectamente.

El problema estaba en el servicio del driver. En versiones modernas de NUT, no existe un nut-driver.service genérico — cada dispositivo tiene el suyo:

systemctl list-units | grep nut

El servicio correcto era nut-driver@riello.service. Estaba corriendo, pero los logs mostraban pérdidas de comunicación intermitentes. Después de un reinicio del servicio todo volvió a la normalidad:

systemctl restart nut-driver@riello.service
upsc riello@localhost

Y ahí aparecieron todos los datos del SAI:

battery.voltage: 13.5
input.voltage: 233
output.voltage: 237
output.power.percent: 15
ups.load: 15
ups.power.nominal: 800
ups.status: OL

OL significa On Line — el SAI está funcionando con corriente de red. La carga es del 15% sobre los 800VA nominales, unos 72W. Todo correcto.

Configuración del apagado automático

Antes de tocar ningún fichero de configuración, conviene hacer una copia de seguridad. Son pocos ficheros y el proceso es rápido:

cp /etc/nut/upssched.conf /etc/nut/upssched.conf.bak
cp /etc/nut/upssched-cmd /etc/nut/upssched-cmd.bak
cp /etc/nut/upsmon.conf /etc/nut/upsmon.conf.bak
cp /etc/nut/ups.conf /etc/nut/ups.conf.bak
cp /etc/nut/upsd.users /etc/nut/upsd.users.bak

Si algo sale mal, restaurar es tan sencillo como copiar el .bak sobre el original.

Con el driver funcionando, toca configurar lo importante: que Proxmox se apague limpiamente si hay un corte de luz prolongado.

NUT usa dos archivos para esto: upsmon.conf para la monitorización y upssched.conf para la gestión de tiempos y eventos.

upssched.conf

CMDSCRIPT /etc/nut/upssched-cmd
PIPEFN /var/run/nut/upssched.pipe
LOCKFN /var/run/nut/upssched.lock
AT ONBATT * START-TIMER earlyshutdown 600
AT ONLINE * CANCEL-TIMER earlyshutdown online
AT LOWBATT * EXECUTE earlyshutdown
AT COMMBAD * START-TIMER commbad 30
AT COMMOK * CANCEL-TIMER commbad commok
AT NOCOMM * EXECUTE commbad
AT SHUTDOWN * EXECUTE powerdown

El timer earlyshutdown está en 600 segundos (10 minutos). Con la batería en su estado actual — ya con algunos años encima — calculo unos 15 minutos de autonomía al 15% de carga. Los 10 minutos dan margen suficiente para que Proxmox apague las 10 VMs y CTs activos antes de que se acabe la batería.

Si la batería aguanta más, ajustaré el timer hacia arriba.

upssched-cmd

El script que ejecuta las acciones:

#!/bin/sh
case $1 in
    earlyshutdown)
        logger -t upssched-cmd "UPS on battery too long, initiating shutdown"
        /etc/nut/notify.sh "UPS on battery too long - Initiating Proxmox shutdown"
        /usr/sbin/upsmon -c fsd
        ;;
    commbad)
        logger -t upssched-cmd "UPS communication lost too long"
        /etc/nut/notify.sh "UPS communication lost"
        ;;
    online)
        logger -t upssched-cmd "UPS back on line power"
        /etc/nut/notify.sh "Power restored - UPS back on line"
        ;;
    powerdown)
        logger -t upssched-cmd "UPS shutdown in progress"
        /etc/nut/notify.sh "Proxmox shutdown in progress"
        ;;
    *)
        logger -t upssched-cmd "Unrecognized command: $1"
        ;;
esac
chmod +x /etc/nut/upssched-cmd

upsmon.conf

Un detalle importante: los mensajes de NOTIFYMSG en upsmon.conf deben ser ASCII puro. Los emojis y las tildes hacen que NUT descarte caracteres y llene el log de warnings. Los mensajes bonitos van directamente en el script de notificaciones.

También hay que eliminar la directiva MAXAGE si aparece — fue eliminada en NUT 2.8.0:

sed -i '/^MAXAGE/d' /etc/nut/upsmon.conf

Notificaciones por Telegram y email

El script /etc/nut/notify.sh se encarga de enviar alertas tanto por Telegram como por email vía Migadu:

#!/bin/bash

TELEGRAM_TOKEN="tu_token"
TELEGRAM_CHAT_ID="tu_chat_id"

SMTP_SERVER="smtp.migadu.com"
SMTP_USER="proxmox@tudominio.com"
SMTP_PASS="tu_password"
MAIL_FROM="Proxmox Server <proxmox@tudominio.com>"
MAIL_TO="tu@email.com"

MESSAGE="$1"

# Telegram
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \
    -d chat_id="${TELEGRAM_CHAT_ID}" \
    -d text="🔋 Proxmox SAI: ${MESSAGE}" \
    -d parse_mode="HTML"

# Email via Migadu
curl -s --ssl-reqd \
    --url "smtps://${SMTP_SERVER}:465" \
    --user "${SMTP_USER}:${SMTP_PASS}" \
    --mail-from "${SMTP_USER}" \
    --mail-rcpt "${MAIL_TO}" \
    -T <(echo -e "From: ${MAIL_FROM}\nTo: ${MAIL_TO}\nSubject: SAI Proxmox: ${MESSAGE}\n\n${MESSAGE}")
chmod +x /etc/nut/notify.sh

Para probarlo antes de dejarlo en producción:

/etc/nut/notify.sh "Test notification"

Si llega al móvil y al email, todo listo.

Verificación final

upsc riello@localhost ups.status
systemctl status nut-monitor nut-driver@riello.service --no-pager

El status debería mostrar OL y ambos servicios en active (running) sin errores ni caracteres inválidos en los logs.

Pendiente

La batería tiene ya unos años. Tengo pendiente hacer una prueba real: quitar la tensión al SAI y medir cuánto aguanta con la carga actual. Si no llega a los 15 minutos previstos, ajustaré el timer. Si aguanta más, esperaré al apagado automático y lo daré como bueno.

También tengo pendiente integrar el SAI en el dashboard de Home Assistant, que tiene soporte nativo para NUT.

Lo dejaré para el siguiente post.

¿Te ha sido útil?

Ayúdame a mejorar con tu puntuación y comentarios.

0.0 (0 votos)
Jaume Ferré

Jaume Ferré

Soy un entusiasta de las nuevas tecnologías, apasionado por explorar su potencial innovador. Colecciono CDs en formato físico y disfruto creando mezclas musicales. Además, la fotografía es otra de mis pasiones, capturando momentos y expresiones con cada disparo. ¡Gracias por leerme!

Comentarios

Los comentarios están gestionados por GitHub Discussions. Necesitas una cuenta de GitHub para participar. ¡Es gratis y rápido!