Ce tutoriel traite de la surveillance d’un onduleur (UPS) par Jeedom : comment le superviser en le connectant par USB à la centrale domotique. Mon système actuel utilise un Jeedom fonctionnant sur un ordinateur portable (sur batterie, donc) alimenté lui-même par un UPS Eaton Ellipse 1200 PRO. Vous apprendrez donc les étapes clés pour gérer à la fois l’état de l’UPS mais aussi la surveillance de la batterie de l’ordinateur portable, dans Jeedom. De futurs guides vous montreront également comment surveiller des appareils UPS à distance.
Ce tutoriel s’appuie sur des ressources telles que ce guide et celui-ci, ainsi que sur un excellent article consacré au processus d’arrêt ici.
Brancher l’onduleur, installer et configurer NUT
Vérification de la connexion à l’UPS
Connectez l’onduleur à votre contrôleur Jeedom à l’aide d’un câble USB. En même temps, surveillez /var/log/messages pour vérifier la détection du périphérique.
jeedom@jeedom-stgreg2:~$ su -
Mot de passe :
root@jeedom-stgreg2:~# tail -f /var/log/messagesAug 19 21:04:36 jeedom-stgreg2 kernel: [131160.232904] usb 2-3.4: new full-speed USB device number 7 using xhci_hcd
Aug 19 21:04:37 jeedom-stgreg2 kernel: [131161.016186] usb 2-3.4: New USB device found, idVendor=0463, idProduct=ffff, bcdDevice= 1.00
Aug 19 21:04:37 jeedom-stgreg2 kernel: [131161.016189] usb 2-3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=4
Aug 19 21:04:37 jeedom-stgreg2 kernel: [131161.016190] usb 2-3.4: Product: Ellipse PRO
Aug 19 21:04:37 jeedom-stgreg2 kernel: [131161.016191] usb 2-3.4: Manufacturer: EATON
Aug 19 21:04:37 jeedom-stgreg2 kernel: [131161.016192] usb 2-3.4: SerialNumber: xxxxxxxxxxx
Aug 19 21:04:37 jeedom-stgreg2 mtp-probe: checking bus 2, device 7: "/sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.4"
Aug 19 21:04:37 jeedom-stgreg2 mtp-probe: bus: 2, device: 7 was not an MTP device
Aug 19 21:04:37 jeedom-stgreg2 kernel: [131161.035286] hidraw: raw HID events driver (C) Jiri Kosina
Aug 19 21:04:41 jeedom-stgreg2 kernel: [131164.860060] usbcore: registered new interface driver usbhid
Aug 19 21:04:41 jeedom-stgreg2 kernel: [131164.860063] usbhid: USB HID core driver
Aug 19 21:04:41 jeedom-stgreg2 mtp-probe: checking bus 2, device 7: "/sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.4"
Aug 19 21:04:41 jeedom-stgreg2 mtp-probe: bus: 2, device: 7 was not an MTP device
Aug 19 21:04:41 jeedom-stgreg2 kernel: [131164.874069] hid-generic 0003:0463:FFFF.0001: hiddev0,hidraw0: USB HID v1.10 Device [EATON Ellipse PRO] on usb-0000:00:14.0-3.4/input0Installation et configuration de NUT
Installez le paquet NUT :
root@jeedom-stgreg2:~# apt-get install nutModifiez /etc/nut/ups.conf pour configurer le pilote approprié pour votre onduleur. Dans mon cas, le modèle Eaton est pris en charge par le pilote NUT standard. Consultez la liste de compatibilité NUT pour vérifier la prise en charge de votre appareil.
Créez une nouvelle section dans le fichier de configuration pour l’onduleur, comme dans cet exemple. Comme mon onduleur est connecté via USB, j’ai défini le port sur auto.
Remarque : n’utilisez pas d’espaces dans le nom de la section (le terme entre crochets
[ ]).
[Eaton_Ellipse_1200_Pro]
driver = usbhid-ups
port = auto
pollonly
desc = "Eaton Ellipse 1200 Pro"Maintenant, assurez-vous que NUT-Server détecte votre UPS :
root@jeedom-stgreg2:~# upsdrvctl start
Network UPS Tools - UPS driver controller 2.7.4
Network UPS Tools - Generic HID driver 0.41 (2.7.4)
USB communication driver 0.33
Using subdriver: MGE HID 1.39Indiquez à NUT que vous travaillez en mode autonome en définissant ceci dans /etc/nut/nut.conf :
MODE=standaloneConfigurez /etc/nut/upsd.conf avec l’adresse IP de votre serveur afin que d’autres clients puissent se connecter au serveur NUT. Le paramètre MAXAGE permet d’éviter que les données soient considérées comme obsolètes si les mises à jour sont peu fréquentes.
MAXAGE 30
LISTEN 127.0.0.1 3493
LISTEN 0.0.0.0 3493
LISTEN ::1 3493Remarque : l’écoute sur 127.0.0.1 peut sembler redondante avec 0.0.0.0, et le statut du démon peut même indiquer qu’il n’écoute pas sur 127.0.0.1. Cependant, si vous supprimez la ligne LISTEN 127.0.0.1, le démon se plaint du fichier /var/run/nut/upsd.pid. Pour l’instant, je conserve cette ligne pour éviter tout problème.
Maintenant, créez un nouvel utilisateur dans le fichier upsd.users — appelons-le « admin » et accordons-lui tous les privilèges « master » :
[admin]
password = YourAdminPassword
upsmon master
actions = SET
instcmds = ALLConfigurez /etc/nut/upsmon.conf en ajoutant une ligne MONITOR pour l’utilisateur admin et configurez les options de notification :
MONITOR Eaton_Ellipse_1200_Pro@localhost 1 admin YourAdminPassword master
MINSUPPLIES 1
POWERDOWNFLAG /etc/nut/killpower
#SHUTDOWNCMD "/sbin/shutdown -P +0"
HOSTSYNC 15
FINALDELAY 30
DEADTIME 15
NOTIFYCMD /sbin/upssched
NOTIFYMSG ONLINE "UPS %s on line power"
NOTIFYMSG ONBATT "UPS %s on battery"
NOTIFYMSG LOWBATT "UPS %s battery is low"
NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK "Communications with UPS %s established"
NOTIFYMSG COMMBAD "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN "UPS %s is going offline - System will now run on its own batteries !"
NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM "UPS %s is unavailable"
NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT SYSLOG+WALL
RBWARNTIME 43200
NOCOMMWARNTIME 600
FINALDELAY 5Notez que sur la première ligne, nous utilisons ici le nom de l’UPS défini dans ups.conf ci-dessus, ET l’utilisateur/mot de passe défini dans upsd.user ci-dessus également.
Voici maintenant la première modification spécifique due au fait que le contrôleur Jeedom fonctionne sur un ordinateur portable : nous ne voulons PAS que le système s’éteigne immédiatement lorsque upsmon détecte que l’onduleur est à faible niveau de batterie. L’ordinateur portable dispose de sa propre batterie, qui peut le faire fonctionner pendant quelques heures supplémentaires. C’est pourquoi la ligne SHUTDOWNCMD est commentée dans cette configuration. Normalement, cette commande indiquerait à upsmon d’éteindre automatiquement l’hôte (la machine Jeedom dans notre cas) lorsque l’onduleur atteint un niveau de batterie critique.
Vérifiez et corrigez les autorisations sur les fichiers de configuration NUT afin de garantir un accès correct:
root@jeedom-stgreg2:~# chown root:nut /etc/nut/*
root@jeedom-stgreg2:~# chmod 640 /etc/nut/*Activez le démarrage automatique du serveur NUT au boot:
root@jeedom-stgreg2:~# systemctl enable nut-server
Synchronizing state of nut-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable nut-serverDémarrez le serveur NUT :
root@jeedom-stgreg2:~# service nut-server startVérifiez si le démarrage s’est déroulé correctement :
root@jeedom-stgreg2:~# service nut-server statusVous devriez voir un statut « running » (en cours d’exécution), avec votre UPS listé:
● nut-server.service - Network UPS Tools - power devices information server
Loaded: loaded (/lib/systemd/system/nut-server.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2022-09-03 08:15:46 CEST; 3min 6s ago
Process: 3200 ExecStart=/sbin/upsd (code=exited, status=0/SUCCESS)
Main PID: 3201 (upsd)
Tasks: 1 (limit: 4915)
Memory: 876.0K
CGroup: /system.slice/nut-server.service
└─3201 /lib/nut/upsd
sept. 03 08:15:46 jeedom-stgreg2 upsd[3200]: listening on 0.0.0.0 port 3493
sept. 03 08:15:46 jeedom-stgreg2 upsd[3200]: not listening on 127.0.0.1 port 3493
sept. 03 08:15:46 jeedom-stgreg2 upsd[3200]: listening on ::1 port 3493
sept. 03 08:15:46 jeedom-stgreg2 upsd[3200]: listening on 0.0.0.0 port 3493
sept. 03 08:15:46 jeedom-stgreg2 upsd[3200]: not listening on 127.0.0.1 port 3493
sept. 03 08:15:46 jeedom-stgreg2 upsd[3200]: Connected to UPS [Eaton_Ellipse_1200_Pro]: usbhid-ups-Eaton_Ellipse_1200_Pro
sept. 03 08:15:46 jeedom-stgreg2 upsd[3200]: Connected to UPS [Eaton_Ellipse_1200_Pro]: usbhid-ups-Eaton_Ellipse_1200_Pro
sept. 03 08:15:46 jeedom-stgreg2 upsd[3201]: Startup successful
sept. 03 08:15:46 jeedom-stgreg2 systemd[1]: Started Network UPS Tools - power devices information server.
sept. 03 08:15:50 jeedom-stgreg2 upsd[3201]: User admin@::1 logged into UPS [Eaton_Ellipse_1200_Pro]Liste des périphériques UPS reconnus :
root@jeedom-stgreg2:~# upsc -l
Init SSL without certificate database
Eaton_Ellipse_1200_ProAfficher l’état détaillé de l’onduleur :
root@jeedom-stgreg2:~# upsc Eaton_Ellipse_1200_Pro@localhost
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 20
battery.runtime: 2682
battery.type: PbAc
device.mfr: EATON
device.model: Ellipse PRO 1200
device.serial: xxxxxxxxxxxxxxxx
device.type: ups
driver.flag.pollonly: enabled
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.frequency: 50.0
input.transfer.high: 285
input.transfer.low: 165
input.voltage: 237.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: 242.0
output.voltage.nominal: 230
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.delay.start: 30
ups.firmware: 01.18.0022
ups.load: 11
ups.mfr: EATON
ups.model: Ellipse PRO 1200
ups.power: 139
ups.power.nominal: 1200
ups.productid: ffff
ups.realpower: 0
ups.serial: xxxxxxxxxxxxxxx
ups.status: OL
ups.timer.shutdown: 0
ups.timer.start: 0
ups.vendorid: 0463Vous devriez maintenant voir diverses informations concernant votre onduleur, notamment le niveau de charge de la batterie et son état de fonctionnement.
Installation du plugin Nut_free dans Jeedom
Maintenant, intégrons notre UPS à Jeedom à l’aide du plugin Nut_Free disponible sur le Jeedom Market.



Remarque : bien que la détection automatique soit généralement possible, j’ai choisi d’utiliser un nom différent de celui défini dans NUT pour l’équipement. J’ai donc désactivé la détection automatique et spécifié explicitement le nom de la configuration de l’onduleur, en le faisant correspondre à celui défini dans
/etc/nut/ups.conf.
Lorsque vous enregistrez cet équipement, le plugin utilise la même commande upsc que précédemment pour vérifier l’état de l’onduleur et crée les commandes correspondantes dans votre équipement Jeedom.
Après avoir sélectionné les commandes à afficher, voici à quoi ressemble le widget obtenu sur le tableau de bord principal de Jeedom :

Réglages spécifiques pour l’utilisation d’un ordinateur portable comme hôte Jeedom
Comme mon contrôleur Jeedom fonctionne sur un ordinateur portable, j’ai dû désactiver ou ajuster plusieurs comportements du système :
- Commenter la ligne SHUTDOWNCMD dans
/etc/nut/upsmon.confcomme expliqué précédemment. - Désactiver les modes veille et veille prolongée :
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.targetIl est également nécessaire d’indiquer à logind d’ignorer les événements de suspension, d’hibernation et de fermeture du capot. Ajoutez ces lignes à /etc/systemd/logind.conf et redémarrez logind :
HandleSuspendKey=ignore
HandleHibernateKey=ignore
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignoresystemctl restart systemd-logind- Désactiver la veille automatique USB
Modifiez le fichier /etc/default/grub et modifiez la ligne GRUB_CMDLINE_LINUX_DEFAULT pour ajouter l’option usbcore.autosuspend=-1 :
GRUB_CMDLINE_LINUX_DEFAULT="quiet usbcore.autosuspend=-1"Enregistrez le fichier, mettez à jour grub :
update-grubRedémarrez. Après le redémarrage, vérifiez le changement (le résultat suivant devrait être -1 ; auparavant, mon système renvoyait 2) :
cat /sys/module/usbcore/parameters/autosuspendSurveillance UPS et notifications
Pour être averti lorsque l’état de l’onduleur change, nous allons configurer une série de scénarios Jeedom. La façon la plus simple de suivre l’état de l’onduleur est d’utiliser le retour de la commande « UPS Mode » de Nut_free dans votre équipement UPS. Elle comporte deux états clés : OL (On Line) et OB (On Battery). Lorsque l’état passe à « On Battery », vous pouvez utiliser des commandes supplémentaires pour décider si vous devez arrêter Jeedom ou prendre d’autres mesures, en particulier si la batterie descend en dessous d’un seuil défini.

Dans ce premier scénario, notez 1/ le déclencheur (provoqué, positionné sur la commande UPS MODE), et 2/ le fait que Jeedom affiche un deuxième scénario lié à celui-ci, appelé « UPS – Notif charge ». Ce deuxième scénario n’est activé et lancé que lorsque nous avons besoin de recevoir des notifications récurrentes avec le niveau de batterie.

Voici comment fonctionne la logique principale :
- Première étape (0) : l’entrée dans ce scénario signifie que l’état de l’onduleur a changé (puisque déclenché par UPS MODE), donc une alerte est envoyée. Pour les notifications (e-mail, SMS, etc.), j’utilise un scénario que j’ai développé appelé « sNotification », qui envoie le message par différents canaux et qui, dans le cas présent, explique le changement d’état.
- Ensuite (étape 1) : On vérifie si l’onduleur est de nouveau en ligne (OL). Si oui :
- On défini une variable de suivi sur 1 (à utiliser ailleurs, si nécessaire).
- Si le scénario de notification « UPS – Notif Charge » est activé, on l’arrête et on le désactive (vous pouvez éventuellement le laisser fonctionner pendant quelques minutes pour surveiller la charge).
- Si le statut n’est pas OL, on affecte 0 à notre variable de suivi et on vérifie que l’onduleur n’est pas en erreur (c’est-à-dire qu’il fonctionne sur batterie mais reste surveillable).
- Si OK et le scénario « UPS – Notif Charge » est inactif, on l’active et on le démarre pour recevoir des mises à jour périodiques sur la batterie.
- Si une erreur se produit (l’onduleur fonctionne sur batterie mais les données ne peuvent pas être surveillées), on arrête et on désactive le scénario « UPS – Notif Charge » pour éviter d’être submergé d’alertes jusqu’à ce que le problème soit résolu.

Examinons le deuxième scénario. Celui-ci n’a pas de déclencheur direct propre (type de scénario « Programmé ») : il est activé ou désactivé par le scénario « « UPS – Check status » » et, une fois actif, il s’exécute automatiquement toutes les 5 minutes. (Sur la capture d’écran, vous pouvez voir que la case « Actif » n’est pas cochée.)

Le principe est simple : il utilise mon scénario sNotification pour envoyer une alerte (par e-mail, SMS et via l’application mobile Jeedom) qui indique le niveau de charge actuel de l’onduleur et le temps estimé avant l’arrêt.
Avec ces deux scénarios et l’onduleur configuré comme décrit, vous disposez désormais d’un système fiable de surveillance de l’onduleur et d’envoi d’alerte complètement automatisé. Cependant, comme ce contrôleur Jeedom fonctionne sur un ordinateur portable, une fois que l’onduleur est « épuisé« , l’ordinateur portable passe également de l’état « En ligne » à l’état « Sur batterie ». Nous devons donc également surveiller la batterie et l’état de l’ordinateur portable avant de décider d’éteindre Jeedom en toute sécurité, au cas où les deux batteries atteindraient un niveau critique. Les scénarios suivants couvrent cette situation.
Surveillance de la batterie du laptop et notifications
Pour la batterie de l’ordinateur portable, vous devrez également utiliser plusieurs scénarios et créer un composant virtuel (à l’aide du plugin gratuit « Virtual » disponible sur la boutique Jeedom) :
- Le composant virtuel permettra d’afficher l’état de la batterie de l’ordinateur portable et de centraliser toutes les informations associées (à l’aide de commandes « info » pouvant être référencées dans d’autres scénarios Jeedom).
- Un scénario intitulé « Laptop battery – get data » exécute une commande système pour collecter des informations sur la batterie et met à jour le composant virtuel toutes les 5 minutes.
- Un scénario appelé « Laptop battery – Check status » qui surveille si l’alimentation secteur de l’ordinateur portable fonctionne, ou s’il utilise sa batterie, à partir du composant virtuel.
- Un dernier scénario, « Laptop battery – Notif charge », est déclenché à la demande par le scénario « Check status » : il envoie des notifications régulières et, cette fois-ci, éteint correctement Jeedom si l’onduleur et les batteries de l’ordinateur portable atteignent un niveau critique.


Ce composant virtuel facilite la collecte et l’utilisation des données relatives à la batterie d’un ordinateur portable dans Jeedom : toutes ses commandes peuvent être réutilisées par d’autres composants, scénarios et automatisations. Pour lui fournir des données en temps réel, vous aurez besoin d’un scénario qui exécute une commande du système d’exploitation afin d’obtenir les statistiques de la batterie.

Vous pouvez constater que ce scénario n’est pas déclenché par un événement (mode « Programmé ») ; il s’exécute automatiquement toutes les 5 minutes.

Le processus est simple : il exécute la commande upower de l’OS, filtre les données requises et met à jour chaque champ du composant virtuel avec cette sortie. Selon que la batterie est complètement chargée ou non, il utilise différentes lignes pour remplir les bonnes commandes virtuelles.
La commande utilisée est upower -i $(upower -e | grep "BAT") | grep "native|power|updated|state|energy:|energy-full:|percentage|warning|time"
Cette commande extrait les informations pertinentes relatives à la batterie de l’ordinateur portable. Vous pouvez la tester dans le menu d’administration système de Jeedom, qui vous permet d’envoyer des commandes OS et d’afficher leurs résultats.

Le résultat est généralement constitué de sept lignes de texte, mais si la batterie n’est pas complètement chargée, il y a parfois une huitième ligne. Pour extraire chaque donnée, j’utilise un ensemble de commandes Jeedom comme celles-ci :
cmd::byString('#[Bureau][Batterie Laptop][ID]#')->event(trim(explode(":",$output[0],2)[1]));- La fonction
explode()divise la première ligne (par exemple « native-path: BAT0 ») et sélectionne la deuxième valeur après les deux points. - La commande
trim()élimine tous les espaces superflus. - Ensuite,
cmd::byString(...)->event(...)met à jour la commande virtuelle correspondante.
On répéte ce processus pour chaque ligne de sortie. Veillez à traiter également les données « état » afin de pouvoir mettre à jour avec précision les champs « Temps jusqu’à arrêt » et « Pourcentage » dans votre composant virtuel.
Une fois activé, ce scénario fournit toutes les 5 minutes des données actualisées sur la batterie de l’ordinateur portable via le composant virtuel. Vous pouvez désormais configurer votre scénario de surveillance et d’alerte pour la batterie de l’ordinateur portable, dont la logique est presque identique à celle du scénario UPS ci-dessus.

Remarque : ce scénario est « provoqué » (déclenché par un événement) et son déclencheur est défini sur la commande « State » (état) du composant virtuel.

La logique est simple et similaire au scénario UPS :
- Si l’état de la batterie est « complètement chargée » ou « en cours de chargement »,on arrête et on désactive le scénario d’alerte « Laptop battery – Notif charge ».
- Sinon, on active les notifications périodiques en activant et en démarrant le scénario « Laptop battery – Notif charge ».

Une fois encore, tout comme pour l’UPS, ce scénario n’est pas actif par défaut (la case « Activer » n’est pas cochée). Une fois lancé, il est programmé pour s’exécuter toutes les 30 minutes.

Le fonctionnement de l’alerte est simple : elle envoie une notification par e-mail, SMS et via l’application mobile Jeedom. On voit ici que si la batterie de l’ordinateur portable commence à se décharger (parce que l’onduleur est épuisé), ce scénario éteindra Jeedom en toute sécurité lorsque le niveau de batterie passera en dessous de 30 %.
Conclusion et synthèse
En suivant ce guide, on dispose désormais d’une configuration robuste et intelligente pour surveiller à la fois l’onduleur et la batterie de l’ordinateur portable sur lequel tourne Jeedom. Cela permet à notre centrale domotique de continuer à fonctionner en toute sécurité en cas de coupure de courant, avec des notifications automatiques et des procédures d’arrêt propres pour protéger données et équipements.
Cette solution peut facilement être adaptée à d’autres scénarios :
- Surveillance des unités UPS distantes via NUT (voir les prochains articles)
- Combinaison avec le suivi de la consommation électrique (Comment surveiller la consommation électrique avec Jeedom et USB over IP)
- Ajouter davantage de logiques d’alerte ou d’arrêt à mesure que votre « maison intelligente » s’améliore
Tutoriels connexes sur ce blog :
- Surveillez votre consommation électrique avec Jeedom et USB over IP
- Jeedom : extension Bluetooth avec Raspberry Pi Zero
- Installation rapide : Raspbian sur Pi Zero
Further reading and resources:
- Documentation officielle NUT (EN)
- Guide d’installation de Debian NUT (FR)
- Documentation officielle Jeedom
Avez-vous déjà essayé une configuration similaire ou utilisez-vous Jeedom pour surveiller votre consommation électrique ? Partagez votre expérience, vos améliorations ou vos questions dans les commentaires ci-dessous !
Merci de votre attention.
