hjstein@math.huji.ac.il
, Berger
Financial Research, Ltd.
adaptation fran�aise B.Choppy, 10 mai 1998Ce HOWTO concerne la connexion d'un onduleur sur un PC sous Linux. L'id�e est d'�tablir la connexion de telle sorte que Linux puisse s'arr�ter proprement lorsque le courant s'arr�te.
Cela inclut la r�f�rence � des paquetages logiciels existants facilitant l'�tablissement de ce genre de communications, et la mani�re dont celles-ci sont r�alis�es. Ce dernier point est souvent superf�tatoire si vous pouvez trouver un paquetage tout configur� pour votre onduleur. Sinon, il vous faudra lire ce qui suit.
Dans une large mesure, le pr�sent document est encore plus redondant que lorsque j'en ai �crit la premi�re version en 1994. Toutes les informations de base ont toujours �t� pr�sentes dans les pages de man de powerd fournies avec le paquetage SysVinit. Alors qu'en 1994 il arrivait souvent que les distributions ne comportent m�me pas lesdites pages de man, je ne crois pas que ce soit encore le cas.
De plus, lorsque j'ai �crit la premi�re version de ce Howto, il n'existait aucun autre logiciel que powerd pour la communication et le contr�le entre Linux et les onduleurs. Maintenant, il existe un certain nombre de paquetages de contr�le d'onduleurs dans le r�pertoire UPS de Sunsite.
Malgr� tout, je continue � maintenir le Howto des onduleurs. Pourquoi donc ? Eh bien :
Je suis d�biteur � vie de ceux dont j'ai re�u de l'aide, des suggestions, ainsi que des donn�es sp�cifiques d'onduleurs. La liste inclut :
Notez que les adresses e-mail apparaissant dans les extraits de courriers ci-apr�s peuvent �tre obsol�tes. Ce qui pr�c�de l'est propablement aussi, mais quelques-unes sont plus r�centes que ce qui se trouve plus bas.
Mes excuses aussi � quiconque j'aie oubli� de citer dans cette liste. Envoyez-moi un e-mail et je vous ajouterai.
Je ne peux r�ellement pas garantir que quelque partie de ceci fonctionne pour vous. Connecter un onduleur � un ordinateur peut �tre un travail d'astuce. L'un ou l'autre, ou les deux peuvent br�ler, exploser, mettre le feu, ou commencer la Troisi�me Guerre Mondiale. De plus, je n'ai une exp�rience directe que de l'onduleur Advice 1200 A, et je n'ai pas eu � fabriquer de c�ble. Donc, SOYEZ PRUDENT, RASSEMBLEZ TOUTE L'INFORMATION POSSIBLE SUR VOTRE ONDULEUR. REFLECHISSEZ D'ABORD. NE CROYEZ PAS A PRIORI CE QUE VOUS LISEZ ICI NI AILLEURS.
D'un autre c�t�, j'ai r�ussi � tout faire fonctionner avec mes onduleurs, sans beaucoup d'informations des constructeurs, et sans faire fumer quoi que ce soit, donc c'est possible.
Ce document ne traite pas des fonctions et possibilit�s g�n�rales des onduleurs. Pour ce genre d'informations, voyez la Foire Aux Questions La FAQ UPS. Elle peut aussi �tre trouv�e sur ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/comp/answers/UPS-faq. Elle est maintenue par Nick Christenson, mais semble n'avoir pas �t� mise � jour depuis 1995. Si vous lui envoyez un e-mail, il souhaiterait qu'apparaisse UPS ou UPS FAQ ou quelque chose de similaire dans la ligne Subject de votre message.
Il y a aussi de plus en plus de constructeurs d'onduleurs pr�sent sur le Net. Certains d'entre aux fournissent r�ellement des informations utiles sur leur site Web. Une liste pratique des sites web des constructeurs est disponible sur R�pertoire des onduleurs. Le m�me site propose aussi une FAQ des onduleurs.
Je viens de d�couvrir qu'une partie de la documentation ci-dessous est obsol�te. En particulier, le daemon init fourni avec le dernier paquetage sysinit est plus sophistiqu� que ce que j'ai d�crit. Bien qu'il semble que la compatibilit� ascendante soit assur�e pour ce qui est �crit ici, il appara�t que certaines fonctions non document�es sont tr�s importantes pour la gestion des onduleurs.
Le m�canisme de contr�le indiqu� ci-apr�s permet seulement � powerd d'envoyer � init un des messages powerfail ou powerok. init ex�cute une commande lorsqu'il re�oit powerfail et une autre lorsqu'il re�oit powerok. Cela complexifie la logique de powerd pour la gestion des signaux de batterie faible et autres sortes de situations sp�ciales.
Les nouvelles versions d'init (depuis la version 2.58, apparemment) sont plus sophistiqu�es. Il est possible de leur demander d'ex�cuter un script parmi trois. Ainsi, init peut avoir un script powerfail pour traiter une coupure de courant, un script powerfailnow pour r�aliser un arr�t imm�diat et un script powerok pour bloquer tout arr�t en cours. C'est nettement plus propre que les circonvolutions n�cessaires avec le m�canisme d�taill� plus bas.
Bien qu'une grande partie du document soit fond�e sur l'ancienne m�thode de communication avec init, je viens d'ajouter deux nouvelles sections dans lesquelles les auteurs utilisent la nouvelle m�thode. Il s'agit de Trust Energy Protector 400/600 et APC Smart-UPS 700. La premi�re est particuli�rement d�taill�e. Les deux comportent un powerd.c qui demande � init un shutdown imm�diat lorsqu'un signal de batterie faible est re�u, ainsi que les lignes correspondantes de /etc/inittab. Pour tout le reste, je peux juste vous dire de regarder dans le code source de init.
Aussi, pour autant que je sache, de nombreux paquetages cit�s ci-dessous utilisent aussi la nouvelle m�thode de communication.
NdT : Il semble que la plupart des contributeurs � ce Howto s'appuient sur le red�marrage de l'ordinateur (/sbin/reboot
), coupl� � une temporisation, pour r�aliser l'extinction de l'onduleur. Cette m�thode semble hasardeuse. Le traducteur propose humblement au lecteur d'�tudier la possibilit� de remplacer la relance compl�te (reboot
) par un arr�t syst�me propre (shutdown -h
) ou moins propre (halt
). Cette m�thode permet d'�viter totalement le risque que l'onduleur s'arr�te "trop tard" dans le processus de d�marrage de l'ordinateur (i.e. lorsque les syst�mes de fichiers sont d�j� mont�s).
Les onduleurs peuvent se classer dans deux cat�gories : "intelligents" ou "b�tes". La diff�rence entre les deux r�side dans la quantit� d'informations que l'on peut obtenir de et le niveau de contr�le que l'on peut exercer sur l'onduleur.
Habituellement, les onduleurs intelligents peuvent fonctionner en mode b�te. C'est utile, car pour autant que je sache, les entreprises qui construisent les onduleurs les plus populaires (notamment APC) ne diffusent leur protocole de communication qu'aux entreprises qui signent un accord de confidentialit�.
Autant que je sache, les seuls onduleurs intelligents avec lesquels il soit simple de communiquer sont ceux faits par Best. De plus, Best documente compl�tement le mode intelligent (ainsi que le mode b�te) et fournit le source de programmes qui communiquent avec leurs onduleurs.
Tous les paquetages indiqu�s dans la section Logiciels communiqueront avec les onduleurs en mode b�te. C'est tout ce dont on a r�ellement besoin. Ceux sp�cifiques des onduleurs APC annoncent diverses possibilit�s d'utilisation en mode intelligent, mais je ne sais pas exactement ce qu'ils permettent. Une impl�mentation compl�te vous affichera une fen�tre avec toutes sortes de jauges affichant diverses statistiques de l'onduleur, telles que charge, temp�rature int�rieure, historique des coupures, voltages d'entr�e et de sortie, etc. Il semble que le paquetage smupsd-0.9-1.i386.rpm (section Logiciels se rapproche de cela. Je ne suis pas s�r pour les autres.
Le reste de ce document est essentiellement limit� � la configuration de votre syst�me avec un onduleur b�te. L'id�e g�n�rale est � peu pr�s la m�me avec un onduleur intelligent, mais les d�tails de fonctionnement de powerd et le type de c�ble sont diff�rents pour un onduleur intelligent.
Fondamentalement, tout ce qu'il vous faut est un ex�cutable powerd, habituellement plac� dans /sbin/powerd. Il fait habituellement partie du paquetage SysVinit. Pour autant que je sache, toutes les distributions actuelles de Linux contiennent une version r�cente de SysVinit. Les versions tr�s anciennes ne comportaient pas powerd.
Le seul probl�me que vous puissiez rencontrer est que votre c�ble ne corresponde pas � la configuration de powerd, auquel cas vous devrez, soit rebrocher votre c�ble, soit trouver une copie de powerd.c et le modifier pour le faire fonctionner avec votre c�ble. Ou, pour cela, vous pouvez toujours utiliser l'un des paquetages suivants, dont de nombreux permettent la configuration du c�ble.
Comme indiqu�, une alternative au powerd du paquetage SysVinit est l'utilisation de l'un des paquetages disponibles maintenant. il existe de nombreux paquetages qui aident � configurer la communication entre l'ordinateur et un onduleur. Aucun d'entre eux n'�tait disponible lorsque j'ai �crit ce Howto pour la premi�re fois, c'est pourquoi j'ai eu � l'�crire. En fait, il y a de bonnes chances que vous puissiez utiliser l'un de ces paquetages logiciels et �viter totalement le pr�sent Howto !
Au 15 mars 1997 � peu pr�s, le r�pertoire UPS de Sunsite disposait d'un certain nombre de paquetages. D'autres sites semblent avoir aussi des paquetages de contr�le d'onduleurs. Voici ce que j'ai trouv� (tous sur Sunsite sauf deux) :
Un paquetage de contr�le des onduleurs intelligents APC Smart-UPS. Il semble suivre basiquement le BUPS-Howto (Back-UPS-Howto, inclus ci-apr�s), mais semble aussi disposer d'une sorte de signal de batterie faible.
Le fichier .lsm dit qu'il s'agit du m�me paquetage que le pr�c�dent, sous forme de .tar.gz dans un .tar.gz ! La documentation est l�g�re. Il semble g�rer les onduleurs APC dans les deux modes b�te et intelligent, mais je ne peux m'en assurer.
Un autre paquetage de contr�le des onduleurs APC Smart-UPS. Semble inclure une sorte de support ma�tre/esclave (i.e. une machine en pr�vient une autre de s'arr�ter lorsque le courant est coup�). Semble utiliser les onduleurs en mode intelligent, par opposition � la bascule des lignes modem.
L'auteur ( David E. Myers) �crit :
smupsd surveille un APC Smart-UPS[TM] sous Red Hat[TM] Linux. Si le courant est coup�, smupsd arr�tera le syst�me et l'onduleur de mani�re correcte.
smupsd a les fonctionnalit�s suivantes :
Un paquetage g�n�ral de gestion d'onduleurs. Inclut des configurations pour beaucoup d'onduleurs - deux pour TrippLite et trois pour APC. Contient une bonne documentation. Un bon achat.
Un powerd de remplacement de celui du paquetage SysVinit. A l'oppos� des commentaires de la documentation, il ne semble pas avoir �t� fusionn� avec ce dernier (du moins jusqu'� la version 2.62). Ses avantages r�sident dans le fait qu'il puisse agir comme serveur pour d'autres powerd tournant sur d'autres machines (lorsque plusieurs machines d'un r�seau partagent le m�me onduleur) et �tre configur� par le biais d'un fichier - le source ne n�cessite donc ni �dition ni recompilation.
Un autre powerd de remplacement. Semble �tre assez comparable en fonctionnalit�s avec powerd-2.0.tar.gz.
Ce paquetage est destin� � contr�ler les onduleurs Best. Il provient directement du site Web de Best. Comporte des binaires pour de nombreux unix mais, plus important, inclut le code source, il est donc possible de l'essayer sous Linux, et s'il ne fonctionne pas, de tenter de le corriger. Le source inclut aussi bien les "contr�les de base (basic checkups)" que les "contr�les avanc�s (advanced checkups)" qui sont un peu plus sophistiqu�s - ils d�clenchent un shutdown lorsque l'onduleur indique une dur�e d'alimentation restante de X minutes, plut�t qu'au bout de Y minutes apr�s la coupure de courant. Le programme de contr�les avanc�s d�clenche aussi sur diverses alarmes telles que "temp�rature ambiante �lev�e", "batterie proche du minimum", "tension de sortie faible" ou "alarme test d�clench�e par l'utilisateur".
Un paquetage qui peut bien se trouver sur Sunsite � l'instant o� vous lisez ceci. C'est une paire de modules de communication qui travaillent avec les onduleurs Best Ferrups. Il g�re l'onduleur en mode intelligent. Il inter-op�re correctement avec powerd-2.0 - utile si vous avez un gros Ferrups pour toutes les machines d'un r�seau.
Note : ce paquetage doit encore �tre charg� vers Sunsite. Je continue � presser l'auteur de le finir et de le charger, mais il doit encore en trouver le temps.
Deltec Electronics (et Exide) vendent un paquetage logiciel appel� LanSafe III. Il existe une version Linux. Il est fourni avec leurs onduleurs. Ils disent qu'il fonctionne aussi avec d'autres onduleurs (en mode b�te).
L'auteur ( Andre Hedrick) �crit :
apcupsd-2.1.tar.gz remplace Enhanced_APC_UPSD.tar.gz.
C'est un paquetage tr�s complet pour les onduleurs APC. Il g�re toute leur gamme. J'ai maintenant ajout� un mode intelligent au paquetage et un support pour les c�bles APC ou maison si aucun c�ble APC n'est g�r�.
Du fichier .lsm :
Un powerd et un utilitaire graphique sous X11 qui vous montre les voltages, fr�quences, pourcentages de charge et niveau de batterie en temps r�el. Les protocoles "Safeware" et "Tripplite" sont g�r�s. Source et binaires ELF.
Du fichier .lsm :
Programme qui interagit avec les sauvegardes batteries (onduleurs Powerbox).
Du fichier .lsm :
uvsd est un daemon qui surveille l'�tat d'un onduleur et r�agit aux changements d'�tats (coupure de courant, retour du courant, batterie faible). Vous pouvez �crire vos propres scripts qui sont appel�s dans ces cas. Il ne n�cessite pas SysVinit.
Notez que j'ai seulement jet� un coup d'oeil aux paquetages. Je ne les ai pas utilis�s. Nous �tions proches d'utiliser bestups-0.9.tar.gz et powerd-2.0.tar.gz mais nous ne l'avons jamais fait.
Ce chapitre est sp�cifiquement destin� au contr�le des onduleurs b�tes. N�ammoins, une grande partie du processus est � peu pr�s identique pour les onduleurs intelligents. La principale diff�rence r�side dans la mani�re dont le daemon (typiquement powerd) de surveilance communique avec l'onduleur.
Avant de faire quoi que ce soit, je sugg�re l'algorithme suivant :
Lorsque le courant s'arr�te, l'onduleur continue d'alimenter le PC et signale l'arr�t du courant par bascule d'un relais ou d'un optocoupleur sur son port de contr�le.
Le c�ble est con�u de telle mani�re que lorsque l'onduleur bascule ledit relais, cela monte un signal de contr�le particulier de la ligne s�rie (typiquement DCD, d�tection de porteuse)
Le daemon powerd contr�le le port s�rie.
Il maintient lev�s/baiss�s les signaux de contr�le du port s�rie dont
l'onduleur a besoin (typiquement DTR, Terminal de Donn�es Pr�t,
doit rester lev�, et touts les signaux qui coupent l'onduleur
doivent �tre maintenus baiss�s).
Lorsque powerd voit le signal de contr�le de l'onduleur monter,
il �crit FAIL
dans /etc/powerstatus
et envoie un signal
SIGPWR
au process init (les anciennes versions de powerd
et init �crivent dans /etc/powerfail
).
Lorsque le signal de contr�le redescend, il �crit OK
dans
/etc/powerstatus
et envoie un signal SIGPWR
� init.
Lorsqu'il re�oit un signal SIGPWR
, il regarde dans /etc/powerstatus
.
Si celui-ci contient FAIL
, il ex�cute l'entr�e powerfail
du fichier
/etc/inittab
.
S'il contient OK
, il ex�cute l'entr�e powerokwait
de inittab
.
Ce qui suit pr�suppose que vous disposez d'un c�ble qui fonctionne correctement avec powerd. Si vous n'en �tes pas s�r, voyez la section : Analyse de c�bles et modification de powerd.c pour toute information sur les c�bles mal d�crits et la reconfiguration de powerd. Les sections Assignement des broches du port s�rie et Correspondance entre ioctl et RS232 seront aussi utiles.
Si vous devez fabriquer un c�ble, voyez la section : Comment r�aliser un c�ble ? pour les d�tails g�n�raux, et la sous-section de : Informations sur un certain nombre d'onduleurs qui se rapporte � votre onduleur. Cette derni�re peut aussi contenir des informations sur les c�bles fournis par le constructeur. Vous voudrez probablement parcourir toute la section Informations sur un certain nombre d'onduleurs car chaque section contient quelques d�tails suppl�mentaires g�n�ralement utiles.
/etc/inittab
. Placez-y quelque chose de ce genre :
# Que faire si le courant s'arrete
# (arreter le systeme et vider la batterie :) :
pf::powerfail:/etc/powerfailscript +5
# Si le courant revient avant la fin du shutdown, arreter celui-ci
pg:0123456:powerokwait:/etc/powerokscript
/etc/powerfailscript
et
/etc/powerokscript
pour arr�ter le syst�me apr�s cinq minutes, ou
mener toute action appropri�e, et tuer le shutdown en cours, respectivement.
En fonction de votre version de shutdown, cela sera, soit si trivial que vous
n'aurez m�me pas � �crire de script, soit un script d'une ligne bash,
quelque chose du genre :
kill `ps -aux | grep "shutdown" | grep -v grep | awk '{print $2}'`
et vous conserverez les scripts (au cas où cela ne vous arriverait pas dans un
parfait �tat, la premi�re apostrophe sur la ligne ci-dessus est une quote invers�e,
la seconde et la troisi�me sont des apostrophes, et la derni�re est aussi une
quote invers�e).
inittab
avec :
telinit q
powerd <ligne>
Remplacez <ligne>
par le port s�rie modem sur lequel sera
connect� l'onduleur, comme dans : /dev/cua1
.
/etc/powerfailscript
est lanc�,/etc/powerokscript
est lanc�,/etc/powerfailscript
n'est pas lanc�,F�licitations ! Vous avez maintenant un PC sous Linux prot�g� par onduleur qui va s'arr�ter proprement lors d'une coupure de courant !
powerd.c
pour surveiller la ligne indiquant un faible
niveau de batterie.
Dans ce cas, ex�cutez un shutdown immediate ;Cette section est juste compos�e de messages que j'ai vus sur le Net. Je ne l'ai pas r�alis�, donc je ne peux parler d'exp�rience. Si quelqu'un le peut, qu'il �crive cette section pour moi :). Voir aussi le message concernant le GPS1000 dans la section GPS1000 d'ACCODATA pour ne pas citer toutes les donn�es sp�cifiques de la section Informations sur un certain nombre d'onduleurs
>From miquels@caution.cistron.nl.mugnet.org Wed Jul 21 14:26:33 1993
Newsgroups: comp.os.linux
Subject: Re: Interface onduleur pour Linux ?
From: miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg)
Date: Sat, 17 Jul 93 18:03:37
Distribution: world
Organization: Cistron Electronics.
Dans l'article <1993Jul15.184450.5193@excaliber.uucp>
joel@rac1.wam.umd.edu (Joel M. Hoffman) ecrit :
>Je ne vais pas tarder a acheter un onduleur, et ai remarque que certains
>d'entre eux ont des interfaces reseau pour prevenir celui-ci lorsque le
>courant est coupe.
>
>Y a-t-il une telle interface pour Linux ?
>
>Merci..
>
>-Joel
>(joel@wam.umd.edu)
>
Lorsque je travaillais sur la derniere version de SysVinit (2.4
actuellement), j'ai eu temporairement un onduleur sur mon ordinateur,
donc j'ai ajoute le support de celui-ci.
Tu as peut-etre vu que dans le dernier fichier d'en-tete <signal.h>,
il y a maintenant un #define SIGPWR 30 :-).
Malgre tout, je n'avais pas une telle interface speciale,
mais la sortie de nombreux onduleurs est juste un relais qui s'ouvre ou se
ferme en cas de coupure de courant.
J'ai reflechi a une methode simple pour connecter ca sur la ligne DCD du
port serie.
Dans le paquetage SysVinit, il y a un demon appele "powerd" qui garde
un oeil sur cette ligne serie et envoie SIGPWR a init lorsque l'etat
change, pour qu'init puisse faire quelque chose (comme arreter le systeme
dans les 5 minutes).
La methode de connexion de l'onduleur a la ligne serie est decrite dans le
source "powerd.c", mais je vais le dessiner ici pour explications :
+------------------------o DTR
|
+---+
| | resistance
| | 10 kilo-Ohm
| |
+---+ Vers le port serie
|
+-----o-------+------------------------o DCD
| |
o relais |
\ de l' |
\ onduleur |
| |
+-----o-------+------------------------o GND
Joli dessin, hein ?
J'esp�re que cela peut etre utile.
SysVinit peut etre trouve sur sunsite (et tsx-11 probablement) dans
SysVinit2.4.tar.z
Mike.
--
Miquel van Smoorenburg, <miquels@cistron.nl.mugnet.org>
Ibmio.com: cannot open CONFIG.SYS: file handle broke off.
>From danny@caution.cistron.nl.mugnet.org Wed Jul 21 14:27:04 1993
Newsgroups: comp.os.linux
Subject: Re: Interface onduleur pour Linux ?
From: danny@caution.cistron.nl.mugnet.org (Danny ter Haar)
Date: Mon, 19 Jul 93 11:02:14
Distribution: world
Organization: Cistron Electronics.
Dans l'article <9307174330@caution.cistron.nl.mugnet.org>
miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg) ecrit :
>La methode de connexion de l'onduleur a la ligne serie est decrite dans le
>source "powerd.c", mais je vais le dessiner ici pour explications :
Le dessin n'etait pas vraiment clair, utilisez plutot celui-ci !
>
> +------------------------o DTR
> |
> +---+
> | | resistance
> | | 10 kilo-Ohm
> | |
> +---+ Vers le port serie
> |
> +-----o-------+------------------------o DCD
> |
> o relais
> \ de l'
> \ onduleur
> |
> +-----o--------------------------------o GND
>
Le DTR est maintenu haut.
Lorsque le courant de l'onduleur s'arrete, le relais se ferme.
L'ordinateur controle la descente de la ligne DCD.
Lorsque cela arrive, il lance une sequence shutdown...
_____
Danny
--
<=====================================================================>
Danny ter Haar <dannyth@hacktic.nl> or <danny@cistron.nl.mugnet.org>
Robins law #103: 'a couple of lightyears can't part good friends'
Essayez d'obtenir la documentation des c�bles que votre revendeur d'onduleurs fournit. En particulier, recherchez :
Il vous faut ensuite modifier powerd.c
en cons�quence, ou utiliser
l'un des paquetages configurables cit�s plus haut (voir
genpower-1.0.1.tgz, power-2.0.tar.gz ou upsd-1.0.tgz
d�crits dans la section
Logiciels.
Si vous utilisez l'un des paquetages, suivez les instruction correspondantes.
Si vous voulez bidouiller powerd.c
, lisez ce qui suit.
Si vous avez des probl�mes pour obtenir les informations pr�cit�es, ou si vous voulez juste les contr�ler (une bonne id�e), le programme suivant peut vous y aider. C'est une version bidouill�e de powerd.c. Il vous permet de positionner les signaux du port depuis la ligne de commande, puis il contr�le le port, en affichant l'�tat des signaux chaque seconde. Je l'ai utilis� en "upscheck /dev/cua1 2" (par exemple) pour monter le deuxi�me bit (DTR) et descendre les autres. Le nombre en base 2 indique les bits � monter, ainsi par exemple pour monter les bits 1, 2 et 3 (et descendre les autres), utilisez 7. Voir le code pour les d�tails.
Voici le programme (non test�) upscheck.c. Il n'est pas test� car j'ai modifi� la version que j'avais utilis�e au d�part pour le rendre plus clair, et que je ne peux tester la nouvelle version pour le moment.
NdT : La traduction des commentaires et messages peut aussi avoir alt�r� le comportement du programme.
/*
* upscheck Controle comment l'ordinateur et l'onduleur communiquent
*
* Usage: upscheck <peripherique> <bits a monter>
* Par exemple, upscheck /dev/cua4 4 pour monter le bit 3 et
* controler /dev/cua4.
*
* Author: Harvey J. Stein <hjstein@math.huji.ac.il>
* (mais en realite juste une modification mineure de Miquel van
* Smoorenburg's <miquels@drinkel.nl.mugnet.org> powerd.c
*
* Version: 1.0 19940802
*
*/
#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
/* Programme principal. */
int main(int argc, char **argv)
{
int fd;
/* Ces parametres TIOCM_* sont definis dans <linux/termios.h>, qui */
/* est inclus indirectement ici. */
int dtr_bit = TIOCM_DTR;
int rts_bit = TIOCM_RTS;
int set_bits;
int flags;
int status, oldstat = -1;
int count = 0;
int pc;
if (argc < 2) {
fprintf(stderr, "Usage: upscheck <peripherique> <bits-a-positionner>\n");
exit(1);
}
/* Ouvre le peripherique a controler. */
if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) {
fprintf(stderr, "upscheck: %s: %s\n", argv[1], sys_errlist[errno]);
exit(1);}
/* Recupere les bits a positionner sur la ligne de commande */
sscanf(argv[2], "%d", &set_bits);
while (1) {
/* Positionne les bits specifies sur la ligne de commande (et */
/* seulement eux). */
ioctl(fd, TIOCMSET, &set_bits);
fprintf(stderr, "Positionnement de %o.\n", set_bits);
sleep(1);
/* Recupere les bits actuellement positionnes */
ioctl(fd, TIOCMGET, &flags);
fprintf(stderr, "Les signaux sont %o.\n", flags);
/* Piochez ici en changeant TIOM_CTS par un autre TIOCM jusqu'a */
/* ce que le programme detecte que le courant est coupe lorsque */
/* vous debranchez l'onduleur. Ensuite, vous saurez comment */
/* modifier powerd.c */
if (flags & TIOCM_CTS)
{
pc = 0 ;
fprintf(stderr, "Le courant est la.\n");
}
else
{
pc = pc + 1 ;
fprintf(stderr, "Le courant est coupe.\n");
}
}
close(fd);
}
La section qui pr�c�de pr�suppose la connaissance de la correspondance entre les signaux de terminal et les broches du port s�rie. Voici une r�f�rence de cette correspondance, reprise du document de David Tal : "C�bles et connecteurs fr�quemment utilis�s". J'inclus un diagramme illustrant les connecteurs, et une table donnant la corresopondance entre les num�ros de broches et les signaux de ligne de terminal.
Si vous avez besoin d'une r�f�rence g�n�rale sur le brochage de c�bles, celle de David Tal en est une bonne, mais je n'arrive plus � localiser ce document sur le Net. Mais j'ai trouv� un bon livre de remplacement, c'est The Hardware Book.
NdT : si un lecteur fran�ais veut proposer une r�f�rence dans la langue de Moli�re, qu'il n'h�site pas � me contacter.
Autres sites utiles :
Incidemment, il semble que le paquetage Linuxdoc-sgml ne formate plus les tableaux tr�s bien en sortie html. Si vous voulez pouvoir lire la table qui suit, vous devrez probablement vous r�f�rer � la version DVI ou texte simple du pr�sent document.
DB-25 | DB-9 | Nom | EIA | CCITT | DTE-DCE | Description |
Broche | Broche | |||||
1 | FG | AA | 101 | --- | Masse de chassis GND | |
2 | 3 | TD | BA | 103 | ---> | Donn�es transmises, TxD |
3 | 2 | RD | BB | 104 | <--- | Donn�es re�ues, RxD |
4 | 7 | RTS | CA | 105 | ---> | Requ�te pour envoyer |
5 | 8 | CTS | CB | 106 | <--- | Pr�t � envoyer |
6 | 6 | DSR | CC | 107 | <--- | Jeu de donn�es pr�t |
7 | 5 | SG | AB | 102 | ---- | Masse de signal, GND |
8 | 1 | DCD | CF | 109 | <--- | D�tection de porteuse |
9 | -- | -- | - | - | Tension positive continue de test | |
10 | -- | -- | - | - | Tension n�gative continue de test | |
11 | QM | -- | - | <--- | Mode d'�galisation | |
12 | SDCD | SCF | 122 | <--- | D�tection de porteuse secondaire | |
13 | SCTS | SCB | 121 | <--- | Pr�t � envoyer secondaire | |
14 | STD | SBA | 118 | ---> | Donn�es transmise secondaires | |
15 | TC | DB | 114 | <--- | Signal d'horloge de l'�metteur | |
16 | SRD | SBB | 119 | <--- | Signal d'horloge secondaire du r�cepteur | |
17 | RC | DD | 115 | ---> | Signal d'horloge du r�cepteur | |
18 | DCR | -- | - | <--- | Horloge divis�e du r�cepteur | |
19 | SRTS | SCA | 120 | ---> | Requ�te pour �mettre secondaire | |
20 | 4 | DTR | CD | 108.2 | ---> | Terminal de donn�es pr�t |
21 | SQ | CG | 110 | <--- | D�tection de qualit� de signal | |
22 | 9 | RI | CE | 125 | <--- | Indicateur de sonnerie |
23 | -- | CH | 111 | ---> | S�lecteur de vitesse de donn�es | |
24 | -- | CI | 112 | <--- | S�lecteur de vitesse de donn�es | |
25 | TC | DA | 113 | <--- | Horloge transmise | |
1 13 1 5 _______________________________ _______________ \ . . . . . . . . . . . . . / \ . . . . . / Connecteurs \ . . . . . . . . . . . . / \ . . . . / RS-232 vus de --------------------------- ----------- l'arri�re de 14 25 6 9 l'ordinateur DTE : Equipement terminal de donn�es (i.e. ordinateur) DCE : Equipement de communication de donn�es (i.e. modem) RxD : Donn�es re�ues; 1 est transmis "bas", 0 "haut" TxD : Donn�es envoy�es; 1 est transmis "bas", 0 "haut" DTR : DTE annonce qu'il est aliment� et pr�t � communiquer DSR : DCE annonce qu'il est pr�t � communiquer; "bas" raccroche le modem RTS : DTE demande � DCE la permission d'envoyer des donn�es CTS : DCE agr�e la RTS RI : DCE indique au DTE qu'il tente d'�tablir une connexion DCD : DCE annonce qu'une connexion est �tablie
Puisque vous pouvez aussi devoir modifier powerd.c pour monter et descendre
les signaux corrects, vous pouvez aussi avoir besoin des valeurs num�riques
des diff�rents signaux de terminal.
Ils peuvent �tre trouv�s dans
/usr/include/linux/termios.h
,
mais sont reproduits ici comme r�f�rence.
Puisqu'ils peuvent �tre sujets � changements, vous auriez avantage � les
v�rifier avec ledit fichier.
/* lignes modem */
#define TIOCM_LE 0x001
#define TIOCM_DTR 0x002
#define TIOCM_RTS 0x004
#define TIOCM_ST 0x008
#define TIOCM_SR 0x010
#define TIOCM_CTS 0x020
#define TIOCM_CAR 0x040
#define TIOCM_RNG 0x080
#define TIOCM_DSR 0x100
#define TIOCM_CD TIOCM_CAR
#define TIOCM_RI TIOCM_RNG
Notez que la troisi�me colonne est en hexad�cimal.
Voici une nouvelle solution pour le contr�le lorsque l'onduleur et l'ordinateur ne s'entendent pas. Je dois dire qu'� chaque fois que je lis cela, je suis effar� de l'intelligence de cette solution.
From: " Raymond A. Ingles" <inglesra@frc.com>
To: hjstein@math.huji.ac.il
Subject: UPS HOWTO tip
Date: Mon, 24 Feb 1997 11:48:32 -0500 (EST)
Je ne sais pas si d'autres trouveront ca utile, mais je pense pouvoir
diffuser ceci pour inclusion possible dans le HOWTO. Merci de maintenir
un HOWTO que je trouve si utile !
--------------------
Ma fiancee m'a offert un onduleur, un Tripp-Lite 400, je crois.
Il etait le bienvenu et semble fonctionner comme prevu, mais malheureusement,
ne dispose pas d'interface serie pour prevenir l'ordinateur d'une coupure
de courant.
Il semble prevu pour une utilisation personnelle quand l'ordinateur ne
reste pas seul.
Evidemment, cela etait inacceptable et j'ai commence a travailler sur un
systeme de surveillance de ligne, en imaginant ouvrir la boite et voir
comment ajouter le hard que le constructeur avait omis. J'ai alors realise
qu'il y avait une solution plus simple et moins chere (bien qu'un peu moins
dotee en fonctionnalites).
J'avais un vieux modem 2 400 baud que je n'utilisais pas, que j'ai branche
sur un port serie inutilise de l'ordinateur. Je l'ai ensuite branche sur une
prise anti-surtensions, elle-meme branchee sur la prise murale.
J'ai configure powerd avec les options suivantes :
----
serialline /dev/ttyS1
monitor DCD
failwhen low
----
Maintenant, lorsque le courant est coupe (ou, bien que cela ne soit pas
arrive recemment, lorsque je debranche le parasurtenseur pour tester la
configuration), le modem tombe mais l'onduleur commence a alimenter
l'ordinateur.
Lorsque powerd se rend compte que le modem a descendu DCD, il declenche la
sequence powerfail.
Evidemment, il y a certaines limitations.
Il n'est pas possible de faire indiquer par le modem que la batterie est
faible, etc.
On peut seulement indiquer que le courant est coupe.
Maintenant, ce n'est pas cher et je deteste laisser un equipement
informatique inutilise.
Ces temps-ci, il est possible d'avoir un modem 2 400 baud quasi gratuitement.
Je continue a conseiller un onduleur avec des possibilites de communication
completes, mais si l'on est coince avec un qui n'en a pas, cela peut au
moins etre utile.
Sincerement,
Ray Ingles (810) 377-7735 inglesra@frc.com
"Anybody who has ever seen a photograph showing the kind of damage that
a trout traveling that fast can inflict on the human skull knows that
such photographs are very valuable. I paid $20 for mine." - Dave Barry
Cette section contient des informations sp�cifiques de certains onduleurs. Ce que je souhaiterais serait de disposer des informations sur le port de contr�le de l'onduleur (ce que fait chaque broche et ce qu'elle attend qui soit fait), sur le c�ble fourni par le constructeur (ce qu'il connecte et où), ainsi qu'une version modifi�e de powerd.c qui fonctionne avec l'onduleur. Ce que j'ai actuellement est une description � peu pr�s compl�te de chaque onduleur. Je voudrais essayer d'affiner chaque information, mais comme je ne peux tester chaque onduleur, il est difficile de d�cider exactement de ce qui est n�cessaire. De plus, chaque onduleur semble avoir quelques trucs suppl�mentaires qui sont bien d�crits par les auteurs de chaque section. Ainsi, pour l'heure, je laisse tout en place. Tout pour un HOWTO �pais.
Veuillez m'envoyer vos exp�riences pour les inclure ici.
J'ai conserv� les commentaires des gens, mais n'ai pas encore obtenu la permission de les inclure ici. Voici un sommaire g�n�ral de ce que j'ai entendu dire.
Ne donneront pas d'informations sur leur mode "intelligent" sans votre signature d'un accord de confidentialit�. Donc, les gens sont forc�s d'utiliser leurs onduleurs "intelligents" en mode "b�te", comme soulign� plus bas. Diverses tentatives de r�tro-ing�nierie ont �t� sold�es par des niveaux de r�ussite diff�rents.
Serviables et aimables. Fournissent le code source et la documentation pour les deux modes.
Une personne a dit que Tripp ne diffuserait pas non plus d'information.
Quelqu'un a dit qu'Upsonic a discut� de d�tails techniques au t�l�phone, r�pondu aux questions par fax et est serviable en g�n�ral.
Onduleurs d'Advice Electronics, Tel Aviv, Israël (Tout leur mat�riel porte une �tiquette � leur nom).
Sp�cification des broches du port de contr�le.
Ils m'ont aussi donn� le dessin suivant qui ne m'a servi � rien, mais peut vous �tre utile si vous souhaitez fabriquer vous-m�me un c�ble :
2 ----------+
|
\
\|
|--------------
/|
\/ <--- Le "\/" indique le type de ce
| transistor. J'ai oubli� ce que
| cela veut dire, mais ce n'est
+-----+ pas fondamental.
/ / /
5 ----------+
|
\
\|
|--------------
/|
\/
|
|
+-----+
/ / /
+-------------
|
/
10K |/
6 --\/\/\/--|
|\
\/
|
|
+-----+
/ / /
4 ----------+
|
|
+-----+
/ / /
C�ble fourni.
Ils m'ont d'abord donn� un c�ble qui appartenait � un paquetage DOS de contr�le de l'onduleur appel� RUPS. Je l'ai utilis� pour les tests. Une fois ceux-ci satisfaisants, ils m'ont donn� un c�ble qu'ils utilisent pour les serveurs Netware connect�s � des onduleurs. Il fonctionnait � l'identique. Voici les d�tails :
(le powerd.c inclus dans SysVinit place ou laisse RTS haut, causant l'arr�t de l'onduleur imm�diatement lors du lancement de powerd !)
Cette section n'est pas utile seulement pour le Trust Energy Protector. Elle illustre les nouvelles fonctionnalit�s d'init.
Comment utiliser un Trust Energy Protector 400/650 sous Linux ?
par Ciro Cattuto
Version 1.0 - 31 mars 1997
Le Trust Energy Protector 400/650 est �quip� d'un port de signaux. A l'aide d'un c�ble adapt�, il est possible de connecter celui-ci sur un ordinateur pour r�agir aux �v�nements concernant l'alimentation �lectrique.
L'assignement des broches du port de signaux DB-9 de l'onduleur est le suivant, comme indiqu� dans le manuel utilisateur :
Ce relais est ferm� lorsque le courant d'alimentation est coup�.
Masse des broches 2 et 5.
Ce relais est ferm� lorsque la batterie dispose de moins d'une minute et demi d'autonomie.
L'utilisateur peut envoyer un signal haut (+5V � +12V) durant plus d'une milliseconde pour �teindre l'onduleur. Cette option ne peut �tre activ�e que durant une coupure de courant.
Masse de la broche 6.
Voici le c�ble que j'ai utilis� pour connecter l'onduleur au port s�rie de mon ordinateur.
cote ordinateur (DB-15) cote onduleur (DB-9)
====================================================================
6 DSR --+ [R] = resistance 10 kohm
|
20 DTR --+----+
| |
[R] [R] +--- 7
| | |
8 DCD --+----|-------------- ---------------------|--- 2
| |
7 GND -------|-------------- ---------------------+--- 4
| ...
5 CTS -------+-------------- ------------------------- 5
2 TX ---------------------- ------------------------- 6
====================================================================
Pour un port s�rie DB-9, les broches 6, 20, 8, 7, 5 et 2 correspondent respectivement aux broches 6, 4, 1, 5, 8 et 3.
L'ordinateur monte DTR
et v�rifie que DSR
soit haut pour s'assurer
que le c�ble soit connect� � l'ordinateur.
Tant que le courant est l�, DCD
et CTS
sont hauts tous les deux
(� cause des r�sistances).
Lorsque le courant est coup�, le relais entre les broches 2 et 4 de l'onduleur
se ferme, et DCD
descend pour signaler la coupure.
De m�me, lorsque les batteries sont faibles, le relais entre les broches 5 et 4
se ferme, faisant descendre CTS
.
Durant une coupure de courant, l'ordinateur peut �teindre l'onduleur en
montant TX
durant 1 ms
au moins.
Cela peut �tre r�alis� ais�ment en envoyant un octet 0xFF
au port s�rie
avec une vitesse faible.
Pour utiliser les informations disponibles sur le port s�rie, il faut utiliser
un programme qu surveille celui-ci, d�code le signal et envoie les messages
appropri�s au syst�me d'exploitation, en l'occurence au processus init
.
Ce dernier peut ex�cuter des scripts et programmes con�us pour g�rer
(proprement !) l'�v�nement de coupure de courant.
En annexe A se trouve le code de powerd
, le daemon que j'utilise pour
surveiller le Trust Energy Protector 400/650.
Pour le compiler, il faut le source du paquetage SysVinit (j'ai utilis�
celui de sysvinit-2.60).
Ecrasez simplement le powerd.c
d'origine et compilez-le.
D�s le d�marrage, powerd ouvre le p�riph�rique s�rie connect� �
l'onduleur et monte DTR
.
Ensuite, il forke un daemon et se termine en laissant celui-ci tourner.
Le daemon powerd peut se trouver dans l'un des trois �tats suivants :
Dans cet �tat, powerd lit le port s�rie toutes les T0_SLEEP
secondes (voir les lignes #define
au d�but du code source).
Si DCD
descend, powerd bascule en �tat 1.
Si CTS
descend, powerd bascule en �tat 2 (cela ne doit pas
arriver si DCD
n'est pas descendu avant, mais j'ai pr�f�r� assurer
le coup).
Une coupure de courant a �t� d�tect�e.
DCD
est bas et powerd lit le port de l'onduleur toutes les
T1_SLEEP
secondes.
Si DCD
remonte, il bascule en �tat 0.
Si CTS
tombe, il bascule en �tat 2.
La batterie de l'onduleur est faible. Le daemon powerd reste dans cet �tat.
A chaque changement d'�tat de powerd, il pr�vient le processus init afin que l'action appropri�e soit effectu�e. Ces �v�nements sont trac�s � l'aide du syst�me de trace du syst�me d'exploitation (NdT : syslogd).
Si DSR
est bas, c'est qu'il y a un probl�me au niveau du c�ble.
powerd continue � surveiller la ligne DSR
et envoit un message
d'avertissement toutes les deux minutes au syst�me de trace.
Le daemon powerd doit �tre lanc� par les scripts d'initialisation
durant le d�marrage du syst�me.
J'ai ajout� les lignes suivantes dans mon script
/etc/rc.d/rc.local
:
# Ajout du support de l'onduleur
echo "Demarrage du processus powerd..."
rm -f /etc/turnUPSoff
stty -crtscts speed 75 < /dev/cua3 > /dev/null
if [ -x /usr/sbin/powerd ]
then
/usr/sbin/powerd /dev/cua3
fi
En premier, on efface (si n�cessaire) le fichier /etc/turnUPSoff
.
Celui-ci est utilis� par le script de shutdown (/etc/rc.d/rc.0
dans mon cas) pour d�cider s'il faut arr�ter l'onduleur ou non.
Voir plus bas pour plus d'informations.
Ensuite, on d�sactive le contr�le de flux mat�riel sur le p�riph�rique
s�rie connect� � l'onduleur et on positionne la vitesse � 75 bauds.
Maintenant, nous sommes s�r que le signal TX
restera haut suffisamment
longtemps pour arr�ter l'onduleur si nous envoyons un caract�re 0xFF
au port s�rie (� nouveau, voir plus bas).
Enfin, nous lan�ons le daemon powerd en lui indiquant le port � surveiller. Notez que nous n'avons pas � lire de caract�res sur ce port, donc pas d'inqui�tude en cas de conflit d'interruptions - il n'aura aucune influence.
Le processus powerd tourne maintenant, et il enverra des signaux �
init
en cas de coupure de courant.
Il faut maintenant configurer le syst�me afin qu'il puisse r�agir de
mani�re utile lorsque ces signaux sont re�us.
Ajoutez les lignes suivantes � proximit� du d�but de votre fichier
/etc/inittab
:
# Quoi faire lorsque le courant est coupe (shutdown temporise)
pf::powerfail:/etc/powerfail_script
# Si le courant revient avant le shutdown, arreter celui-ci
pg::powerokwait:/etc/powerokay_script
# Si la batterie de l'onduleur est faible, faire un shutdown immediat
pc::powerfailnow:/etc/powerfailnow_script
Les scripts powerfail_script
, powerokay_script
et
powerfailnow_script
sont ex�cut�s lorsque init re�oit le
signal correspondant.
Il ont la responsabilit� d'arr�ter le syst�me de mani�re propre ou
d'arr�ter un shutdown en cours au cas o� le courant reviendrait.
Voici les scripts que j'utilise actuellement :
/etc/powerfail_script
#!/bin/sh
/bin/sync
/usr/bin/sleep 10m
kill -9 `ps auxw | \
grep "shutdown" | \
grep -v grep | \
awk '{print $2}'` >/etc/turnUPSoff
/sbin/shutdown -t30 -h +3 "Coupure de courant"
Mon Trust Energy Protector 400 n'alimente que l'ordinateur, j'ai donc une
r�serve de courant assez importante.
Dans mon secteur, les coupures de courant ne durent souvent que quelques
minutes, donc le syst�me r�agit � celles-ci de la mani�re suivante :
Il attent 10 minutes (habituellement, le courant revient avant) puis
arr�te le syst�me, en laissant aux utilisateurs le temps de fermer leurs
applications et de se d�connecter.
Avant d'ex�cuter la commande shutdown, je v�rifie qu'il n'y a pas
d'autre shutdown en cours.
Je cr�e aussi le fichier /etc/turnUPSoff
afin que le syst�me
arr�te l'onduleur.
/etc/powerokay_script
#!/bin/sh
kill `ps auxw | \
grep "powerfail_script" | \
grep -v grep | \
awk '{print $2}'`
kill -9 `ps auxw | \
grep "shutdown" | \
grep -v grep | \
awk '{print $2}'`
rm -f /etc/turnUPSoff
Si le courant revient, on tue le script powerfail_script et tout
shutdown en cours.
On n'oublie pas de supprimer /etc/turnUPSoff
.
/etc/powerfailnow_script
#!/bin/sh
kill -9 `ps auxw | \
grep "shutdown" | \
grep -v grep | \
awk '{print $2}'` >/etc/turnUPSoff
/sbin/shutdown -h now "Batterie de l'onduleur faible. ARRET IMMEDIAT."
Si la batterie faiblit, on s'assure qu'aucun shutdown ne soit en cours,
on cr�e le fichier /etc/turnUPSoff
puis on arr�te le syst�me
imm�diatement.
Lorsque l'arr�t du syst�me est effectu�, on peut arr�ter l'onduleur en
montant le signal TX
du port s�rie durant plus d'une milliseconde.
Celui-ci est d�j� configur� correctement par la commande stty
du
script rc.local
.
Si le fichier /etc/turnUPSoff
est pr�sent, on envoit l'octet
0xFF
(tous les bits � 1) sur le port s�rie.
Pour cela, on ajoute les lignes suivantes autour de la fin du script
d'arr�t (/etc/rc.d/rc.0
dans mon cas).
L'emplacement correct d�pend de la mani�re dont le syst�me est
configur�, mais il doit pouvoir se situer avant la commande echo
qui affiche le message "System is halted".
# Est-on dans un cas de coupure de courant ?
if [ -f /etc/turnUPSoff ]
then
echo "Arret de l'onduleur"
sleep 5
echo -e "\377" >/dev/cua3
exit 1
fi
Ce document contient des choses que j'ai apprises en tentant de configurer mon syst�me Linux avec le Trust Energy Protector 400. Certaines informations (le chemin d'acc�s aux scripts d'initialisation, par exemple) peuvent �tre sp�cifiques � mon syst�me, et il vous faudra vraisemblablement faire quelques adaptations. N�ammoins, j'esp�re que ce document sera une trace utile pour ceux qui essaieront d'utiliser un onduleur de ce type sous Linux. Si vous rencontrez des difficult�s, recherchez des informations plus g�n�rales dans le reste de ce Howto. Bonne chance !
J'appr�cierais �norm�ment tout retour d'informations concernant ce document, afin de pouvoir affiner celui-ci et y corriger de possibles erreurs (je sais que l'anglais que j'utilise n'est pas excellent, mais apr�s tout, je suis italien !
NdT : On se demande quelquefois s'il faut vraiment tout traduire :-))). Envoyez tout commentaire/suggestion/critique � l'adresse suivante :
Si vous rencontrez des probl�mes d'utilisation de l'onduleur Trust Energy Protector 400/650 sous Linux, vous pouvez aussi me contacter. J'essaierai de vous aider.
Je n'ai aucune relation avec Trust Networking Products.
L'information contenue dans ce document est livr�e "telle quelle". Vous pouvez l'utiliser � vos risques et p�rils. Je ne puis �tre tenu responsable d'un quelconque dommage ni perte de donn�es r�sultant de l'utilisation du code ni des informations donn�es ici.
Ciro Cattuto
powerd.c
/*
* powerd Recoit les evenements de coupure de courant
* depuis un Trust Energy Protector 400/650
* et previent init
*
* Usage: powerd <port serie>
*
* Author: Ciro Cattuto <ciro@stud.unipg.it>
*
* Version 1.0 - 31 Mars 1997
*
* Ce code est largement fonde sur le powerd.c original de
* Miquel van Smoorenburg <miquels@drinkel.ow.org>.
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Ce programme est un logiciel libre ; vous pouvez le distribuer
* et/ou le modifier selon les termes de la Licence Publique Generale
* GNU publiee par la Free Software Foundation version 2 ou (comme
* vous le voulez) toute version ulterieure.
*
*/
/* etat 0 - le courant est la */
#define T0_SLEEP 10 /* intervalle de lecture du port en
secondes */
#define T0_DCD 3 /* duree avec DCD monte avant de realiser
une action */
#define T0_CTS 3 /* duree avec CTS monte avant de realiser
une action */
/* etat 1 - le courant est coupe */
#define T1_SLEEP 2 /* intervalle de lecture du port */
#define T1_DCD 3 /* idem T0_DCD */
#define T1_CTS 3 /* idem T0_CTS */
#define DSR_SLEEP 2
#define DSR_TRIES 60
/* On utilise le nouveau mode de communication avec init. */
#define NEWINIT
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <syslog.h>
#include <string.h>
#include "paths.h"
#ifdef NEWINIT
#include "initreq.h"
#endif
#ifndef SIGPWR
# define SIGPWR SIGUSR1
#endif
#ifdef NEWINIT
void alrm_handler()
{
}
#endif
/* Dire a init que le courant est coupe (1), revenu (0) ou que
les batteries de l'onduleur sont faibles (2). */
void powerfail(int event)
{
int fd;
#ifdef NEWINIT
struct init_request req;
/* On remplit la structure necessaire */
memset(&req, 0, sizeof(req));
req.magic = INIT_MAGIC;
switch (event)
{
case 0:
req.cmd = INIT_CMD_POWEROK;
break;
case 1:
req.cmd = INIT_CMD_POWERFAIL;
break;
case 2:
default:
req.cmd = INIT_CMD_POWERFAILNOW;
}
/* On ouvre le fifo (avec timeout) */
signal(SIGALRM, alrm_handler);
alarm(3);
if ((fd = open(INIT_FIFO, O_WRONLY)) >= 0
&& write(fd, &req, sizeof(req)) == sizeof(req)) {
close(fd);
return;
}
/* On revient a l'ancienne methode... */
#endif
/* On cree un fichier info pour init */
unlink(PWRSTAT);
if ((fd = open(PWRSTAT, O_CREAT|O_WRONLY, 0644)) >= 0) {
switch (event)
{
case 0:
write(fd, "OK\n", 3);
break;
case 1:
write(fd, "FAIL\n", 5);
break;
case 2:
default:
write(fd, "LOW\n", 4);
break;
}
close(fd);
}
kill(1, SIGPWR);
}
/* Programme principal. */
int main(int argc, char *argv[])
{
int fd;
int dtr_bit = TIOCM_DTR;
int flags;
int DCD, CTS;
int status = -1;
int DCD_count = 0, CTS_count = 0;
int tries;
if (argc < 2) {
fprintf(stderr, "Usage: powerd <peripherique>\n");
exit(1);
}
/* On demarre syslog. */
openlog("powerd", LOG_CONS|LOG_PERROR, LOG_DAEMON);
/* On ouvre le port a surveiller. */
if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) {
syslog(LOG_ERR, "%s: %s", argv[1], sys_errlist[errno]);
closelog();
exit(1);
}
/* La ligne est ouverte, donc DTR est haut.
On le force tout de meme pour plus de surete */
ioctl(fd, TIOCMBIS, &dtr_bit);
/* On passe en daemon. */
switch(fork()) {
case 0: /* Fils */
closelog();
setsid();
break;
case -1: /* Erreur */
syslog(LOG_ERR, "Impossible de forker.");
closelog();
exit(1);
default: /* Pere */
closelog();
exit(0);
}
/* On relance syslog. */
openlog("powerd", LOG_CONS, LOG_DAEMON);
/* Maintenant, on echantillonne la ligne DCD */
while(1) {
/* On lit le statut. */
ioctl(fd, TIOCMGET, &flags);
/* On controle la connexion.
DSR doit etre haut */
tries = 0;
while((flags & TIOCM_DSR) == 0) {
/* On continue a essayer, et on previent
toutes les deux minutes */
if ((tries % DSR_TRIES) == 0)
syslog(LOG_ALERT, "Erreur de connexion onduleur");
sleep(DSR_SLEEP);
tries++;
ioctl(fd, TIOCMGET, &flags);
}
if (tries > 0)
syslog(LOG_ALERT, "Connexion onduleur OK");
/* On calcule l'etat en cours. */
DCD = flags & TIOCM_CAR;
CTS = flags & TIOCM_CTS;
if (status == -1)
{
status = (DCD != 0) ? 0 : 1;
if (DCD == 0)
{
syslog(LOG_ALERT, "Coupure de courant. Onduleur actif.");
powerfail(1);
}
}
switch (status)
{
case 0:
if ((DCD != 0) && (CTS != 0))
{
DCD_count = 0;
CTS_count = 0;
sleep(T0_SLEEP);
continue;
}
if (DCD == 0)
DCD_count++;
if (CTS == 0)
CTS_count++;
if ((DCD_count < T0_DCD) && (CTS_count < T0_CTS))
{
sleep(1);
continue;
}
if (CTS_count == T0_CTS)
{
status = 2;
syslog(LOG_ALERT, "Batteries faibles !");
break;
}
status = 1;
DCD_count = 0;
syslog(LOG_ALERT, "Coupure de courant. Onduleur actif.");
break;
case 1:
if ((DCD == 0) && (CTS != 0))
{
DCD_count = 0;
CTS_count = 0;
sleep(T1_SLEEP);
continue;
}
if (DCD != 0)
DCD_count++;
if (CTS == 0)
CTS_count++;
if ((DCD_count < T1_DCD) && (CTS_count < T1_CTS))
{
sleep(1);
continue;
}
if (CTS_count == T1_CTS)
{
status = 2;
syslog(LOG_ALERT, "Batteries faibles !");
break;
}
status = 0;
DCD_count = 0;
CTS_count = 0;
syslog(LOG_ALERT, "Courant present.");
break;
case 2:
sleep(1);
continue;
default:
break;
}
powerfail(status);
}
/* N'arrive jamais */
return(0);
}
J'ai re�u un message � propos du Trust UPS 400-A. Je ne sais pas si c'est le m�me que le Trust Energy Protector 400, donc voici le message
(NdT : le texte qui suit a �t� reformat�. Le document d'origine comporte une copie de courrier �lectronique):
16 juillet 1997
Cet onduleur ne semble plus �tre fabriqu� par son constructeur, mais cela ne veut pas dire qu'il ne soit plus disponible : j'ai achet� le mien tr�s peu cher il y a seulement un mois. De plus, cette entreprise r��tiquette souvent ses produits.
Il est facile � fabriquer � l'aide du c�ble d'origine pour powerd et de la documentation de Trust.
Il pr�sente deux am�liorations :
Type : "pleur"
Cable power : {TIOCM_DTR, 0}
Inverter Kill : {TIOCM_RTS, 1}
Inverter Kill Time : 5
Power Check : {TIOCM_CTS, 0}
Battery Check : {TIOCM_CAR, 0}
Cable Check : {TIOCM_RI, 0}
La fonction "cable check" n'est pas utilis�e car l'onduleur ne semble pas la reconna�tre.
Voil� tout ce que je crois savoir. Si vous voulez plus d'informations sur l'onduleur, le c�ble ou le logiciel, contactez-moi.
Et souvenez-vous que tout ce qui est d�crit ici fonctionne pour moi mais je ne garantis pas que ce soit le cas pour vous.
Marcel Ammerlaan
CEO Pleursoft (cela explique le nom du cable, n'est-ce pas :-)
Pays Bas
Informations sur le Sustainer S-40a
(NdT : le texte qui suit a �t� reformat�. Le document d'origine comporte une copie de courrier �lectronique):
10 septembre 1995
Sustainer S-40a avec le paquetage unipower (r�cemment renomm� genpower), c�ble maison (cf. infra). J'ai envoy� une copie de tout �a � Tom Webster, l'auteur du paquetage, et cela devrait appara�tre dans la nouvelle version.
COTE ONDULEUR COTE LINUX
2 COUPURE DE COURANT 1 (8)
+----o----------------------------+------------------o DCD
| |
o |
/ |
/ |
| 4 MASSE COMMUNE | 5 (7)
+----o-------------+--------------|------------------o GND
| | |
\ | |
\ | |
o | |
| 5 BATTERIE | FAIBLE | 8 (5)
+----o-------------|--------------|--------+---------o CTS
| | |
| +-+-+ +-+-+
| | | | |
| Resistances| | | |
| | | | |
| 3 x 10 kohm| | | |
| +-+-+ +-+-+
| | | 4 (20)
| +--------+---------o DTR
|
| 6 ARRET DE | L'ONDULEUR +-------+ 7 (4)
+-+ +---o-------------|---------------+ +---------o RTS
\ | | +-------+
\| -+- |
| <- \ / |
/| -+- |
/ | 7 |
| +---o-------------+
--+--
---
-
/************************************************************************/
/* Fichier : unipowerd.h */
/* Programme : unipowerd Version: 1.0.0 */
/* Auteur : Tom Webster <webster@kaiwan.com> */
/* Creation : 1994/04/20 */
/* Modification : Tom Webster Date: 1995/04/09 */
/* Modification : Evgeny Stambulchik (pour onduleur Sustainer) */
/* */
/* Compilation : GCC 2.5.8 */
/* Compilateur : Linux 1.0.9 */
/* ANSI C Compatible : Non */
/* POSIX Compatible : Oui ? */
/* */
/* But : Fichier d'entete pour unipowerd. */
/* : Contient les informations de configuration */
/* : de unipowerd. Editez ce fichier comme indique */
/* : pour activer les fonctionnalites et ajuster */
/* : unipowerd pour votre onduleur. */
/* */
/* Copyright : GNU Copyleft */
/************************************************************************/
/* Lignes de controle RS232 */
/* */
/* D D */
/* T C */
/* Macro Anglais E E */
/* ---------------------------------------------- */
/* TIOCM_DTR DTR - Data Terminal Ready --> */
/* TIOCM_RTS RTS - Ready to send --> */
/* TIOCM_CTS CTS - Clear To Send <-- */
/* TIOCM_CAR DCD - Data Carrier Detect <-- */
/* TIOCM_RNG RI - Ring Indicator <-- */
/* TIOCM_DSR DSR - Data Signal Ready <-- */
#define HIGH (1)
#define LOW 0
#define PWRSTAT "/etc/powerstatus"
#define UPSSTAT "/etc/upsstatus"
/* CABLEPOWER est la ligne qui alimente le cable */
/* pour la surveillance normale. */
#define CABLEPOWER TIOCM_DTR
#define POWERBIT TIOCM_CAR
#define POWEROK HIGH
/* CABLECHECK vaut 1 pour surveiller la batterie ??*/
/* CABELCHECK vaut 0 pour ne rien surveiller */
#define CABLECHECK 0
#define CABLEBIT TIOCM_RNG
#define CABLEOK HIGH
/* BATTCHECK vaut 1 pour surveiller la batterie */
/* BATTCHECK vaut 0 pour ne rien surveiller */
#define BATTCHECK 1
#define BATTBIT TIOCM_CTS
#define BATTOK HIGH
/* INVERTERKILL vaut 1 pour gerer l'arret de l'onduleur */
/* INVERTERKILL vaut 0 pour ne rien gerer. */
/* INVERTERBIT est la ligne qui eteint l'onduleur en */
/* mode powerfail. */
/* INVERTERTIME est la duree en secondes de maintien haut */
/* de la ligne INVERTERBIT en haut pour eteindre. */
#define INVERTERKILL 1
#define INVERTERBIT TIOCM_RTS
#define INVERTERTIME 5
/************************************************************************/
/* Fin du fichier unipowerd.c */
/************************************************************************/
Pour la nouvelle version du logiciel (genpowerd), je pense qu'il faut ajouter la ligne suivante :
/* Evgeny's Sustainer S-40A */
{"sustainer", {TIOCM_DTR,0}, {TIOCM_RTS,1}, 5, {TIOCM_CAR,0}, {TIOCM_CTS,0},
{0,0}}
Une autre entreprise isra�lienne. Je ne leur ai jamais achet� d'onduleur, mais il m'ont for aimablement fourni une documentation d�taill�e sur leur port de communication. Il devrait �tre assez facile de contr�ler leur onduleur. Leur num�ro de t�l�phone est :
972-8-409-019 (fax 972-8-407-216).
Fiskars est une holding finnoise, anciennement propri�taire de Deltec Power. En mars 1996, Fiskars a vendu Deltec Power � Exide. A cette date, Deltec Power �tait l'un des plus gros constructeurs d'onduleurs.
Avec Fiskars, Deltec fabriquait les PowerServers 10, 20, 30 et 40. La page web de Deltec Power en mentionne d'autres.
Exide joint maintenant un logiciel de contr�le avec ses onduleurs qui fonctionne sous Linux. Ils vendent aussi celui-ci s�par�ment et affirment qu'il fonctionne avec d'autres onduleurs aussi.
J'aimerais avoir des nouvelles de gens qui utilisent ce logiciel.
Voici l'annonce qu'ils m'ont envoy�e par e-mail :
Exide Electronics annonce Lansafe III, logiciel de gestion d'onduleurs sous Linux.
Lansafe III est une application de gestion d'onduleurs. Elle permet l'arr�t automatique du syst�me en cas de coupure de courant de longue dur�e qui d�passerait l'autonomie de la batterie de l'onduleur.
Lansafe III permet les messages "broadcast" et l'envoi de courriers �lectroniques en fonction des r�glages utilisateur. La s�quence d'arr�t peut aussi �tre param�tr�e.
Lansafe III fonctionne avec la plus grande partie des onduleurs Exide Electronics. Il permet aussi l'arr�t automatique simple avec des onduleurs d'autres constructeurs.
Lansafe III pour Linux fonctionne sur les syst�mes Linux � base Intel. Deux interfaces sont fournies : mode caract�res et X11/Motif.
Lansafe III fonctionne sur toutes les plateformes majeures de syst�mes d'exploitation : Linux, IBM AIX, HP UX, Digital Unix, SCO Unix, Solaris, SunOS, AT&T Unix, toutes les plateformes Windows, OS/2, Novell et Macintosh en particulier.
Lansafe III est fourni avec les onduleurs Exide suivant :
Il est aussi fourni avec les onduleurs FPS Power Systems :
Il est aussi possible d'acqu�rir une licence logicielle s�par�e pour l'utilisation d'un onduleur plus ancien ou d'un autre constructeur. Les licences simples sont � USD 149, des licences site sont disponibles.
Pour tout d�tail, visitez nos sites web : www.exide.com,
www.fiskarsUPS.com et www.deltecpower.com
Accessoirement, lorsque j'ai tent� de me connecter � www.fiskarsUPS.com, il m'a �t� demand� une identification et un mot de passe.
Dan Fandrich �crit :
Je pense avoir r�ussi � faire fonctionner mon vieil onduleur Beaver mod�le UB500 avec genpower. L'interface utilise des niveaux de tension compatibles RS-232, donc l'installation est simple. Ily a un connecteur DB-9 femelle � l'arri�re qui se connecte directement dans un port s�rie DB-9 de PC � l'aide d'un c�ble droit.
Les interrupteurs DIP permettent quelques ajustements. Pour �muler le type d'onduleurs apc1-nt de genpower, ils doivent �tre positionn�s comme suit :
Les interrupteurs forment des groupes de paires adjacentes pour chaque broche de sortie. Ils sont exclusifs mutuellement - ne tentez pas de positionner ON les 5 et 6 ensemble, par exemple, ou vous ferez un court-circuit entre les signaux coupure de courant et batterie faible.
C'est tout ce qu'il y a � dire. Vous pouvez ajouter cela � votre documentation.
Charli �crit :
J'ai connect� un onduleur Seldom avec powerd. Peut-�tre que ce qui suit sera utile avec d'autres onduleurs.
J'ai utilis� le diagramme de la page de man de powerd :
9 broches 25 broches
DTR 4 20 ----------
| >
DSR 6 6 -- < 10k
>
DCD 1 8 -------------------
relais
GND 5 7 -------------------
En fait, l'onduleur seldom n'utilise pas de relais mais quelque chose d'autre et fonctionne dans un sens, mais pas dans l'autre. Si donc le c�ble ne fonctionne pas, il faut essayer d'inverser les broches sur le "relais".
L'information sur les onduleurs Best est disponible sur le site web de
Best Power.
Leur site contient un paquetage checkup.tar
(section
Logiciels)
de communication avec leurs onduleurs, aussi bien en modes intelligent que
b�te, fourni en sources, donc compilable sous Linux.
Mini-Howto des onduleurs Best Power
par Michael Stutz et http://dsl.org/m.
Version 1.0, 14 ao�t 1997
Copyright 1997 Michael Stutz
NdT : la traduction de ce paragraphe est fournie � titre indicatif au lecteur. Se reporter � la version originale pour les termes exacts.; cette information est libre ; elle peut �tre redistribu�e et/ou modifi�e selon les termes de la Licence Publique G�n�rale GNU (GPL) version 2 ou (� votre pr�f�rence) ult�rieure, pour autant que la pr�sente phrase soit conserv�e ; cette information est fournie SANS AUCUNE GARANTIE ; sans m�me de garantie implicite d'adaptation � un besoin particulier ; se reporter � la GPL de GNU pour plus de d�tails.
Best Power est constructeur d'onduleurs de haute qualit�, et leur s�rie Fortress est particuli�rement bien adapt�e � des utilisateurs habituels de Linux. Bien que ses produits ne soient actuellement pas aussi bon march� que certains autres (comme ceux d'APC), Best Power fournit le code source de son logiciel et a �t� tr�s r�actif quant aux questions pos�es par des utilisateurs de Linux. De plus, son mat�riel semble choisi souvent par les consommateurs, ce qui en fait un bon choix pour les utilisateurs de Linux.
Ce document d�crit l'installation d'un onduleur Best Power Fortress (le mod�le utilis� est un 660a de 1996 accompagn� de son CD-ROM) sur une machine Linux.
Installez l'onduleur comme indiqu� par les instructions. Les s�ries Fortress de Best Power sont fournies avec un c�ble RS-232 destin� � �tre connect� � un port s�rie libre � l'ari�re de l'ordinateur.
Voici ce qui diff�re du manuel, qui ne contient pas actuellement d'instructions sp�cifiques pour Linux. En revanche, le CD-ROM d'accompagnement conient avec le code source du logiciel de l'onduleur, ce qui en rend la mise en oeuvre triviale.
Pour r�aliser celle-ci, suivez les �tapes ci-dessous, et utilisez
le manuel comme r�f�rence pour avoir une vue d'ensemble sur le fonctionnement
g�n�ral du logiciel.
J'ai pris la libert� de faire quelques modifications dans ce HOWTO sur la
configuration du logiciel Fortress pour Unix d'une mani�re qui me semble
plus adapt�e � un syst�me Linux.
Par exemple, j'ai �limin� la n�cessit� d'un r�pertoire /etc/best
, et
plac� les ex�cutables dans /usr/local/bin
qui me semble un endroit
plus appropri�.
cat > /etc/upsdown <<EOF
#!/bin/sh
shutdown -h now < /dev/console &
EOF
mkdir /usr/doc/best
mkdir /usr/local/src/best
unix/checkups.tar
dans un r�pertoire temporaire :
cd /tmp
tar /cdrom/unix/checkups.tar
etc/best/advanced
qui doit avoir
�t� cr�� dans le r�pertoire temporaire � partir de l'archive ;
cp README /usr/doc/best
cp manual.txt /usr/doc/best
cp bestsend /etc
cp source/*.c /usr/local/src/best
cd /usr/local/src/best
rm -R /tmp/etc
gcc -o checkups checkups.c
gcc -o mftalk mftalk.c
mv checkups /usr/local/sbin
mv mftalk /usr/local/sbin
ttySx
par le port s�rie de votre choix.
Si votre connexion est bonne, vous devriez voir une ligne de carac�res
s'imprimer � l'�cran :
mftalk /dev/ttySx
/etc/inittab
:
ups:234:once:/usr/local/sbin/checkups -c500 /dev/ttyS1
-c500
de la ligne de votre
inittab
(qui en gros implique d'arr�ter le syst�me syst�matiquement
au lieu de ne le faire que lorsque le courant est coup�), et vous pouvez
rouler !
Toute suggestion permettant d'am�liorer ce document ou les techniques qui y sont d�crites est la bienvenue. A l'instant o� j'�cris ces lignes, Best Power semblait int�ress� par l'inclusion de la pr�sente information ou d'une autre dans la sienne afin d'aider les utilisateurs de Linux par rapport � ses produits, il s'agit donc r�ellement d'une entreprise � promouvoir. Vous pouvez lui transmettre vos impressions � sales@bestpower.com et support@bestpower.com.
Quelques commentaires sur le Best Fortress, de Leonard N. Zubkoff, message du 25 mai 1995 dans comp.os.linux.hardware
(NdT : le texte qui suit a �t� reformat�. Le document d'origine comporte une copie de message de forum):
Citation de nautix@community.net :
D'accord avec ce que dit Craig. APC a �t� tr�s peu coop�ratif, mais je n'ai que de bonnes choses � dire sur Best. J'utilise son mod�le LI 660 ; 660 VA, des tas d'indications sur le panneau frontal, etc. Le logiciel CheckUPS est en option payante et n�cessite quelques bidouillages pour entrer dans mons syst�me de fichiers FSSTND-is� (NdT : File System STaNDard, le standard de r�partition des �l�ments dans les r�pertoires pr�conis� pour Linux) (les r�pertoires et noms de fichiers sont en dur pour SunOS 4.1.x). Je serai heureux de vous envoyer mes diffs, si vous les voulez (j'adore quand un constructeur fournit le source en tant que pratique commerciale normale !!).
Le logiciel CheckUPS est limit�, cependant, � r�aliser des arr�ts
automagiques (NdT : automagic
dans le texte).
L'onduleur peut fournir des tas d'informations sur son �tat ; CheckUPS
ne contr�le que "Si le courant est coup�, combien de temps reste-t'il
d'autonomie � la batterie ?".
Best suit aussi ses questionnaires de satisfaction clients. J'ai indiqu� ma d�ception que CheckUPS ne dispose pas de plus de fonctions d'interrogation (comme le voltage en entr�e, en sortie, le pourcentage de charge, etc.) qui sont disponibles en entr�e. J'ai demand� les sp�cifications de l'interface ; ils ont dit : "bien s�r" et me l'ont envoy� en 2 jours, gracieusement. Un contr�leur d'�tat de l'onduleur complet est dans ma casserole de derri�re. Quelqu'un voit-il une utilit� � ce genre d'utilitaire ?
R�ponse de Leonard N. Zubkoff :
Laissez-moi ajouter une autre recommandation pour Best Power. Je viens d'acheter un Fortress LI-950, mais j'ai d�clin� leur offre logicielle pour CheckUPS. Contrairement � certaines autres gammes, un simple c�ble trois fils suffit � connecter le Fortress � un port s�rie -- pas besoin de montage "pull-up" � faire dans le c�ble. Quelques minutes de bidouillage et j'avais un programme qui fait � la fois daemon d'arr�t syst�me et qui coupe le courant de sortie ensuite lorsque le syst�me est arr�t� durant une p�riode sur batterie.
Je pourrais �ventuellement utiliser le mode de communications s�rie plus intelligent plut�t que le simple mode de contact, et j'ai donc demand� la documentation au support technique de Best, et il est arriv� aujourd'hui, une semaine apr�s mon appel. Apr�s avoir �tudi� celle-ci, je d�ciderai si une interface plus intelligente est r�ellement int�ressante, en particulier puisque dans certains cas j'aurais besoin d'arr�ter deux machines en r�seau partageant l'onduleur.
Leonard.
En compl�ment � la documentation et au logiciel sur le site web de Best,
vous pouvez aussi utiliser le paquetage bestups-0.9.tar.gz
(section
Logiciel).
Nous avons juste commenc� � le tester avec notre Ferrups 5 kVA.
L'id�e de base est qu'il y a deux modules. L'un qui re�oit des demandes d'information du port r�seau, les relaie � l'onduleur, et renvoit les r�sultats. Le second module parle au premier, interpr�te les r�sultats, et r�pond OK ou FAIL.
C'est suffisant pour que le paquetage powerd-2.0.tar.gz
(section
Logiciel) fasse le reste.
Les d�tails se trouvent dans le paquetage lui-m�me.
Par ailleurs, notre Ferrups 5 kVA a fonctionn� sans histoire pour nos 10 ordinateurs et 30 �crans.
>From hennus@sky.nl.mugnet.org Thu Mar 10 15:10:22 1994
Newsgroups: comp.os.linux.help
Subject: Re: shutdown automatique avec un onduleur
From: hennus@sky.nl.mugnet.org (Hennus Bergman)
Date: Tue, 1 Mar 1994 22:17:45 GMT
Distribution: world
Organization: The Organization For Removal Of On-Screen Logos
Dans l'article <CRAFFERT.94Feb28125452@nostril.lehman.com>,
Colin Owen Rafferty <craffert@nostril.lehman.com> ecrit :
>Je suis pr�t � acheter un onduleur pour ma machine, et j'en
>voudrais un qui sache faire un "auto-shutdown".
>
Je viens d'en acheter un vraiment pas cher :-)
C'est un GPS1000 d'ACCODATA. Tout le monde conna�t la bonne qualite
de leur production (je n'ai pas d'actions chez eux :-() ?
>Je suppose que tous ont une sorte de connexion serie qui previent le
>systeme de cela.
>
Je l'ai pris � part pour trouver comment il fonctionnait. Il y avait
trois optocoupleurs (deux sorties, une entree) connectes sur un connecteur
� 9 broches � l'arriere. L'un s'allume lorsque le courant est coupe, et
s'eteint lorsque ce dernier revient. Durant ce temps, on peut utiliser
l'"entree" pour arreter la batterie (il relache le relais de puissance).
Le troisieme est une sorte d'acquittement de la commande d'arret. Je
pense que l'interface de mon onduleur a ete concue pour etre connectee
a des niveaux TTL, mais avec quelques resistances il peut etre connecte a
un port serie. Il est branche de telle sorte qu'avec un port RS-232 on
ne puisse utiliser les deux optocoupleurs de sortie; mais l'acquittement
de la commande d'arret n'est pas vraiment necessaire. On peut se conten-
ter de celui qui est important (Notez qu'il est possible de faire fumer
la partie transistor des optocoupleurs avec des niveaux RS-232 si on
le branche mal). ;-)
J'esperais etre capable de le connecter a mon port de jeux inutilise,
mais ce dernier n'a pas de sortie, n'est-ce pas ?
Je vais probablement finir par mettre un port parallele supplementaire
pour ca.
Tous les onduleurs n'utilisent pas d'optocoupleurs, certains se contentent
de simple relais, qui sont moins difficiles a connecter, mais bien sur,
pas aussi `elegants'.
>Quelqu'un a-t-il ecrit un paquetage qui surveille l'onduleur et effectue
>un shutdown (ou similaire) lorsque le courant s'arrete ?
SysVinit-2.4 (et probablement 2.5 aussi bien) a un demon `powerd' qui
surveille le port serie en continu et previent init quand CD (Detection
de porteuse) tombe. Init active ensuite un shutdown avec un delai. Si le
courant revient apres quelques minutes, le shutdown est arrete. Tres beau.
Le seul probleme que j'aie eu avec est qu'il ne dit pas a l'onduleur de
s'arreter lorsque le shutdown est fini. Il attend simplement la avec une
invite root. Je vais probablement ecrire un petit programme pour l'arreter
>depuis /etc/brc. RSN.
> Colin Rafferty, Lehman Brothers <craffert@lehman.com>
Hennus Bergman
Tom Webster, l'auteur du paquetage genpower, m'a envoy� des informations sur le TrippLite BC750LAN. Si vous avez l'un d'entre eux, c'est probablement le meilleur paquetage pour commencer.
Mais pour �tre exhaustif, voici le diagramme de brochage du c�ble (r�alis� par t�tonnements, et sans documentation) :
Onduleur Systeme
DB-25 DB-25
1 <--------------> 1 Masse
2 <--------------> 4 Coupure de secteur
8 <--------------> 8 Circuit de detection
3 <--------------> 2 Inverseur d'arret
20 <--------------> 22 Circuit
Si la pl�thore de paquetages pour APC cit�s plus haut ne vous permettent pas de d�marrer, il est possible que la section qui suit soit d'une certaine utilit�.
Il semble qu'il y ait une certaine controverse sur la fiabilit� des informations indiqu�es ici sur les APC Back-UPS, donc, soyez prudent. Je pr�face cette section avec un message d'avertissement que j'ai recu. Il peut ne pas prendre tout son sens tant que le reste de la section n'est pas lu, mais ainsi, au moins vous aves plus de chances de le voir. Et, � nouveau, comme je n'ai aucun onduleur APC, je ne peux v�rifier la fiabilit� d'aucun de ces messages.
Message de Marek Michalkiewicz sur le BUPS-HOWTO
(NdT : le texte qui suit a �t� reformat�. Le document d'origine comporte une copie de courrier �lectronique):
Si vous voulez connecter un onduleur APC Back-UPS sur votre machine Linux, ce qui suit peut vous int�resser.
Il y a un bon BUPS-HOWTO qui d�crit comment le faire. Mais il comporte un "bug".
Le signal RTS du port s�rie est utilis� pour arr�ter l'onduleur. Celui-ci ne s'arr�tera que s'il travaille sur batterie. Le manuel indique que le le signal d'arr�t doit durer au moins 0,5ms. Mais un temps inf�rieur est suffisant, au moins pour mon propre APC Back-UPS 600.
L'utilisation de RTS peut �tre dangereuse, car ce dernier est mont� � l'ouverture du p�riph�rique. Le programme backupsd le redescend ensuite, mais il reste haut un moment. Cela coupe le courant lors du premier lancement de backupsd s'il y a une coupure secteur � ce moment pr�cis. Cela peut arriver par exemple si l'onduleur est �teint, et que le courant revienne seulement pour un moment.
Soit il faut lancer backupsd avant de monter les syst�mes de fichiers en
lecture/�criture, soit (de pr�f�rence) utiliser TX (broche 3) plut�t que
RTS (broche 7) pour �teindre l'onduleur (la num�rotation est pour un DB-9).
On peut utiliser ioctl(fd, TCSBRKP, 10);
pour monter TX pendant
une seconde, par exemple.
L'utilisation de TX doit etre plus s�re.
Je posterai peut-�tre les diff si le temps me le permet...
Luminated Software Group Pr�sente
HOWTO utilisation d'onduleurs Back-UPS (d'APC) (pour prot�ger votre syst�me Linux)
Version: 1.01 BETA
Document de : Christian G. Holtje Information sur le c�blage et aide : Ben Galliart
Adaptation fran�aise : Bernard Choppy
Ce document est plac� dans le Domaine Public � une condition. Celle-ci est que ce qui appartient a C�sar revienne � C�sar. Modifiez ceci autant que vous voulez, rappelez juste que nous avons travaill� dessus.
Attention !
Ni moi, ni aucun de ceux qui on �crit ou aid� � ce document, ne garantissons quoi que ce soit concernant ces textes/sources/indications. Si quoi que ce soit est endommag�, nous n'y sommes POUR RIEN ! Cela fonctionne POUR AUTANT QUE NOUS LE SACHIONS, mais nous pouvons avoir fait des erreurs. Donc, soyez prudent !
NdT : Le document d'origine contient des r�f�rences de pi�ces d�tachees Radio-Shack, qui etaient distribu�es par le r�seau Tandy en France. Ce reseau n'existe plus, et les r�f�rences ont donc �t� supprim�es de la version fran�aise. Le lecteur n�ammoins int�ress� pourra se reporter � la version anglaise du pr�sent document.
Bien, vous venez juste d'acheter (ou vous allez le faire) un Back-UPS d'APC (d'autres mod�les pourront peut-�tre b�n�ficier de ces informations, avec peu ou pas de modifications, mais nous ne savons pas). Vous avez jet� un coup d'oeil au prix du couple logiciel/c�ble Power-Chute, et n'�tes pas s�r que le jeu en vaille la chandelle. Bien, j'ai fait mon propre c�ble, et mon propre logiciel et je les utilise pour arr�ter automatiquement mon syst�me Linux lors d'une coupure secteur. Vous savez quoi ? Vous pouvez aussi !
*** Le C�ble ***
C'�tait la partie la plus difficile � imaginer (je m'y connais peu en hardware, donc Ben a fait le plus gros du travail). Pour en fabriquer un, vous devez acheter ce qui suit chez votre marchand d'�lectronique du coin :
Il vous faut aussi, mais vous pourrez peut-etre l'emprunter :
Ok... Voici comment connecter le tout !
Ces diagrammes montrent le c�t� ARRIERE (celui o� vous soudez les c�bles sur les broches). Les lettres V, R et B repr�sentent les couleurs des c�bles que j'ai utilis�s, et facilitent la distinction des lignes
(Note : j'utilise la num�rotation standard RS-232 (pour autant qu'on puisse dire). Le manuel de l'APC utilise une num�rotation diff�rente. Ignorez-la ! Utilisez la n�tre... Je l'ai d�j� chang�e pour vous !).
--------------------- Cote Male (vers l'onduleur)
\ B R * * * /
\ * * * V /
------------
--------------------- Cote femelle (vers le port COM)
\ R * * * V /
\ * B * * /
------------
Pour ceux qui pr�f�rent les chiffres :
Male Femelle
---------------------------------------
1 7 Bleu
2 1 Rouge
9 5 Vert
---- Compl�ment : Utilisation des broches RS-232 ! ---- Puisque nous avons eu � trouver cette information :
Depuis l'ARRIERE (c�t� soudure), les broches sont num�rot�es ainsi :
---------------------
\ 1 2 3 4 5 /
\ 6 7 8 9 /
------------
Les broches signifient
Numero Nom Abreviation (parfois prefixee par D)
1 Detection de porteuse CD
2 Reception de donnees RD
3 Transmission de donnees TD(?)
4 Terminal de donnees pret DTR
5 Masse de signal Gnd
6 Jeu de donnees pret DSR
7 Demande pour envoyer RTS(?)
8 Pret a envoyer CS
9 Indicateur de sonnerie RI
Ce que nous avons fait �tait la connexion de la ligne RS-232 de l'onduleur "Fail Output" sur CD, le ch�ssis de l'onduleur sur Gnd, et l'entr�e "Shut Down" sur RTS. Facile, maintenant qu'on vous le dit, non ?
Je n'ai aucune id�e du comportement du logiciel ci-dessous, si vous achetez le c�ble d'APC. Il peut fonctionner, ou non.
*** Le Logiciel ***
J'utilise le paquetage SysVInit de Miquel van Smoorenburg pour Linux
(voir � la fin pour emplacements, remerciements, adresses E-mail, etc.).
Je ne sais ce qui doit �tre chang� pour utiliser l'init de quelqu'un d'autre,
mais je sais que ce code (qui suit) fonctionne avec celui de Miquel.
Simplement ainsi je remercie comme je le dois.
J'ai regard� dans le code de Miquel pour comprendre comment ioctl()
fonctionnait.
Si je n'avais pas eu cet exemple, j'aurais eu des probl�mes.
J'ai aussi utilis� la routine powerfail()
(telle quelle, je crois),
puisqu'elle doit interagir avec init, j'ai pens� qu'il devait savoir �a
mieux que moi.
Le fichier .c
est � la fin de ce document, et n�cessite seulement
d'�tre copi�/coll�.
Pour cela, supprimez simplement tout ce qui n'est pas du code.
Ce document doit se terminer par la ligne /* Fin de Fichier */...
Coupez le reste.
Ce programme peut, soit �tre lanc� comme daemon pour contr�ler l'�tat
de l'onduleur et l'indiquer � init, soit �tre lanc� pour envoyer la commande
kill-power
(coupure d'alimentation) � l'onduleur.
L'alimentation ne sera coup�e que s'il y a un probl�me secteur et que
l'onduleur est sur batteries.
Une fois le courant revenu, il se rallume.
Pour le lancer comme d�mon, entrez simplement :
backupsd /dev/backups
/dev/backups
est un lien vers /dev/cua0
(COM 1, pour les
DOSseurs) actuellement.
La beaut� du lien est que je n'ai qu'� le refaire si je passe sur COM 2 ou
COM 3.
Ensuite, si le secteur s'arr�te, init lancera les commandes de powerwait
.
Un exemple (qui vient de mon /etc/inittab
) :
#Voici les actions de coupure de courant
pf::powerwait:/etc/rc.d/rc.power start
po::powerokwait:/etc/rc.d/rc.power stop
Powerwait sera lanc� si le courant baisse, et powerokwait s'il revient.
Voici mon rc.power
complet :
#! /bin/sh
#
# rc.power Ce fichier est execute par init en cas de coupure de courant
#
# Version : @(#)/etc/rc.d/rc.power 1.50 1994-08-10
#
# Auteur : Christian Holtje, <docwhat@uiuc.edu>
#
# Definit le chemin
PATH=/sbin:/etc:/bin:/usr/bin:/sbin/dangerous
# Regarde comment nous avons ete appele
case "$1" in
start)
echo "Attention - probleme d'alimentation secteur." | wall
# Sauvegarde le niveau de fonctionnement actuel
ps | gawk '{ if (($5 == "init") && ($1 == "1")) print $6 }' \
| cut -f2 -d[ | cut -f1 -d] \
> /tmp/run.level.power
/sbin/shutdown -h +1m
;;
stop)
echo "Alimentation secteur revenue." | wall
echo "Tentative d'arret du shutdown." | wall
shutdown -c
;;
*)
echo "Usage: $0 [start|stop]"
exit 1
;;
esac
Pas mal, non ? En fait, il y a un petit probl�me, l�... Je n'ai pas eu le temps de le trouver... S'il y a un gourou "sh" par ici...
J'ai laiss� un petit d�tail de c�t�, c'est de faire couper l'alimentation par l'onduleur si le PC est arr�t� courant coup�. Cela est r�alis� en ajoutant la ligne suivante � la fin de votre script halt :
/sbin/backupsd /dev/backups killpower
Cela va simplement couper l'alimentation si le secteur est coup�.
*** Tester le tout ***
C'est juste une petite section pour vous dire :
SOYEZ PRUDENT !
Je vous recommande la sauvegarde de vos partitions Linux, avec
plusieurs sync
avant de tester, et d'�tre prudent en g�n�ral.
Evidemment, je ne fais que vous le recommander.
Je n'ai pas �t� prudent du tout, et j'ai eu � nettoyer ma partition
plusieurs fois pendant les tests de ma configuration.
Mais celle-ci fonctionne. :-)
*** Où l'obtenir ***
Le SysVInit de Miquel van Smoorenburg's peut se trouver sur : SysVinit-2.50.tgz
et une correction pour certains shell bash se trouve juste � c�t� : SysVinit-2.50.patch1
Pour ce qui est d'obtenir ce HOWTO, vous pouvez m'envoyer un E-mail, docwhat@uiuc.edu avec pour sujet :'request' et le mot-clef 'backups' dans le corps du message : Demande du HOWTO original (il est possible que j'automatise cela, et d'autres choses).
*** Section des remerciements qui sont d�s ***
Merci � :
powerd.c
qui m'ont
beaucoup aid�s ;
backupsd.c
(ce qui n'est pas de Miquel) rc.power
;
/* backupsd.c -- Simple daemon pour lire les signaux de coupure de
* courant d'un onduleur Back-UPS (d'APC).
*
* Certaines parties proviennent du powerd.c de Miquel van Smoorenburg
* D'autres sont originales de Christian Holtje <docwhat@uiuc.edu>
* Je crois qu'on peut dire que c'est dans le Domaine Public, simplement
* n'oubliez pas de citer les auteurs originaux, la ou c'est necessaire.
*
* Avertissement : Nous ne garantissons RIEN de ce logiciel, ni
* n'assumons aucune responsabilit� concernant son
* utilisation, bonne ou mauvaise.
*/
#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
/* C'est le fichier necessaire pour SysVInit */
#define PWRSTAT "/etc/powerstatus"
void powerfail(int fail);
/* Programme principal */
int main(int argc, char **argv)
{
int fd;
int killpwr_bit = TIOCM_RTS;
int flags;
int status, oldstat = -1;
int count = 0;
if (argc < 2) {
fprintf(stderr, "Usage: %s <peripherique> [killpower]\n", argv[0]);
exit(1);
}
/* Ouverture du port */
if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) {
fprintf(stderr, "%s : %s : %s\n", argv[0], argv[1], sys_errlist[errno]);
exit(1);
}
if ( argc >= 3 && (strcmp(argv[2], "killpower")==0) )
{
/* Coupons l'alimentation */
fprintf(stderr, "%s : Tentative de coupure d'alimentation !\n",
argv[0] );
ioctl(fd, TIOCMBIS, &killpwr_bit);
/* Hmmm... Si vous avez une coupure d'alimentation, */
/* ce code ne sera jamais execute */
exit(0);
}
else
/* Puisqu'il ne faut pas couper l'alimentation, il faut restaurer */
/* RTS (killpwr_bit) */
ioctl(fd, TIOCMBIC, &killpwr_bit);
/* Passe en demon. */
switch(fork()) {
case 0: /* Je suis le fils */
setsid();
break;
case -1: /* Passage demon manque */
fprintf(stderr, "%s : fork impossible.\n", argv[0]);
exit(1);
default: /* Je suis le pere */
exit(0);
}
/* Maintenant, on scrute la ligne DCD */
while(1) {
ioctl(fd, TIOCMGET, &flags);
status = (flags & TIOCM_CD);
/* Si DCD est monte, le secteur est coupe */
if (oldstat == 0 && status != 0) {
count++;
if (count > 3) powerfail(0);
else { sleep(1); continue; }
}
/* Si DCD est redescendu, le secteur est revenu */
if (oldstat > 0 && status == 0) {
count++;
if (count > 3) powerfail(1);
else { sleep(1); continue; }
}
/* Reinit du compteur, sauvegarde de l'etat et sleep 2 secondes */
count = 0;
oldstat = status;
sleep(2);
}
/* Erreur ! (ne doit pas arriver) */
return(1);
}
/* Signale a init que le courant est coupe ou revenu */
void powerfail(ok)
int ok;
{
int fd;
/* Cree le fichier necessaire a init pour shutdown/abandon */
unlink(PWRSTAT);
if ((fd = open(PWRSTAT, O_CREAT|O_WRONLY, 0644)) >= 0) {
if (ok)
write(fd, "OK\n", 3);
else
write(fd, "FAIL\n", 5);
close(fd);
}
kill(1, SIGPWR);
}
/* Fin de Fichier */
(NdT : Le document original comporte de nombreuses copies de courriers �lectroniques � ce point. Le traducteur s'est permis d'en r�aliser une synth�se plus courte et, il l'esp�re, plus facile � utiliser)
Message de
Jim Ockers
du 12 janvier 1995 dans comp.os.linux.hardware
:
Selon la base de connaissances (KnowledgeBase) de Microsoft, il semble que la broche 5 du connecteur des onduleurs APC Back-UPS et Smart-UPS (test� avec un Back-UPS 400 sous Windows NT) monte un signal "batterie faible" deux minutes au moins avant l'�puisement de la batterie.
Ce signal est au niveau "TTL collecteur ouvert", et peut �tre ramen� aux niveaux RS-232 selon le sch�ma suivant :
Broche 5 Broche 8
+---------+
o------| 10 kOhm |-------o
+---------+
Par ailleurs, le manuel de l'onduleur stipule que la broche commune � utiliser est la 4 (et non la 9, m�me si celles-ci sont branch�es ensemble).
Message de Peter Kammer du 7 octobre 1996 :
Les sch�mas de brochage sont invers�s en ce qui concerne les connecteurs m�les : en effet, les broches sont num�rot�es de mani�re inverse sur les connecteurs m�les et femelles (puisque leurs sens s'opposent lors du brancement). Il faut donc consid�rer que les sch�mas pour les connecteurs m�les sont vus c�t� ext�rieur et non c�t� int�rieur (soudure), contrairement � ce qui est indiqu�.
Par ailleurs, il existe un document de r�f�rence technique pour les onduleurs Back-UPS qui se trouve sur le site web d'APC.
Message de Troy Muller du 6 avril 1997 :
L'onduleur Back-UPS Pro 650 fonctionne avec le c�ble standard d'APC.
La r�f�rence du c�ble est 940-023A
et le logicel est
Enhanced_APC_BackUPS.
Ce logiciel envoit des messages globaux toutes les deux secondes, mais un eu
de bidouillage de dowalll.c
permet de limiter cette fonction.
De nombreuses personnes ont un APC Smart UPS.
Il semble qu'il existe des paquetages pour utiliser ceux-ci en mode
"intelligent" (voir les paquetages mentionn�s plus haut
Enhanced_APC_UPSD-v1.4.tar.gz
,
apcd-0.5.tar.gz
et
smupsd-0.7-1.i386.rpm
d�crits dans la section
Logiciels).
Je ne sais pas ce que vaut le support pour chacun d'eux.
Il semble qu'APC continue � refuser de publier son protocole
pour le mode "intelligent" sans un accord de non-diffusion, ainsi
tout le monde a d� faire de la r�tro-ing�ni�rie dessus.
Le consensus g�n�ral est d'investr dans une gamme qui publie cette information, comme Best.
Une autre possibilit� est d'utiliser la version du logiciel de contr�le d'onduleurs Powerchute d'APC pour SCO Unix via le paquetage de compatibilit� iBCS. Clive A. Stubbings me dit que cela fonctionne bien apr�s quelques ajustements du script d'installation. Il dit que le seul probl�me est que "l'interface graphique semble avoir des probl�mes � contr�ler des onduleurs �-travers le r�seau".
Si vous poss�dez un APC Smart-UPS et que vous n'arriviez pas � le faire
fonctionner en mode intelligent avec aucun de ces logiciels, vous pouvez
malgr� tout encore l'utiliser en mode b�te.
Les sections qui suivent d�taillent cette proc�dure.
J'ai re�u, en particulier, des messages concernant les mod�les 600,
700 et 1400.
Il vous faudra probablement bidouiller powerd.c
comme indiqu� dans la
section
Analyse de c�bles et modification de powerd.c.
Message de Lam Dang du 19 ao�t 1994 dans comp.os.lnux.misc :
R�alisation du c�ble pour un APC Smart-UPS mod�le 600.
Le cable est a realiser entre un connecteur DB-9 femelle sur l'onduleur et un DB-25 male sur l'ordinateur. Le boitier du DB-25 est assez grand pour contenir un regulateur de tension et deux resistances. L'interface entre le connecteur de l'onduleur et celui du PC est ainsi :
Onduleur (DB-9) PC (DB-25)
1 (Extinction) 20 (DTR)
3 (Coupure de secteur) 5 (CTS)
4 (Commun) 7 (GND)
5 (Batterie faible) 8 (DCD)
9 (Masse chassis) 1 (Chassis Ground)
Vous pouvez utiliser la broche 6 de l'onduleur au lieu de la broche 3 (elles sont inverses l'une de l'autre). La complication est de monter les broches collecteur ouvert 3 (ou 6) et 5 de l'onduleur.
Ce mod�le APC fournit une sortie non regul�e de 24 V continu sur la broche 8. La tension de sortie est disponible tout le temps (au moins un peu apr�s que le signal de batterie faible soit mont�). L'intensite est limitee a 40mA. Pour monter, la broche 8 est l'alimentation d'un r�gulateur de tension de +5V. La sortie de ce r�gulateur passe dans deux resistances de 4,7kohm. L'autre bout d'une resistance connecte les broches 3 (Coupure de courant) de l'onduleur et 5 du PC (CTS). Celle de l'autre resistance connecte les broches 5 de l'onduleur (Batterie faible) et 8 du PC (DCD). Les deux resistances consomment environ 2 mA lorsqu'elles sont a la masse.
Lorsque l'onduleur est aliment�, les broches 5 (CTS) et 8 (DCD) c�t� PC doivent �tre tr�s proches de 5V, et monter la broche 20 pendant 5 secondes ne doit avoir aucun effet. Lorsque l'onduleur passe sur batteries, la broche 5 (CTS) doit tomber � 0V, la broche 8 (DCD) doit rester � l'identique � 5V, et monter la broche 20 (DTR) en court-circuitant les broches 8 et 20, par exemple, doit �teindre l'onduleur apr�s environ 15 secondes.
Lorsque la diode "Low Battery" du panneau frontal s'allume, la broche 8 (DCD) doit descendre � 0V aussi.
Les tensions de l'interface onduleur sont NEGATIVES pour la coupure de secteur (sur la broche 3 de l'onduleur) et la batterie faible, et POSITIVE pour l'arr�t � distance. Les param�tres de ligne s�rie comme la vitesse n'ont aucune importance.
Liste du materiel necessaire :
Et de plus :
Voici quelques d�tails sur le fonctionnement du mod�le 700 en mode b�te, qui pr�sente une utilisation fut�e d'un transistor plac� dans le c�ble qui �teint l'onduleur lorsque l'ordinateur est �teint.
From: Markus Eiden <Markus@eiden.de>
Sender: eiden@eiden.de
To: "Harvey J. Stein" <abel@netvision.net.il>
Subject: Re: APC Smart-UPS
Date: Sun, 30 Mar 1997 16:21:05 +0200
J'utilise un APC Smart-UPS 700 pour mon syst�me Linux sur une carte ASUS.
Pour utiliser quelques possibilites de l'onduleur, il faut quatre choses :
1) faire un c�ble RS-232 avec une petite interface ; 2) le source du powerd du paquetage sysvinit (j'utilise la version 2.6 de Miquel van Smoorenburg). Il faut ensuite modifier ce powerd ; 3) changer /etc/inittab ; 4) faire un script qui lance certaines commandes si le courant est coup� ou si la batterie est faible.
Quelques possibilit�s :
Lorsque le secteur est coup�, un script est lanc� et une entr�e est faite dans syslog.
Si la batterie est faible, un autre script est lanc� (qui ar�te l'ordinateur, �videmment) et une entr�e est faite dans syslog.
Si l'ordinateur est arr�t� et que le courant l'est aussi, l'onduleur sera arr�t� � son tour.
1) D'abord le c�ble :
Si l'on jette un coup d'oeil � l'arri�re de l'onduleur, on y trouve un connecteur femelle comme celui-ci :
8 1: Eteint l'onduleur lorsque le courant est coupe
et que la broche 1 est haute.
X X X X 3: Descend en cas de coupure de curant.
X X X X X 4: Masse
5: Descend en cas de baisse de la batterie.
1 3 4 5 8: +24V
D'un autre c�t�, l'arri�re du PC pr�sente un connecteur m�le comme celui-ci :
8 6 1: DCD
X X X X 4: DTR
X X X X X 5: GND
5 4 1 6: DSR
8: CTS
Il faut r�aliser l'interface suivant entre ces connecteurs :
PC UPS
#------------------ (8)
|
470 Ohm
|
#-----#-----#-----#-----#-----#----- ca. 9-12V
| | | | | |
47 3.3 3.3 3.3 1 470
kOhm kOhm kOhm kOhm kOhm Ohm
| | | | | |
(8) ------------------------# | |
| | | | |
(6) ------------#------------------------------------------- (5)
| | | |
(1) ------------------#------------------------------------- (3)
| | |
| C#------------------------- (1)
| -| |
| B/ |
(4) ------#-----12kOhm---------| |
\>E |
| |
(5)-----------------------------#-------#------------------- (4)
2) Le source de powerd
J'ai juste retouch� tr�s peu le source (donc c'est en fait celui de Miquel).
(a) Emet une "alerte" vers syslogd si la broche 8 du PC (DCD
)
est basse (c'est qu'alors, le c�ble n'est pas connect�) ;
(b) DCD
descendu � z�ro -> le courant est coup� -> appel de
powerfail(0)
-> envoi de INIT_CMD_POWERFAIL
au processus init
;
(c) DCD
remont� -> le courant est revenu -> appel de powerfail(1)
->
envoi de INIT_CMD_POWEROK
au processus init
;
(d) DSR
et DCD
descendus � z�ro -> le courant est coup� et la
batterie est faible > appel de powerfail(2)
-> envoi de
INIT_CMD_POWERFAILNOW
au processus init
.
Et voil�.
/*
* powerd Surveille la ligne DCD d'un port serie connecte a un
* onduleur. Si le courant est coupe, previent init.
* Si le courant revient, previent init encore.
* Tant que le courant est la, DCD doit etre "haut". Lorsque
* le courant est coupe, DCD doit descendre.
* Powerd maintient DTR haut, donc en branchant une resistance
* de 10 kOhm entre DCD et DTR, l'onduleur ou un simple relais
* peuvent descendre DCD � la masse.
* Il faut aussi brancher DSR et DTR ensemble. Ainsi, powerd
* peut controler ici et la que DSR soit haut, et il sait donc
* que l'onduleur est connecte !!
*
* Usage: powerd /dev/cua4 (ou tout autre port serie).
*
* Auteur: Miquel van Smoorenburg, <miquels@drinkel.cistron.nl>.
* Quelques changements mineurs de Markus Eiden, <Markus@Eiden.de>
* pour APC-Smart-UPS-powerd.
*
* Version: 1.31, 29-Feb-1996.
*
* Traduction: Bernard Choppy (choppy@imaginet.fr)
*
* Ce programme fut developpe initialement pour mon employeur
* ** Cistron Electronics **
* qui a autorise la distribution de celui-ci pour un usage
* generalise.
*
* Copyright 1991-1996 Cistron Electronics.
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Ce programme est un logiciel libre ; vous pouvez le diffuser
* et/ou modifier selon les termes de la GPL (GNU Public License)
* de la Free Software Foundation; au choix dans la version 2 de
* cette licence, ou (a votre choix) toute autre version.
*
* Modifications mineures pour APC-powerd par Markus Eiden
* Markus@Eiden.de
*/
/* Utilisation de la nouvelle methode de communication avec init */
#define NEWINIT
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <syslog.h>
#include <string.h>
#include "paths.h"
#ifdef NEWINIT
#include "initreq.h"
#endif
#ifndef SIGPWR
# define SIGPWR SIGUSR1
#endif
#ifdef NEWINIT
void alrm_handler()
{
}
#endif
/* Avise init du changement d'etat du courant */
void powerfail(ok)
int ok;
{
int fd;
#ifdef NEWINIT
struct init_request req;
/* Remplissage de la structure de requete */
memset(&req, 0, sizeof(req));
req.magic = INIT_MAGIC;
/* INIT_CMD_* sont definis dans initreq.h *
* Jetez un coup d'oeil a init.c et /etc/inittab *
* *
* ok=0 -> INIT_CMD_POWERFAIL -> powerwait *
* ok=1 -> INIT_CMD_POWEROK -> powerokwait *
* ok=2 -> INIT_CMD_POWERFAILNOW -> powerfailnow */
switch (ok) {
case 0 : req.cmd = INIT_CMD_POWERFAIL;
/* Coupure -> alerte */
break;
case 1 : req.cmd = INIT_CMD_POWEROK;
/* Retour du courant -> arrete l'alerte */
break;
case 2 : req.cmd = INIT_CMD_POWERFAILNOW;
/* Coupure et batterie faible -> arret systeme */
break;
}
/* Ouvre le fifo (avec timeout) */
signal(SIGALRM, alrm_handler);
alarm(3);
if ((fd = open(INIT_FIFO, O_WRONLY)) >= 0
&& write(fd, &req, sizeof(req)) == sizeof(req)) {
close(fd);
return;
}
/* On en revient a l'ancienne methode... */
#endif
/* Creaton d'un fichier info pour init */
unlink(PWRSTAT);
if ((fd = open(PWRSTAT, O_CREAT|O_WRONLY, 0644)) >= 0) {
if (ok)
write(fd, "OK\n", 3);
else
write(fd, "FAIL\n", 5);
close(fd);
}
kill(1, SIGPWR);
}
/* Programme principal */
int main(int argc, char **argv)
{
int fd;
int dtr_bit = TIOCM_DTR;
int flags;
int status, oldstat = -1;
int count = 0;
int tries = 0;
int powerfailed = 0;
int rebootnow = 0;
if (argc < 2) {
fprintf(stderr, "Usage: powerd <port>\n");
exit(1);
}
/* Lancement de syslog */
openlog("powerd", LOG_CONS|LOG_PERROR, LOG_DAEMON);
/* Ouverture du port a surveiller */
if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) {
syslog(LOG_ERR, "%s: %s", argv[1], sys_errlist[errno]);
closelog();
exit(1);
}
/* Port ouvert, DTR doit etre haut. On le force tout de meme...*/
/* Fonctionnement : Batterie faible -> Arret -> DTR descend -> *
* transistor ouvert -> La broche d'arret onduleur monte -> *
* l'onduleur s'arrete apres 20 s environ. S'il y a une coupu- *
* re et que l'ordinateur est eteint, l'onduleur s'arrete. *
* Si le courant revient, l'onduleur s'allume, l'ordinateur *
* demarre, et powerd est lance. *
* */
ioctl(fd, TIOCMBIS, &dtr_bit);
/* Passe en daemon. */
switch(fork()) {
case 0: /* Fils */
closelog();
setsid();
break;
case -1: /* Erreur */
syslog(LOG_ERR, "impossible de forker.");
closelog();
exit(1);
default: /* Pere */
closelog();
exit(0);
}
/* Relance syslog. */
openlog("powerd", LOG_CONS, LOG_DAEMON);
syslog(LOG_INFO, "APCpowerd demarre...");
/* On surveille DCD */
while(1) {
/* Lecture de l'etat. */
ioctl(fd, TIOCMGET, &flags);
/* Controle de connexion : CTS doit etre haut */
tries = 0;
/* TIOCM_*- Se reporter a .../ams/termios.h */
while((flags & TIOCM_CTS) == 0) {
/* On continue a essayer, et alerte toutes les 2 minutes */
if ((tries % 60) == 0)
syslog(LOG_ALERT, "Onduleur non connecte");
sleep(2);
tries++;
ioctl(fd, TIOCMGET, &flags);
}
if (tries > 0)
syslog(LOG_ALERT, "Onduleur reconnecte");
/* Calcule l'etat en cours */
status = (flags & TIOCM_CAR);
/* Si DCD est passe a zero, le courant a ete coupe */
if (oldstat != 0 && status == 0) {
count++;
if (count > 3) {
powerfailed = 1;
powerfail(0);
}
else {
sleep(1);
continue;
}
}
/* Si DCD remonte, le courant est revenu. */
if (oldstat == 0 && status > 0) {
count++;
if (count > 3) {
powerfailed = 0;
/* eigentlich unnoetig: */
rebootnow = 0;
powerfail(1);
}
else {
sleep(1);
continue;
}
}
/* Batterie faible et courant coupe ? */
if (rebootnow==0)
if (powerfailed==1)
if ((flags & TIOCM_DSR) == 0)
{
rebootnow=1;
powerfail(2);
}
/* Reinitialisation, stockage de l'etat et attente 2s. */
count = 0;
oldstat = status;
sleep(2);
}
/* N'arrive jamais */
return(0);
}
3) Modifier inittab
init
re�oit les commandes INIT_CMD
et lance les scripts idoines :
pf::powerwait:/sbin/init.d/powerfail start
pn::powerfailnow:/sbin/init.d/powerfail now
po::powerokwait:/sbin/init.d/powerfail stop
Ce qui signifie, par exemple : si le courant est coup� (powerwait
,
lancer le script /sbin/init.d/powerfail
avec le param�tre
"start
".
4) Le script powerfail
#! /bin/sh
# Copyright (c) 1997 Markus Eiden, Markus@Eiden.de
#
case "$1" in
start)
echo "LE COURANT EST COUPE !" | wall
logger "Coupure de courant"
;;
now)
echo "BATTERIE FAIBLE ! Arret systeme dans une minute" | wall
logger "Batterie faible, arret systeme dans une minute"
sync
/sbin/shutdown -r -t 5 +1
;;
stop)
echo "LE COURANT EST REVENU !!" | wall
logger "Courant retabli"
/sbin/shutdown -c >/dev/null 2>/dev/null
;;
*)
echo "Usage: $0 {start|now|stop}"
exit 1
;;
esac
exit 0
Eh bien, cela devrait �tre simple ;-)
Vous voil� pr�t maintenant, mais restez prudent : cela fonctionne pour moi, mais je ne peux �videmment pas garantir que quoi que ce soit de cela fonctionne pour vous.
Un petit conseil pour finir : si /sbin/init.d/powerfail
arr�te votre PC, DTR descend, donc la broche d'arr�t (c�t� onduleur) monte.
D�s cet instant, il faut entre 20 et 30 secondes � l'onduleur pour
s'arr�ter.
C'est de votre responsabilit� d'emp�cher votre machine Linux de red�marrer
durant ces 20 secondes (en particulier, de monter les volumes disque).
Cela ne fut pas un probl�me pour mon syst�me.
Quatre m�thodes simples permettent d'emp�cher Linux de d�marrer rapidement :
Autre jour, autre APC. Voici pour le Smart-UPS 1 400, en mode b�te.
From: "Slavik Terletsky" <ts@polynet.lviv.ua>
To: hjstein@math.huji.ac.il
Subject: my contribution to UPS HOWTO
Date: Mon, 27 Jan 1997 21:10:16 +0000
Daemon d'onduleur pour FreeBSD (2.1.5 - test�).
Sch�ma de branchement :
Onduleur (broche, nom) PC (broche, nom)
---------------------- ---------------------
1 Arret >-----------> 4 Terminal pret
2 Courant Coupe >-----------> 8 Pret a emettre
4 Commun >-----------> 5 Masse
5 Batterie faible >----------+> 1 Detection de porteuse
8 Batterie (+24V) >-|10kOhm|-+
Description
Usage: upsd <device> [wait [script]]
device - device name upsd interacts thru (e.g. /dev/cuaa1)
wait - time (secs) to wait before running script, (default value 0 sec).
script - system shutdown script (default /etc/rc.shutdown).
Fonctionnement :
upsd
enregistre tous les changements d'�tat de l'onduleur (courant
pr�sent ou absent, batterie faible ou bonne).
Lorsque le courant est absent et que la batterie est faible, upsd
active le signal d'arr�t de l'onduleur, attend le nombre de secondes indiqu�
sur la ligne de commande, et lance le script d'arr�t.
Exemple de script :
#!/bin/sh
# Le script est execute lorsque le systeme s'arrete
PATH=/sbin:/bin:/usr/sbin:/usr/bin
echo "ARRET IMMEDIAT DU SYSTEME" | wall
reboot
Source d'upsd
:
/* daemon d'onduleur
* Copyright 1997 Slavik Terletsky. All rights reserved.
* Auteur: Slavik Terletsky <ts@polynet.lviv.ua>
* Systeme: FreeBSD
* Traduction: Bernard Choppy <choppy@imaginet.fr>
*/
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <syslog.h>
#include <unistd.h>
#include <varargs.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/uio.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/ttycom.h>
int status;
int wait = 0;
FILE *fd;
char *scr = "/etc/rc.shutdown";
char *idf = "/var/run/upsd.pid";
void upsterm();
void upsdown(int);
int main(int argc, char *argv[]) {
int pd;
int zero = 0;
char d5, d6, d7;
char low = 0;
char pow = 1;
/* controle des arguments */
switch(argc) {
case 4:
scr = argv[3];
case 3:
wait = atoi(argv[2]);
case 2:
break;
default:
fprintf(stderr, "usage: %s <port> [temporisation [script]]\n", argv[0]);
exit(1);
}
/* controle de l'existence du script */
if(!(fd = fopen(scr, "r"))) {
fprintf(stderr, "fopen: %s: %s\n", scr, sys_errlist[errno]);
exit(1);
}
fclose(fd);
/* controle si upsd s'execute deja */
if(fd = fopen(idf, "r")) {
fprintf(stderr, "fopen: le fichier %s existe deja\n", idf);
exit(1);
}
/* passe en daemon */
switch(fork()) {
case -1: /* erreur */
fprintf(stderr, "fork: %s\n", sys_errlist[errno]);
exit(1);
case 0: /* fils */
break;
default: /* pere */
exit(0);
}
/* sauvegarde du pid */
if(!(fd = fopen(idf, "w"))) {
fprintf(stderr, "fopen: %s: %s\n", idf, sys_errlist[errno]);
exit(1);
}
fprintf(fd, "%d\n", (int)getpid());
fclose(fd);
/* ouverture du port a surveiller */
if((pd = open(argv[1], O_RDWR | O_NDELAY)) < 0) {
fprintf(stderr, "open: %s: %s\n", argv[1], sys_errlist[errno]);
exit(1);
}
/* le daemon fonctionne */
openlog("upsd", LOG_PID, LOG_DAEMON);
syslog(LOG_INFO, "daemon demarre");
/* reaction au signal */
(void)signal(SIGTERM, upsterm);
/* surveillance du port */
while(1) {
/* reinitialisation des bits */
if(ioctl(pd, TIOCMSET, &zero) < 0) {
fprintf(stderr, "ioctl: %s\n", sys_errlist[errno]);
exit(1);
}
/* lecture de l'etat du port */
if(ioctl(pd, TIOCMGET, &status) < 0) {
fprintf(stderr, "ioctl: %s\n", sys_errlist[errno]);
exit(1);
}
/* determination de l'etat */
d5 = status & 0x20;
d6 = status & 0x40;
d7 = status & 0x80;
/* courant present */
if(!(d7 + d5)) {
if(!pow) {
syslog(LOG_CRIT, "courant present");
pow = 1;
}
/* courant coupe */
} else {
if(pow) {
syslog(LOG_CRIT, "courant coupe");
pow = 0;
}
}
/* batterie faible */
if(!d6 && !low) {
syslog(LOG_ALERT, "batterie faible");
low = 1;
/* arret onduleur */
if(!pow) {
upsdown(pd);
}
}
/* batterie ok */
if(d6 && low) {
syslog(LOG_CRIT, "batterie ok");
low = 0;
}
sleep(1);
}
/* jamais atteint */
return 0;
}
void upsterm() {
/* message de trace de fin */
syslog(LOG_INFO, "arret du daemon");
/* effacement du fichier de pid */
unlink(idf);
exit(0);
}
void upsdown(int pd) {
/* message de trace d'arret */
syslog(LOG_ALERT, "arret du systeme");
/* effacement du fichier de pid */
unlink(idf);
/* mesure de securite : vidange des tampons d'ecriture */
system("/bin/sync");
system("/bin/sync");
system("/bin/sync");
/* arret de l'onduleur */
status = TIOCM_DTR;
if(ioctl(pd, TIOCMSET, &status) < 0) {
fprintf(stderr, "ioctl: %s\n", sys_errlist[errno]);
exit(1);
}
/* attente puis lancement du script */
sleep(wait);
system(scr);
}
# Slavik Terletsky # University "Lvivska Poytechnika" #
# Network Administrator # mailto:ts@polynet.lviv.ua #
Certaines personnes (y compris moi-m�me), ont plusieurs PC Linux connect�s sur un onduleur. Un PC contr�le l'onduleur et doit �teindre les autres PC lorsque le secteur est coup�.
Nous supposons que les PC peuvent communiquer sur un r�seau. Appelons le PC qui surveille l'onduleur le ma�tre, et les autres PC, les esclaves.
Dans les temps anciens, cela n�cessitait une amusante programmation.
Maintenant, la meilleure chose � faire semble �tre de trouver l'un des
paquetages powerd-2.0.tar.gz
ou upsd-1.0.tgz
cit�s � la section
Logiciels et de suivre les instructions.
Les deux sont capables de fonctionner sur les esclaves dans un mode qui les
connecte � un processus powerd
ou upsd
s'ex�cutant sur le ma�tre
pour lui demander l'�tat de l'onduleur.
Certains des paquetages sp�cifiques pour APC semblent disposer aussi de
cette fonctionnalit�.
N�ammoins, si votre r�seau n'est pas s�r, vous pouvez �tre amen� � souhaiter
plus de s�curit� dans ce montage, puisqu'il est possible de "pirater"
un powerd
esclave pour lui faire croire que le courant est coup�.
Une autre possibilit� est d'utiliser le protocole SNMP (Simple Network Management Protocol - protocole simplifi� d'administration de r�seau). Le d�tail de l'utilisation de SNMP d�passe le cadre de ce document, pour ne pas dire que cela me d�passe tout court actuellement.
Configurez un port sur le ma�tre qui, lorsqu'on y est connect�, envoie soit "OK", soit "FAIL", soit "BATLOW" lorsque le courant est l�, qu'il est coup�, ou que la batterie est faible, respectivement. Montez cela sur le port 13 (le port time) sur lequel vous pouvez faire un telnet et recevoir l'heure locale.
Montez sur les esclaves une version de powerd qui lit ce port plut�t que de contr�ler une ligne s�rie.
Je pense que c'est probablement la meilleure m�thode, et j'ai l'intention d'upgrader mes syst�mes pour l'utiliser.
Identique � la section M�thode de l'�tat du port, mais par �mission d'un message broadcast Ethernet signifiant l'�v�nement.
Cela peut avoir des implications de s�curit�, puisqu'il peut �tre {{spoofed}}
Configurez les pseudo-login sur les esclaves avec les noms powerok
et
powerfail
, tous les deux avec le m�me UID. Faites de
/etc/powerokscript
le shell du user powerok, et de
/etc/powerfailscript
celui du user powerfail. Sur le ma�tre, faites
en sorte que le script /etc/powerokscript
fasse un rlogin sur chaque
esclave en tant que user powerok et que le script /etc/powerfailscript
fasse un rlogin en tant que powerfail sur chaque esclave. Placez un fichier
.rhosts
sur chaque esclave dans le r�pertoire par d�faut de powerok et
powerfail pour autoriser le root du master � entrer comme users powerok et
powerfail sur chaque esclave.
C'est le syst�me que j'utilise actuellement. Malheureusement, j'ai quelques
difficult�s � faire que les login distants s'ex�cutent et rendent la main
sans se bloquer. Il faudrait probablement que le script
/etc/powerfailscript
fasse les rsh sur les esclaves en t�che de
fond pour lui �viter de bloquer. N�ammoins, je n'ai jamais obtenu de
login correct en t�che de fond. J'ai m�me essay� des combinaisons
complexes comme faire se loger toto
sur l'esclave. Tout ce que j'ai
utilis� avait des probl�mes et se trouvait bloqu� par un entr�e tty (ou sortie,
je ne m'en rappelle plus).
En plus, cela peut cr�er des trous de s�curit�.