Outils pour utilisateurs

Outils du site


installation_nut

Installation

Branchez le câble de communication (ici un cable USB) de l'onduleur et vérifiez qu'il est bien détecté

# dmesg
[    6.345822] usb 1-2.2: new low-speed USB device number 5 using uhci_hcd
[    6.533536] usb 1-2.2: New USB device found, idVendor=0463, idProduct=ffff
[    6.533540] usb 1-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=4
[    6.533543] usb 1-2.2: Product: PROTECTIONCENTER
[    6.533545] usb 1-2.2: Manufacturer: MGE OPS SYSTEMS
[    6.533547] usb 1-2.2: SerialNumber: 000000000

Installez nut :

# apt-get install nut
...
Les paquets supplémentaires suivants seront installés : 
libupsclient1 nut-client nut-server
...

Configuration :

Configurez votre onduleur: Il existe toute sorte de drivers, il faudra trouver le bon…

root@debian:/# ls /lib/nut/
al175	      bcmxcp_usb    bestuferrups  clone-outlet	genericups    masterguard
nutdrv_atcl_usb      powercom	  riello_usb   tripplite_usb  victronups    apcsmart
belkin    bestups	  dummy-ups	isbmex	      metasys	   nutdrv_qx	    
powerpanel	  safenet      upscode2    apcsmart-old  belkinunv     blazer_ser
etapro	ivtscd	      mge-shut	   oldmge-shut	    rhino	  solis     
upsd    apcupsd-ups   bestfcom	    blazer_usb	  everups	liebert 
mge-utalk    oneac	    richcomm_usb  tripplite    upsmon    bcmxcp	
bestfortress  clone	  gamatronic	liebert-esp2  microdowell  optiups	
riello_ser	  tripplitesu  usbhid-ups
root@debian:/# 

Ce fichier /usr/share/nut/driver.list contient une liste d'onduleurs et le driver qu'il faut utiliser. Dans mon cas :

"MGE UPS SYSTEMS"	"ups"	"5"	"Protection Center 420"	"USB"	"usbhid-ups"
"MGE UPS SYSTEMS"	"ups"	"5"	"Protection Center 500"	"USB"	"usbhid-ups"
"MGE UPS SYSTEMS"	"ups"	"5"	"Protection Center 675"	"USB"	"usbhid-ups"

Le driver que je devrais utiliser sera “usbhid-ups”

# vi /etc/nut/ups.conf
...
# Set maxretry to 3 by default, this should mitigate race with slow devices:
#maxretry = 3
[mge]
   driver = usbhid-ups
   port = auto
   desc = "Onduleur MGE"
   offdelay = 30
   ondelay = 40
   pollonly
...

Commenter à la fin de ce fichier : maxretry = 3

Si vous n'êtes pas sur du port de communication, mettez le à: port = auto

Ajoutez ensuite une règle à UDEV afin qu'il attribue ttyS0 (si c'est bien le port sur lequel est l'onduleur) au groupe nut:

#vi /etc/udev/rules.d/99_nut-serialups.rules
KERNEL=="ttyS0", GROUP="nut"

Rafraichissez UDEV

udevadm trigger
udevadm control --reload-rules

Changez manuellement le groupe de ttyS0 (ce sera automatique au prochain demarrage):

chgrp nut /dev/ttyS0

Démarrez upsdrvctl afin de vérifier que votre configuration (dans ups.conf) est la bonne:

upsdrvctl start
Network UPS Tools - UPS driver controller 2.7.4
Network UPS Tools - Generic HID driver 0.41 (2.7.4)
USB communication driver 0.33
Using subdriver: MGE HID 1.39

Configurez nut.conf

#vi /etc/nut/nut.conf
MODE=netserver

Configuration pour upsmon :

#vi /etc/nut/upsd.conf
MAXAGE 25
LISTEN 127.0.0.1 3493
LISTEN 192.168.1.100 3493
LISTEN ::1 3493

Configuration pour upsd.users :

#vi /etc/nut/upsd.users
[admin]
    password = motdepasse
    actions = SET
    instcmds = ALL
    
[localhost]
    password = localhost
    upsmon master

[slave]
    password = slave
    upsmon slave

Configuration des alertes et actions

#vi /etc/nut/upsmon.conf
MONITOR mge@localhost 1 admin "mot_de_passe" master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h now"
HOSTSYNC 20
#POWERDOWNFLAG /etc/nut/killpower
FINALDELAY 5
POLLFREQ 5
POLLFREQALERT 5
NOTIFYCMD /sbin/upssched
NOTIFYMSG ONBATT "%s is on battery"
NOTIFYMSG ONLINE "%s is back online"
NOTIFYMSG LOWBATT "%s has a low battery!"
NOTIFYMSG SHUTDOWN "System is being shutdown!"

NOTIFYFLAG ONLINE SYSLOG+EXEC
NOTIFYFLAG ONBATT SYSLOG+EXEC
NOTIFYFLAG LOWBATT SYSLOG+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+EXEC
NOTIFYFLAG COMMBAD SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+EXEC
NOTIFYFLAG REPLBATT SYSLOG+EXEC
NOTIFYFLAG NOCOMM SYSLOG+EXEC

Configurons l'arrêt et les alertes :

#vi /etc/nut/upssched.conf
# les scripts
CMDSCRIPT /bin/upssched-cmd

# les mandats
LOCKFN /var/lib/nut/upssched.lock
PIPEFN /var/lib/nut/upssched.pipe

# La Batterie est HS
AT REPLBATT * EXECUTE batths

# le timer de 5 sec apres ONBATT (ups on battery) event
AT ONBATT * START-TIMER onbatt 5

# le timer de 5 sec apres ONLINE event
AT ONLINE * START-TIMER online 5

# shutdown propre apres 5mn en ONBATT
AT ONBATT * START-TIMER shutdown1 280
AT ONBATT * START-TIMER shutdown2 285
AT ONBATT * START-TIMER shutdown 300

# envoie mail comm avec onduleur KO
AT COMMBAD * START-TIMER commbad 10

# envoie mail comm avec onduleur OK
AT COMMOK * START-TIMER commok 10
AT COMMBAD * CANCEL-TIMER commok

# Passage de la consigne ups.delay.shutdown à 30
AT COMMOK * START-TIMER delay 15

# annulation des actions si EDF OK
AT ONLINE * CANCEL-TIMER onbatt
AT ONLINE * CANCEL-TIMER shutdown

Le point important est de vérifier sur votre système si la fichier upssched-cmd existe et s'il se trouve à l'endroit que vous avez indiqué dans upssched.conf S'il n'existe pas:

touch /bin/upssched-cmd
chmod +x /bin/upssched-cmd
#vi /bin/upssched-cmd
#! /bin/sh
#
# This script should be called by upssched via the CMDSCRIPT directive.
# 
# Here is a quick example to show how to handle a bunch of possible
# timer names with the help of the case structure.
#
# This script may be replaced with another program without harm.
#
# The first argument passed to your CMDSCRIPT is the name of the timer
# from your AT lines.

case $1 in
    upsgone)
      logger -t upssched-cmd "The UPS has been gone for a while"
      ;;
    batths)
            logger -t upssched-cmd "La Batterie de l'onduleur est HS"
            echo "Batt Onduleur" | mail -s "La Batterie de l'onduleur est HS" damien.cellier@icloud.com
            ;;
    commbad)
            logger -t upssched-cmd "Envoi Avertissement via mail"
            echo "Communication Onduleur KO" | mail -s "la communication avec l'onduleur est KO" damien.cellier@icloud.com
            ;;
    commok)
            logger -t upssched-cmd "Envoi Avertissement via mail"
            echo "Communication Onduleur OK" | mail -s "la communication avec l'onduleur est OK" damien.cellier@icloud.com
            ;;
    onbatt)
            logger -t upssched-cmd "Envoi Avertissement via mail"
            echo "Coupure EDF" | mail -s "ONDULEUR Proxmox HS" damien.cellier@icloud.com
            ;;
    online)
            logger -t upssched-cmd "Envoi retour a la normal via mail"
            echo "EDF OK" | mail -s "ONDULEUR Proxmox OK" damien.cellier@icloud.com
            ;;
    shutdown)
            logger -t upssched-cmd "Shutting down using: upsmon -c fsd"
            upsmon -c fsd
            ;;
    shutdown1)
            logger -t upssched-cmd "Shutting down using: upsmon -c fsd"
            umount /mnt/pve/data
            ;;
    shutdown2)
            logger -t upssched-cmd "Shutting down using: upsmon -c fsd"
            umount /mnt/pve/data2
            ;;
    stopusb)
            logger -t upssched-cmd "Arret du port usb"
            upsdrvctl stop
            ;;
    startusb)
            logger -t upssched-cmd "Relance du port usb"
            upsdrvctl start
            ;;
    delay)
            logger -t upssched-cmd "Ups.delay.shutdown = 30"
            upsrw -s ups.delay.shutdown=30 -u admin -p xxxmdpxxx mge
            ;;
    *)
      logger -t upssched-cmd "Unrecognized command: $1"
      ;;
esac

Préparez le démarrage automatique de upsd et upsmon (selon votre branche - Stable, Testing ou Unstable - il peut y avoir des variations dans les noms des scripts dans init.d)

# update-rc.d ups-monitor defaults
installation_nut.txt · Dernière modification : de 127.0.0.1