Utiliser un onduleur sur GNU/Linux

Onduleur Eaton
Mise à jour il y a .

Utiliser un onduleur sous GNU/Linux est facile sur GNU/Linux avec Network-UPS-Tools et un client. Je vous explique comment faire.

Sommaire

Introduction

Network UPS Tools (NUT) fournit un support pour les onduleurs, les unités de distribution d’énergie, les commutateurs de transfert automatique, les blocs d’alimentation et régulateurs solaires.

Même si je vais m’attarder sur KNutClient, vous avez le choix du client.

Installations

Network UPS Tools

Network UPS Tools s’installe simplement avec le paquet nut.

KNutClient

Vous pouvez installer KNutClient avec les dépôts Trinity Desktop (Trinity Desktop est un fork de KDE 3.5) avec certaines distributions :

Sous Debian 12 :

Installez la clé GPG :

wget http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-keyring.deb
sudo dpkg -i trinity-keyring.deb

Ajoutez les deux dépôts :

deb http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-r14.1.x <your-distribution-release-name> main deps

# Optional sources
deb-src http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-r14.1.x <your-distribution-release-name> main deps

Actualisez les dépôts et installez le paquet knutclient-trinity :

sudo apt update
sudo apt install knutclient-trinity

Plusieurs dépendances sont requises pour la bonne exécution de Knutclient :

sudo apt install compiz-core-trinity compiz-fusion-plugins-extra-trinity compiz-fusion-plugins-main-trinity compiz-plugins-trinity compiz-tde-trinity compiz-trinity libcompizconfig0-trinity libdecoration0-trinity libjasper1 libarts1c2a-trinity libartsc0-trinity libavahi-tqt-1 libdbus-1-tqt libdbus-tqt-1-1c2 libr0 libtqt3-mt libtqt3-mt-data libtqtinterface tdelibs-data-trinity tdelibs14-trinity twin-trinity

Vous pouvez lancer le logiciel avec la commande suivante :

/opt/trinity/bin/knutclient

Il existe un lanceur ici :
/opt/trinity/share/applications/kde/knutclient.desktop

Sous Ubuntu 22.04 :

Ajoutez la clé GPG :

wget http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-keyring.deb
sudo dpkg -i trinity-keyring.deb

Ajoutez les deux dépôts :

deb   http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-r14.0.x jammy main 
 deb   http://mirror.ppa.trinitydesktop.org/trinity/deb /trinity-builddeps-r14.0.x jammy main

Actualisez les dépôts et installez le paquet knutclient-trinity :

sudo apt update
sudo apt install knutclient-trinity

Vous lancez le logiciel avec la commande suivante :

/opt/trinity/bin/knutclient

Il existe un lanceur ici : /opt/trinity/share/applications/kde/knutclient.desktop

Sous openSUSE Leap 15.4 :

Installez le dépôt additionnel et installez KNutClient :

sudo rpm --import http://mirror.ppa.trinitydesktop.org/trinity/rpm/opensuse15.4/RPM-GPG-KEY-trinity
sudo zypper ar http://mirror.ppa.trinitydesktop.org/trinity/rpm/opensuse15.4/trinity-r14/RPMS/x86_64 trinity
sudo zypper ar http://mirror.ppa.trinitydesktop.org/trinity/rpm/opensuse15.4/trinity-r14/RPMS/noarch trinity-noarch
sudo zypper install trinity-knutclient

Vous pouvez lancer le logiciel avec la commande suivante :

/opt/trinity/bin/knutclient

Il existe un lanceur ici :
/opt/trinity/share/applications/kde/knutclient.desktop

Le dépôt Trinity existe pour ArchLinux mais KNutClient n’y est pas présent.

Installation maison

J’ai créé une archive zip compilé par mes soins de la version 1.1.1, vous pouvez la télécharger ici : knutclient.zip (1,4 Mo) (somme de contrôle SHA256 : 4621899a5abb0934c9680389ac7abd2ecb71ba36ea64fb4ee9d370727f55cec2). Pour l’installer, ce n’est pas très compliqué. Dans votre navigateur de fichiers, vous dézippez l’archive (là suivant votre navigateur de fichiers, vous pourrez ou non dézipper avec un clic droit et choisir « Extraire ici »). Ainsi, vous vous retrouvez avec un beau répertoire knutclient.
Faites un clic droit sur le répertoire et choisissez : « Ouvrir un terminal ici » ou quelque chose du genre. Vous voilà dans le terminal.
Tapez la commande suivante avec une ArchLinux ou une Manjaro Linux :

./install-archlinux.sh

Maintenant avec une Debian, Ubuntu ou Mint :

./install-deb.sh

Pour finir, avec une distribution fondée sur RPM.

./install-rpm.sh

Le script va faire appel à votre gestionnaire de paquet en ligne de commandes pour installer les dépendances (pacman pour ArchLinux et Manjaro Linux), (apt-get pour les paquets deb) (et yum pour les paquets RPM). Comme vous le voyez, ç’a tout copié dans le répertoire /usr/local/ pour bien différencier le logiciel installé à la main de ceux installés avec un gestionnaire de logiciel.

Faites un « Alt+ F2 » et tapez knutclient.

knutclient non configure
knutclient non configure

Voilà, c’est fini pour cette partie installations.

Configuration de Network UPS Tools

Configurer, démarrer le pilote


Pour trouver le pilote de votre onduleur, regardez la liste des onduleurs supportés par NUT avec le nom des pilotes à utiliser.

Une fois que vous avez le nom du pilote de votre onduleur, éditez le fichier /etc/nut/ups.conf

eaton, c’est l’identifiant que j’ai donné à mon onduleur. usbhid-ups, c’est le nom du pilote de l’onduleur. Le port = auto, c’est le port utilisé par l’onduleur, ici, comme c’est comme c’est de l’USB, on laisse en auto. Alors, on ajoute ainsi desc = "Eaton Protection Station 800", c’est la marque et le modèle de mon onduleur donc, mettez celle et celui de votre onduleur.

Ajoutez ceci à la fin du fichier.

[ONDULEUR]
    driver = usbhid-ups
    port = auto
    desc = "Eaton Ellipse PRO 1600"

Remplacez ONDULEUR par un identifiant pour votre onduleur.

Testez le pilote :

sudo upsdrvctl start

Activez et lancez le service nut-driver-enumerator.service

sudo systemctl enable nut-driver-enumerator.service
sudo systemctl start nut-driver-enumerator.service

Configurer, activer et démarrer upsd

On va dire à upsd quelles adresses il doit écouter pour le commander, et alors pouvoir passer le pilote au démon. Pour passer les adresses IP à upsd, il faut donc les trouver, pour ça on va donc ouvrir un fichier en lecture seule (donc pas besoin de terminal ni de sudo) on ouvre le fichier /etc/hosts ce qui pour moi me donne ça :

Host addresses
127.0.0.1 localhost
127.0.1.1 ignace-pc
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Éditez le fichier /etc/nut/upsd.conf

On ajoute à la fin du fichier ces trois éléments qui composent une ligne, et l’on peut ajouter autant de ligne que nécessaire. Attention tout de même, on ne s’occupe pas de adresses en IPv6.

LISTEN : ÉCOUTEZ en anglais qui dit à upsd d’écouter.
X.X.X.X : l’adresse IP qui doit être écoutée par upsd.
YYYY : le port TCP/IP utilisé par upsd pour écouter, 3493, est le port par défaut.
Ce qui donne ça pour mon fichier personnel :

LISTEN 127.0.0.1 3493
LISTEN 127.0.1.1
LISTEN localhost
LISTEN ignace-pc

Éditez le fichier /etc/nut/upsd.users

Ce fichier permet de configurer les accès au démon upsd.
Seuls les utilisateurs présents dans le fichier seront habilités à connaitre l’état de l’onduleur.

À la fin du fichier, ajoutez ce qui suit :

[UTILISATEUR]
		password  = MOT_DE_PASSE
		upsmon master
		actions = SET
		instcmds = ALL

Remplacez UTILISATEUR par un nom d’utilisateur et MOT_DE_PASSE par un mot de passe.

Configurer le mode de fonctionnement de NUT

NUT peut être utilisé selon quatre modes de fonctionnement qui sont les suivants :
none (aucun) : NUT n’est pas configuré, ou utilise la gestion intégrée de l’alimentation, ou utilise un système externe pour démarrer les composants de NUT. Rien ne doit donc être démarré.

standalone (autonome) : Ce mode s’adresse à une configuration locale uniquement, avec 1 onduleur protégeant le système local. Cela implique de démarrer les 3 couches de NUT (driver, upsd et upsmon) et les fichiers de configuration correspondants. Ce mode permet également de gérer la redondance des onduleurs.

netserver : même chose que pour la configuration autonome, mais il faut aussi plus de contrôles d’accès au réseau (firewall, tcp-wrappers) et éventuellement une directive LISTEN spécifique dans upsd.conf.
Puisque ce MODE est ouvert au réseau, une attention particulière doit être portée aux questions de sécurité.

netclient : ce mode ne nécessite qu’upsmon.

Pour définir le mode de fonctionnement de NUT, vous devez éditer le fichier /etc/nut/nut.conf :

MODE=standalone

Activez et lancez le service NUT :

sudo systemctl enable nut-server.service
sudo systemctl start nut-server.service

Configurer, activer et démarrer upsmon

upsmon permet d’interroger à travers le réseau les différents démons upsd pour connaître l’état du réseau ondulé. upsmon permet également de lancer des commandes spécifiques à distance lorsque certains événements surviennent, comme l’extinction des machines lorsque la batterie des onduleurs devient trop faible.

Éditez le fichier /etc/nut/upsmon.conf

Ajoutez la ligne suivante avec l’identifiant de l’onduleur défini dans ups.conf, l’utilisateur et le mot de passe définit dans le fichierupsd.users

MONITOR ONDULEUR@MACHINE_DISTANTE 1 UTILISATEUR MOT_DE_PASSE master

Les variables :

  • SHUTDOWNCMD, upsmon exécute cette commande quand le système doit être arrêté (la commande configurée éteint proprement l’ordinateur).
  • NOTIFYCMD, upsmon exécute cela pour envoyer des messages quand des événements se produisent.
  • POLLFREQ défini la fréquence d’interrogation de l’état de l’onduleur (par défaut toutes les 5 secondes).
  • POLLFREQALERT permet de réduire la fréquence d’interrogation quand l’onduleur est sur batterie.
  • DEADTIME défini au bout de combien de secondes sans réponse l’onduleur doit être considéré comme mort (par défaut 15 secondes), doit être un multiple de POLLFREQ et de POLLFREQALERT.
  • FINALDELAY, délai avant l’exécution de SHUTDOWNCMD après la notification d’extinction.
  • NOCOMMWARNTIME, délai d’attente avant de notifier la perte de communication avec l’onduleur.
  • RBWARNTIME, fréquence d’envoi de notification lorsque l’onduleur signale que la batterie doit être changée.

Pour les autres variables, visitez cette page :
https://networkupstools.org/docs/man/upsmon.conf.html

sudo systemctl enable nut-monitor.service
sudo systemctl start nut-monitor.service

Activer et démarrer les cibles systemd

Lancez les commandes suivantes :

sudo systemctl enable nut.target
sudo systemctl start nut.target

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

Communiquer avec l’onduleur

Interroger l’onduleur

C’est une évidence, vous pouvez interroger l’onduleur pour connaitre son état. C’est le minimum.

upsc ONDULEUR

Pas besoin d’ajouter @localhost, upsc comprend que vous êtes en local.
Pour l’exemple, voilà ce que cela donne pour mon onduleur :

[ignace@ignace-PC ~]$ upsc eaton
battery.charge: 100
battery.charge.low: 20
battery.runtime: 2367
battery.type: PbAc
device.mfr: EATON
device.model: Ellipse PRO 1600 
device.serial: P363J49NLM
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.version: 2.8.0
driver.version.data: MGE HID 1.46
driver.version.internal: 0.47
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
input.frequency: 50.0
input.transfer.high: 285
input.transfer.low: 165
input.voltage: 229.0
input.voltage.extended: no
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.switchable: no
output.frequency: 50.0
output.frequency.nominal: 50
output.voltage: 227.0
output.voltage.nominal: 230
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.delay.start: 30
ups.firmware: 01.16.0020
ups.load: 13
ups.mfr: EATON
ups.model: Ellipse PRO 1600 
ups.power: 139
ups.power.nominal: 1600
ups.productid: ffff
ups.realpower: 134
ups.serial: P363J49NLM
ups.status: OL
ups.timer.shutdown: -1
ups.timer.start: -1
ups.vendorid: 0463


Si vous êtes distant de l’onduleur, adaptez la commande suivante :

upsc ONDULEUR@MACHINE_DISTANTE

MACHINE_DISTANTE peut être une adresse IP ou l’alias de la machine distante.

Pour connaitre le status de l’onduleur :

upsc ONDULEUR ups.status

Si la commande vous répond OL, l’onduleur est en ligne (On Line).

Envoyer une commande à l’onduleur

Lister les commandes supportées par le pilote :

upscmd -l ONDULEUR

Envoyer une commande à l’onduleur :

upscmd -u UTILISATEUR -p MOT_DE_PASSE ONDULEUR@MACHINE_DISTANTE COMMANDE

Configurer KNutClient

Lancez KNutClient par la combinaison des touches Alt+F2, dans la fenêtre qui s’ouvre, tapez knutclient et cliquez sur Lancer.
La fenêtre de KNutClient s’ouvre :

knutclient non configure
knutclient non configuré

C’est bien gris tout ça, comme vous avez (avec la commande upsc) tout ce qu’il vous faut pour bien configurer KNutClient.

On y va, cliquez sur « Configurer KNutClient… ». Alors, vous arrivez à cette fenêtre :

knutclient_parametres_principaux
knutclient_parametres_principaux

À gauche, vous avez le menu avec six icônes nommées sur le premier « Paramètres », vous ne devriez rien avoir à changer.

Passons au suivant :

knutclient_parametre_de_l_onduleur
knutclient_parametre_de_l_onduleur

Ajouter un onduleur

Là, cela devient intéressant, ici, on peut ajouter, enlever ou modifier un onduleur. Ici, j’ai déjà le mien qui a déjà été ajouté. Cliquez sur « Ajouter », vous avez la fenêtre de configuration des paramètres de l’onduleur :

knutclient - configurer paramètres de l’onduleur
Configurer les paramètres de l’onduleur

Il reste plus qu’à configurer l’onduleur, vous lui donnez un nom. L’adresse, c’est le nom d’hôte ou l’IP de l’onduleur, le délai en ms, on n’y touche pas, le port, c’est bon aussi. Indiquez l’utilisateur et son mot de passe (défini dans le fichier upsd.users de la machine hôte). Pour les variables, vous sélectionnez vos variables disponibles et les ajouter, une variable après l’autre, vous en sélectionnez une et vous cliquez sur la flèche vers la droite pour la passer dans la colonne de droite. Dans les valeurs sélectionnées, vous pouvez faire varier l’ordre de chaque valeur avec les boutons vers le haut et vers le bas et l’on fait « ok » quand c’est fini. Voilà ce que donne ma configuration avec mon onduleur :

knutclient - paramètres de l’onduleur configuré
Paramètres de l’onduleur configuré

Configuration du panneau

Maintenant, voyons les paramètres du panneau (sur l’interface principale, c’est le panneau à gauche), c’est explicite, vous cochez, vous cliquez sur « Appliquer » puis sur « OK » pour finir.

knutclient_parametres_du_panneau
knutclient_parametres_du_panneau

Le menu « Polices » donne la possibilité d’utiliser des polices de caractères personnalisées. Le menu « Analogique » propose la possibilité de modifier les couleurs des cadrans analogiques de l’interface.

Configuration du dock

Maintenant, vous configurerez le dock (c’est l’icône dans la zone d’état) :

knutclient_parametres_du_dock
knutclient_parametres_du_dock

Voilà l’interface principale de KNutClient une fois NUT et KNutClient configurées :

Résultat

knutclient
knutclient

Bonus : les données dans Conky

Pour consommer encore moins, plutôt qu’utiliser KNutClient, vous pouvez utiliser les données dans Conky sur le bureau. Cela prend beaucoup moins de surface sur les petits écrans.

Reprenez la commande vu plus haut : upsc eaton@localhost
Vous avez des lignes avec des variables avec les données après.
Ouvrez le fichier .config/conky/conky.conf et ajoutez après conky.text = [[ par exemple :

Onduleur ${hr 2}
${color1}Charge de la batterie : ${exec upsc eaton@localhost battery.charge}%
${color1}Charge de l’onduleur : ${exec upsc eaton@localhost ups.load}%
${color1}Charge de l’onduleur : ${exec upsc eaton@localhost ups.power}VA
${color1}Status : ${exec upsc eaton@localhost ups.status}

Problèmes

Le lanceur ne démarre pas KNutClient

Il peut arriver que KNutClient ne démarre pas avec un lanceur.
Dans les arguments du lanceur, vous pouvez avoir -caption %c %i %m.
Supprimez cela et KNutClient devrait maintenant se lancer normalement.

Impossible de réclamer le périphérique USB

Si vous recevez un message d’erreur comme celui-ci :

Can't claim USB device [XXXX:YYYY]: could not detach kernel driver from
interface 0: Operation not permitted
Driver failed to start (exit status=1)

Ou une autre moins spécifique :

USB communication driver 0.33
No matching HID UPS found
Driver failed to start (exit status=1)

Il s’agit probablement d’un problème d’autorisations d’accès au périphérique. Vous pouvez y remédier en spécifiant une règle udev qui définit le groupe correct.
Créez le fichier suivant : /etc/udev/rules.d/50-ups.rules:

SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", ATTR{idProduct}=="YYYY", GROUP="nut"

XXXX et YYYY sont les identifiants du fabricant et du produit. Vous pouvez les voir dans la sortie d’erreur ([XXXX:YYYY]) ou grâce à lsusb.

Après cela, rechargez et réenclenchez les règles udev en exécutant :

sudo udevadm control --reload
sudo udevadm trigger

Voilà, ce tutoriel est terminé. Voici les liens des sites officiels pour des deux logiciels :

Network UPS Toolstools et KNutClient.

gnu_logo.90
ignace72

S’abonner
Notification pour
guest

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

33 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
Frquey
Frquey
1 année il y a

Excellent ! Je voulais mettre 5 mais mon gros doigt a rippé, et a mis 3. Impossible à corriger ?

enter
enter
4 mois il y a

Bonjour, déjà merci pour ce tutoriel !
Je voulais savoir, pour executer un script personnalisé (shutdown particulier de conteneurs), c’est bien dans SHUTDOWNCMD qu’il faut le mettre ?
Merci de votre réponce.

Matheo
Matheo
20 jours il y a

Bonjour,
J’essaye d’appliquer se magnifique tuto sur debian ou ubuntu et je n’y arrive pas du tout je suis bloquer sur Alt +F2 knutclient rien ne s’éxecute Si vous pouvez m’aider sur discord etc
mon discord braox0001
Sinon merci d’avoir fait un tuto

Matheo
Matheo
Répondre à  ignace72
20 jours il y a

Je viens d’ouvrir un terminale et il me dit failed to start knutclient unit knutclient.service not found.
Je suis sur debian 11 j’ai aussi essayer sur ubuntu 22.04 et j’ai aussi essayer sur debian 12.

Matheo
Matheo
Répondre à  ignace72
19 jours il y a

Bonjour,
J’ai fait ce que vous avez fait et quand je lance knutclient en fessant /opt/trinity/bin/knutclient il s’éxecute sans fenetre mais quand je fait /opt/trinity/share/applications/kde/knutclient.desktop ou bien systemclt start knutclient il me dit aucun fichier ou dossier de ce type et pour le systemctl il me dit failed to start knutclient.service Unit knutclient.service not found

Matheo
Matheo
Répondre à  ignace72
19 jours il y a

Bonjour,
Je viens de tester sur debian 11 et 12 des nouvelles machine VM et sa ne fonctionne toujours pas sa me marque quand je le fait dans le terminal systemctl start knutclient il m’écrit failed to start knutclient.service Unit knutclient.service not found.
et quand je f ait Alt+F2 et knutclient sa m’affiche rien

Matheo
Matheo
Répondre à  ignace72
19 jours il y a

Bonjour enfaite il me fait sa ..https://imgur.com/a/oWWnHRM

Matheo
Matheo
Répondre à  ignace72
19 jours il y a

Voici la capture d’écran pour les notifications mais non je n’ai rien en fonctionnement rien de visible … https://imgur.com/a/gJLeWUX

Matheo
Matheo
Répondre à  ignace72
19 jours il y a

Oupss désoler 😉
Non je ne vois rien :/ https://imgur.com/a/Hy2oLkP

Matheo
Matheo
Répondre à  ignace72
19 jours il y a

Non c’est pas grave il faut que j’utilise quoi au lieu de gnome pour l’installation ? car je crée une nouvelle installation 🙂

Dernière modification le 19 jours il y a par Matheo
Matheo
Matheo
Répondre à  ignace72
19 jours il y a

Oh Sa fonctionne sur Xfce merci beaucoup de votre aide !!! <3

Matheo
Matheo
Répondre à  ignace72
19 jours il y a

bon knutclient maintenant j’ai l’interface ça c’est nickel par contre quand je fait upsc eaton sa ne fonctionne pas sa m’écrit connection failed je vous envoie les screen de tout mes fichiers que j’ai du modifier comme écrit sur le tuto https://imgur.com/a/xxBRu6D
Encore désoler pour le dérangement

Matheo
Matheo
Répondre à  ignace72
18 jours il y a

Bonjour, en plus des commandes que vous m’avez dit de faire j’ai fait aussi un systemctl status nomduservices
Et même en fessant des systemctl start nomduservice le service est inactif je vous laisse regarder les capture par vous même https://imgur.com/a/C4svM8a
Et mon mot de passe j’ai mis matheo car c’est des screen biensur que de mon côter ce n’est pas ce mot de passe 😉
Belle journée a vous

Matheo
Matheo
Répondre à  ignace72
18 jours il y a

Bonjour,
Merci encore ça fonctionne nickel tout fonctionne j’espère que grâce a mes question plusieurs personne serons débloquer 😉

Matheo
Matheo
Répondre à  ignace72
18 jours il y a

Par contre j’aurais une question, je ne sait pas si vous auriez une réponse.
Enfaite je veux que sur mon serveur une fois que mon onduleur est sur batterie qu’il éteigne mon serveur a partir par exemple de 20% restant sur l’onduleur je sait que c’est possible sur windows avec l’application Eaton Companion mais c’est seulement sur l’ordinateur local pas en réseaux moi je veux qu’il éteigne mon serveur proxmox.
Merci en tout cas

Matheo
Matheo
Répondre à  ignace72
17 jours il y a

Bonjour,
Je l’ai fait ducoup en mode faut le mettre en netserver etc etc j’ai fait un code un peux galere qui s’execute toutes les minutes.

Aller au contenu principal