Introduction

Cela fait un moment que je dispose d’un onduleur pour protĂ©ger quelques Ă©quipements Ă  la maison des surtensions ou occasionnelles coupures d’Ă©lectricitĂ©s. Cependant, je n’avais pas pris le temps de creuser son interfaçage avec mon serveur et sa configuration.

Ce guide permet donc de surveiller l’Ă©tat de l’onduleur en collectant ses donnĂ©es, ainsi que de me notifier lorsqu’un changement d’Ă©tat est identifiĂ©, et mĂȘme de lancer un arrĂȘt propre du serveur lorsque la batterie de l’onduleur est presque vide.

Tout cela est possible grĂące Ă  NUT (Network UPS Tool), un outil permettant d’interagir avec une variĂ©tĂ© d’Ă©quipements d’alimentation.

Mon onduleur est le modĂšle BackUPS BX2200MI-FR de chez APC.

APC BackUPS BX2200MI-FR

Comme on peut le voir, il dispose d’une connectique USB-B qui permettra de le raccorder au serveur.

Installation et configuration

L’ensemble des fichiers de configuration de nut se trouve dans /etc/nut/.

  1. Installer nut :

    $ sudo apt install nut
    
  2. Connecter le cĂąble USB entre l’UPS et le serveur.

  3. Détecter la configuration du driver avec la commande nut-scanner :

    $ sudo nut-scanner -U
    Scanning USB bus.
    [nutdev1]
            driver = "usbhid-ups"
            port = "auto"
            vendorid = "051D"
            productid = "0002"
            product = "Back-UPS BX2200MI FW:378700G -302202G"
            serial = "9B2221A44594"
            vendor = "American Power Conversion"
            bus = "002"
    
  4. Configurer le driver Ă  la fin du fichier ups.conf en ajoutant la configuration dĂ©tectĂ©e Ă  l’Ă©tape prĂ©cĂ©dente. Il est possible de changer le nom entre les [].

  5. Démarrer le driver :

    $ sudo upsdrvctl start
    
  6. Activer et démarrer le service qui servira à gérer les drivers :

    $ sudo systemctl enable nut-driver-enumerator.service
    $ sudo systemctl start nut-driver-enumerator.service
    
  7. Modifier le mode du serveur nut dans le fichier nut.conf :

    MODE=standalone
    
  8. Il sera ensuite nĂ©cessaire d’ajouter un compte de service pouvant interagir avec le serveur nut. Pour cela, ajouter les lignes suivantes Ă  la fin du fichier upsd.users.

    [upsuser]
         password = password
         upsmon primary
         actions = SET
         instcmds = ALL
    
  9. Activer et démarrer le serveur nut :

    $ sudo systemctl enable nut-server.service
    $ sudo systemctl start nut-server.service
    
  10. Enfin, pour s’assurer que l’ensemble des services dĂ©marrent bien au dĂ©marrage du serveur, activer les targets suivantes :

    $ sudo systemctl enable nut.target
    $ sudo systemctl enable nut-driver.target
    

Récupération des données

Il est dĂ©sormais possible de rĂ©cupĂ©rer les donnĂ©es de l’UPS avec la commande suivante :

$ upsc upsname
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 10
battery.mfr.date: 2001/01/01
battery.runtime: 3816
battery.runtime.low: 120
battery.type: PbAc
battery.voltage: 27.3
battery.voltage.nominal: 24.0
device.mfr: American Power Conversion
device.model: Back-UPS BX2200MI
device.serial: 9B2221A44594
device.type: ups
driver.name: usbhid-ups
driver.parameter.bus: 002
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.product: Back-UPS BX2200MI FW:378700G -302202G
driver.parameter.productid: 0002
driver.parameter.serial: 9B2221A44594
driver.parameter.synchronous: auto
driver.parameter.vendor: American Power Conversion
driver.parameter.vendorid: 051D
driver.version: 2.8.0
driver.version.data: APC HID 0.98
driver.version.internal: 0.47
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
input.sensitivity: low
input.transfer.high: 295
input.transfer.low: 145
input.transfer.reason: input voltage out of range
input.voltage: 232.0
input.voltage.nominal: 230
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.firmware: 378700G -302202G 
ups.load: 0
ups.mfr: American Power Conversion
ups.mfr.date: 2022/05/29
ups.model: Back-UPS BX2200MI
ups.productid: 0002
ups.realpower.nominal: 1200
ups.serial: 9B2221A44594
ups.status: FSD OL
ups.test.result: Done and passed
ups.timer.reboot: 0
ups.timer.shutdown: -1
ups.vendorid: 051d

Surveillance

On peut dĂ©sormais configurer une surveillance de l’UPS afin d’ĂȘtre notifiĂ© lorsqu’il bascule sur la batterie, de son Ă©tat et Ă©ventuelle actions en cas de batterie faible (comme l’arrĂȘt du serveur).

Configuration

Ajouter la configuration de la surveillance dans le fichier upsmon.conf :

MONITOR upsname@localhost 1 upsduser password primary

ArrĂȘt

Il est Ă©galement possible d’ajuster la commande d’arrĂȘt :

SHUTDOWNCMD "/sbin/shutdown -h +0"

Notification

Nous allons configurer la notification vers un serveur Gotify.

Pour cela, ajuster la configuration comme ceci :

# Custom notify script to Gotify Server
NOTIFYCMD /usr/local/bin/nut-notify.sh

[...]

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

L’ajout de la mention +EXEC permet l’exĂ©cution de la commande NOTIFYCMD.

Puis, réccupérer le script nut-notify.sh :

#!/bin/bash

#----------------------------------------------------------------------------------------
# UPS-APC-BX1500M-LM60
# Version: 0.1
# 
# WebSite:
# https://github.com/pablomenino/UPS-APC-BX1500M-LM60
# 
# Copyright © 2020 - Pablo Meniño <pablo.menino@gmail.com>
#----------------------------------------------------------------------------------------

#----------------------------------------------------------------------------------------
# Install UPS-APC-BX1500M-LM60

# Change URL and Token
curl -X POST "https://localhost/message?token=XXXXXXX" \
 -F "title=UPS Notify" \
 -F "message=$NOTIFYTYPE" \
 -F "priority=10"

Il faudra penser Ă  ajuster l’URL pour correspondre Ă  votre serveur Gotify.

Enfin, rendre le script exécutable :

$ sudo chmod +x /usr/local/bin/nut-notify.sh

Vous recevrez maintenant des notifications comme celles-ci :

NUT & notification Gotify

Intégration dans Home Assistant

On peut aussi intégrer les données du serveur NUT dans une instance Home Assistant afin de disposer des données de celui-ci

Pour cela :

  1. Aller dans ParamĂštres > Appareils et Services.

  2. En bas à droite, cliquer sur Ajouter une intégration.

  3. Dans la liste, sélectionner Network UPS Tools (NUT).

  4. Vous devriez pouvoir laisser les valeurs d’hĂŽte et de port par dĂ©faut. Renseigner le nom d’utilisateur et le mot de passe configurĂ© plus haut. Valider. NUT & Home Assistant - configuration

  5. Vous pouvez ajouter l’appareil Ă  une piĂšce en particulier, et cliquer sur Terminer.

    NUT & Home Assistant - configuration

L’ensemble des entitĂ©s devrait remonter automatiquement :

NUT & Home Assistant - informations

Sources