Mot-clé - raspberrypi

Fil des billets

samedi 28 octobre 2017

Volumio over-the-air update, no SSH anymore?

What a surprise when I upgraded Volumio to the latest version (noteworthily to patch against the KRACK attack) and discovered that the SSH access was not activated anymore after a reboot!

It seems that the security-conscious Volumio team has decided to desactivate the SSH access by default, which makes sense. Although, it seems that the dev mode is activated by default (?) at http://ip.to.volumio/dev and permits the reactivation of SSH? Beware in an insecure context, Volumio was clearly built for a home-usage with low security constraints, one willing to go further will have no difficulties in increasing the level of security around Volumio (for example some filtering through a reverse proxy would certainly do a lot of good).

It is however quite easy to re-activate the SSH server: just create a "ssh" file in the /boot folder of Volumio. And reboot!

samedi 4 juin 2016

vnstat sur Raspberry Pi pour surveiller le trafic réseau

Nous allons voir ici comment installer vnstat pour surveiller le trafic réseau et afficher une petite page de synthèse sur l'utilisation du trafic. Cela peut-être utile par exemple pour mesurer le trafic traversant une passerelle Raspberry Pi construite tel que raconté ici.

vnstat en ligne de commande

Tout commence avec (e.g. sous Raspbian Jessie) :

apt install vnstat vnstati

Demandons alors à vnstat de créer une base de données du trafic pour l'interface que l'on veut surveiller :

vnstat -i eth0 -u

Désormais, un appel à la commande vnstat affiche en ligne de commande une synthèse sur le trafic réseau :

vnstat -u #Mise à jour des informations
vnstat #Affichage de la synthèse
Database updated: Sat Jun  4 13:02:00 2016

   eth0 since 29/05/16

          rx:  136.26 MiB      tx:  411.92 MiB      total:  548.18 MiB

   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
       May '16    134.72 MiB |  410.23 MiB |  544.94 MiB |    1.67 kbit/s
       Jun '16      1.55 MiB |    1.69 MiB |    3.24 MiB |    0.09 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated         8 MiB |       8 MiB |      16 MiB |

   daily
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
      29/05/16    134.72 MiB |  410.23 MiB |  544.94 MiB |   51.67 kbit/s
         today      1.55 MiB |    1.69 MiB |    3.24 MiB |    0.57 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated         1 MiB |       1 MiB |       2 MiB |

vnstat sur une page web

vnstati est une commande parente de vnstat qui génère une image de synthèse plutôt qu'un tableau. Pratique pour nous, êtres humains, qui aimons la bigarrure ! Alors demandons à vnstati de nous géréner quelques images à l'aide de ce script que l'on pourra placer dans cron :

#!/bin/bash
vnstat -u -i eth0
vnstati -s -i eth0 -o /var/www/html/summary.png
vnstati -h -i eth0 -o /var/www/html/hourly.png
vnstati -d -i eth0 -o /var/www/html/daily.png
vnstati -t -i eth0 -o /var/www/html/top10.png
vnstati -m -i eth0 -o /var/www/html/monthly.png

Et pour afficher ces images, nous allons utiliser une petite page web et nginx :

apt install nginx

puis remplaçons la page par défaut /var/www/html/index.nginx-debian.html par index.html contenant :

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Statistics</title>
</head>

<body>
<h2 align="center">Network Statistics</h2>
<hr align="center">
<p align="center"><img src="summary.png" alt="Summary"/><br/>
  Summary
</p>
<hr align="center">
<p align="center"><img src="hourly.png" alt="Traffic stats on a hourly basis for the last 24 hours "/><br/>
  Traffic stats on a hourly basis for the last 24 hours
</p>
<hr align="center">
<p align="center"><img src="daily.png" alt="Traffic stats on a daily basis for the last 30 days"/><br/>
  Traffic stats on a daily basis for the last 30 days
</p>
<hr align="center">
<p align="center"><img src="monthly.png" alt="Traffic stats on a monthly basis for the last 12 months"/><br/>
  Traffic stats on a monthly basis for the last 12 months
</p>
<hr align="center">
<p align="center"></p>
<p align="center"><img src="top10.png" alt="All time top 10 traffic days"/><br/>
  All time top 10 traffic days</p>
<hr align="center">
</body>
</html>

et si l'on pointe un navigateur vers l'adresse IP du Raspberry Pi, on voit alors s'afficher :

Screenshot_2016-06-04_15-28-00.png

Un Raspberry Pi en passerelle IPv4, pour surveiller des flux réseaux par exemple

Nous allons voir dans ce billet comment paramétrer un Rasperry Pi pour qu'il joue le rôle de passerelle IPv4. Attention, avec son interface ethernet 100 Mbps et sa puissance limitée, il est évident que le montage présenté ici peut convenir dans un environnement domestique mais sans doute pas au-delà.

Matériel

Prenons donc un Raspberry Bi (muni de Raspbian Jessie) et munissons-le d'un port ethernet USB. Le Pi dispose alors de 2 interfaces ethernet eth0 et eth1 :

pi-bi-eth.jpg

Il n'est pas obligatoire d'avoir deux interfaces réseaux mais cela est plus commode et permet un suivi plus fin du trafic (avec une seule interface, tout ce qui rentre ressort par la même interface et il est dès lors plus délicat de comparer flux entrants et flux sortants puisqu'ils s'annulent au niveau de l'interface unique.

Paramétrage du réseau

Attribuons des paramétrages réseau fixes à eth0 et eth1 dans /etc/dhcpcd.conf comme expliqué ici :

interface eth0
static ip_address=192.168.1.235/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

interface eth1
static ip_address=192.168.1.234/24

L'interface eth0 est paramétrée avec une IP fixe et utilise comme passerelle de sortie le routeur local (192.168.1.1 dans cet exemple). L'interface eth1 se voit attribuer seulement une adresse IP fixe mais pas de passerelle de sortie. Ainsi, la seule route vers l'extérieur passe au travers d'eth0, ce que nous confirme la commande ip route :

default via 192.168.1.1 dev eth0  metric 202 #La sortie par défaut via eth0, pas de sortie via eth1 !
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.235  metric 202 
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.234  metric 203

Il faut maintenant permettre au Raspberry Pi de faire transiter les paquets d'une interface à une autre. Pour ce faire, nous allons activer cette ligne dans /etc/sysctl.conf :

net.ipv4.ip_forward=1

et on ajoutera également ces 3 lignes pour s'assurer que le Raspberry Pi n'enseigne pas aux périphériques autour de lui à le "by-passer" (ce qu'un routeur fait par défaut pour garantir la performance et éviter les noeuds inutiles) :

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0

Pour activer cette configuration, on peut redémarrer ou exécuter :

sysctl -p

Désormais, le Raspberry Pi est capable de faire passer les communications d'eth1 à eth0 mais la route retour ne passe pas nécessairement par le Pi (le routeur n'a aucune raison, lui, de faire transiter le trafic retour vers le Pi s'il peut accéder directement au périphérique final ; évidemment ce cas ne se présente pas si le schéma de câblage fait du Pi le seul lien physique vers la porte de sortie).

Pour forcer la retour par le Pi, on exécutera cette commande iptables :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Désormais, tout ce qui sort par eth0 voit son adresse source modifiée (filtre MASQUERADE appliquée en POSTROUTING) pour correspondre à l'adresse du Pi : au retour les paquets passeront donc forcément par le Pi qui renverra ensuite vers la bonne destination.

Et sur les périphériques ?

Sur chaque périphérique, il est alors possible d'indiquer comme passerelle l'adresse IP du Pi sur eth1 soit 192.168.1.234 dans cet exemple. Chacun saura comment indiquer à son DHCP local si nécessaire de transporter cette information plutôt que celle par défaut. Dès lors, le Pi devient le point de passage obligé du trafic réseau.

Pour quoi faire ?

Par exemple, nous pouvons maintenant examiner le flux traversant, mesurer le débit avec iftop, couper l'accès à internet à certaines heures, ... On pourra par exemple installer vnstat sur le Pi pour afficher des statistiques d'usage de la bande passante. Les idées ne manquent pas :-)

dimanche 29 mai 2016

IP statique sur Raspbian Jessie : DHCPCD fait la loi !

Sur Raspbian Jessie, le système n'obéit pas au classique /etc/network/interfaces quand il s'agit de paramétrer le réseau ! Inutile donc de vous escrimer (comme moi) à modifier les paramétrages de ce fichier pour basculer vers une adresse statique au lieu du DHCP par défaut !

En effet, sur Raspbian Jessie, le réseau est paramétré par le service DHCPCD. C'est donc à son niveau qu'il faut agir.

Ainsi, pour attribuer une IP fixe au Pi, ouvrons le fichier /etc/dhcpcd.conf et ajoutons ces lignes à la fin du fichier :

interface eth0
static ip_address=192.168.1.234/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

lundi 31 août 2015

Boîtier pour Raspberry & Hifiberry Amp+

Nous évoquions dernièrement dans ces pages le circuit Hifiberry Amp+ susceptible de transformer un Raspberry Pi en petite chaîne hifi connectée : ici et ici.

Afin de ranger l'Hifiberry Amp+, nous avons conçu et imprimé en 3D une boîte adaptée au Rapsberry Pi couplé à l'Hifiberry. La conception est inspirée de "Raspberry Pi 2 (or B+) case with 75mm/100mm VESA mount" de 0110-M-P (Creative Commons - Attribution - Share Alike license). L'impression a été effectuée avec l'imprimante Arduino Materia 101.

20150831-Hifiberry-box-1.jpg

La boîte se compose de 3 parties :

  • la partie basse accueille le Raspberry Pi, elle est identique à celle du modèle de référence
  • la partie intermédiaire sert à augmenter la hauteur du boîtier d'origine pour accepter la carte d'extension
  • la partie supérieure comporte une ouverture pour accéder aux borniers de l'Hifiberry Amp+

Les fichiers de conception peuvent être téléchargés ici ou bien ci-dessous :

Quelques photos complémentaires :

20150831-Hifiberry-box-2.jpg

20150831-Hifiberry-box-3.jpg

20150831-Hifiberry-box-4.jpg

lundi 27 juillet 2015

Imprimer un espaceur pour le Raspberry et l'Hifiberry Amp+ avec Arduino Materia 101

Nous évoquions dans ces pages il y a quelques jours l'adjonction de l'Hifiberry Amp+ au Raspberry pour obtenir une station Hifi connectée. Le résultat global était très satisfaisant si ce n'est une résistance mécanique de l'ensemble un peu limitée : la plaque Hifiberry Amp+ n'est en effet fixée sur le Raspberry que par le bus couvrant les pins GPIO.

Qu'à cela ne tienne, imprimons en 3D des petits espaceurs en plastique qui maintiendront un écartement standard entre les 2 circuits imprimés. Le résultat ressemblera à cela :

20150727-espaceur.jpg

Etape 1 : modélisons l'espaceur sous Blender

Une rapide observation de la situation conduit à choisir un parallélépipède rectangle :

  • de base carrée 4 mm x 4 mm
  • de 10 mm de hauteur
  • avec sur chaque petite face (les carrés de 4*4) un cylindre de 2.5 mm de diamètre et 2.5 mm de haut

Après un peu de travail sous Blender, le résultat sort et semble très satisfaisant :

20150727-espaceur-blender.jpg

Etape 2 : préparons l'impression 3D avec Slic3r

Préparons ensuite le processus d'impression 3D en important le fichier Blender (préalablement converti sous la forme d'un .stl) sous Slic3r. Slic3r est un logiciel libre de grande qualité qui va décomposer la forme 3D en une suite de couches (des "slices" en anglais) et chaque couche va être décomposée en un "chemin" d'impression i.e. une suite des mouvements que fera la tête d'impression 3D.

On profite de cette étape pour vérifier l'échelle de l'objet (il doit mesurer 15 mm de long dans sa plus grande longueur, et 4 mm * 4 mm sur les deux autres faces => on utilisera la fonction "Scale" de Slic3r si la taille n'est pas correcte) et multiplier l'objet sur la plaque d'impression (fonction "More" de Slic3r).

20150727-espaceur-slic3r.jpg

Le processus de découpage se lance automatiquement et il est ensuite possible de vérifier le chemin de la tête d'impression couche après couche :

20150727-espaceur-sliced.jpg

Si l'on est satisfait, on exporte le fichier de commande pour l'imprimante 3D sous la forme d'un Gcode.

Etape 3 : impression avec Materia 101

Au moyen d'une carte SD, on introduit le Gcode dans l'imprimante Materia 101 et, après les préparatifs d'usage (préchauffage, introduction d'un filament de PLA, réalisation d'une "Test Plate" pour vérifier l'alignement en Z), on lance l'impression. 5 minutes plus tard, les 4 petits espaceurs sont prêts. Un petit coup de lime sur les cylindres permet de gommer les quelques aspérités créées lors de l'impression. Il ne reste plus que le montage du Raspberry et de l'Hifiberry Amp+ avec ces nouveaux espaceurs.

Les fichiers 3D pour les espaceurs

Les 3 fichiers ci-dessous sont bien sûr mis à disposition sous Creative Commons Attribution 4.0 International License.

samedi 18 juillet 2015

Transformer un Rasperry Pi en chaîne Hifi avec Hifiberry Amp+

D'aucuns trouveront la sortie audio Jack du Raspberry Pi un peu limitée... et pour cause ! Transformer le Pi en véritable ampli est attractif... Et c'est heureusement possible grâce au Hifiberry Amp+ vendu par la société helvète Hifiberry.

amp_plus-300x300.jpg

L'Hifiberry Amp+ se branche sur les pins GPIO du Raspberry Pi (B+ ou 2). Il permet alors de brancher les enceintes de son système Hifi sur le Pi.

Paramétrage du Pi

Dans /etc/modprobe.d/raspi-blacklist.conf, on peut commenter ces lignes pour ne plus 'blacklister' ces modules :

blacklist i2c-bcm2708
blacklist snd-soc-pcm512x
blacklist snd-soc-wm8804

Puis, dans /etc/modules, on commente également cette ligne :

snd_bcm2835

Ensuite, dans /boot/config.txt, on ajoute cette ligne en fin de fichier :

dtoverlay=hifiberry-amp

Enfin, dans /etc/asound.conf, on ajoute ces quelques lignes :

pcm.!default  {
 type hw card 0
}
ctl.!default {
 type hw card 0
}

Et voilà le Pi est alors capable d'émettre du son au travers de son amplificateur. Il ne reste plus qu'à brancher des enceintes pour profiter d'une musique de qualité !

Aller plus loin en transformant le Pi en chaîne Hifi connectée

On peut alors installer sur le Pi tout système de son choix pour une gestion facilitée de l'audio. On pourra par exemple déployer MPD ou Volumio. C'est l'objet d'un prochain article.

dimanche 23 novembre 2014

Température suivie avec un Raspberry Pi B+, une sonde DS18B20 et Munin

La sonde DS18B20 est une sonde de température 1-wire très facile d'utilisation avec le Raspberry Pi. Il y a de très nombreux sites et blogs qui en rapportent l'utilisation : par exemple http://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/ ou https://learn.adafruit.com/downloads/pdf/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing.pdf.

Je vais toutefois reprendre ici les principales étapes et me concentrer ensuite sur le suivi et l'affichage de la température via Munin.

Matériel

  • Un Raspberry Pi B ou B+ avec des GPIO libres
  • Une sonde DS18B20 (composant avec 3 pattes)
  • Une résistance 4.7 KOhms (des valeurs proches peuvent convenir également)
  • Quelques câbles

Montage électrique

Les sondes 1-wire peuvent être alimentées de 2 manières : en alimentant une des pattes à 3.3V ou bien en laissant le composant charger un condensateur avec les parasites ambiants et utilisant la charge de ce condensateur pour effectuer une messure. La 2e méthode a l'avantage de nécessiter un câble de moins dans l'installation mais il est possible qu'il faille être un peu plus patient pour effectuer des lectures de température (quelques secondes pour charger le condensateur selon le niveau des parasites).

Dans la suite, nous alimenterons directement le composant en 3.3V.

Nous allons donc simplement connecter :

  • la masse du capteur à un pin de masse
  • l'alimentation du capteur au pin 3.3V du Raspberry Pi
  • la patte centrale (lecture) au GPIO 4

et nous allons ajouter la résistance de 4.7KOhms en parallèle avec la sonde i.e. entre l'alimentation 3.3V et la ligne de lecture.

raspberry-pi-ds18b20-connections.jpg (image empruntée sur http://www.reuk.co.uk/DS18B20-Temperature-Sensor-with-Raspberry-Pi.htm)

Attention à ne pas inverser la masse et l'alimentation - cela pourrait endommager le composant. On peut se référer à cette documentation pour être certain de ne pas se tromper : http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf. La masse se trouve sur la patte de gauche quand on regarde la face plate du composant avec les pattes vers le bas.

Paramétrons le Pi

On peut alors brancher le Pi, se connecter en SSH et charger les modules nécessaires à la lecture des GPIO :

modprobe w1-gpio
modprobe w1-therm

Il faut aussi modifier le fichier /boot/config.txt et ajouter cette ligne :

dtoverlay=w1-gpio

Pour ne pas avoir à les charger à nouveau à chaque re-démarrage du Pi, on ajoutera les 2 lignes suivants au fichier /etc/modules :

w1-gpio
w1-therm

Remarque : si vous prévoyez plus de 10 sondes, il est possible qu'il faille ajouter un fichier wire.conf dans /etc/modprobe.d avec ce contenu :

options wire max_slave_count=50

Si tout fonctionne, on doit alors voir un dossier au nom de la sonde apparaître dans le dossier /sys/bus/w1/devices :

cd /sys/bus/w1/devices
ls
>> 28-000005330085 w1_bus_master1

'' 28-000005330085'' est le nom de la sonde installée. Si nous avions plusieurs sondes sur le bus, nous verrions un dossier avec un nom unique pour chaque sonde. Si on entre dans le dossier, on accède aux différentes valeurs retournées par la sonde : le fichier w1_slave contient la température sur la 2e ligne en millièmes de degré Celsius :

4c 01 4b 46 7f ff 04 10 f5 : crc=f5 YES
4c 01 4b 46 7f ff 04 10 f5 t=20750

La petite ligne bash suivante (en remplaçant bien sûr le nom de ma sonde par celui de la vôtre !) extrait alors la température en °C :

cat /sys/bus/w1/devices/28-000005330085/w1_slave | grep "t=" | awk -F "t=" '{print $2/1000}'
>> 20.75

Relevons la température avec Munin

J'ai déjà évoqué Munin ici. Munin est un logiciel utilisé par le adminsys pour suivre les variables vitales de serveurs. Mais l'outil peut tout à fait être utilisé aussi pour suivre n'importe quelle variable accessible sur un ordinateur, par exemple la valeur de la température relevée par notre sonde !



Je ne détaillerai pas ici le paramétrage du serveur Munin (qui récolte régulièrement les données des clients, génère les graphes et les rend disponibles au travers d'un serveur http) mais seulement du client Munin.

On installe un client (noeud dans le vocabulaire de Munin) sur le Pi avec cette commande :

aptitude install munin-node

Le noeud/client munin fonctionne en récoltant les variables de scripts stockés dans /etc/munin/plugins : par défaut les plugins seront en fait des liens relatifs vers les scripts par défaut disponibles dans /usr/share/munin/plugins/. Si vous ne souhaitez suivre aucune variable vitale du Pi, vous pouvez supprimer tous les liens dans /etc/munin/plugins (si vous changez d'avis il suffira de les reprendre depuis /usr/share/munin/plugins).

Nous allons donc créer un nouveau script Munin pour collecter la température. Les scripts Munin sont tout simples - ils comprennent 2 parties : une partie qui décrit le graphique (et les éventuelles options graphiques que l'on souhaite voir appliquées) et une seconde partie imprime chaque variable et sa valeur sur chaque ligne. Par exemple, le script "memory" de Munin retourne les valeurs suivantes :

slab.value 8949760
swap_cache.value 0
page_tables.value 638976
vmalloc_used.value 954368
apps.value 21979136
free.value 291938304
buffers.value 35708928
cached.value 99397632
swap.value 0
committed.value 51347456
mapped.value 6803456
active.value 64913408
inactive.value 85291008

Nous allons donc générer un script qui imprime la valeur de notre sonde de la même façon dans /etc/munin/plugins :

nano temperature_1

et voici le contenu du script :

#!/bin/sh

case $1 in
   config)
        cat <<'EOM'
graph_title Temperature probe 1
graph_vlabel temperature_1
temperature_1.label temperature_1
EOM
        exit 0;;
esac

printf "temperature_1.value "
cat /sys/bus/w1/devices/28-000005330085/w1_slave | grep "t=" | awk -F "t=" '{print $2/1000}'

Si on exécute ce script (./temperature_1) voici la sortie :

temperature.value 21.5

On peut alors redémarrer le client Munin.

Lors de la prochaine collecte des données, le serveur Munin viendra récupérer la sortie du script temperature_1 et proposera alors les graphes standards de Munin pour cette valeur.

Si l'on dispose de plusieurs sondes, on peut alternativement multiplier les scripts (un script par sonde) ou alors demander au script d'imprimer les valeurs de chacune des sondes : les différentes valeurs seront alors affichées sur un même graphe !

ambient_temperature-day.png

Bon suivi de température !

dimanche 13 octobre 2013

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 !