Onduleur avec apcupsd sous Linux, Windows et Jeedom

Introduction : Ce tuto va servir à connecter l’onduleur en USB à une machine linux et que Jeedom puisse arrêter proprement les autres appareils en cas de coupure électrique et pourquoi pas les redémarrer en cas de retour du courant.
Pour ce tuto, j’ai choisi de connecter l’onduleur sur un serveur linux debian, mais on peut très bien le connecter à la box Jeedom.

apcupsd, c’est quoi ?
apcupsd c’est un petit logiciel multiplate-forme qui permet de lire l’état de votre onduleur branché en USB et de diffuser cet état à d’autres ordinateurs ou appareils ayant aussi apcupsd d’installé. On peut aussi lui configurer des actions pour dire d’éteindre l’ordinateur si le niveau de la batterie est inférieure à 20% ou s’il reste moins de 5mn de vie de batterie par exemple. Chaque configuration est propre à chaque appareil (ordinateur).

Points communs à toutes les installations (Sauf Nas Synology) : Installer apcupsd

Debian en ssh :
sudo apt-get update
sudo apt-get install apcupsd


Windows :
Allez sur le site : http://www.apcupsd.org/
Menu Download -> Windows

Jeedom :
Installez le plugins apcupsd

Nas synology :
Jusqu’à maintenant, je n’ai pas trouver de moyens pour installer apcupsd dessus. Mais une solution existe, on peut exécuter un scénario dans jeedom (lorsque l’onduleur est en défaut de courant), et ce scénario va éteindre le Nas (et le rallumer si reprise de courant). Pour cela, il faut appliquer cette aide : https://www.pasteck.com/jeedom-pour-arreter-allumer-votre-nas-synology

Chaque appareil (ordinateur) peut-être un serveur et un client apcupsd.
Dans la logique on aura un seul serveur apcupsd et des clients qui vont recevoir l’état de l’onduleur branché sur le serveur apcupsd.

Que se soit sous linux ou Windows, vous aurez un fichier de configuration nommé apcupsd.conf.
Sous linux il est généralement ici : /etc/apcupsd/apcupsd.conf
Sous Windows dans le dossier d’installation, puis \apcupsd\etc\apcupsd\apcupsd.conf

Dans ce tuto on va considérer que le serveur s’arrêtera de lui même lorsque la

Configuration du serveur apcupsd :
Je suis donc sur ma machine linux debian, dont l’ip est 192.168.2.254 et l’onduleur est connecté en USB
Editer le fichier de configuration : sudo nano /etc/apcupsd/apcupsd.conf

Voici les paramètres à appliquer :
#Un nom pour identifier le serveur (optionnel)
UPSNAME nom_de_votre_choix
#Onduleur connecté en USB :
UPSCABLE usb
UPSTYPE usb
#Mettre DEVICE en commentaire
#DEVICE /dev/ttyS0
#Définit en tant que serveur (pensez à ouvrir le port TCP 3551 de votre firewall
NETSERVER on
NISIP 192.168.2.254

#Port par défaut du serveur (si vous le changer, il faudra le changer aussi sur les clients)
NISPORT 3551
#On arrête le serveur en cas de niveau de batterie <20% ou s'il reste moins de 5mn de vie de batterie
BATTERYLEVEL 20
MINUTES 5

#Optionnel, si sur batterie le temps maximum à attendre avant d'éteindre l'ordinateur (utile si l'onduleur est vieux et que le temps restant de batterie devient faux)
TIMEOUT 900


Lorsque tout est terminé
sudo nano /etc/default/apcupsd
Mettre ISCONFIGURED=yes

Puis redémarrer le service
systemctl restart apcupsd.service

Vérifiez le statut de l’onduleur :
sudo apcaccess

Et en cas de problèmes, les logs :
Statut du service :
systemctl status apcupsd.service

Et s’il y a des erreurs le fichier log :
tail /var/log/apcupsd.events

Configuration d’un client Linux ou Windows :
Installés apcupsd comme vu plus haut, et ouvrez le fichier de configuration.
Linux : sudo nano /etc/apcupsd/apcupsd.conf
Windows : {dossier d'installation}\apcupsd\etc\apcupsd\apcupsd.conf

Voici les paramètres à appliquer :
#Un nom pour identifier le client (optionnel)
UPSNAME nom_de_votre_choix

#Onduleur connecté en Réseau:
UPSCABLE ether
UPSTYPE net
DEVICE 192.168.2.254:3551


#En serveur, mais juste local (permet d'utiliser apcaccess sous Linux ou le client Windows) :
NETSERVER on
NISIP 127.0.0.1
NISPORT 3551

#On arrête le serveur en cas de niveau de batterie <30% ou s'il reste moins de 10mn de vie de batterie
BATTERYLEVEL 30
MINUTES 10
#Optionnel, si sur batterie le temps maximum à attendre avant d'éteindre l'ordinateur (utile si l'onduleur est vieux et que le temps restant de batterie devient faux)
TIMEOUT 600


Vous remarquerez que j’ai mis des valeurs plus importantes que pour le serveur pour MINUTES et BATTERYLEVEL et moins importantes pour TIMEOUT. C’est nécessaire pour que les clients apcupsd s’arrêtent avant le serveur apcupsd.

Lorsque c’est terminé.
Sous linux :
sudo nano /etc/default/apcupsd
Mettre ISCONFIGURED=yes

Puis redémarrer le service
systemctl restart apcupsd.service
Vérifiez le statut de l’onduleur :
Mais cette fois-ci, c’est le détail de l’apcupsd du serveur qui doit être affiché.
sudo apcaccess
Et en cas de problèmes, les logs :
Statut du service :
systemctl status apcupsd.service
Et s’il y a des erreurs le fichier log :
tail /var/log/apcupsd.events

Sous Windows :
Redémarrez le service Apcupsd :

Clic droit sur la ligne et redémarrer.

Lancez Apctray, s’il n’apparaît pas déjà à côté de l’horloge

A côté de l’horloge, faire un clic droit sur la petite prise électrique :

Vérifiez que « Start Automatically » est coché, et cliquez sur « Configure… »

Remplissez avec soit l’adresse IP du serveur apcupsd, ou 127.0.0.1
Je conseillerai plutôt 127.0.0.1 qui permettra de vérifier visuellement à tout moment que le service apcupsd local fonctionne et est connecté lui même au serveur 192.168.2.254 (car si on met directement le serveur apctray ne lira pas les infos de l’apcupsd local, mais seulement du serveur)

A tout moment, un clic droit sur l’icône -> Status, permettra de vérifier l’état de l’onduleur :

Configuration d’un client apcupsd dans Jeedom :
Installez le plugins apcupsd, et activez le.
Allez dans le menu Plugins -> Monitoring -> Onduleur (APC)
Ajouter un nouvel équipement, et configurez l’IP du serveur apcupsd (192.168.2.254)

Dans l’hypothèse ou Jeedom est aussi configuré avec la manière précédente, vous pouvez mettre 127.0.0.1 en IP serveur.

Ne reste plus qu’a aller dans les commandes et à cliquer sur Tester sur une commande pour vérifier que vous avez bien une remontée de valeur.

Vous n’avez plus qu’a vous créer un scénario avec comme déclencheur la commande Statut de l’équipement.
Personnellement je teste si la commande Statut est différent de « ONLINE ». Si c’est différent, c’est que quelque chose ne va pas (par exemple le statut est passé en ONBAT) et je passe une variable à un timestamp = #timestamp#+300
Du coup quand par la suite, ma variable est différente de 0, et qu’elle devient < à #timestamp#, je provoque l’arrêt des autres machines et du jeedom.

Test de défaut (coupure électrique) :
On va manuellement couper le courant derrière l’onduleur, mais pour éviter d’attendre la décharge de la batterie, on va aller modifier la variable TIMEOUT. Ce qui a pour incidence d’arrêter l’ordinateur en question après le nombre de secondes spécifiées dans TIMEOUT.

Ouvrez le fichier apcupsd (exemple sous linux) :
sudo nano /etc/apcupsd/apcupsd.conf
#Modifier le timeout
TIMEOUT 60


Redémarrez le service
systemctl restart apcupsd.service

Déconnecter l’onduleur et attendre les 60 secondes.
Pensez à remettre votre ancienne valeur après le test 🙂