Onduleur 'Eaton Protection Station 800 USB'
Onduleur “Eaton Protection Station 800 USB” sur serveur Debian pour protéger des équipements de coupure de courant et/ou de surtension pouvant intervenir lorsque les appareils sont en fonctionnement.
Onduleur Eaton Protection Station 800 USB
Matériel
No | Eaton Protection Station - 650/800 |
---|---|
7 | 4 prises filtrées. |
8 | 4 prises secourues par batterie. |
9 | Voyant allumé, protection anti-surtensions active sur les 8 prises. |
10 | Voyant allumé, défaut de l’Alimentation Sans Interruption. |
11 | Bouton de mise en service ou d’arrêt des prises secourues. |
12 | Disjoncteur de protection. |
Network UPS Tools (NUT)
Nut (Network UPS Tools) est un logiciel linux de surveillance des onduleurs. Il est disponible sur la majorité des distributions et permet notamment, pour les onduleurs le supportant, d’automatiquement éteindre proprement un serveur lorsque la batterie de l’onduleur arrive à terme. Nous allons voir l’installation sur une distribution debian.
NUT est un ensemble d’outils permettant de monitorer un système relié à un ou des onduleurs.Il se compose de plusieurs éléments :
- le démon nut lancé au démarrage du système
- le démon upsd qui permet d’interroger l’onduleur, il est lancé sur le PC relié à l’onduleur
- le démon upsmon qui permet de monitorer et lancer les commandes nécessaires sur le réseau ondulé (arrêt de machines …)
- différents programmes pour envoyer des commandes manuellement à l’onduleur : upsc, upsdrvctl …
upsd peut communiquer avec plusieurs onduleurs si nécessaire.
upsmon interroge à intervalle régulier la machine du réseau sur laquelle est lancée upsd.
Installer NUT et branchement
Installez nut, les paquets supplémentaires seront automatiquement installés :
1
sudo apt install nut -y
Paquet virtuel qui dépend de nut-client et nut-server
nut-client contient entre autres les exécutables upsc, upscmd, upsmon
nut-server contient entre autre upsd, upsdrvctl
Connecter un câble USB-B entre l’onduleur et un port USB du serveur
Relever le périphérique: lsusb
1
Bus 003 Device 002: ID 0463:ffff MGE UPS Systems UPS
Vérifier que le fichier appartient bien au groupe nut: ls -l /dev/bus/usb/003/002
1
crw-rw-r-- 1 root nut 189, 257 22 sept. 15:58 /dev/bus/usb/003/002
Pilote de l’onduleur (ups.conf)
Communication avec l’onduleur, choisir le driver et le port , ce qui fait dans le fichier /etc/nut/ups.conf. Chaque onduleur doit être défini sous la forme
1
2
3
4
[upsname]
driver = <drivername>
port = <portname>
desc = "Commentaire"
On peut mettre auto
pour le port et le champ desc
pour mettre une description plus complète
Le fichier /usr/share/nut/driver.list contient une liste d’onduleurs et le driver qu’il faut utiliser.
On peut aussi tester la commande sudo nut-scanner
, qui renvoie un bloc de configuration auto-detecté
1
2
3
4
5
6
7
8
9
10
11
12
13
Scanning USB bus.
No start IP, skipping NUT bus (old connect method)
Scanning NUT bus (avahi method).
Failed to create client: Daemon not running
[nutdev1]
driver = "usbhid-ups"
port = "auto"
vendorid = "0463"
productid = "FFFF"
product = "Protection Station"
serial = "AN2E49008"
vendor = "EATON"
bus = "003"
On ne tient pas compte des erreurs car le service n’est pas lancé
Utilisation du driver “usbhid-ups”
1
sudo nano /etc/nut/ups.conf
Ajouter ce qui suit en fin de fichier
1
2
3
4
[eaton800]
driver = usbhid-ups
port = auto
desc = "Eaton Protection Station 800"
Configuration daemon
Il sert à mettre les informations de l’onduleur à disposition des clients.
Lancement via un service (nut.conf)
Dans le mode standalone, l’onduleur est relié à la machine actuelle (serveur).
1
sudo nano /etc/nut/nut.conf
1
MODE=standalone
On démarre et active le service
1
sudo systemctl enable nut-server --now
Utilisateurs (upsd.users)
Il faut définir (au moins) un utilisateur dans upsd car une authentification sera nécessaire pour effectuer certaines commandes, notamment celles d’upscmd qui permettent de contrôler l’onduleur (bip, extinction etc).
1
sudo nano /etc/nut/upsd.users
1
2
3
4
5
6
7
# 1 seul utilisateur "eaton" avec tous les droits !
[admin-eaton]
password = mypass
actions = SET
actions = FSD
instcmds = ALL
upsmon master
password
Définir le mot de passe pour cet utilisateur.
actions
Permettre à l’utilisateur de faire certaines choses avec upsd. Pour spécifier plusieurs actions, utilisez plusieurs instances du champ actions. Les actions valides sont :
- SET
modifier la valeur de certaines variables de l’UPS - FSD
mettre le drapeau d’arrêt forcé dans l’UPS. Ceci est équivalent à une situation “sur batterie + batterie basse” pour la surveillance.
instcmds
Laissez un utilisateur lancer des commandes instantanées spécifiques. Utilisez “ALL” pour accorder automatiquement toutes les commandes. Pour spécifier plusieurs commandes, utilisez plusieurs instances du champ instcmds. Pour la liste complète de ce que prend en charge votre UPS, utilisez upscmd -l
Le fichier cmdvartab fourni avec la distribution contient une liste de la plupart des noms de commande connus.
upsmon
Ajouter les actions nécessaires pour un processus ascendant au travail. C’est soit réglé à “master” ou “slave”.
Moniteur automatique (upsmon.conf)
upsmon est le composant qui va surveiller l’état de l’onduleur, et lancer des actions selon l’état (sur batterie, batterie critique, etc).
On définit au moins 1 onduleur à surveiller :
1
MONITOR eaton800@localhost 1 admin-eaton mypass master
Le “1” correspond au nombre d’alims qui sont alimentés par l’onduleur en question ; pour la plupart des pcs standard, qui n’ont qu’une seule alim, ce sera 1.
On peut toutefois entrer “0” si le pc surveille l’onduleur mais n’est pas branché dessus ; il effectuera les actions d’alerte (mail etc.) mais ne s’éteindra pas en cas de batterie critique. En ce cas, il faut aussi définir la variable
MINSUPPLIES
à 0 (pour déclarer que le poste peut fonctionner sans aucun onduleur).
En général, un poste branché sur l’onduleur ET qui est capable de communiquer avec lui sera considéré comme master
Un poste branché sur l’onduleur mais sans communication de données sera considéré comme slave.
Sur le serveur
1
sudo nano /etc/nut/upsmon.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# On surveille l'onduleur qui est directement relié (master)
MONITOR eaton800@localhost 1 admin-eaton mypass master
# Notre serveur n'a pas d'alimentation redondante = 1
MINSUPPLIES 1
# Commande d'arrêt du serveur en cas de fin d'autonomie
SHUTDOWNCMD /usr/sbin/poweroff
# Commande lancée quand quelque chose se passe
NOTIFYCMD /sbin/upssched
# Interval entre deux interrogations de upsd
POLLFREQ 5
# Intervalle entre deux interrogations de upsd en mode "batterie"
POLLFREQALERT 5
# Temps d'attente pour la déconnexion des upsmon esclaves
HOSTSYNC 15
# Temps pendant lequel on tolère la non-réponse d'un onduleur, multiple de POLLFREQ
DEADTIME 15
# Fichier d'état
POWERDOWNFLAG /etc/killpower
# Intervalle de 1/2 journée, pour répéter le message de "remplacement de batteries - NOTIFY_REPLBATT"
RBWARNTIME 43200
# Interval de 5 minutes, pour répéter le message de "onduleur injoignable - NOTIFY_NOCOMM"
NOCOMMWARNTIME 300
# Intervalle entre la "notification d'arrêt - NOTIFY_SHUTDOWN" et le lancement de SHUTDOWNCMD
FINALDELAY 5
# Actions spécifiques autres que par défaut (SYSLOG et WALL) réalisées en fonction de l'état retourné par l'onduleur
NOTIFYFLAG COMMBAD EXEC
NOTIFYFLAG ONLINE SYSLOG+EXEC
NOTIFYFLAG ONBATT SYSLOG+EXEC
NOTIFYFLAG LOWBATT EXEC
NOTIFYFLAG REPLBATT SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN EXEC
NOTIFYFLAG COMMOK IGNORE
On remarque que, à part l’arrêt du système sur fin des batteries qui est géré par upsmon, toutes les notifications le sont par upssched.
Distributeur d’évènements (/etc/nut/upssched.conf)
L’utilitaire upssched permet de « temporiser » les actions liées aux évènements générés par upsmon.
C’est surtout intéressant lorsque des évènements furtifs se produisent (microcoupures) fichier /etc/nut/upssched.conf.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Script lancé par upssched pour gérer les évènements et les timers associés
CMDSCRIPT /etc/nut/upssched-cmd
# Fichier pour noter les états internes de upssched
PIPEFN /var/run/nut/upssched.pipe
# Fichier de lock pour éviter un conflit en cas de notification de deux évènements simultanés
LOCKFN /var/run/nut/upssched.lock
# En cas de perte de communication avec l'onduleur
AT COMMBAD * EXECUTE perte-liaison
# En cas de retour secteur, on stope la minuterie et on notifie
AT ONLINE * CANCEL-TIMER attente-retour-secteur
AT ONLINE * EXECUTE charge-sur-secteur
# En cas de perte de secteur, on se laisse au maximum 20 minutes avant d'agir et on notifie
AT ONBATT * START-TIMER attente-retour-secteur 1200
AT ONBATT * EXECUTE charge-sur-batterie
# En cas de niveau de batteries trop bas
AT LOWBATT * EXECUTE batteries-vides
# En cas de fin de vie des batteries on sera prévenu
AT REPLBATT * EXECUTE batteries-hs
# En cas d'arrêt (fin des 20 minutes ou fin d'autonomie), on notifie.
AT SHUTDOWN * EXECUTE arret-en-cours
Prise en charge des évènements (script /etc/nut/upssched-cmd)
Fichier /etc/nut/upssched-cmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/bash
# Fichier /etc/nut/upssched-cmd
#
# Début du programme
#
if [ $# = 0 ]
then
echo "Il faut au minimum un argument !"
exit 0
fi
#
# Analyse argument
#
case $1 in
"charge-sur-batterie")
sujet="L'onduleur a basculé sur les batteries"
message="L'arrêt système sera demandé si le secteur ne revient pas."
;;
"attente-retour-secteur")
sujet="Onduleur - Fin d'attente de retour secteur"
message="Cela fait trop longtemps que le secteur est absent...Un arrêt forcé est en cours !"
# Demande d'arrêt forcé (force shut down)
/sbin/upsmon -c fsd
;;
"charge-sur-secteur")
sujet="Onduleur - retour secteur"
message="L'onduleur est revenu sur secteur."
;;
"batteries-vide")
sujet="Onduleur - Batteries vides"
message="Les batteries sont vides, l'arrêt est imminent."
;;
"arret-en-cours")
sujet="Onduleur - Arrêt en cours du serveur"
message="Le système est en cours d'arrêt."
;;
"perte-liaison")
sujet="Onduleur - Perte de liaison avec l'onduleur"
message="La communication avec l'onduleur est interrompue."
;;
"batteries-hs")
sujet="Onduleur - URGENT - batteries HS"
message="Les batteries sont à remplacer d'urgence."
;;
*)
sujet="Onduleur - Commande inconnue ..."
message="Une commande inconnue a été envoyée par l'onduleur...La commande est : $comment"
;;
esac
# Envoi d'une notification
curl \
-H "X-Email: ntfy@cinay.eu" \
-H "Title: $sujet" \
-H "Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Priority: high" \
-H "Tags: red_circle,warning" \
-d "$message" \
https://noti.rnmkcy.eu/yan_infos
Rendre exécutable le script
1
chmod +x /etc/nut/upssched-cmd
Redémarrer les services
1
2
systemctl restart nut-server.service
systemctl restart nut-client.service
Status
1
systemctl status nut-server.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
● nut-server.service - Network UPS Tools - power devices information server
Loaded: loaded (/lib/systemd/system/nut-server.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-09-22 17:33:27 CEST; 59s ago
Main PID: 30540 (upsd)
Tasks: 1 (limit: 38133)
Memory: 636.0K
CPU: 5ms
CGroup: /system.slice/nut-server.service
└─30540 /lib/nut/upsd -F
sept. 22 17:33:27 cwwk nut-server[30540]: fopen /run/nut/upsd.pid: No such file or directory
sept. 22 17:33:27 cwwk nut-server[30540]: Could not find PID file '/run/nut/upsd.pid' to see if previous upsd instance is already running!
sept. 22 17:33:27 cwwk nut-server[30540]: listening on 127.0.0.1 port 3493
sept. 22 17:33:27 cwwk nut-server[30540]: listening on ::1 port 3493
sept. 22 17:33:27 cwwk upsd[30540]: listening on 127.0.0.1 port 3493
sept. 22 17:33:27 cwwk upsd[30540]: listening on ::1 port 3493
sept. 22 17:33:27 cwwk nut-server[30540]: Connected to UPS [eaton800]: usbhid-ups-eaton800
sept. 22 17:33:27 cwwk upsd[30540]: Connected to UPS [eaton800]: usbhid-ups-eaton800
sept. 22 17:33:27 cwwk nut-server[30540]: Running as foreground process, not saving a PID file
sept. 22 17:33:27 cwwk upsd[30540]: Running as foreground process, not saving a PID file
1
systemctl status nut-client.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
● nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller
Loaded: loaded (/lib/systemd/system/nut-monitor.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-09-03 21:11:10 CEST; 9s ago
Process: 1486 ExecStart=/sbin/upsmon (code=exited, status=0/SUCCESS)
Main PID: 1488 (upsmon)
Tasks: 2 (limit: 4915)
Memory: 1.1M
CGroup: /system.slice/nut-monitor.service
├─1487 /lib/nut/upsmon
└─1488 /lib/nut/upsmon
sept. 03 21:11:10 srvxo systemd[1]: Starting Network UPS Tools - power device monitor and shutdown controller...
sept. 03 21:11:10 srvxo upsmon[1486]: fopen /var/run/nut/upsmon.pid: No such file or directory
sept. 03 21:11:10 srvxo upsmon[1486]: Using power down flag file /etc/killpower
sept. 03 21:11:10 srvxo upsmon[1486]: UPS: eaton@localhost (master) (power value 1)
sept. 03 21:11:10 srvxo upsmon[1487]: Startup successful
sept. 03 21:11:10 srvxo systemd[1]: nut-monitor.service: Can't open PID file /run/nut/upsmon.pid (yet?) after start: No such file or di
sept. 03 21:11:10 srvxo systemd[1]: nut-monitor.service: Supervising process 1488 which is not our child. We'll most likely not notice
sept. 03 21:11:10 srvxo systemd[1]: Started Network UPS Tools - power device monitor and shutdown controller.
sept. 03 21:11:10 srvxo upsmon[1488]: Init SSL without certificate database
vérifier si les daemons sont lancés
1
ps auxf |grep ups
1
2
3
4
5
root 1493 0.0 0.0 6092 760 pts/0 S+ 21:13 0:00 \_ grep ups
nut 1370 1.5 0.0 5280 2152 ? Ss 20:49 0:22 /lib/nut/usbhid-ups -a eaton
nut 1419 0.0 0.0 5268 356 ? Ss 21:03 0:00 /lib/nut/upsd
root 1487 0.0 0.0 6924 2440 ? Ss 21:11 0:00 /lib/nut/upsmon
nut 1488 0.0 0.0 10768 3988 ? S 21:11 0:00 \_ /lib/nut/upsmon
Onduleur connecté ?
1
upsc eaton800@localhost
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 20
battery.runtime: 1875
battery.type: PbAc
device.mfr: EATON
device.model: Protection Station 800
device.serial: AN2E49008
device.type: ups
driver.name: usbhid-ups
[...]
ups.mfr: EATON
ups.model: Protection Station 800
ups.power.nominal: 800
ups.productid: ffff
ups.serial: AN2E49008
ups.status: OL
ups.timer.shutdown: -1
ups.timer.start: -1
ups.vendorid: 0463
Pour éviter l’affichage du message “Init SSL without certificate database”
1
upsc eaton800@localhost 2>&1 | grep -v '^Init SSL'
Pour afficher un paramètre
1
upsc eaton800@localhost ups.status 2>&1 | grep -v '^Init SSL'
Définitions des codes renvoyés par ups.status
Abrégé | Définition |
---|---|
OL | En ligne (pas de coupure de courant) (à l’opposé de OB - sur batterie) |
LB | Batterie faible |
SD | Shutdown load, arrêt en cours |
CP | Câble d’alimentation |
CTS | Clear to Send. Reçu de l’UPS. |
RTS | Ready to Send. Envoyé par le PC. |
DCD | Détection de porteuse de données. Reçu de l’UPS. |
RNG | Ring indicateur. Reçu de l’UPS. |
DTR | Terminal de données prêt. Envoyé par le PC. |
ST | Envoyer un BREAK sur la ligne de données d’émission |
Tester l’envoi notification
Le plus simple est de débrancher la liaison USB entre l’onduleur et le serveur, puis de le rebrancher
Un message devrait parvenir au destinataire de la notification…
Envoyer une commande
Liste des commandes disponibles
1
upscmd -l eaton800@localhost
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Instant commands supported on UPS [eaton]:
beeper.disable - Disable the UPS beeper
beeper.enable - Enable the UPS beeper
beeper.mute - Temporarily mute the UPS beeper
beeper.off - Obsolete (use beeper.disable or beeper.mute)
beeper.on - Obsolete (use beeper.enable)
load.off - Turn off the load immediately
load.off.delay - Turn off the load with a delay (seconds)
load.on - Turn on the load immediately
load.on.delay - Turn on the load with a delay (seconds)
shutdown.return - Turn off the load and return when power is back
shutdown.stayoff - Turn off the load and remain off
shutdown.stop - Stop a shutdown in progress
Envoyer une commande
1
upscmd -u <username> -p <password> <system> <command>
Liens
- Eaton Protection Station - 650/800 - Manuel d’installation et d’utilisation
- Utiliser un onduleur sur GNU/Linux
- Comment configurer apcupsd pour les onduleurs Eaton UPS sur Debian Linux
- Onduleur avec apcupsd sous Linux, Windows et Jeedom
- Gestion D’un Onduleur Sur Debian Avec Nut
- Gestion des onduleurs sous Linux : NUT
- Mise en place onduleur Eaton Ellipse ECO avec retour info et script de fermeture
- Monitorer son serveur avec Grafana et Prometheus - Surveiller son onduleur et détecter une perte de courant
- Configurer et surveiller un onduleur avec NUT
- Piloter un onduleur sous linux le retour
- NUT – parler à son UPS – notifications mails/push et arrêt propre du système
- Notification push sous Linux Debian comme un simple mail!