Accueil / Articles PiApplications. / Linux.

Eaton Ellipse Max 850 sur OpenSuse.

Cet article montre comment installer et configurer un onduleur Ellipse Max 850 (EATON ou MGE) sur OpenSuse. La version de la distribution au moment de la rédaction de cet article est 42.3 (LEAP). Il devrait être assez aisé de transposer son contenu à d'autres types d'onduleurs voire à d'autres distributions Linux. Par exemple, cela, été réalisé pour un onduleur APC BR900G-FR (Back UPS Pro) sur la même configuration Linux (on utilise le même pilote USB usbhid-ups).

Le problème avec la plupart des onduleurs courants comme ceux de Merlin-Guérin (MGE), Eaton, PowerWare et autres APC, c'est que rien n'est vraiment prévu pour les installer et les contrôler depuis une machine sous Linux. Fort heureusement, la plupart des matériels de ces marques sont compatibles avec le protocole NUT (Network UPS Tools). Ce protocole, au demeurant très simple, permet à un contrôleur d'émettre des commandes vers l'onduleur et d'en recevoir les compte rendus d'exécution. Ce protocole est conçu pour des échanges via le réseau en mode client-serveur. Il est donc nécessaire d'intercaler un "pilote USB" entre le programme serveur et l'onduleur lorsque ce dernier n'est pilotable que par un canal USB (cas des onduleurs Ellipse MAX de base). Partant de là, les étapes de création de cette machine contrôleur sont :

  1. Vérification de la visibilité de la connexion entre l'onduleur et la machine contrôleur ;
  2. Installation du paquet NUT ;
  3. Configuration des modules NUT (notamment la déclaration du pilote USB) ;
  4. Lancement du contrôleur ;
  5. Contrôle du fonctionnement.

Visibilité de la connexion USB.

La commande lsusb est chargée de cette vérification. Voici un exemple de ce qu'elle retourne :

Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 013 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 013 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 010 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 006 Device 002: ID 1058:1230 Western Digital Technologies, Inc. 
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 012 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 011 Device 002: ID 0463:ffff MGE UPS Systems UPS
Bus 011 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 04f9:01fb Brother Industries, Ltd 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 009 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 003: ID 1058:1021 Western Digital Technologies, Inc. Elements 2TB
Bus 002 Device 002: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

La 11ème ligne fait apparaître notre onduleur. Inutile d'aller plus loin tant que cette étape n'est pas réalisée.

Installation du paquet NUT.

En tant que root (ou avec les droits équivalents), tapez la commande zypper in nut. Une fois le paquet installé, vous pouvez vérifier avec Yast la présence des services nut-driver, nut-monitor et nut-server. Le premier service assure la communication physique entre la connexion USB de la machine contrôleur et l'onduleur, le second la télésurveillance de l'onduleur et enfin le dernier, la communication conforme au protocole NUT entre la machine contrôleur et un client distant via TCP/IP.

Configuration des modules NUT.

Avec la version considérée d'OpenSuse, les fichiers de configuration sont regroupés sur le répertoire /etc/ups. Les fichiers concernés sont successivement :

Ajouter dans le fichier ups.conf les lignes qui suivent :

[ellipse-max-850]
	driver = usbhid-ups
	port = auto
	desc = "EATON Ellipse MAX 850"

Puis assurez vous que dans le fichier upsd.conf se trouvent les lignes :
MAXAGE 15 et LISTEN 127.0.0.1 3493.

Déclarer le compte "maître" du contrôleur avec son mot de passe dans le fichier upsd.users (remplacer la série de x par votre mot de passe) :

[upsmaster]
    password = xxxxxxxxx
    upsmon master

Dans le fichier upsmon.conf ajouter la ligne MONITOR ellipse-max-850@localhost 1 rootnut xxxxxxxxx master. Notez que le nom que vous donnez ici à votre onduleur (ellipse-max-850) est celui qui sera attendu plus tard par la commande upsc.

Enfin, assurez vous que dans le fichier nut.conf le mode déclaré soit standalone : MODE=standalone.

Lancement du contrôleur.

La lancement du contrôleur se fait en lançant les 3 services nut-driver, nut-server et nut-monitor. Cela peut se faire et s'automatiser via la commande systemctl en mode console mais il est plus simple d'utiliser le choix "Gestionnaire des services" de Yast. Notez que le service nut-monitor ne peut pas s'activer car il se lance automatiquement au boot de la machine.

Contrôle du fonctionnement.

La commande upsc permet la vérification du fonctionnement de l'onduleur. Voici un exemple des traces produites par cette commande.

provence:/etc/ups # upsc ellipse-max-850
battery.charge: 100
battery.charge.low: 70
battery.runtime: 3268
battery.type: PbAc
device.mfr: EATON
device.model: Ellipse MAX 850
device.serial: ADFMxxxxA
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: no
driver.version: 2.7.4
driver.version.data: MGE HID 1.39
driver.version.internal: 0.41
input.sensitivity: normal
input.transfer.boost.low: 185
input.transfer.high: 285
input.transfer.low: 165
input.transfer.trim.high: 265
input.voltage.extended: no
outlet.1.desc: PowerShare Outlet 1
outlet.1.id: 2
outlet.1.status: on
outlet.1.switchable: no
outlet.desc: Main Outlet
outlet.id: 1
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: 5102AH
ups.load: 22
ups.mfr: EATON
ups.model: Ellipse MAX 850
ups.power.nominal: 850
ups.productid: ffff
ups.serial: ADFM2702A
ups.status: OL
ups.timer.shutdown: 0
ups.timer.start: 0
ups.vendorid: 0463

Cette commande renvoie les principales caractéristiques de l'onduleur à partir d'une communication avec ce dernier ce qui en valide le fonctionnement. Vous aurez peut-être noté (suivant votre installation initiale de la distribution) qu'avant ce travail, la barre de menu de KDE (ou de GNOME) affichait une horripilante icône clignotante signalant un défaut UPS. Après cette configuration, et, si les batteries de votre onduleur sont chargées, cette icône devrait avoir disparue.

Le protocole NUT distingue des variables d'état en lecture seule (par exemple le numéro de série de l'onduleur) et d'autres qu'il est possible de modifier (assez fréquemment les divers seuils comme celui de mise à l'arrêt de l'équipement protégé). Le fait qu'une variable soit en lecture seule ou non dépend de l'onduleur et non pas de son nom. Ainsi, une même variable sera modifiable sur un onduleur mais pas sur un autre. Sous Linux, la commande upsrw permet de modifier l'état des variables qui l'autorisent.

Compléments.

Si vous disposez d'un onduleur "compatible NUT", nous vous livrons gracieusement deux programmes Java (multi plates-formes) qui vous permettront de communiquer avec lui via le protocole NUT. Voici les deux paquets compressés qui contiennent ces programmes et leurs dépendances :

  1. piNUT.Tools-1.0.2.zip (MD5 : c71275be3e8cda34776baf0808407097);
  2. piNUT.Monitor-1.0.0.zip (MD5 : e7f57c3d7096b2b6b76c5e03ab86abfb).

Ces deux programmes sont des "clients" du serveur nut-server. A ce titre, ils peuvent être exécutés sur toute machine du réseau auquel est connecté la machine contrôleur.

La librairie piNUT.Tools.jar

Un fois le paquet compressé téléchargé, l'installation se résume à en décompresser le contenu sur un répertoire de votre choix sans en altérer la structure.

Ce programme se présente sous la forme d'un programme Java console interactif. La console propose une invite à frapper des commandes. Ces commandes sont traduites sous formes d'instructions à l'onduleur qui, en réponse, retourne un résultat qui est alors affiché sur le terminal.

Si le répertoire courant est celui où vous avez décompressé le paquet, le programme se lance via une commande du type java -cp ./piNUT.Tools.jar eu.piapplications.nut.tools.Program.

Les tableaux qui suivent montrent les commandes susceptibles d'être frappées :

CommandeObjet
helpAffiche la liste des commandes qu'il est possible d'invoquer.
lang {en | fr}Change la langue du programe (le paramètre peut être 'en' ou 'fr').
upsDéclaration de la chaîne de connexion de l'onduleur par exemple ellispe-max-850@localhost:3493
connect <compte> <password>Ouverture du canal de communication. La commande ups doit avoir été invoquée au préalable.
quitArrêt du programme.

Toutes les autres commandes imposent une connexion préalable :

CommandeObjet
nutverAffiche le numéro de version de la spécification du protocole NUT (côté programme).
netverAffiche le numéro de version du protocole NUT (côté onduleur).
numloginsRetourne le nombre de clients connectés.
upsdescIdentification de l'onduleur.
var <variable>Lecture d'une variable (par exemple battery.charge)
type <variable>Type du contenu de la variable.

Voici un exemple sur la commande 'help' :

Bienvenue sur NUT commandeur.
Jmp.NUT.Tools.Cmd v1.0.2 (c) PiApplications 2013 par JMP.

> help
connect <user> <password> : ouvre la connexion au service UPS.
                     help : cet aassistant.
       lang <code langue> : change la culture régionale (ex: lang en_US).
                   nutver : retourne la version de la spécification NUT mise en en oeuvre par le service UPS.
                numlogins : retourne le nombre de client connectés au service UPS.
                   netver : retourne le version du protocole réseau NUT mis en oeuvre par le service UPS.
                     quit : met fin à l'exécution de ce programme.
  ups upsID[@hôte[:port]] : déclare le service UPS auquel se connecter (ex: ups ellipse-max-850@192.168.1.12:4321)
                  upsdesc : retourne la description du service UPS.
      var <nom propriété> : retourne la valeur d'une propriété donnée (ex: battery.charge).

>

La librairie piNUT.Monitor.jar

Un fois le paquet compressé téléchargé, l'installation se résume à en décompresser le contenu sur un répertoire de votre choix sans en altérer la structure.

Si le programme piNUT.Tools est surtout utilisé pour tester la communication avec l'onduleur, en particulier lorsque l'on ne dispose pas d'un environnement graphique, le programme piNUT.Monitor permet la surveillance de l'onduleur. Pour cela, le programme se présente sous la forme d'un programme graphique JavaFX. Comme toute application JavaFX, il est possible de l'exécuter dans 3 environnements :

(Le fonctionnement des applications JavaFX sort du cadre de cet article). Nous nous intéresserons ici au seul mode isolé. Pour cela nous supposons que le répertoire courant est celui sur lequel se trouve la librairie piNUT.Monitor.jar. La commande est alors simplement java -jar piNUT.Monitor.jar. Notez que sous Windows pour libérer la console de lancement, il est possible d'utiliser le programme javaw.exe en lieu et place de java.exe. Une fois le programme lancé, la fenêtre de demande de connexion suivante s'affiche. Il est impératif de commencer par la renseigner :

Ecran de connexion à l'onduleur.

Si la connexion abouti, le bas de la fenêtre affiche le niveau de charge actuelle des batteries et en dessous la puissance consommée en pourcentage de la puissance maximale que peut fournir l'onduleur. La passage de la souris sur les barres de progression donne la valeur numérique de ces variables.

Etat courant de l'onduleur.

Le "temps restant" au-dessous est le temps de maintien du courant en cas de rupture du secteur pour la puissance actuellement délivrée. L'accordéon au bas de l'écran donne le contenu de certaines variable définies par le protocole NUT :

Etat de certaines variables gérées par l'onduleur.

Ces deux programmes sont livrés gracieusement mais doivent être considérés comme des prototypes "en l'état" n'engageant que la responsabilité de celui ou de ceux qui les utilisent. En particulier, ils ne devraient pas être employés de façon opérationnelle dans des domaines pouvant avoir des conséquences sur l'intégrité physique des personnes. Le code source est disponible sur simple demande par courriel.

Conclusion.

La réalisation de ces programmes montre qu'il est assez simple de programmer un "client" capable de gérer l'onduleur y compris en modifiant certaines de ses variables d'état. La plupart des clients fournis sont destinés à s'exécuter sous Windows et beaucoup n'étendent pas la fonction d'arrêt du système en cas de coupure secteur prolongée à d'autres systèmes comme Linux. En revanche, un programme qui scruterait de manière régulière l'état de l'onduleur serait capable d'identifier cette coupure prolongée, de connaître le temps de fonctionnement restant sur batterie et de déclencher toute une série de programmes ou de scripts selon des seuils personnalisés y compris vers des machines distantes. Le protocole NUT permet donc de personnaliser de façon très fine le comportement souhaité d'une installation en réaction à des défauts de la source d'alimentation principale.

(c) PiApplications 2016