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.

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/.
-
Installer
nut:$ sudo apt install nut -
Connecter le cĂąble USB entre l’UPS et le serveur.
-
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" -
Configurer le driver Ă la fin du fichier
ups.confen ajoutant la configuration dĂ©tectĂ©e Ă l’Ă©tape prĂ©cĂ©dente. Il est possible de changer le nom entre les[]. -
Démarrer le driver :
$ sudo upsdrvctl start -
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 -
Modifier le mode du serveur
nutdans le fichiernut.conf:MODE=standalone -
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 fichierupsd.users.[upsuser] password = password upsmon primary actions = SET instcmds = ALL -
Activer et démarrer le serveur
nut:$ sudo systemctl enable nut-server.service $ sudo systemctl start nut-server.service -
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
- upsname : Nom de l’UPS.
- localhost : HĂŽte du serveur
nut, dans notre cas c’est le serveur lui-mĂȘme, donclocalhost. Il est sinon possible de renseigner un serveur distant et son port. - 1 : Le nombre d’alimentations du serveur.
- upsduser : Nom de l’utilisateur configurĂ© plus haut.
- password : Son mot de passe.
- primary : Le mode utilisĂ© lorsque le serveur est directement branchĂ© sur l’UPS.
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 :

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 :
-
Aller dans
ParamĂštres>Appareils et Services. -
En bas Ă droite, cliquer sur
Ajouter une intégration. -
Dans la liste, sélectionner
Network UPS Tools (NUT). -
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.

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

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