Onduleur et Raspberry Pi, détecter et agir en cas de panne de courant
Dans cet article, nous allons voir comment faire communiquer un onduleur Eaton Ellipse 650 (mais le mode opératoire peut s'adapter à d'autres modèles d'onduleurs compatibles avec Linux) et un Raspberry Pi sous Raspbian. Le Raspberry Pi pourra alors accomplir une série d'actions : par exemple, dans le cas exposé ici, envoyer une notification de coupure électrique par courriel.
On commence par installer l'utilitaire NUT sous Linux :
aptitude install nut nut-usb
Puis on choisit le mode STANDALONE dans /etc/nut/nut.conf. Ensuite on ajoute un paragraphe correspondant à l'onduleur connecté en USB au Raspberry Pi dans /etc/nut/ups.conf :
[eaton] driver = usbhid-ups port = auto desc = "MGE UPS Systems"
On peut alors vérifier que la connexion à l'onduleur fonctionne par la commande :
/lib/nut/usbhid-ups -DDD -a eaton
SI l'utilitaire nous retourne une erreur similaire à "failed to claim USB device" alors cela peut signifier que les droits ne sont pas suffisants pour accéder à la ressource. On peut alors essayer la connexion avec la commande :
/lib/nut/usbhid-ups -DDD -u root -a eaton
Si cela fonctionne, on pourra alors régler (attention, c'est une méthode un peu brutale !) le problème en modifiant la section "usbfs-like devices" du fichier /lib/udev/rules.d/91-permissions.rules :
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \\ - MODE="0664" + MODE="0666"
(attention au risque potentiel de sécurité de cette modification, à n'effectuer qu'en connaissance de cause !)
Une fois l'onduleur correctement reconnu, on ajoutera un utilisateur à la liste des utilisateurs autorisés à se connecter au service de l'onduleur. Ce paramétrage s'effectue en modifiant le fichier /etc/nut/upsd.users - on ajoutera par exemple
[utilisateur] password = monmotdepasse upsmon master
Enfin, on modifiera le fichier /etc/nut/usbmon.conf pour modifier les options de suivi :
MONITOR eaton@localhost 1 utilisateur monmotdepasse master
On pourra spécifier un script spécifique à exécuter lors des événements électriques :
NOTIFYCMD /path/to/notification/script
Et on pourra modifier le contenu des messages à envoyer pour chaque événement électrique reconnu :
NOTIFYMSG ONLINE "Electrical power is back ON - UPS %s on line power" NOTIFYMSG ONBATT "Loss of electrical power - UPS %s on battery" NOTIFYMSG LOWBATT "Loss of electrical power continues - UPS %s"
Pour chaque état de l'onduleur, on pourra spécifier les actions à effectuer : - EXEC = exécuter le script de notification paramétré plus haut - SYSLOG = mentionner l'événement dans le syslog du système - WALL = faire apparaître le message dans la console de tous les utilisateurs connectés
NOTIFYFLAG ONLINE EXEC+SYSLOG+WALL NOTIFYFLAG ONBATT EXEC+SYSLOG+WALL NOTIFYFLAG LOWBATT EXEC+SYSLOG+WALL
On pourra par exemple utiliser un scrit de notification de la sorte :
#! /bin/bash #Send email with detailed UPS report o=$(upsc eaton) d=$(date) echo -e "$d" "\\n\\nEvent: " "$*" "\\n\\n======Details on UPS=====\\n" "$o" |mail -s "Evénement électrique" courriel@domain.tld #Add any other actions: send SMS, launch shutdowns of critical systems...
Bonne surveillance de votre onduleur !