Piloter un onduleur sous linux le retour

J’avais rédigé il y a quelque temps un post qui expliquait comment piloter un onduleur sous linux. En fait que je dis piloter, il s’agit de le monitorer et surtout que l’onduleur déclenche l’arrêt propre du poste linux qu’il alimente au bout d’un temps défini. J’utilisais jusqu’à présent un onduleur speex pp210, et bien qu’ayant changé les batteries il ne remplissait plus son office, il tombait immédiatement en cas de coupure entraînant avec lui mon serveur qu’il était censé protégé !

Du coup j’ai dû investir dans un nouvel onduleur, j’ai choisi un modèle d’une marque réputée traditionnellement compatible linux. Il s’agit d’un APC Back-UPS XS 950U à moins de 100€TTC livraison comprise.

quand on le branche en USB voilà ce que nous dit journalctl

sept. 16 11:00:01 mana.kervao.fr kernel: usb 2-1.1: new low-speed USB device number 3 using ehci-pci
sept. 16 11:00:01 mana.kervao.fr kernel: usb 2-1.1: New USB device found, idVendor=051d, idProduct=0002
sept. 16 11:00:01 mana.kervao.fr kernel: usb 2-1.1: New USB device strings: Mfr=3, Product=1, SerialNumber=2
sept. 16 11:00:01 mana.kervao.fr kernel: usb 2-1.1: Product: Back-UPS XS 950U   FW:925.T2 .I USB FW:T2 
sept. 16 11:00:01 mana.kervao.fr kernel: usb 2-1.1: Manufacturer: American Power Conversion
sept. 16 11:00:01 mana.kervao.fr kernel: usb 2-1.1: SerialNumber: 3B1713X09434  
sept. 16 11:00:01 mana.kervao.fr mtp-probe[2635]: checking bus 2, device 3: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1"
sept. 16 11:00:01 mana.kervao.fr mtp-probe[2635]: bus: 2, device: 3 was not an MTP device
sept. 16 11:00:01 mana.kervao.fr kernel: hidraw: raw HID events driver (C) Jiri Kosina
sept. 16 11:00:01 mana.kervao.fr kernel: usbcore: registered new interface driver usbhid
sept. 16 11:00:01 mana.kervao.fr kernel: usbhid: USB HID core driver
sept. 16 11:00:01 mana.kervao.fr kernel: hid-generic 0003:051D:0002.0001: hiddev0,hidraw0: USB HID v1.10 Device [American Power Conversion Back-UPS XS 950U   FW:925.T2 .I USB FW:T2 ] on usb-0000:00:1d.0-1.1/input0

Il est correctement reconnue sur ma Mageia 5.1 et un lsusb va nous donner:

Bus 002 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply

Si on essaye de le configurer avec Network UPS Tools (NUT) le fichier de configuration adapté /usr/local/etc/ups.conf aura cette tête là :

[onduleur]
 driver = usbhid-ups 
 port = auto 
 vendorid = 051d
 productid = 0002
 desc = "APC XS 950U"

sauf qu’il n’est pas totalement bien reconnu quand on le monitore:

On voit qu’au niveau d’Output il y a un Not supported. On laisse donc tomber NUT et on va faire appel à apcupsd qui comme son nom l’indique est prévu pour les onduleurs APC. Le site officiel est par , on désarchive l’archive en tapant:

tar xvfz apcupsd-3.14.14.tar.gz

dans le répertoire apcupsd-3.14.14 on tapera

./configure --enable-usb --with-upstype=usb --with-upscable=usb --with-cgi-bin=/usr/local/apache2/cgi-bin/ --enable-cgi --with-log-dir=/var/log

à noter qu’il faut disposer d’un serveur apache local, j’ai indiqué le chemin des scripts CGI. Voilà le résultat de la commande :

Configuration on Sat Sep 16 19:42:52 CEST 2017:

  Host:                       x86_64-unknown-linux-gnu -- mandrake for
  Apcupsd version:            3.14.14 (31 May 2016)
  Source code location:       .
  Install binaries:           /sbin
  Install config files:       /etc/apcupsd
  Install man files:          ${prefix}/share/man
  Nologin file in:            /etc
  PID directory:              /var/run
  LOG dir (events, status)    /var/log
  LOCK dir (for serial port)  /var/lock
  Power Fail dir              /etc/apcupsd
  Compiler:                   g   4.9.2
  Preprocessor flags:          -I/usr/local/include
  Compiler flags:             -g -O2 -fno-exceptions -fno-rtti -Wall -Wno-unused-result 
  Linker:                     gcc
  Linker flags:                -L/usr/local/lib64 -L/usr/local/lib
  Host and version:           mandrake for
  Shutdown Program:           /usr/bin/shutdown
  Port/Device:                /dev/ttyS0
  Network Info Port (CGI):    3551
  UPSTYPE                     usb
  UPSCABLE                    usb

  drivers (no-* are disabled): apcsmart dumb net linux-usb snmp pcnet modbus no-modbus-usb no-test

  enable-nis:                 yes
  with-nisip:                 0.0.0.0
  enable-cgi:                 yes
  with-cgi-bin:               /usr/local/apache2/cgi-bin/
  with-libwrap:               
  enable-pthreads:            yes
  enable-dist-install:        yes
  enable-gapcmon:             no
  enable-apcagent:            no
  
Configuration complete: Run 'make' to build apcuspd.

on tape ensuite make puis make install en tant que root. On édite maintenant le fichier /etc/apcupsd/apcupsd.conf qui doit contenir :

#nom de l'onduleur
UPSNAME onduleur
UPSCABLE usb
UPSTYPE usb
DEVICE

# si une coupure de courant survient, l'arrêt est déclenché quand le pourcentage restant est inférieur est égal à la valeur définie par BATTERYLEVEL
BATTERYLEVEL 5

# si une coupure de courant survient, l'arrêt est déclenché quand le temps restant est inférieur est égal à la valeur définie par MINUTES
MINUTES 3

# pour pouvoir monitorer via un navigateur
NETSERVER on
# port du serveur
NISPORT 3551
UPSCLASS standalone

Attention de prévoir d’ouvrir le port 3551 avec shorewall. Avec systemd on créera le fichier /usr/lib/systemd/system/apcupsd.service qui contiendra :

[Unit]
Description=APC UPS Power Control Daemon for Linux

[Service]
ExecStartPre=-/usr/bin/rm -f /etc/apcupsd/powerfail
ExecStart=/usr/sbin/apcupsd -b -f /etc/apcupsd/apcupsd.conf

[Install]
WantedBy=multi-user.target

on active le service en tapant :

systemctl enable apcupsd

et on le lance avec :

systemctl start apcupsd

voilà le résultat avec journalctl

sept. 16 20:07:51 mana.kervao.fr apcupsd[18842]: apcupsd 3.14.14 (31 May 2016) mandrake startup succeeded
sept. 16 20:07:51 mana.kervao.fr apcupsd[18842]: NIS server startup succeeded
sept. 16 20:07:51 mana.kervao.fr kernel: hid-generic 0003:051D:0002.0002: hiddev0,hidraw0: USB HID v1.10 Device [American Power Conversion Back-UPS XS 950U   FW:925.T2 .I USB FW:T2 ] on usb-0000:00:1d.0-1.1/input0

la commande apcaccess status me donne

APC      : 001,036,0878
DATE     : 2017-09-16 20:39:58  0200  
HOSTNAME : mana.kervao.fr
VERSION  : 3.14.14 (31 May 2016) mandrake
UPSNAME  : onduleur
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2017-09-16 20:38:59  0200  
MODEL    : Back-UPS XS 950U   
STATUS   : ONLINE 
LINEV    : 234.0 Volts
LOADPCT  : 16.0 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 37.1 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
SENSE    : Medium
LOTRANS  : 155.0 Volts
HITRANS  : 280.0 Volts
ALARMDEL : 30 Seconds
BATTV    : 13.4 Volts
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000008
SERIALNO : 3B1713X09434  
BATTDATE : 2017-03-30
NOMINV   : 230 Volts
NOMBATTV : 12.0 Volts
NOMPOWER : 480 Watts
FIRMWARE : 925.T2 .I USB FW:T2
END APC  : 2017-09-16 20:40:01  0200

et voilà ce que ça donne quand on accède via le navigateur

quand on clique sur Local Host

en provoquant une coupure de courant (en débranchant simplement l’onduleur)

à noter que les commandes de shutdown sont configurables dans le fichier /etc/apcupsd/apccontrol.

Laisser un commentaire