Post

🔌đŸȘ«Onduleur 'Eaton Protection Station 800 USB'

🔌đŸȘ«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

eaton

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:

1
lsusb
1
Bus 003 Device 002: ID 0463:ffff MGE UPS Systems UPS

Vérifier que le fichier appartient bien au groupe nut:

1
ls -l /dev/bus/usb/003/002
1
crw-rw-r-- 1 root nut 189, 257  5 mai   15:50 /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 -U, qui renvoie un bloc de configuration auto-detecté

1
2
3
4
5
6
7
8
9
10
11
12
13
Scanning USB bus.
[nutdev1]
	driver = "usbhid-ups"
	port = "auto"
	vendorid = "0463"
	productid = "FFFF"
	product = "Protection Station"
	serial = "AN2E49008"
	vendor = "EATON"
	bus = "003"
	device = "002"
	busport = "001"
	###NOTMATCHED-YET###bcdDevice = "0100"

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
5
6
[eaton]
  driver = usbhid-ups
  port = auto
  vendorid = 0463
  productid = FFFF
  desc = "Onduleur Eaton Protection Station 800"

Configuration daemon

Il sert à mettre les informations de l’onduleur à disposition des clients.

Lancement via un service (nut.conf)

Le fichier nut.conf permet de déterminer le comportement du démon NUT. Il ne contient que le paramÚtre MODE qui peut prendre les valeurs suivantes :

  • none : C’est la valeur par dĂ©faut aprĂšs l’installation du paquet, elle indique que NUT n’a pas Ă©tĂ© configurĂ©.
  • standalone : * Dans ce mode, l’onduleur est reliĂ© Ă  la machine actuelle. * Le monitorage de l’onduleur est effectuĂ© depuis cette mĂȘme machine. * Le dĂ©mon nut doit lancer upsd et upsmon (en mode “master”).
  • netserver : * Dans ce mode, l’onduleur est reliĂ© Ă  la machine actuelle. * La gestion de l’onduleur est effectuĂ©e depuis un poste client sur le rĂ©seau. * Le dĂ©mon nut doit lancer upsd et upsmon (en mode serveur, c’est Ă  dire en tant que “master”).
  • netclient :
    • Dans ce mode, l’onduleur n’est pas reliĂ© Ă  la machine actuelle.
    • La gestion de l’onduleur est rĂ©alisĂ©e depuis la machine actuelle vers la machine Ă  laquelle est connectĂ©e l’onduleur via le rĂ©seau.
    • Le dĂ©mon nut doit lancer uniquement upsmon (en mode client, c’est Ă  dire en tant que “slave”).

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) les paramĂštres pour l’administrateur et au moins un utilisateur de type “master” 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
8
[admin]
    password = adminpass
    actions = SET
    instcmds = ALL

[upseaton]
    password  = userpass
    upsmon master

password
Définir le mot de passe pour cet utilisateur.

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).

La déclaration des différents démons upsmon serveurs à écouter et de la puissance nécessaire au réseau ondulé se fait grùce aux options suivantes :

  • MONITOR <system> <powervalue> <username> <password> <type> * <system> : dĂ©finit le nom d’un onduleur et de la machine qui le contrĂŽle. Par dĂ©faut, l’onduleur est supposĂ© accessible depuis la machine actuelle (localhost). * <powervalue> : un entier qui dĂ©finit le nombre d’onduleurs contrĂŽlĂ©s. Sauf cas particulier, la valeur est supposĂ©e de 1. * <username> : le nom d’utilisateur utilisĂ© pour interroger upsd. Il doit ĂȘtre dĂ©finit dans le fichier upsd.users sur la machine qui contrĂŽle l’onduleur. * <password> : le mot de passe associĂ© Ă  l’utilisateur sur la machine qui contrĂŽle l’onduleur. * <type> : le type de monitorage tel que dĂ©finit dans le fichier upsd.users de la machine qui contrĂŽle l’onduleur.
  • MINSUPPLIES : un entier qui dĂ©finit le nombre d’onduleurs nĂ©cessaires pour que le systĂšme fonctionne ; en gĂ©nĂ©ral, 1 onduleur.

On définit au moins 1 onduleur à surveiller :

1
2
3
4
# On surveille l'onduleur qui est directement relié (master)
MONITOR eaton@localhost 1 upseaton mypass master
# Commande lancée quand quelque chose se passe
NOTIFYCMD /sbin/upssched

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).

Lorsque le nombre d’onduleurs nĂ©cessaires pour maintenir le systĂšme (MINSUPPLIES) devient infĂ©rieur au nombre d’onduleurs en statut “sur secteur” (ONLINE) ou “sur batterie” (ONBATT) sans ĂȘtre en statut “batterie faible” (LOWBATT), le rĂ©seau ondulĂ© entre dans un Ă©tat critique. En d’autres termes, le dernier onduleur pour maintenir le systĂšme vient de passer en statut "batterie faible" (LOWBATT), et l’alimentation va donc cesser prochainement : le but est donc d’éteindre proprement le systĂšme pour Ă©viter une perte de donnĂ©es, il n’y a plus le temps d’attendre que le courant revienne !
À ce moment lĂ , les paramĂštres suivants seront utilisĂ©s :

  • FINALDELAY : dĂ©lai en secondes entre la notification aux utilisateurs et le lancement de la commande d’arrĂȘt du systĂšme.
  • HOSTSYNC : dĂ©lai laissĂ© aux autres upsmon sur les postes clients pour s’arrĂȘter correctement, au delĂ  de ce dĂ©lai l’upsmon serveur est stoppĂ© et ne rĂ©pond plus aux clients.
  • SHUTDOWNCMD : dĂ©finit la commande qui sera exĂ©cutĂ©e pour Ă©teindre la machine actuelle.
  • POWERDOWNFLAG : dĂ©finit le fichier qui sera Ă©crit juste avant la procĂ©dure d’arrĂȘt. Il est possible de tester la prĂ©sence de ce fichier dans vos scripts init pour accĂ©lĂ©rer la phase d’arrĂȘt.

Pour permettre Ă  l’upsmon client d’interroger le dĂ©mon upsmon serveur ou le dĂ©mon upsd et obtenir des informations “fraiches” sur l’état de (ou des) l’onduleur(s), il faut vĂ©rifier les paramĂštres suivants, et les adapter en fonction du pilote utilisĂ© :

  • POLLFREQ : intervalle de temps avant rafraĂźchissement des donnĂ©es sur l’état de l’onduleur.
  • POLLFREQALERT : intervalle de temps avant rafraichissement une fois l’onduleur en statut “sur batterie” (ONBATT). Doit ĂȘtre infĂ©rieur ou Ă©gal Ă  POLLFREQ.
  • DEADTIME : dĂ©lai maximal pendant lequel un onduleur peut ĂȘtre dĂ©clarĂ© “absent” avant d’ĂȘtre dĂ©clarĂ© “mort”. PassĂ© ce dĂ©lai, si l’onduleur Ă©tait prĂ©cĂ©demment en statut “sur batterie” (ONBATT) il sera considĂ©rĂ© en statut “batterie faible” (LOWBATT), ce qui peut causer l’arrĂȘt du systĂšme. Le dĂ©lai doit ĂȘtre un multiple de POLLFREQ et POLLFREQALERT.
  • NOCOMMWARNTIME : dĂ©lai d’attente avant notification de la perte de communication avec l’onduleur.
  • RBWARNTIME : lorsqu’un onduleur indique un changement de batterie, une notification sera envoyĂ©e toutes les RBWARNTIME secondes.
  • NOTIFYCMD <command>: upsmon appelle cela pour envoyer des messages lorsque des choses se produisent, vous pouvez utiliser le programme upssched comme votre NOTIFYCMD

Sur le serveur reliĂ© Ă  l’onduleur

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
# On surveille l'onduleur qui est directement relié (master)
MONITOR eaton@localhost 1 upseaton mot_passe_upseaton master
# Notre serveur n'a pas d'alimentation redondante
MINSUPPLIES 1
# Commande lancée quand quelque chose se passe
SHUTDOWNCMD "/sbin/shutdown -h +0"
# 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"
# OFFDURATION - mettre l’état « OFF » en vigueur s’il persiste pendant plusieurs secondes
OFFDURATION 30
# un onduleur indique un changement de batterie, une notification sera envoyée toutes les `RBWARNTIME` secondes.
RBWARNTIME 43200
#  délai d'attente avant notification de la perte de communication avec l'onduleur.
NOCOMMWARNTIME 300
# dĂ©lai en secondes entre la notification aux utilisateurs et le lancement de la commande d'arrĂȘt du systĂšme.
FINALDELAY 5
# Alternativement, vous pouvez utiliser le programme upssched comme votre NOTIFYCMD
# Commande lancée quand quelque chose se passe
NOTIFYCMD /sbin/upssched

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
sudo nano /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 /usr/bin/upssched-cmd
# Fichier pour noter les états internes de upssched
PIPEFN /run/nut/upssched/upssched.pipe
# Fichier de lock pour éviter un conflit en cas de notification de deux évÚnements simultanés
LOCKFN /run/nut/upssched/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 /usr/bin/upssched-cmd)

Fichier /usr/bin/upssched-cmd

1
sudo nano /usr/bin/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
#! /bin/sh

# Ce script doit ĂȘtre appelĂ© par upssched via la directive CMDSCRIPT.
#
# 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 : $1" 
		message="Une commande inconnue a été envoyée par l'onduleur..."
	;;

esac


# Envoi d'une notification
curl  --ipv4 \
-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://ntfy.rnmkcy.eu/yan_infos

Redémarrer les services

1
sudo systemctl restart nut-server

vérifier si les daemons sont lancés

1
ps auxf |grep ^nut
1
2
nut         2586  0.0  0.0  14200  2152 ?        Ss   15:59   0:03 /usr/lib/nut/usbhid-ups -a eaton
nut         5068  0.0  0.0   7572  3720 ?        Ss   17:48   0:00 /lib/nut/upsd -F

Onduleur connecté ?

upsc permet de s’adresser Ă  un dĂ©mon upsd.

1
2
# pour lister tous les onduleurs dĂ©tectĂ©s sur host ; si l’host n’est pas spĂ©cifiĂ©, c’est localhost.
upsc -L

Liste

1
2
Init SSL without certificate database
eaton: Onduleur Eaton Protection Station 800

Liste des paramĂštres

1
upsc eaton@localhost

Pour Ă©viter l’affichage du message “Init SSL without certificate database”, ajouter 2>&1 | grep -v '^Init SSL' Ă  la commande
Exemple: upsc eaton@localhost 2>&1 | grep -v '^Init SSL'

Les paramĂštres

Etendre Réduire...
battery.charge: 100
battery.charge.low: 20
battery.runtime: 1082
battery.type: PbAc
device.mfr: EATON
device.model: Protection Station 800
device.serial: AN2E49008
device.type: ups
driver.debug: 0
driver.flag.allow_killpower: 0
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.productid: FFFF
driver.parameter.synchronous: auto
driver.parameter.vendorid: 0463
driver.state: updateinfo
driver.version: 2.8.1
driver.version.data: MGE HID 1.46
driver.version.internal: 0.52
driver.version.usb: libusb-1.0.28 (API: 0x100010a)
input.transfer.high: 264
input.transfer.low: 184
outlet.1.desc: PowerShare Outlet 1
outlet.1.id: 2
outlet.1.status: on
outlet.1.switchable: no
outlet.2.desc: PowerShare Outlet 2
outlet.2.id: 3
outlet.2.status: on
outlet.2.switchable: no
outlet.desc: Main Outlet
outlet.id: 1
outlet.power: 25
outlet.switchable: no
output.frequency.nominal: 50
output.voltage: 230.0
output.voltage.nominal: 230
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.delay.start: 30
ups.firmware: 1.13
ups.load: 14
ups.mfr: EATON
ups.model: Protection Station 800
ups.power.nominal: 800
ups.productid: ffff
ups.realpower: 90
ups.serial: AN2E49008
ups.status: OL
ups.timer.shutdown: -1
ups.timer.start: -1
ups.vendorid: 0463

Pour afficher un paramĂštre

1
upsc eaton@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 eaton@localhost
Etendre Réduire...
Commandes instantanĂ©es prises en charge sur l’onduleur [eaton] :

beeper.disable - DĂ©sactiver l’avertisseur UPS
beeper.enable - Activez le beeper UPS
beeper.mute - Couper temporairement le bip UPS
beeper.off - ObsolĂšte (utilisez beeper.disable ou beeper.mute)
beeper.on - ObsolĂšte (utilisez beeper.enable)
driver.killpower - Dites au dĂ©mon du conducteur de lancer l’arrĂȘt de l’onduleur ; il doit ĂȘtre dĂ©verrouillĂ© avec l’option driver.flag.allow_killpower ou un paramĂštre variable
driver.reload - Recharger la configuration du pilote en cours d’exĂ©cution Ă  partir du systĂšme de fichiers (ne fonctionne que pour les modifications dans certaines options)
driver.reload-or-error - Recharger la configuration du pilote en cours d’exĂ©cution Ă  partir du systĂšme de fichiers (ne fonctionne que pour les modifications dans certaines options) ; renvoyer une erreur si quelque chose a changĂ© et n’a pas pu ĂȘtre appliquĂ© en direct (afin que l’appelant puisse le redĂ©marrer avec de nouvelles options)
driver.reload-or-exit - Recharger la configuration du pilote en cours d’exĂ©cution Ă  partir du systĂšme de fichiers (ne fonctionne que pour les modifications dans certaines options) ; quitter le pilote en cours si quelque chose a changĂ© et n’a pas pu ĂȘtre appliquĂ© en direct (afin que l’infrastructure de gestion des services puisse la redĂ©marrer avec de nouvelles options)
load.off - Éteignez immĂ©diatement la charge
load.off.delay - ArrĂȘtez la charge avec un dĂ©lai (secondes)
load.on - Allumez immédiatement la charge
load.on.delay - Active la charge avec un délai (secondes)
shutdown.return - Éteignez la charge et revenez lorsque le courant est de retour
shutdown.stayoff - Éteignez la charge et restez Ă©teint
shutdown.stop - ArrĂȘter un arrĂȘt en cours

Envoyer une commande

1
upscmd -u <username> -p <password> <system> <command>

Liens

Cet article est sous licence CC BY 4.0 par l'auteur.