Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 0d5cd12c82d627a82c59047e1ba7b8a9 > files > 1363

howto-html-fr-9.0-0.2mdk.noarch.rpm

<HTML>
<HEAD>
<TITLE>stuck</TITLE>
</HEAD>
<BODY>
<A NAME="ups-specific"></A> <H1>8. <A NAME="s8"></A>stuckInformations sur un certain nombre d'onduleurs</H1>
<P>
<A HREF="UPS-HOWTO.html#toc8">Contenu de cette section</A></P>

<P>Cette section contient des informations sp&eacute;cifiques de certains onduleurs.
Ce que je souhaiterais serait de disposer des informations sur le port de
contr&ocirc;le de l'onduleur (ce que fait chaque broche et ce qu'elle attend qui
soit fait), sur le c&acirc;ble fourni par le constructeur (ce qu'il connecte et
o&ugrave;), ainsi qu'une version modifi&eacute;e de powerd.c qui fonctionne avec
l'onduleur.
Ce que j'ai actuellement est une description &agrave; peu pr&egrave;s compl&egrave;te de chaque
onduleur.
Je voudrais essayer d'affiner chaque information, mais comme je ne
peux tester chaque onduleur, il est difficile de d&eacute;cider exactement de ce
qui est n&eacute;cessaire.
De plus, chaque onduleur semble avoir quelques trucs suppl&eacute;mentaires qui
sont bien d&eacute;crits par les auteurs de chaque section.
Ainsi, pour l'heure, je laisse tout en place.
Tout pour un HOWTO &eacute;pais.</P>
<P><B>Veuillez m'envoyer vos exp&eacute;riences pour les inclure ici.</B></P>
<P></P>
<H2>8.1 <A NAME="ss8.1"></A> Exp&eacute;riences g&eacute;n&eacute;rales.</H2>

<P>J'ai conserv&eacute; les commentaires des gens, mais n'ai pas encore obtenu la
permission de les inclure ici.
Voici un sommaire g&eacute;n&eacute;ral de ce que j'ai entendu dire.</P>
<P>
<DL>
<DT><B>APC&nbsp;:</B><DD><P>Ne donneront pas d'informations sur leur mode "intelligent" sans votre
signature d'un accord de confidentialit&eacute;.
Donc, les gens sont forc&eacute;s d'utiliser leurs onduleurs "intelligents"
en mode "b&ecirc;te", comme soulign&eacute; plus bas.
Diverses tentatives de r&eacute;tro-ing&eacute;nierie ont &eacute;t&eacute; sold&eacute;es par des niveaux
de r&eacute;ussite diff&eacute;rents.</P>
<P></P>
<DT><B>Best&nbsp;:</B><DD><P>Serviables et aimables.
Fournissent le code source et la documentation pour les deux modes.</P>
<P></P>
<DT><B>Tripp Lite&nbsp;:</B><DD><P>Une personne a dit que Tripp ne diffuserait pas non plus d'information.</P>
<P></P>
<DT><B>Upsonic&nbsp;:</B><DD><P>Quelqu'un a dit qu'Upsonic a discut&eacute; de d&eacute;tails techniques au t&eacute;l&eacute;phone,
r&eacute;pondu aux questions par fax et est serviable en g&eacute;n&eacute;ral.</P>
</DL>
</P>
<P></P>
<P></P>
<P></P>

<H2>8.2 <A NAME="ss8.2"></A> Advice 1200 A</H2>

<P>Onduleurs d'Advice Electronics, Tel Aviv, Isra&euml;l (Tout leur mat&eacute;riel
porte une &eacute;tiquette &agrave; leur nom).</P>
<P>Sp&eacute;cification des broches du port de contr&ocirc;le.</P>
<P>
<UL>
<LI>2 - Coupure de courant.</LI>
<LI>5 - Batterie faible.</LI>
<LI>6 - Extinction de l'onduleur.</LI>
<LI>4 - Masse commune des broches 2, 5 et 6.</LI>
</UL>
</P>
<P>Ils m'ont aussi donn&eacute; le dessin suivant qui ne m'a servi &agrave; rien, mais peut
vous &ecirc;tre utile si vous souhaitez fabriquer vous-m&ecirc;me un c&acirc;ble&nbsp;:</P>
<P></P>
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
         2 ----------+
                     |
                     \
                      \|
                       |--------------
                      /|
                    \/      &lt;--- Le &quot;\/&quot; indique le type de ce
                    |            transistor. J'ai oubli&amp;eacute; ce que
                    |            cela veut dire, mais ce n'est
                 +-----+         pas fondamental.
                /  /  /


         5 ----------+
                     |
                     \
                      \|
                       |--------------
                      /|
                    \/
                    |
                    |
                 +-----+
                /  /  /


                       +-------------
                       |
                       /
              10K    |/
         6 --\/\/\/--|
                     |\
                       \/
                       |
                       |
                    +-----+
                   /  /  /


         4 ----------+
                     |
                     |
                  +-----+
                 /  /  /

</PRE>
<HR>
</CODE></BLOCKQUOTE>
</P>
<P>C&acirc;ble fourni.</P>
<P>Ils m'ont d'abord donn&eacute; un c&acirc;ble qui appartenait &agrave; un paquetage DOS de
contr&ocirc;le de l'onduleur appel&eacute; RUPS.
Je l'ai utilis&eacute; pour les tests.
Une fois ceux-ci satisfaisants, ils m'ont donn&eacute; un c&acirc;ble qu'ils utilisent
pour les serveurs Netware connect&eacute;s &agrave; des onduleurs.
Il fonctionnait &agrave; l'identique.
Voici les d&eacute;tails&nbsp;:</P>
<P>
<UL>
<LI>DTR - Alimentation du c&acirc;ble (powerd.c doit le monter)&nbsp;;</LI>
<LI>CTS - Courant pr&eacute;sent (descend quand le courant est coup&eacute;)&nbsp;;</LI>
<LI>DSR - Batterie faible (descend lorsque la batterie faiblit)&nbsp;;</LI>
<LI>RTS - Extinction de l'onduleur (&agrave; monter pour &eacute;teindre).</LI>
</UL>
</P>
<P>(le powerd.c inclus dans SysVinit place ou laisse RTS haut, causant l'arr&ecirc;t
de l'onduleur imm&eacute;diatement lors du lancement de powerd&nbsp;!)</P>
<P></P>
<P></P>

<A NAME="ciro"></A> <H2>8.3 <A NAME="ss8.3"></A> Advice 1200 Aname="Trust Energy Protector 400/600"</H2>

<P>Cette section n'est pas utile seulement pour le Trust Energy Protector.
Elle illustre les nouvelles fonctionnalit&eacute;s d'<EM>init</EM>.</P>
<P>Comment utiliser un Trust Energy Protector 400/650 sous Linux&nbsp;?</P>
<P>par
<A HREF="ciro@stud.unipg.it">Ciro Cattuto</A>
</P>
<P>Version 1.0&nbsp;- 31&nbsp;mars 1997</P>
<P>
<DL>
<DT><B>Connexion PC-onduleur</B><DD><P>Le Trust Energy Protector 400/650 est &eacute;quip&eacute; d'un port de signaux.
A l'aide d'un c&acirc;ble adapt&eacute;, il est possible de connecter celui-ci sur
un ordinateur pour r&eacute;agir aux &eacute;v&eacute;nements concernant l'alimentation
&eacute;lectrique.</P>
<P></P>
<DT><B>Le port de signaux de l'onduleur</B><DD><P>L'assignement des broches du port de signaux DB-9 de l'onduleur est le
suivant, comme indiqu&eacute; dans le manuel utilisateur&nbsp;:</P>
<P>
<DL>
<DT><B>broche 2</B><DD><P>Ce relais est ferm&eacute; lorsque le courant d'alimentation est coup&eacute;.</P>
<P></P>
<DT><B>broche 4</B><DD><P>Masse des broches 2 et 5.</P>
<P></P>
<DT><B>broche 5</B><DD><P>Ce relais est ferm&eacute; lorsque la batterie dispose de moins d'une minute et
demi d'autonomie.</P>
<P></P>
<DT><B>broche 6</B><DD><P>L'utilisateur peut envoyer un signal haut (+5V &agrave; +12V) durant plus d'une
milliseconde pour &eacute;teindre l'onduleur.
Cette option ne peut &ecirc;tre activ&eacute;e que durant une coupure de courant.</P>
<P></P>
<DT><B>broche 7</B><DD><P>Masse de la broche 6.</P>
</DL>
</P>
<P></P>
<DT><B>le c&acirc;ble</B><DD><P>Voici le c&acirc;ble que j'ai utilis&eacute; pour connecter l'onduleur au port s&eacute;rie de
mon ordinateur.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
     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

     ====================================================================
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Pour un port s&eacute;rie DB-9, les broches 6, 20, 8, 7, 5 et 2 correspondent
respectivement aux broches 6, 4, 1, 5, 8 et 3.</P>
<P></P>
<DT><B>Comment fonctionne le c&acirc;ble&nbsp;?</B><DD><P>L'ordinateur monte <CODE>DTR</CODE> et v&eacute;rifie que <CODE>DSR</CODE> soit haut pour s'assurer
que le c&acirc;ble soit connect&eacute; &agrave; l'ordinateur.
Tant que le courant est l&agrave;, <CODE>DCD</CODE> et <CODE>CTS</CODE> sont hauts tous les deux
(&agrave; cause des r&eacute;sistances).</P>
<P>Lorsque le courant est coup&eacute;, le relais entre les broches 2 et 4 de l'onduleur
se ferme, et <CODE>DCD</CODE> descend pour signaler la coupure.</P>
<P>De m&ecirc;me, lorsque les batteries sont faibles, le relais entre les broches 5 et 4
se ferme, faisant descendre <CODE>CTS</CODE>.</P>
<P>Durant une coupure de courant, l'ordinateur peut &eacute;teindre l'onduleur en
montant <CODE>TX</CODE> durant <CODE>1&nbsp;ms</CODE> au moins.
Cela peut &ecirc;tre r&eacute;alis&eacute; ais&eacute;ment en envoyant un octet <CODE>0xFF</CODE> au port s&eacute;rie
avec une vitesse faible.</P>
<P></P>
<DT><B>le daemon powerd</B><DD><P>Pour utiliser les informations disponibles sur le port s&eacute;rie, il faut utiliser
un programme qu surveille celui-ci, d&eacute;code le signal et envoie les messages
appropri&eacute;s au syst&egrave;me d'exploitation, en l'occurence au processus <CODE>init</CODE>.
Ce dernier peut ex&eacute;cuter des scripts et programmes con&ccedil;us pour g&eacute;rer
(proprement&nbsp;!) l'&eacute;v&eacute;nement de coupure de courant.</P>
<P></P>
<DT><B>compiler powerd</B><DD><P>En annexe&nbsp;A se trouve le code de <CODE>powerd</CODE>, 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&eacute;
celui de sysvinit-2.60).
Ecrasez simplement le <CODE>powerd.c</CODE> d'origine et compilez-le.</P>
<P></P>
<DT><B>Comment fonctionne powerd&nbsp;?</B><DD><P>D&egrave;s le d&eacute;marrage, <EM>powerd</EM> ouvre le p&eacute;riph&eacute;rique s&eacute;rie connect&eacute; &agrave;
l'onduleur et monte <CODE>DTR</CODE>.
Ensuite, il forke un daemon et se termine en laissant celui-ci tourner.
Le daemon <EM>powerd</EM> peut se trouver dans l'un des trois &eacute;tats suivants&nbsp;:</P>
<P>
<DL>
<DT><B>Etat&nbsp;0&nbsp;- le courant est bon</B><DD><P>Dans cet &eacute;tat, <EM>powerd</EM> lit le port s&eacute;rie toutes les <CODE>T0_SLEEP</CODE>
secondes (voir les lignes <CODE>#define</CODE> au d&eacute;but du code source).
Si <CODE>DCD</CODE> descend, <EM>powerd</EM> bascule en &eacute;tat&nbsp;1.
Si <CODE>CTS</CODE> descend, <EM>powerd</EM> bascule en &eacute;tat&nbsp;2 (cela ne doit pas
arriver si <CODE>DCD</CODE> n'est pas descendu avant, mais j'ai pr&eacute;f&eacute;r&eacute; assurer
le coup).</P>
<P></P>
<DT><B>Etat&nbsp;1&nbsp;- le courant est coup&eacute;</B><DD><P>Une coupure de courant a &eacute;t&eacute; d&eacute;tect&eacute;e.
<CODE>DCD</CODE> est bas et <EM>powerd</EM> lit le port de l'onduleur toutes les
<CODE>T1_SLEEP</CODE> secondes.
Si <CODE>DCD</CODE> remonte, il bascule en &eacute;tat&nbsp;0.
Si <CODE>CTS</CODE> tombe, il bascule en &eacute;tat&nbsp;2.</P>
<P></P>
<DT><B>Etat&nbsp;2&nbsp;- la batterie est faible</B><DD><P>La batterie de l'onduleur est faible.
Le daemon <EM>powerd</EM> reste dans cet &eacute;tat.</P>
</DL>
</P>
<P>A chaque changement d'&eacute;tat de <EM>powerd</EM>, il pr&eacute;vient le processus <EM>init</EM>
afin que l'action appropri&eacute;e soit effectu&eacute;e.
Ces &eacute;v&eacute;nements sont trac&eacute;s &agrave; l'aide du syst&egrave;me de trace du syst&egrave;me
d'exploitation (NdT&nbsp;: <EM>syslogd</EM>).</P>
<P>Si <CODE>DSR</CODE> est bas, c'est qu'il y a un probl&egrave;me au niveau du c&acirc;ble.
<EM>powerd</EM> continue &agrave; surveiller la ligne <CODE>DSR</CODE> et envoit un message
d'avertissement toutes les deux minutes au syst&egrave;me de trace.</P>
<P></P>
<DT><B>Utiliser powerd</B><DD><P>Le daemon <EM>powerd</EM> doit &ecirc;tre lanc&eacute; par les scripts d'initialisation
durant le d&eacute;marrage du syst&egrave;me.
J'ai ajout&eacute; les lignes suivantes dans mon script
<CODE>/etc/rc.d/rc.local</CODE>&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# Ajout du support de l'onduleur
echo &quot;Demarrage du processus powerd...&quot;
rm -f /etc/turnUPSoff
stty -crtscts speed 75 &lt; /dev/cua3 &gt; /dev/null
if [ -x /usr/sbin/powerd ]
then
        /usr/sbin/powerd /dev/cua3
fi
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>En premier, on efface (si n&eacute;cessaire) le fichier <CODE>/etc/turnUPSoff</CODE>.
Celui-ci est utilis&eacute; par le script de shutdown (<CODE>/etc/rc.d/rc.0</CODE>
dans mon cas) pour d&eacute;cider s'il faut arr&ecirc;ter l'onduleur ou non.
Voir plus bas pour plus d'informations.</P>
<P>Ensuite, on d&eacute;sactive le contr&ocirc;le de flux mat&eacute;riel sur le p&eacute;riph&eacute;rique
s&eacute;rie connect&eacute; &agrave; l'onduleur et on positionne la vitesse &agrave; 75&nbsp;bauds.
Maintenant, nous sommes s&ucirc;r que le signal <CODE>TX</CODE> restera haut suffisamment
longtemps pour arr&ecirc;ter l'onduleur si nous envoyons un caract&egrave;re <CODE>0xFF</CODE>
au port s&eacute;rie (&agrave; nouveau, voir plus bas).</P>
<P>Enfin, nous lan&ccedil;ons le daemon <EM>powerd</EM> en lui indiquant le port &agrave;
surveiller.
Notez que nous n'avons pas &agrave; lire de caract&egrave;res sur ce port, donc pas
d'inqui&eacute;tude en cas de conflit d'interruptions&nbsp;- il n'aura aucune influence.</P>
<P></P>
<DT><B>Le fichier inittab et les scripts de shutdown</B><DD><P>Le processus <EM>powerd</EM> tourne maintenant, et il enverra des signaux &agrave;
<CODE>init</CODE> en cas de coupure de courant.
Il faut maintenant configurer le syst&egrave;me afin qu'il puisse r&eacute;agir de
mani&egrave;re utile lorsque ces signaux sont re&ccedil;us.</P>
<P></P>
<DT><B>Modification de inittab</B><DD><P>Ajoutez les lignes suivantes &agrave; proximit&eacute; du d&eacute;but de votre fichier
<CODE>/etc/inittab</CODE>&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# 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
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<DT><B>Les scripts</B><DD><P>Les scripts <CODE>powerfail_script</CODE>, <CODE>powerokay_script</CODE> et
<CODE>powerfailnow_script</CODE> sont ex&eacute;cut&eacute;s lorsque <EM>init</EM> re&ccedil;oit le
signal correspondant.
Il ont la responsabilit&eacute; d'arr&ecirc;ter le syst&egrave;me de mani&egrave;re propre ou
d'arr&ecirc;ter un shutdown en cours au cas o&ugrave; le courant reviendrait.
Voici les scripts que j'utilise actuellement&nbsp;:</P>
<P><CODE>/etc/powerfail_script</CODE></P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#!/bin/sh
/bin/sync
/usr/bin/sleep 10m
kill -9 `ps auxw | \
         grep &quot;shutdown&quot; | \
         grep -v grep | \
         awk '{print $2}'` &gt;/etc/turnUPSoff
/sbin/shutdown -t30 -h +3 &quot;Coupure de courant&quot;
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Mon Trust Energy Protector 400 n'alimente que l'ordinateur, j'ai donc une
r&eacute;serve de courant assez importante.
Dans mon secteur, les coupures de courant ne durent souvent que quelques
minutes, donc le syst&egrave;me r&eacute;agit &agrave; celles-ci de la mani&egrave;re suivante&nbsp;:
Il attent 10&nbsp;minutes (habituellement, le courant revient avant) puis
arr&ecirc;te le syst&egrave;me, en laissant aux utilisateurs le temps de fermer leurs
applications et de se d&eacute;connecter.
Avant d'ex&eacute;cuter la commande <EM>shutdown</EM>, je v&eacute;rifie qu'il n'y a pas
d'autre shutdown en cours.
Je cr&eacute;e aussi le fichier <CODE>/etc/turnUPSoff</CODE> afin que le syst&egrave;me
arr&ecirc;te l'onduleur.</P>
<P><CODE>/etc/powerokay_script</CODE></P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#!/bin/sh
kill    `ps auxw | \
         grep &quot;powerfail_script&quot; | \
         grep -v grep | \
         awk '{print $2}'`
kill -9 `ps auxw | \
         grep &quot;shutdown&quot; | \
         grep -v grep | \
         awk '{print $2}'`
rm -f /etc/turnUPSoff
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Si le courant revient, on tue le script <EM>powerfail_script</EM> et tout
<EM>shutdown</EM> en cours.
On n'oublie pas de supprimer <CODE>/etc/turnUPSoff</CODE>.</P>
<P><CODE>/etc/powerfailnow_script</CODE></P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#!/bin/sh
kill -9 `ps auxw | \
         grep &quot;shutdown&quot; | \
         grep -v grep | \
         awk '{print $2}'` &gt;/etc/turnUPSoff
/sbin/shutdown -h now &quot;Batterie de l'onduleur faible. ARRET IMMEDIAT.&quot;
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Si la batterie faiblit, on s'assure qu'aucun <EM>shutdown</EM> ne soit en cours,
on cr&eacute;e le fichier <CODE>/etc/turnUPSoff</CODE> puis on arr&ecirc;te le syst&egrave;me
imm&eacute;diatement.</P>
<P></P>
<DT><B>Le script d'arr&ecirc;t syst&egrave;me</B><DD><P>Lorsque l'arr&ecirc;t du syst&egrave;me est effectu&eacute;, on peut arr&ecirc;ter l'onduleur en
montant le signal <CODE>TX</CODE> du port s&eacute;rie durant plus d'une milliseconde.
Celui-ci est d&eacute;j&agrave; configur&eacute; correctement par la commande <CODE>stty</CODE> du
script <CODE>rc.local</CODE>.
Si le fichier <CODE>/etc/turnUPSoff</CODE> est pr&eacute;sent, on envoit l'octet
<CODE>0xFF</CODE> (tous les bits &agrave; 1) sur le port s&eacute;rie.</P>
<P>Pour cela, on ajoute les lignes suivantes autour de la fin du script
d'arr&ecirc;t (<CODE>/etc/rc.d/rc.0</CODE> dans mon cas).
L'emplacement correct d&eacute;pend de la mani&egrave;re dont le syst&egrave;me est
configur&eacute;, mais il doit pouvoir se situer avant la commande <EM>echo</EM>
qui affiche le message "System is halted".</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# Est-on dans un cas de coupure de courant ?
if [ -f /etc/turnUPSoff ]
then
        echo &quot;Arret de l'onduleur&quot;
        sleep 5
        echo -e &quot;\377&quot; &gt;/dev/cua3
        exit 1
fi
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<DT><B>Remarques g&eacute;n&eacute;rales</B><DD><P>Ce document contient des choses que j'ai apprises en tentant de configurer
<EM>mon</EM> syst&egrave;me Linux avec le Trust Energy Protector 400.
Certaines informations (le chemin d'acc&egrave;s aux scripts d'initialisation, par
exemple) peuvent &ecirc;tre sp&eacute;cifiques &agrave; mon syst&egrave;me, et il vous faudra
vraisemblablement faire quelques adaptations.
N&eacute;ammoins, j'esp&egrave;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&eacute;s, recherchez des informations plus
g&eacute;n&eacute;rales dans le reste de ce Howto.
Bonne chance&nbsp;!</P>
<P></P>
<DT><B>Retour d'informations</B><DD><P>J'appr&eacute;cierais &eacute;norm&eacute;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&egrave;s tout, je suis
italien&nbsp;!
<SL>NdT&nbsp;: On se demande quelquefois s'il faut vraiment tout traduire :-))</SL>

).
Envoyez tout commentaire/suggestion/critique &agrave; l'adresse suivante&nbsp;:</P>
<P>
<A HREF="mailto:ciro@stud.unipg.it">ciro@stud.unipg.it</A>
</P>
<P>Si vous rencontrez des probl&egrave;mes d'utilisation de l'onduleur Trust Energy
Protector 400/650 sous Linux, vous pouvez aussi me contacter.
J'essaierai de vous aider.</P>
<P></P>
<DT><B>Informations l&eacute;gales</B><DD><P>Je n'ai aucune relation avec Trust Networking Products.</P>
<P>L'information contenue dans ce document est livr&eacute;e "telle quelle".
Vous pouvez l'utiliser &agrave; vos risques et p&eacute;rils.
Je ne puis &ecirc;tre tenu responsable d'un quelconque dommage ni perte de donn&eacute;es
r&eacute;sultant de l'utilisation du code ni des informations donn&eacute;es ici.</P>
<P>Ciro Cattuto</P>
<P></P>
<DT><B>Appendix A  -  Code source du daemon powerd></B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
powerd.c
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
/*
 * powerd       Recoit les evenements de coupure de courant
 *              depuis un Trust Energy Protector 400/650
 *              et previent init
 *
 * Usage:       powerd &lt;port serie&gt;
 *
 * Author:      Ciro Cattuto &amp;lt;ciro@stud.unipg.it&amp;gt;
 * 
 * Version 1.0 - 31 Mars 1997
 *
 * Ce code est largement fonde sur le powerd.c original de
 * Miquel van Smoorenburg &amp;lt;miquels@drinkel.ow.org&amp;gt;.
 *
 *
 * 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 &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/stat.h&amp;gt;
#include &amp;lt;sys/ioctl.h&amp;gt;
#include &amp;lt;fcntl.h&amp;gt;
#include &amp;lt;errno.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;signal.h&amp;gt;
#include &amp;lt;syslog.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#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(&amp;amp;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)) &gt;= 0
                &amp;&amp; write(fd, &amp;amp;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)) &amp;gt;= 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 &amp;lt; 2) {
        fprintf(stderr, 'Usage: powerd &amp;lt;peripherique&amp;gt;\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)) &amp;lt; 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, &amp;amp;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, &amp;amp;flags);

        /* On controle la connexion.
           DSR doit etre haut */
        tries = 0;
        while((flags &amp; 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, &amp;amp;flags);
        }
        if (tries &amp;gt; 0)
                syslog(LOG_ALERT, 'Connexion onduleur OK');

        /* On calcule l'etat en cours. */
        DCD = flags &amp; TIOCM_CAR;
        CTS = flags &amp; 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) &amp;&amp; (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 &amp;lt; T0_DCD) &amp;&amp; (CTS_count &amp;lt; 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) &amp;&amp; (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 &amp;lt; T1_DCD) &amp;&amp; (CTS_count &amp;lt; 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);
}
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
</DL>
</P>
<P></P>

<A NAME="Trust-400-A"></A> <H2>8.4 <A NAME="ss8.4"></A> Advice 1200 ATrust UPS&nbsp;400-A</H2>

<P>J'ai re&ccedil;u un message &agrave; propos du Trust UPS 400-A.
Je ne sais pas si c'est le m&ecirc;me que le Trust Energy Protector&nbsp;400,
donc voici le message
<SL>(NdT&nbsp;: le texte qui suit a &eacute;t&eacute; reformat&eacute;. Le document d'origine
comporte une copie de courrier &eacute;lectronique)</SL>

&nbsp;:</P>
<P>
<A HREF="marcel@ch.twi.tudelft.nl">Marcel Amerlaan</A>
</P>
<P>16&nbsp;juillet 1997</P>
<P>
<DL>
<DT><B>disponibilit&eacute;</B><DD><P>Cet onduleur ne semble plus &ecirc;tre fabriqu&eacute; par son
<A HREF="www.trust.box.nl">constructeur</A>
,
mais cela ne veut pas dire qu'il ne soit plus disponible&nbsp;:
j'ai achet&eacute; le mien tr&egrave;s peu cher il y a seulement un mois.
De plus, cette entreprise r&eacute;&eacute;tiquette souvent ses produits.</P>
<P></P>
<DT><B>c&acirc;ble</B><DD><P>Il est facile &agrave; fabriquer &agrave; l'aide du c&acirc;ble d'origine pour powerd
et de la documentation de Trust.</P>
<P>Il pr&eacute;sente deux am&eacute;liorations&nbsp;:
<UL>
<LI>indication de batterie faible&nbsp;;</LI>
<LI>extinction de l'onduleur.</LI>
</UL>
</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
Type               : &quot;pleur&quot;
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}
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>La fonction "cable check" n'est pas utilis&eacute;e car l'onduleur
ne semble pas la reconna&icirc;tre.</P>
<P></P>
<DT><B>conclusion</B><DD><P>Voil&agrave; tout ce que je crois savoir.
Si vous voulez plus d'informations sur l'onduleur, le c&acirc;ble ou le
logiciel, contactez-moi.</P>
<P>Et souvenez-vous que tout ce qui est d&eacute;crit ici fonctionne pour moi
mais je ne garantis pas que ce soit le cas pour vous.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
Marcel Ammerlaan
CEO Pleursoft (cela explique le nom du cable, n'est-ce pas :-)
Pays Bas
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>
<P></P>

<A NAME="S-40a"></A> <H2>8.5 <A NAME="ss8.5"></A> Advice 1200 ASustainer S-40a</H2>

<P>Informations sur le Sustainer S-40a
<SL>(NdT&nbsp;: le texte qui suit a &eacute;t&eacute; reformat&eacute;. Le document d'origine
comporte une copie de courrier &eacute;lectronique)</SL>

&nbsp;:</P>
<P>
<A HREF="fnevgeny@plasma-gate.weizmann.ac.il">Evgeny Stambulchik</A>
</P>
<P>10&nbsp;septembre 1995</P>
<P>
<DL>
<DT><B>environnement</B><DD><P>Sustainer S-40a avec le paquetage unipower (r&eacute;cemment renomm&eacute; genpower),
c&acirc;ble maison (cf. infra).
J'ai envoy&eacute; une copie de tout &ccedil;a &agrave; Tom Webster, l'auteur du paquetage, et
cela devrait appara&icirc;tre dans la nouvelle version.</P>
<P></P>
<DT><B>c&acirc;ble</B><DD><P>
<UL>
<LI>Note&nbsp;: les broches d'arr&ecirc;t indiqu&eacute;es dans la documentation
technique (4 et 6) sont incorrectes. Les bonnes sont 6 et 7, comme sur le
sch&eacute;ma joitnt&nbsp;;</LI>
<LI>Note&nbsp;2&nbsp;: les broches c&ocirc;t&eacute; PC entre parenth&egrave;se sont pour un
connecteur 25 broches, les autres pour un 9 broches.</LI>
</UL>
</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
             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
   \       |                 |               +-------+
    \|    -+-                |
     | &lt;- \ /                |
    /|    -+-                |
  /        |   7             |
  |        +---o-------------+
--+--
 ---
  -
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<DT><B>fichier unipowerd.h</B><DD><P>
<BLOCKQUOTE><CODE>
<PRE>
/************************************************************************/
/* Fichier              : unipowerd.h                                   */
/* Programme            : unipowerd                   Version: 1.0.0    */
/* Auteur               : Tom Webster &amp;lt;webster@kaiwan.com&amp;gt;              */
/* 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  --&amp;gt; */
/* TIOCM_RTS       RTS - Ready to send        --&amp;gt; */
/* TIOCM_CTS       CTS - Clear To Send        &amp;lt;-- */
/* TIOCM_CAR       DCD - Data Carrier Detect  &amp;lt;-- */
/* TIOCM_RNG       RI  - Ring Indicator       &amp;lt;-- */
/* TIOCM_DSR       DSR - Data Signal Ready    &amp;lt;-- */
 
#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                                           */
/************************************************************************/
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<DT><B>fichier genpowerd.h</B><DD><P>Pour la nouvelle version du logiciel (<EM>genpowerd</EM>), je pense qu'il faut
ajouter la ligne suivante&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
/* Evgeny's Sustainer S-40A */
{'sustainer', {TIOCM_DTR,0}, {TIOCM_RTS,1}, 5, {TIOCM_CAR,0}, {TIOCM_CTS,0},
{0,0}}
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
</DL>
</P>
<P></P>

<A NAME="Systel"></A> <H2>8.6 <A NAME="ss8.6"></A> Advice 1200 ASystel</H2>

<P>Une autre entreprise isra&eacute;lienne.
Je ne leur ai jamais achet&eacute; d'onduleur, mais il m'ont for aimablement
fourni une documentation d&eacute;taill&eacute;e sur leur port de communication.
Il devrait &ecirc;tre assez facile de contr&ocirc;ler leur onduleur.
Leur num&eacute;ro de t&eacute;l&eacute;phone est&nbsp;:</P>
<P>972-8-409-019 (fax 972-8-407-216).</P>
<P></P>

<A NAME="Exide"></A> <H2>8.7 <A NAME="ss8.7"></A> Advice 1200 ADeltec Power, Fiskars Power Systems et Exide</H2>

<P>
<A HREF="http://www.fiskars.fi">Fiskars</A>

est une holding finnoise, anciennement propri&eacute;taire de
<A HREF="http://www.deltecpower.com">Deltec Power</A>
.
En mars 1996, Fiskars a vendu Deltec Power &agrave;
<A HREF="http://www.exide.com/exide">Exide</A>
.
A cette date, Deltec Power &eacute;tait l'un des plus gros constructeurs
d'onduleurs.</P>
<P>Avec Fiskars, Deltec fabriquait les PowerServers 10, 20, 30 et 40.
La page web de Deltec Power en mentionne d'autres.</P>
<P>Exide joint maintenant un logiciel de contr&ocirc;le avec ses onduleurs qui
fonctionne sous Linux.
Ils vendent aussi celui-ci s&eacute;par&eacute;ment et affirment qu'il fonctionne avec
d'autres onduleurs aussi.</P>
<P>J'aimerais avoir des nouvelles de gens qui utilisent ce logiciel.</P>
<P>Voici l'annonce qu'ils m'ont envoy&eacute;e par e-mail&nbsp;:</P>
<P>Exide Electronics annonce Lansafe&nbsp;III, logiciel de gestion d'onduleurs
sous Linux.</P>
<P>Lansafe&nbsp;III est une application de gestion d'onduleurs.
Elle permet l'arr&ecirc;t automatique du syst&egrave;me en cas de coupure de courant
de longue dur&eacute;e qui d&eacute;passerait l'autonomie de la batterie de l'onduleur.</P>
<P>Lansafe&nbsp;III permet les messages "broadcast" et l'envoi de courriers
&eacute;lectroniques en fonction des r&eacute;glages utilisateur.
La s&eacute;quence d'arr&ecirc;t peut aussi &ecirc;tre param&eacute;tr&eacute;e.</P>
<P>Lansafe&nbsp;III fonctionne avec la plus grande partie des onduleurs Exide
Electronics.
Il permet aussi l'arr&ecirc;t automatique simple avec des onduleurs d'autres
constructeurs.</P>
<P>Lansafe&nbsp;III pour Linux fonctionne sur les syst&egrave;mes Linux &agrave; base Intel.
Deux interfaces sont fournies&nbsp;: mode caract&egrave;res et X11/Motif.</P>
<P>Lansafe&nbsp;III fonctionne sur toutes les plateformes majeures de syst&egrave;mes
d'exploitation&nbsp;:
Linux, IBM AIX, HP&nbsp;UX, Digital Unix, SCO Unix, Solaris, SunOS,
AT&amp;T Unix, toutes les plateformes Windows, OS/2, Novell et
Macintosh en particulier.</P>
<P>Lansafe&nbsp;III est fourni avec les onduleurs Exide suivant&nbsp;:
<UL>
<LI>OneUPS Plus&nbsp;;</LI>
<LI>NetUPS&nbsp;;</LI>
<LI>PowerWare Prestige&nbsp;;</LI>
<LI>PowerWare Profile&nbsp;;</LI>
<LI>PowerWare Plus 5xx.</LI>
</UL>
</P>
<P>Il est aussi fourni avec les onduleurs FPS Power Systems&nbsp;:
<UL>
<LI>PowerRite Plus&nbsp;;</LI>
<LI>PowerRite Max&nbsp;;</LI>
<LI>PowerWorks A30&nbsp;;</LI>
<LI>PowerWorks A40&nbsp;;</LI>
<LI>s&eacute;ries 9&nbsp;000&nbsp;;</LI>
<LI>s&eacute;ries 10&nbsp;000.</LI>
</UL>
</P>
<P>Il est aussi possible d'acqu&eacute;rir une licence logicielle s&eacute;par&eacute;e pour
l'utilisation d'un onduleur plus ancien ou d'un autre constructeur.
Les licences simples sont &agrave; USD&nbsp;149, des licences site sont disponibles.</P>
<P>Pour tout d&eacute;tail, visitez nos sites web&nbsp;:
<A HREF="http://www.exide.com">www.exide.com</A>
,</P>
<P>
<A HREF="http://www.fiskarsUPS.com">www.fiskarsUPS.com</A>

et
<A HREF="http://www.deltecpower.com">www.deltecpower.com</A>
</P>
<P>Accessoirement, lorsque j'ai tent&eacute; de me connecter &agrave; www.fiskarsUPS.com,
il m'a &eacute;t&eacute; demand&eacute; une identification et un mot de passe.</P>
<P></P>

<A NAME="UB500"></A> <H2>8.8 <A NAME="ss8.8"></A> Advice 1200 AOnduleur Beaver mod&egrave;le UB500</H2>

<P>
<A HREF="mailto:dan@fch.wimsey.bc.ca">Dan Fandrich</A>

&eacute;crit&nbsp;:</P>
<P>Je pense avoir r&eacute;ussi &agrave; faire fonctionner mon vieil onduleur Beaver mod&egrave;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 &agrave; l'arri&egrave;re qui se connecte directement dans
un port s&eacute;rie DB-9 de PC &agrave; l'aide d'un c&acirc;ble droit.</P>
<P>Les interrupteurs DIP permettent quelques ajustements.
Pour &eacute;muler le type d'onduleurs apc1-nt de genpower, ils doivent &ecirc;tre
positionn&eacute;s comme suit&nbsp;:</P>
<P>
<UL>
<LI>1&nbsp;on (CTS = coupure de courant)&nbsp;;</LI>
<LI>2&nbsp;off (CTS = batterie faible)&nbsp;;</LI>
<LI>3&nbsp;off (DSR = coupure de courant)&nbsp;;</LI>
<LI>4&nbsp;off (DSR = batterie faible)&nbsp;;</LI>
<LI>5&nbsp;off (CD = coupure de courant)&nbsp;;</LI>
<LI>6&nbsp;on (CD = batterie faible)&nbsp;;</LI>
<LI>7&nbsp;off (RI = coupure de courant)&nbsp;;</LI>
<LI>8&nbsp;off (RI = batterie faible)&nbsp;;</LI>
<LI>9&nbsp;on (DTR = extinction)&nbsp;;</LI>
<LI>10&nbsp;off (RTS = extinction).</LI>
</UL>
</P>
<P>Les interrupteurs forment des groupes de paires adjacentes pour chaque
broche de sortie.
Ils sont exclusifs mutuellement&nbsp;- 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.</P>
<P>C'est tout ce qu'il y a &agrave; dire.
Vous pouvez ajouter cela &agrave; votre documentation.</P>
<P></P>

<A NAME="Sendom"></A> <H2>8.9 <A NAME="ss8.9"></A> Advice 1200 ASendom</H2>

<P>
<A HREF="mailto:mefistos@impsat1.com.ar">Charli</A>

&eacute;crit&nbsp;:</P>
<P>J'ai connect&eacute; un onduleur Seldom avec powerd.
Peut-&ecirc;tre que ce qui suit sera utile avec d'autres onduleurs.</P>
<P>J'ai utilis&eacute; le diagramme de la page de man de <EM>powerd</EM>&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
      9 broches  25 broches

DTR       4         20       ----------
                              |       &gt;
DSR       6          6       --       &lt; 10k
                                      &gt;
DCD       1          8       -------------------
                                            relais
GND       5          7       -------------------
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>En fait, l'onduleur seldom n'utilise pas de relais mais quelque chose
d'autre et fonctionne dans un sens, <EM>mais pas dans l'autre</EM>.
Si donc le c&acirc;ble ne fonctionne pas, il faut essayer d'inverser les
broches sur le "relais".</P>
<P></P>

<A NAME="Best"></A> <H2>8.10 <A NAME="ss8.10"></A> Advice 1200 ABest</H2>

<P>L'information sur les onduleurs Best est disponible sur le site web de
<A HREF="http://www.bestpoer.com/index.html">Best Power</A>
.
Leur site contient un paquetage <CODE>checkup.tar</CODE> (section
<A HREF="UPS-HOWTO-4.html#software">Logiciels</A>
)
de communication avec leurs onduleurs, aussi bien en modes intelligent que
b&acirc;te, fourni en sources, donc compilable sous Linux.</P>
<P>
<DL>
<DT><B>Best Fortress avec le logiciel de Best</B><DD><P>Mini-Howto des onduleurs Best Power</P>
<P>par
<A HREF="mailto:stutz@dsl.org">Michael Stutz</A>

et
<A HREF="http://dsl.org/m">http://dsl.org/m</A>
.</P>
<P>Version 1.0, 14&nbsp;ao&ucirc;t 1997</P>
</DL>
</P>
<P></P>
<H3>Avertissement</H3>

<P>Copyright 1997 Michael Stutz
<SL>NdT&nbsp;: la traduction de ce paragraphe
est fournie &agrave; titre indicatif au lecteur.
Se reporter &agrave; la version originale pour les termes exacts.</SL>
&nbsp;;
cette information est libre&nbsp;;
elle peut &ecirc;tre redistribu&eacute;e et/ou modifi&eacute;e selon les termes de la Licence
Publique G&eacute;n&eacute;rale GNU (GPL) version&nbsp;2 ou (&agrave; votre pr&eacute;f&eacute;rence) ult&eacute;rieure,
pour autant que la pr&eacute;sente phrase soit conserv&eacute;e&nbsp;;
cette information est fournie SANS AUCUNE GARANTIE&nbsp;;
sans m&ecirc;me de garantie implicite d'adaptation &agrave; un besoin particulier&nbsp;;
se reporter &agrave; la GPL de GNU pour plus de d&eacute;tails.</P>
<P></P>
<H3>Introduction</H3>

<P>
<A HREF="http://www.bestpower.com">Best Power</A>

est constructeur d'onduleurs de haute qualit&eacute;, et leur s&eacute;rie Fortress est
particuli&egrave;rement bien adapt&eacute;e &agrave; des utilisateurs habituels de Linux.
Bien que ses produits ne soient actuellement pas aussi bon march&eacute; que
certains autres (comme ceux d'APC), Best Power fournit le code source de
son logiciel et a &eacute;t&eacute; tr&egrave;s r&eacute;actif quant aux questions pos&eacute;es par des
utilisateurs de Linux.
De plus, son mat&eacute;riel semble choisi souvent par les consommateurs,
ce qui en fait un bon choix pour les utilisateurs de Linux.</P>
<P>Ce document d&eacute;crit l'installation d'un onduleur Best Power Fortress (le
mod&egrave;le utilis&eacute; est un 660a de 1996 accompagn&eacute; de son CD-ROM) sur une machine
Linux.</P>
<P></P>
<H3>Installation</H3>

<H3>Mat&eacute;riel</H3>

<P>Installez l'onduleur comme indiqu&eacute; par les instructions.
Les s&eacute;ries <EM>Fortress</EM> de Best Power sont fournies avec un c&acirc;ble RS-232
destin&eacute; &agrave; &ecirc;tre connect&eacute; &agrave; un port s&eacute;rie libre &agrave; l'ari&egrave;re de l'ordinateur.</P>
<P></P>
<H3>Logiciel</H3>

<P>Voici ce qui diff&egrave;re du manuel, qui ne contient pas actuellement
d'instructions sp&eacute;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.</P>
<P>Pour r&eacute;aliser celle-ci, suivez les &eacute;tapes ci-dessous, et utilisez
le manuel comme r&eacute;f&eacute;rence pour avoir une vue d'ensemble sur le fonctionnement
g&eacute;n&eacute;ral du logiciel.
J'ai pris la libert&eacute; de faire quelques modifications dans ce HOWTO sur la
configuration du logiciel <EM>Fortress</EM> pour Unix d'une mani&egrave;re qui me semble
plus adapt&eacute;e &agrave; un syst&egrave;me Linux.
Par exemple, j'ai &eacute;limin&eacute; la n&eacute;cessit&eacute; d'un r&eacute;pertoire <CODE>/etc/best</CODE>, et
plac&eacute; les ex&eacute;cutables dans <CODE>/usr/local/bin</CODE> qui me semble un endroit
plus appropri&eacute;.</P>
<P>
<UL>
<LI>D'abord, cr&eacute;ez le script "upsdown" destin&eacute; &agrave; &ecirc;tre ex&eacute;cut&eacute;
lors d'un arr&ecirc;t secteur.
Celui-ci va arr&ecirc;ter le syst&egrave;me&nbsp;:

<BLOCKQUOTE><CODE>
<PRE>
cat &gt; /etc/upsdown &lt;&lt;EOF
#!/bin/sh
shutdown -h now &lt; /dev/console &amp;
EOF
</PRE>
</CODE></BLOCKQUOTE>

</LI>
<LI>Maintenant, cr&eacute;ez les r&eacute;pertoires pour la documentation et le code
source&nbsp;:

<BLOCKQUOTE><CODE>
<PRE>
mkdir /usr/doc/best
mkdir /usr/local/src/best
</PRE>
</CODE></BLOCKQUOTE>

</LI>
<LI>Montez le CD-ROM, et d&eacute;sarchivez le fichier <CODE>unix/checkups.tar</CODE>
dans un r&eacute;pertoire temporaire&nbsp;:

<BLOCKQUOTE><CODE>
<PRE>
cd /tmp
tar /cdrom/unix/checkups.tar
</PRE>
</CODE></BLOCKQUOTE>

</LI>
<LI>Allez dans le r&eacute;pertoire <CODE>etc/best/advanced</CODE> qui doit avoir
&eacute;t&eacute; cr&eacute;&eacute; dans le r&eacute;pertoire temporaire &agrave; partir de l'archive&nbsp;;
</LI>
<LI>Copiez la documentation et les fichiers script &agrave; leurs emplacements
idoines dans le syst&egrave;me&nbsp;:

<BLOCKQUOTE><CODE>
<PRE>
cp README /usr/doc/best
cp manual.txt /usr/doc/best
cp bestsend /etc
cp source/*.c /usr/local/src/best
</PRE>
</CODE></BLOCKQUOTE>

</LI>
<LI>Nettoyez le chantier dans le r&eacute;pertoire temporaire et compilez le
logiciel&nbsp;:

<BLOCKQUOTE><CODE>
<PRE>
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
</PRE>
</CODE></BLOCKQUOTE>

</LI>
<LI>Testez l'onduleur.
Remplacez <CODE>ttySx</CODE> par le port s&eacute;rie de votre choix.
Si votre connexion est bonne, vous devriez voir une ligne de carac&egrave;res
s'imprimer &agrave; l'&eacute;cran&nbsp;:

<BLOCKQUOTE><CODE>
<PRE>
mftalk /dev/ttySx
</PRE>
</CODE></BLOCKQUOTE>

</LI>
<LI>Rendez le programme checkups ex&eacute;cutable au d&eacute;marrage pour le tester.
Cela peut &ecirc;tre r&eacute;alis&eacute; d'un certain nombre de mani&egrave;res diff&eacute;rents (d&eacute;crites
dans le manuel).
Celle que j'ai utilis&eacute;e consiste &agrave; ajouter une ligne dans
<CODE>/etc/inittab</CODE>&nbsp;:

<BLOCKQUOTE><CODE>
<PRE>
ups:234:once:/usr/local/sbin/checkups -c500 /dev/ttyS1
</PRE>
</CODE></BLOCKQUOTE>

</LI>
<LI>Testez le tout.
Supprimez l'alimentation secteur de l'onduleur en retirant le fusible
de l'onduleur, et attendez quelques minutes.
Le logiciel affiche un message d'alerte puis arr&ecirc;te le syst&egrave;me apr&egrave;s
quelques instants.
</LI>
<LI>Si cela fonctionne, retirez l'option <CODE>-c500</CODE> de la ligne de votre
<CODE>inittab</CODE> (qui en gros implique d'arr&ecirc;ter le syst&egrave;me syst&eacute;matiquement
au lieu de ne le faire que lorsque le courant est coup&eacute;), et vous pouvez
rouler&nbsp;!
</LI>
</UL>
</P>
<P></P>
<H3>Conclusion</H3>

<P>Toute suggestion permettant d'am&eacute;liorer ce document ou les techniques qui
y sont d&eacute;crites est la bienvenue.
A l'instant o&ugrave; j'&eacute;cris ces lignes, <EM>Best Power</EM> semblait int&eacute;ress&eacute; par
l'inclusion de la pr&eacute;sente information ou d'une autre dans la sienne afin
d'aider les utilisateurs de Linux par rapport &agrave; ses produits, il
s'agit donc r&eacute;ellement d'une entreprise &agrave; promouvoir.
Vous pouvez lui transmettre vos impressions &agrave; 
<A HREF="mailto:sales@bestpower.com">sales@bestpower.com</A>

et
<A HREF="mailto:support@bestpower.com">support@bestpower.com</A>
.</P>
<P>
<DL>
<DT><B>Best Fortress LI-950</B><DD><P></P>
<P>Quelques commentaires sur le <EM>Best Fortress</EM>, de
<A HREF="mailto:lnz@dandelion.com">Leonard N. Zubkoff</A>
,
message du 25&nbsp;mai 1995 dans comp.os.linux.hardware
<SL>(NdT&nbsp;: le texte qui suit a &eacute;t&eacute; reformat&eacute;. Le document d'origine
comporte une copie de message de forum)</SL>

&nbsp;:</P>
<P>Citation de nautix@community.net&nbsp;:</P>
<P>D'accord avec ce que dit Craig.
APC a &eacute;t&eacute; tr&egrave;s peu coop&eacute;ratif, mais je n'ai que de bonnes choses &agrave; dire
sur Best.
J'utilise son mod&egrave;le LI&nbsp;660&nbsp;; 660&nbsp;VA, des tas d'indications sur le
panneau frontal, etc.
Le logiciel CheckUPS est en option payante et n&eacute;cessite quelques
bidouillages pour entrer dans mons syst&egrave;me de fichiers FSSTND-is&eacute;
(NdT&nbsp;: File System STaNDard, le standard de r&eacute;partition des &eacute;l&eacute;ments
dans les r&eacute;pertoires pr&eacute;conis&eacute; pour Linux) (les r&eacute;pertoires et noms de
fichiers sont en dur pour SunOS&nbsp;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&nbsp;!!).</P>
<P>Le logiciel CheckUPS est limit&eacute;, cependant, &agrave; r&eacute;aliser des arr&ecirc;ts
automagiques (NdT&nbsp;: <CODE>automagic</CODE> dans le texte).
L'onduleur peut fournir des tas d'informations sur son &eacute;tat&nbsp;; CheckUPS
ne contr&ocirc;le que "Si le courant est coup&eacute;, combien de temps reste-t'il
d'autonomie &agrave; la batterie&nbsp;?".</P>
<P>Best suit aussi ses questionnaires de satisfaction clients.
J'ai indiqu&eacute; ma d&eacute;ception que CheckUPS ne dispose pas de plus de fonctions
d'interrogation (comme le voltage en entr&eacute;e, en sortie, le pourcentage de
charge, etc.) qui sont disponibles en entr&eacute;e.
J'ai demand&eacute; les sp&eacute;cifications de l'interface&nbsp;; ils ont dit&nbsp;: "bien
s&ucirc;r" et me l'ont envoy&eacute; en 2 jours, gracieusement.
Un contr&ocirc;leur d'&eacute;tat de l'onduleur complet est dans ma casserole de
derri&egrave;re.
Quelqu'un voit-il une utilit&eacute; &agrave; ce genre d'utilitaire&nbsp;?</P>
<P>R&eacute;ponse de Leonard N. Zubkoff&nbsp;:</P>
<P>Laissez-moi ajouter une autre recommandation pour Best Power.
Je viens d'acheter un Fortress LI-950, mais j'ai d&eacute;clin&eacute; leur offre
logicielle pour CheckUPS.
Contrairement &agrave; certaines autres gammes, un simple c&acirc;ble trois fils
suffit &agrave; connecter le Fortress &agrave; un port s&eacute;rie&nbsp;-- pas besoin de montage
"pull-up" &agrave; faire dans le c&acirc;ble.
Quelques minutes de bidouillage et j'avais un programme qui fait &agrave; la fois
daemon d'arr&ecirc;t syst&egrave;me et qui coupe le courant de sortie ensuite lorsque
le syst&egrave;me est arr&ecirc;t&eacute; durant une p&eacute;riode sur batterie.</P>
<P>Je pourrais &eacute;ventuellement utiliser le mode de communications s&eacute;rie plus
intelligent plut&ocirc;t que le simple mode de contact, et j'ai donc demand&eacute; la
documentation au support technique de Best, et il est arriv&eacute; aujourd'hui,
une semaine apr&egrave;s mon appel.
Apr&egrave;s avoir &eacute;tudi&eacute; celle-ci, je d&eacute;ciderai si une interface plus intelligente
est r&eacute;ellement int&eacute;ressante, en particulier puisque dans certains cas
j'aurais besoin d'arr&ecirc;ter deux machines en r&eacute;seau partageant l'onduleur.</P>
<P>Leonard.</P>
<P></P>
<DT><B>Best Ferrups</B><DD><P></P>
<P>En compl&eacute;ment &agrave; la documentation et au logiciel sur le site web de <EM>Best</EM>,
vous pouvez aussi utiliser le paquetage <CODE>bestups-0.9.tar.gz</CODE> (section
<A HREF="UPS-HOWTO-4.html#software">Logiciel</A>
).
Nous avons juste commenc&eacute; &agrave; le tester avec notre <EM>Ferrups</EM> 5&nbsp;kVA.</P>
<P>L'id&eacute;e de base est qu'il y a deux modules.
L'un qui re&ccedil;oit des demandes d'information du port r&eacute;seau, les relaie &agrave;
l'onduleur, et renvoit les r&eacute;sultats.
Le second module parle au premier, interpr&egrave;te les r&eacute;sultats, et r&eacute;pond
OK ou FAIL.</P>
<P>C'est suffisant pour que le paquetage <CODE>powerd-2.0.tar.gz</CODE> (section
<A HREF="UPS-HOWTO-4.html#software">Logiciel</A>
) fasse le reste.</P>
<P>Les d&eacute;tails se trouvent dans le paquetage lui-m&ecirc;me.</P>
<P>Par ailleurs, notre <EM>Ferrups</EM> 5&nbsp;kVA a fonctionn&eacute; sans histoire pour
nos 10&nbsp;ordinateurs et &nbsp;30 &eacute;crans.</P>
</DL>
</P>
<P></P>

<A NAME="gps1000"></A> <H2>8.11 <A NAME="ss8.11"></A> Advice 1200 AGPS1000 d'ACCODATA</H2>

<P>
<BLOCKQUOTE><CODE>
<PRE>
   &gt;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 &lt;CRAFFERT.94Feb28125452@nostril.lehman.com&gt;,
   Colin Owen Rafferty &lt;craffert@nostril.lehman.com&gt; ecrit :
   &gt;Je suis pret a acheter un onduleur pour ma machine, et j'en
   &gt;voudrais un qui sache faire un &quot;auto-shutdown&quot;.
   &gt;
   Je viens d'en acheter un vraiment pas cher :-)
   C'est un GPS1000 d'ACCODATA. Tout le monde connait la bonne qualite
   de leur production (je n'ai pas d'actions chez eux :-() ?

   &gt;Je suppose que tous ont une sorte de connexion serie qui previent le
   &gt;systeme de cela.
   &gt;
   Je l'ai pris a part pour trouver comment il fonctionnait. Il y avait
   trois optocoupleurs (deux sorties, une entree) connectes sur un connecteur
   a 9 broches a 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'&quot;entree&quot; 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'.

   &gt;Quelqu'un a-t-il ecrit un paquetage qui surveille l'onduleur et effectue
   &gt;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
   &gt;depuis /etc/brc. RSN.

   &gt;    Colin Rafferty, Lehman Brothers &lt;craffert@lehman.com&gt;

   Hennus Bergman
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>

<H2>8.12 <A NAME="ss8.12"></A> TrippLite BC750LAN (Standby UPS)</H2>

<P>
<A HREF="webster@kaiwan.com">Tom Webster</A>
, l'auteur du paquetage <EM>genpower</EM>, m'a envoy&eacute; des
informations sur le <EM>TrippLite BC750LAN</EM>.
Si vous avez l'un d'entre eux, c'est probablement le meilleur paquetage
pour commencer.</P>
<P>Mais pour &ecirc;tre exhaustif, voici le diagramme de brochage du c&acirc;ble (r&eacute;alis&eacute;
par t&acirc;tonnements, et sans documentation)&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
       Onduleur              Systeme
         DB-25               DB-25
           1 &lt;--------------&gt;  1       Masse

           2 &lt;--------------&gt;  4       Coupure de secteur
           8 &lt;--------------&gt;  8       Circuit de detection

           3 &lt;--------------&gt;  2       Inverseur d'arret
          20 &lt;--------------&gt; 22       Circuit
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P></P>

<H2>8.13 <A NAME="ss8.13"></A> APC</H2>

<P>Si la pl&eacute;thore de paquetages pour APC cit&eacute;s plus haut ne vous permettent
pas de d&eacute;marrer, il est possible que la section qui suit soit d'une
certaine utilit&eacute;.</P>
<P>
<DL>
<DT><B>Backup-UPS</B><DD><P></P>
<P>Il semble qu'il y ait une certaine controverse sur la fiabilit&eacute; des
informations indiqu&eacute;es ici sur les APC Back-UPS, donc, soyez prudent.
Je pr&eacute;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, &agrave; nouveau, comme je n'ai aucun onduleur APC, je ne peux v&eacute;rifier
la fiabilit&eacute; d'aucun de ces messages.</P>
<P></P>
<DT><B>Un message d'avertissement</B><DD><P></P>
<P>Message de
<A HREF="ind43@ci3ux.ci.pwr.wroc.pl">Marek Michalkiewicz</A>

sur le BUPS-HOWTO
<SL>(NdT&nbsp;: le texte qui suit a &eacute;t&eacute; reformat&eacute;. Le document d'origine
comporte une copie de courrier &eacute;lectronique)</SL>

&nbsp;:</P>
<P>Si vous voulez connecter un onduleur APC Back-UPS sur votre machine Linux,
ce qui suit peut vous int&eacute;resser.</P>
<P>Il y a un bon BUPS-HOWTO qui d&eacute;crit comment le faire.
Mais il comporte un "bug".</P>
<P>Le signal RTS du port s&eacute;rie est utilis&eacute; pour arr&ecirc;ter l'onduleur.
Celui-ci ne s'arr&ecirc;tera que s'il travaille sur batterie.
Le manuel indique que le le signal d'arr&ecirc;t doit durer au moins 0,5ms.
Mais un temps inf&eacute;rieur est suffisant, au moins pour mon propre APC
Back-UPS&nbsp;600.</P>
<P>L'utilisation de RTS peut &ecirc;tre dangereuse, car ce dernier est mont&eacute; &agrave;
l'ouverture du p&eacute;riph&eacute;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 &agrave; ce moment pr&eacute;cis.
Cela peut arriver par exemple si l'onduleur est &eacute;teint, et que le
courant revienne seulement pour un moment.</P>
<P>Soit il faut lancer backupsd avant de monter les syst&egrave;mes de fichiers en
lecture/&eacute;criture, soit (de pr&eacute;f&eacute;rence) utiliser TX (broche 3) plut&ocirc;t que
RTS (broche 7) pour &eacute;teindre l'onduleur (la num&eacute;rotation est pour un DB-9).
On peut utiliser <CODE>ioctl(fd, TCSBRKP, 10);</CODE> pour monter TX pendant
une seconde, par exemple.
L'utilisation de TX doit etre plus s&ucirc;re.
Je posterai peut-&ecirc;tre les diff si le temps me le permet...</P>
<P></P>
<DT><B>BUPS-HOWTO</B><DD><P></P>
<P>Luminated Software Group Pr&eacute;sente</P>
<P>HOWTO utilisation d'onduleurs <EM>Back-UPS</EM> (d'<EM>APC</EM>)
(pour prot&eacute;ger votre syst&egrave;me Linux)</P>
<P></P>
<P>Version: 1.01  BETA</P>
<P></P>
<P></P>
<P>Document de&nbsp;:
<A HREF="mailto:docwhat@uiuc.edu">Christian G. Holtje</A>

Information sur le c&acirc;blage et aide&nbsp;:
<A HREF="mailto:bgallia@orion.it.luc.edu">Ben Galliart</A>
</P>
<P>Adaptation fran&ccedil;aise&nbsp;:
<A HREF="mailto:choppy@imaginet.fr">Bernard Choppy</A>
</P>
<P></P>
<P>Ce document est plac&eacute; dans le Domaine Public &agrave; une condition.
Celle-ci est que ce qui appartient a C&eacute;sar revienne &agrave; C&eacute;sar.
Modifiez ceci autant que vous voulez, rappelez juste que nous avons
travaill&eacute; dessus.</P>
<P><B>Attention&nbsp;!</B></P>
<P>Ni moi, ni aucun de ceux qui on &eacute;crit ou aid&eacute; &agrave; ce document, ne
garantissons quoi que ce soit concernant ces textes/sources/indications.
Si quoi que ce soit est endommag&eacute;, nous n'y sommes POUR RIEN&nbsp;!
Cela fonctionne POUR AUTANT QUE NOUS LE SACHIONS, mais nous pouvons avoir
fait des erreurs.
Donc, soyez prudent&nbsp;!</P>
<P>
<SL>NdT : Le document d'origine contient des r&eacute;f&eacute;rences de pi&egrave;ces d&eacute;tachees
Radio-Shack, qui etaient distribu&eacute;es par le r&eacute;seau Tandy en France.
Ce reseau n'existe plus, et les r&eacute;f&eacute;rences ont donc &eacute;t&eacute; supprim&eacute;es de la
version fran&ccedil;aise.
Le lecteur n&eacute;ammoins int&eacute;ress&eacute; pourra se reporter &agrave; la version anglaise du
pr&eacute;sent document.</SL>
</P>
<P>Bien, vous venez juste d'acheter (ou vous allez le faire) un <EM>Back-UPS</EM>
d'<EM>APC</EM> (d'autres mod&egrave;les pourront peut-&ecirc;tre b&eacute;n&eacute;ficier de ces
informations, avec peu ou pas de modifications, mais nous ne savons pas).
Vous avez jet&eacute; un coup d'oeil au prix du couple logiciel/c&acirc;ble
<EM>Power-Chute</EM>, et n'&ecirc;tes pas s&ucirc;r que le jeu en vaille la chandelle.
Bien, j'ai fait mon propre c&acirc;ble, et mon propre logiciel et je les utilise
pour arr&ecirc;ter automatiquement mon syst&egrave;me Linux lors d'une coupure secteur.
Vous savez quoi&nbsp;?
Vous pouvez aussi&nbsp;!</P>
<P>*** Le C&acirc;ble ***</P>
<P>C'&eacute;tait la partie la plus difficile &agrave; 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'&eacute;lectronique du coin&nbsp;:</P>
<P>
<UL>
<LI>1 connecteur &acirc; souder subminiature m&acirc;le DB-9&nbsp;;</LI>
<LI>1 connecteur &acirc; souder subminiature femelle DB-9&nbsp;;</LI>
<LI>2 bo&icirc;tiers pour les connecteurs ci-dessus (vendus s&eacute;parement en g&eacute;n&eacute;ral)&nbsp;;</LI>
<LI>Du c&acirc;ble multi-brins (pas du mono-brin).</LI>
</UL>
</P>
<P>Il vous faut aussi, mais vous pourrez peut-etre l'emprunter&nbsp;:
<UL>
<LI>un fer &agrave; souder&nbsp;;</LI>
<LI>de la soudure.</LI>
</UL>
</P>
<P>Ok...
Voici comment connecter le tout&nbsp;!</P>
<P>Ces diagrammes montrent le c&ocirc;t&eacute; ARRIERE (celui o&ugrave; vous soudez les c&acirc;bles sur
les broches).
Les lettres V, R et B repr&eacute;sentent les couleurs des c&acirc;bles que j'ai
utilis&eacute;s, et facilitent la distinction des lignes
<SL>(Note&nbsp;: j'utilise la num&eacute;rotation standard RS-232 (pour autant qu'on puisse
dire)</SL>

.
Le manuel de l'<EM>APC</EM> utilise une num&eacute;rotation diff&eacute;rente.
Ignorez-la&nbsp;!
Utilisez la n&ocirc;tre...
Je l'ai d&eacute;j&agrave; chang&eacute;e pour vous&nbsp;!).</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
   ---------------------     Cote Male (vers l'onduleur)
    \  B   R  *  *  * /     
      \  *  *  *  V  / 
        ------------


   ---------------------     Cote femelle (vers le port COM)
    \  R   *  *  *  V /
      \  *  B  *  *  / 
        ------------
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Pour ceux qui pr&eacute;f&egrave;rent les chiffres&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
      Male         Femelle
---------------------------------------
        1             7        Bleu
        2             1        Rouge
        9             5        Vert
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>---- Compl&eacute;ment&nbsp;: Utilisation des broches RS-232&nbsp;! ----
Puisque nous avons eu &agrave; trouver cette information&nbsp;:</P>
<P>Depuis l'ARRIERE (c&ocirc;t&eacute; soudure), les broches sont num&eacute;rot&eacute;es ainsi&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
   ---------------------
    \  1   2  3  4  5 /
      \  6  7  8  9  / 
        ------------
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Les broches signifient</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        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
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Ce que nous avons fait &eacute;tait la connexion de la ligne RS-232 de l'onduleur
"Fail Output" sur CD, le ch&acirc;ssis de l'onduleur sur Gnd, et l'entr&eacute;e "Shut
Down" sur RTS.
Facile, maintenant qu'on vous le dit, non&nbsp;?</P>
<P>Je n'ai aucune id&eacute;e du comportement du logiciel ci-dessous, si vous
achetez le c&acirc;ble d'APC.
Il peut fonctionner, ou non.</P>
<P></P>
<P>*** Le Logiciel ***</P>
<P>J'utilise le paquetage <EM>SysVInit</EM> de Miquel van Smoorenburg pour Linux
(voir &agrave; la fin pour emplacements, remerciements, adresses E-mail, etc.).
Je ne sais ce qui doit &ecirc;tre chang&eacute; 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&eacute; dans le code de Miquel pour comprendre comment <CODE>ioctl()</CODE>
fonctionnait.
Si je n'avais pas eu cet exemple, j'aurais eu des probl&egrave;mes.
J'ai aussi utilis&eacute; la routine <CODE>powerfail()</CODE> (telle quelle, je crois),
puisqu'elle doit interagir avec init, j'ai pens&eacute; qu'il devait savoir &ccedil;a
mieux que moi.
Le fichier <CODE>.c</CODE> est &agrave; la fin de ce document, et n&eacute;cessite seulement
d'&ecirc;tre copi&eacute;/coll&eacute;.
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.</P>
<P>Ce programme peut, soit &ecirc;tre lanc&eacute; comme daemon pour contr&ocirc;ler l'&eacute;tat
de l'onduleur et l'indiquer &agrave; init, soit &ecirc;tre lanc&eacute; pour envoyer la commande
<CODE>kill-power</CODE> (coupure d'alimentation) &agrave; l'onduleur.
L'alimentation ne sera coup&eacute;e que s'il y a un probl&egrave;me secteur et que
l'onduleur est sur batteries.
Une fois le courant revenu, il se rallume.</P>
<P>Pour le lancer comme d&eacute;mon, entrez simplement&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
backupsd /dev/backups
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P><CODE>/dev/backups</CODE> est un lien vers <CODE>/dev/cua0</CODE> (COM&nbsp;1, pour les
DOSseurs) actuellement.
La beaut&eacute; du lien est que je n'ai qu'&agrave; le refaire si je passe sur COM&nbsp;2 ou
COM&nbsp;3.</P>
<P>Ensuite, si le secteur s'arr&ecirc;te, init lancera les commandes de <CODE>powerwait</CODE>.
Un exemple (qui vient de mon <CODE>/etc/inittab</CODE>)&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#Voici les actions de coupure de courant
pf::powerwait:/etc/rc.d/rc.power start
po::powerokwait:/etc/rc.d/rc.power stop
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Powerwait sera lanc&eacute; si le courant baisse, et powerokwait s'il revient.</P>
<P>Voici mon <CODE>rc.power</CODE> complet&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
#! /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, &lt;docwhat@uiuc.edu&gt;
#

  # Definit le chemin
  PATH=/sbin:/etc:/bin:/usr/bin:/sbin/dangerous

  # Regarde comment nous avons ete appele
  case &quot;$1&quot; in
        start)
                echo &quot;Attention - probleme d'alimentation secteur.&quot; | wall
                # Sauvegarde le niveau de fonctionnement actuel
                ps | gawk '{ if (($5 == &quot;init&quot;) &amp;&amp; ($1 == &quot;1&quot;)) print $6 }' \
                         | cut -f2 -d[ | cut -f1 -d] \
                         &gt; /tmp/run.level.power
                /sbin/shutdown -h +1m
                ;;
        stop)
                echo &quot;Alimentation secteur revenue.&quot; | wall
                echo &quot;Tentative d'arret du shutdown.&quot; | wall
                shutdown -c
                ;;
        *)
                echo &quot;Usage:  $0 [start|stop]&quot;
                exit 1
                ;;
  esac
</PRE>
<HR>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Pas mal, non&nbsp;?
En fait, il y a un petit probl&egrave;me, l&agrave;...
Je n'ai pas eu le temps de le trouver...
S'il y a un gourou "sh" par ici...</P>
<P>J'ai laiss&eacute; un petit d&eacute;tail de c&ocirc;t&eacute;, c'est de faire couper l'alimentation
par l'onduleur si le PC est arr&ecirc;t&eacute; courant coup&eacute;.
Cela est r&eacute;alis&eacute; en ajoutant la ligne suivante &agrave; la fin de votre script halt&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
  /sbin/backupsd /dev/backups killpower
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Cela va simplement couper l'alimentation si le secteur est coup&eacute;.</P>
<P></P>
<P>*** Tester le tout ***</P>
<P>C'est juste une petite section pour vous dire&nbsp;:</P>
<P>SOYEZ PRUDENT&nbsp;!</P>
<P>Je vous recommande la sauvegarde de vos partitions Linux, avec
plusieurs <CODE>sync</CODE> avant de tester, et d'&ecirc;tre prudent en g&eacute;n&eacute;ral.
Evidemment, je ne fais que vous le recommander.
Je n'ai pas &eacute;t&eacute; prudent du tout, et j'ai eu &agrave; nettoyer ma partition
plusieurs fois pendant les tests de ma configuration.
Mais celle-ci fonctionne. :-)</P>
<P></P>
<P>*** O&ugrave; l'obtenir ***</P>
<P>Le SysVInit de Miquel van Smoorenburg's peut se trouver sur&nbsp;:
<A HREF="ftp://sunsite.unc.edu:/pub/Linux/system/Daemons/SysVinit-2.50.tgz">SysVinit-2.50.tgz</A>
</P>
<P>et une correction pour certains shell bash se trouve juste &agrave; c&ocirc;t&eacute;&nbsp;:
<A HREF="sunsite.unc.edu:/pub/Linux/system/Daemons/SysVinit-2.50.patch1">SysVinit-2.50.patch1</A>
</P>
<P>Pour ce qui est d'obtenir ce HOWTO, vous pouvez m'envoyer un E-mail,
docwhat@uiuc.edu avec pour sujet&nbsp;:'request' et le mot-clef 'backups' dans le
corps du message&nbsp;:
<A HREF="mailto:docwhat@uiuc.edu subject=request">Demande du HOWTO original</A>

(il est possible que j'automatise cela, et d'autres choses).</P>
<P>*** Section des remerciements qui sont d&ucirc;s ***</P>
<P>Merci &agrave;&nbsp;:</P>
<P>
<UL>
<LI>
<A HREF="mailto:miquels@drinkel.nl.mugnet.org">Miquel van Smoorenburg</A>

pour son superbe paquetage <EM>SysVInit</EM> et son <CODE>powerd.c</CODE> qui m'ont
beaucoup aid&eacute;s&nbsp;;
</LI>
<LI>
<A HREF="mailto:docwhat@uiuc.edu">Christian Holtje</A>

Documentation <CODE>backupsd.c</CODE> (ce qui n'est pas de Miquel) <CODE>rc.power</CODE>&nbsp;;
</LI>
<LI>
<A HREF="mailto:bgallia@orion.it.luc.edu">Ben Galliart</A>

Le c&acirc;ble, informations sur le standard RS-232 et astuces bruyantes
(non rapport&eacute;es ici).</LI>
</UL>
</P>
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
/*  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 &lt;docwhat@uiuc.edu&gt;
 *  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&amp;eacute; concernant son
 *                  utilisation, bonne ou mauvaise.
 */

#include &lt;sys/types.h&gt;
#include &lt;sys/ioctl.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;errno.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;signal.h&gt;

/* C'est le fichier necessaire pour SysVInit */
#define PWRSTAT         &quot;/etc/powerstatus&quot;

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 &lt; 2) {
        fprintf(stderr, &quot;Usage: %s &lt;peripherique&gt; [killpower]\n&quot;, argv[0]);
        exit(1);
  }

  /* Ouverture du port */
  if ((fd = open(argv[1], O_RDWR | O_NDELAY)) &lt; 0) {
        fprintf(stderr, &quot;%s : %s : %s\n&quot;, argv[0], argv[1], sys_errlist[errno]);
        exit(1);
  }

  if ( argc &gt;= 3  &amp;&amp; (strcmp(argv[2], &quot;killpower&quot;)==0) )
      {
          /* Coupons l'alimentation */
          fprintf(stderr, &quot;%s : Tentative de coupure d'alimentation !\n&quot;,
                  argv[0] );
          ioctl(fd, TIOCMBIS, &amp;amp;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, &amp;amp;killpwr_bit); 

/* Passe en demon. */
  switch(fork()) {
  case 0: /* Je suis le fils */
                setsid();
                break;
  case -1: /* Passage demon manque */
                fprintf(stderr, &quot;%s : fork impossible.\n&quot;, argv[0]);
                exit(1);
  default: /* Je suis le pere */
                exit(0);
  }


  /* Maintenant, on scrute la ligne DCD */
  while(1) {
      ioctl(fd, TIOCMGET, &amp;amp;flags);
      status = (flags &amp; TIOCM_CD); 
      /* Si DCD est monte, le secteur est coupe */
      if (oldstat == 0 &amp;&amp; status != 0) {
          count++;
          if (count &gt; 3) powerfail(0);
          else { sleep(1); continue; }
      }
      /* Si DCD est redescendu, le secteur est revenu */
      if (oldstat &gt; 0 &amp;&amp; status == 0) {
          count++;
          if (count &gt; 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)) &gt;= 0) {
        if (ok)
                write(fd, &quot;OK\n&quot;, 3);
        else
                write(fd, &quot;FAIL\n&quot;, 5);
        close(fd);
  }
  kill(1, SIGPWR);
}

/* Fin de Fichier */
</PRE>
<HR>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P></P>
<DT><B>Autres informations</B><DD><P>
<SL>(NdT&nbsp;: Le document original comporte de nombreuses copies de courriers
&eacute;lectroniques &agrave; ce point. Le traducteur s'est permis d'en r&eacute;aliser une
synth&egrave;se plus courte et, il l'esp&egrave;re, plus facile &agrave; utiliser)</SL>
</P>
<P>Message de
<A HREF="mailto:ockers@umr.edu">Jim Ockers</A>

du 12&nbsp;janvier 1995 dans <CODE>comp.os.linux.hardware</CODE>&nbsp;:</P>
<P>Selon la base de connaissances (<EM>KnowledgeBase</EM>) de <EM>Microsoft</EM>, il
semble que la broche&nbsp;5 du connecteur des onduleurs <EM>APC Back-UPS</EM> et
<EM>Smart-UPS</EM> (test&eacute; avec un <EM>Back-UPS&nbsp;400</EM> sous <EM>Windows&nbsp;NT</EM>)
monte un signal "batterie faible" deux minutes au moins avant
l'&eacute;puisement de la batterie.</P>
<P>Ce signal est au niveau "TTL collecteur ouvert", et peut &ecirc;tre ramen&eacute;
aux niveaux RS-232 selon le sch&eacute;ma suivant&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>

    Broche 5                 Broche 8
              +---------+
       o------| 10 kOhm |-------o
              +---------+
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Par ailleurs, le manuel de l'onduleur stipule que la broche commune &agrave;
utiliser est la 4 (et non la 9, m&ecirc;me si celles-ci sont branch&eacute;es ensemble).</P>
<P>Message de
<A HREF="mailto:pkammer@ics.uci.edu">Peter Kammer</A>

du 7&nbsp;octobre 1996&nbsp;:</P>
<P>Les sch&eacute;mas de brochage sont invers&eacute;s en ce qui concerne les connecteurs
m&acirc;les&nbsp;: en effet, les broches sont num&eacute;rot&eacute;es de mani&egrave;re inverse sur les
connecteurs m&acirc;les et femelles (puisque leurs sens s'opposent lors du
brancement).
Il faut donc consid&eacute;rer que les sch&eacute;mas pour les connecteurs m&acirc;les sont vus
c&ocirc;t&eacute; ext&eacute;rieur et non c&ocirc;t&eacute; int&eacute;rieur (soudure), contrairement &agrave; ce qui est
indiqu&eacute;.</P>
<P>Par ailleurs, il existe un document de r&eacute;f&eacute;rence technique pour les onduleurs
<EM>Back-UPS</EM> qui se trouve sur le
<A HREF="http://www.apcc.com/english/techs/techref4/224e.htm">site web</A>

d'<EM>APC</EM>.</P>
<P>Message de
<A HREF="mailto:tmuller@agora.rdrop.com">Troy Muller</A>

du 6&nbsp;avril 1997&nbsp;:</P>
<P>L'onduleur <EM>Back-UPS Pro 650</EM> fonctionne avec le c&acirc;ble standard d'<EM>APC</EM>.
La r&eacute;f&eacute;rence du c&acirc;ble est <CODE>940-023A</CODE> et le logicel est
<EM>Enhanced_APC_BackUPS</EM>.
Ce logiciel envoit des messages globaux toutes les deux secondes, mais un eu
de bidouillage de <CODE>dowalll.c</CODE> permet de limiter cette fonction.</P>
<P></P>
<DT><B>APC Smart-UPS</B><DD><P></P>
<P>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&eacute;s plus haut
<CODE>Enhanced_APC_UPSD-v1.4.tar.gz</CODE>,
<CODE>apcd-0.5.tar.gz</CODE> et
<CODE>smupsd-0.7-1.i386.rpm</CODE>
d&eacute;crits dans la section
<A HREF="UPS-HOWTO-4.html#software">Logiciels</A>
).
Je ne sais pas ce que vaut le support pour chacun d'eux.
Il semble qu'<EM>APC</EM> <B>continue</B> &agrave; refuser de publier son protocole
pour le mode "intelligent" sans un accord de non-diffusion, ainsi
tout le monde a d&ucirc; faire de la r&eacute;tro-ing&eacute;ni&eacute;rie dessus.</P>
<P>Le consensus g&eacute;n&eacute;ral est d'investr dans une gamme qui publie cette information,
comme <EM>Best</EM>.</P>
<P>Une autre possibilit&eacute; est d'utiliser la version du logiciel de contr&ocirc;le
d'onduleurs <EM>Powerchute</EM> d'<EM>APC</EM> pour <EM>SCO Unix</EM> via le paquetage
de compatibilit&eacute; <EM>iBCS</EM>.
<A HREF="mailto:cas@viet.demon.co.uk">Clive A. Stubbings</A>
 me dit que cela fonctionne bien apr&egrave;s quelques
ajustements du script d'installation.
Il dit que le seul probl&egrave;me est que "l'interface graphique semble avoir
des probl&egrave;mes &agrave; contr&ocirc;ler des onduleurs &agrave;-travers le r&eacute;seau".</P>
<P>Si vous poss&eacute;dez un <EM>APC Smart-UPS</EM> et que vous n'arriviez pas &agrave; le faire
fonctionner en mode intelligent avec aucun de ces logiciels, vous pouvez
malgr&eacute; tout encore l'utiliser en mode b&ecirc;te.
Les sections qui suivent d&eacute;taillent cette proc&eacute;dure.
J'ai re&ccedil;u, en particulier, des messages concernant les mod&egrave;les <EM>600</EM>,
<EM>700</EM> et <EM>1400</EM>.
Il vous faudra probablement bidouiller <CODE>powerd.c</CODE> comme indiqu&eacute; dans la
section
<A HREF="UPS-HOWTO-6.html#hacking">Analyse de c&acirc;bles et modification de powerd.c</A>
.</P>
<P>Message de
<A HREF="mailto:dangit@netcom.com">Lam Dang</A>

du 19&nbsp;ao&ucirc;t 1994 dans comp.os.lnux.misc&nbsp;:</P>
<P>R&eacute;alisation du c&acirc;ble pour un <EM>APC Smart-UPS mod&egrave;le 600</EM>.</P>
<P>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&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        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)
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>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.</P>
<P>Ce mod&egrave;le APC fournit une sortie non regul&eacute;e de 24 V continu sur la broche 8.
La tension de sortie est disponible tout le temps (au moins un peu apr&egrave;s
que le signal de batterie faible soit mont&eacute;).
L'intensite est limitee a 40mA.
Pour monter, la broche 8 est l'alimentation d'un r&eacute;gulateur de tension de +5V.
La sortie de ce r&eacute;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.</P>
<P>Lorsque l'onduleur est aliment&eacute;, les broches 5 (CTS) et 8 (DCD) c&ocirc;t&eacute; PC
doivent &ecirc;tre tr&egrave;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 &agrave; 0V,
la broche 8 (DCD) doit rester &agrave; l'identique &agrave; 5V, et monter la broche 20
(DTR) en court-circuitant les broches 8 et 20, par exemple, doit &eacute;teindre
l'onduleur apr&egrave;s environ 15 secondes.</P>
<P>Lorsque la diode "Low Battery" du panneau frontal s'allume, la broche
8 (DCD) doit descendre &agrave; 0V aussi.</P>
<P>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&ecirc;t &agrave; distance.
Les param&egrave;tres de ligne s&eacute;rie comme la vitesse n'ont aucune importance.</P>
<P>Liste du materiel necessaire :</P>
<P>
<UL>
<LI>un bo&icirc;tier DB-9&nbsp;;</LI>
<LI>un connecteur sub-DB-25 femelle&nbsp;;</LI>
<LI>un r&eacute;gulateur de tension 7805 +5Vdc&nbsp;;</LI>
<LI>deux r&eacute;sistances de 4,7kohm&nbsp;;</LI>
<LI>un carte &agrave; composants perfor&eacute;e&nbsp;;</LI>
<LI>un c&acirc;ble avec au moins un connecteur 9 broches m&acirc;le.</LI>
</UL>
</P>
<P>Et de plus&nbsp;:</P>
<P>
<UL>
<LI>un multim&egrave;tre&nbsp;;</LI>
<LI>un fer &agrave; souder;</LI>
<LI>quelques heures...</LI>
</UL>
</P>
<P></P>
<DT><B>APC Smart-UPS 700</B><DD><P></P>
<P>Voici quelques d&eacute;tails sur le fonctionnement du mod&egrave;le 700 en mode b&ecirc;te,
qui pr&eacute;sente une utilisation fut&eacute;e d'un transistor plac&eacute; dans le c&acirc;ble qui
&eacute;teint l'onduleur lorsque l'ordinateur est &eacute;teint.</P>
<P></P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
From: Markus Eiden &lt;Markus@eiden.de&gt;
Sender: eiden@eiden.de
To: &quot;Harvey J. Stein&quot; &lt;abel@netvision.net.il&gt;
Subject: Re: APC Smart-UPS
Date: Sun, 30 Mar 1997 16:21:05 +0200
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>J'utilise un APC Smart-UPS 700 pour mon syst&egrave;me Linux sur une carte
ASUS.</P>
<P>Pour utiliser quelques possibilites de l'onduleur, il faut quatre choses :</P>
<P></P>
<P>1) faire un c&acirc;ble RS-232 avec une petite interface ;
2) le source du powerd du paquetage sysvinit (j'utilise la version 2.6&nbsp;
de Miquel van Smoorenburg). Il faut ensuite modifier ce powerd&nbsp;;
3) changer /etc/inittab&nbsp;;
4) faire un script qui lance certaines commandes si le courant est coup&eacute;
ou si la batterie est faible.</P>
<P></P>
<P>Quelques possibilit&eacute;s&nbsp;:</P>
<P>Lorsque le secteur est coup&eacute;, un script est lanc&eacute; et une entr&eacute;e est faite
dans syslog.</P>
<P>Si la batterie est faible, un autre script est lanc&eacute; (qui ar&ecirc;te l'ordinateur,
&eacute;videmment) et une entr&eacute;e est faite dans syslog.</P>
<P>Si l'ordinateur est arr&ecirc;t&eacute; et que le courant l'est aussi, l'onduleur sera
arr&ecirc;t&eacute; &agrave; son tour.</P>
<P></P>
<P></P>
<P>1) D'abord le c&acirc;ble&nbsp;:</P>
<P>Si l'on jette un coup d'oeil &agrave; l'arri&egrave;re de l'onduleur, on y trouve un
connecteur femelle comme celui-ci&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
             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
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>D'un autre c&ocirc;t&eacute;, l'arri&egrave;re du PC pr&eacute;sente un connecteur m&acirc;le comme celui-ci&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
         8       6         1: DCD
     X   X   X   X         4: DTR
   X   X   X   X   X       5: GND
   5   4           1       6: DSR
                           8: CTS
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Il faut r&eacute;aliser l'interface suivant entre ces connecteurs&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
 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---------|        |
                                 \&gt;E     |
                                 |       |
 (5)-----------------------------#-------#------------------- (4)
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>
<UL>
<LI>j'utilise un transistor "BC140", mais &agrave; peut pr&egrave;s n'importe
quel transistor NPN devrait faire l'affaire&nbsp;;-)</LI>
<LI>Le transistor fonctionne comme "inverseur".
Si l'on &eacute;teint l'ordinateur ET que le courant est coup&eacute;, la broche 4 du
PC descend et la broche 1 de l'onduleur monte.
Cela &eacute;teint l'nduleur pour &eacute;conomiser la batterie.</LI>
</UL>
</P>
<P></P>
<P>2) Le source de <EM>powerd</EM></P>
<P>J'ai juste retouch&eacute; tr&egrave;s peu le source (donc c'est en fait celui de
Miquel).</P>
<P>(a) Emet une "alerte" vers syslogd si la broche 8 du PC (<CODE>DCD</CODE>)
est basse (c'est qu'alors, le c&acirc;ble n'est pas connect&eacute;)&nbsp;;</P>
<P>(b) <CODE>DCD</CODE> descendu &agrave; z&eacute;ro&nbsp;-> le courant est coup&eacute;&nbsp;-> appel de
<CODE>powerfail(0)</CODE>&nbsp;-> envoi de <CODE>INIT_CMD_POWERFAIL</CODE> au processus <CODE>init</CODE>&nbsp;;</P>
<P>(c) <CODE>DCD</CODE> remont&eacute;&nbsp;-> le courant est revenu&nbsp;-> appel de <CODE>powerfail(1)</CODE>&nbsp;->
envoi de <CODE>INIT_CMD_POWEROK</CODE> au processus <CODE>init</CODE>&nbsp;;</P>
<P>(d) <CODE>DSR</CODE> et <CODE>DCD</CODE> descendus &agrave; z&eacute;ro&nbsp;-> le courant est coup&eacute; et la
batterie est faible&nbsp;> appel de <CODE>powerfail(2)</CODE>&nbsp;-> envoi de
<CODE>INIT_CMD_POWERFAILNOW</CODE> au processus <CODE>init</CODE>.</P>
<P>Et voil&agrave;.</P>
<P></P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
/*
 * 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 &quot;haut&quot;. 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 a 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, &lt;miquels@drinkel.cistron.nl&gt;.
 *              Quelques changements mineurs de Markus Eiden, &lt;Markus@Eiden.de&gt;
 *              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 &lt;sys/types.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;sys/ioctl.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;errno.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;signal.h&gt;
#include &lt;syslog.h&gt;
#include &lt;string.h&gt;
#include &quot;paths.h&quot;
#ifdef NEWINIT
#include &quot;initreq.h&quot;
#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(&amp;amp;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 -&gt; INIT_CMD_POWERFAIL      -&gt; powerwait           *
   * ok=1 -&gt; INIT_CMD_POWEROK        -&gt; powerokwait         *
   * ok=2 -&gt; INIT_CMD_POWERFAILNOW   -&gt; powerfailnow        */

  
  switch (ok) {
    case 0 : req.cmd = INIT_CMD_POWERFAIL;
             /* Coupure -&gt; alerte */
             break;
    case 1 : req.cmd = INIT_CMD_POWEROK;
             /* Retour du courant -&gt; arrete l'alerte */
             break;
    case 2 : req.cmd = INIT_CMD_POWERFAILNOW;
             /* Coupure et batterie faible -&gt; arret systeme */
             break;
             }
                                                         
  /* Ouvre le fifo (avec timeout) */
  signal(SIGALRM, alrm_handler);
  alarm(3);
  if ((fd = open(INIT_FIFO, O_WRONLY)) &gt;= 0
                &amp;&amp; write(fd, &amp;amp;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)) &gt;= 0) {
        if (ok)
                write(fd, &quot;OK\n&quot;, 3);
        else
                write(fd, &quot;FAIL\n&quot;, 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 &lt; 2) {
        fprintf(stderr, &quot;Usage: powerd &lt;port&gt;\n&quot;);
        exit(1);
  }

  /* Lancement de syslog */
  openlog(&quot;powerd&quot;, LOG_CONS|LOG_PERROR, LOG_DAEMON);

  /* Ouverture du port a surveiller */
  if ((fd = open(argv[1], O_RDWR | O_NDELAY)) &lt; 0) {
        syslog(LOG_ERR, &quot;%s: %s&quot;, argv[1], sys_errlist[errno]);
        closelog();
        exit(1);
  }
  
  /* Port ouvert, DTR doit etre haut. On le force tout de meme...*/

  /* Fonctionnement : Batterie faible -&gt; Arret -&gt; DTR descend -&gt; *
   * transistor ouvert -&gt; La broche d'arret onduleur monte -&gt;    *
   * 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, &amp;amp;dtr_bit);




  /* Passe en daemon. */
  switch(fork()) {
        case 0: /* Fils */
                closelog();
                setsid();
                break;
        case -1: /* Erreur */
                syslog(LOG_ERR, &quot;impossible de forker.&quot;);
                closelog();
                exit(1);
        default: /* Pere */
                closelog();
                exit(0);
  }

  /* Relance syslog. */
  openlog(&quot;powerd&quot;, LOG_CONS, LOG_DAEMON);
  
   syslog(LOG_INFO, &quot;APCpowerd demarre...&quot;);

  /* On surveille DCD */
  while(1) {
        /* Lecture de l'etat. */
        ioctl(fd, TIOCMGET, &amp;amp;flags);

        /* Controle de connexion : CTS doit etre haut */
        tries = 0;
        /* TIOCM_*- Se reporter a  .../ams/termios.h */ 
        while((flags &amp; TIOCM_CTS) == 0) {
                /* On continue a essayer, et alerte toutes les 2 minutes */
                if ((tries % 60) == 0)
                    syslog(LOG_ALERT, &quot;Onduleur non connecte&quot;);
                sleep(2);
                tries++;
                ioctl(fd, TIOCMGET, &amp;amp;flags);
        }
        if (tries &gt; 0)
                syslog(LOG_ALERT, &quot;Onduleur reconnecte&quot;);

        /* Calcule l'etat en cours */
        status = (flags &amp; TIOCM_CAR);

        /* Si DCD est passe a zero, le courant a ete coupe */
        if (oldstat != 0 &amp;&amp; status == 0) {
                count++;
                if (count &gt; 3) {
                        powerfailed = 1;
                        powerfail(0);
                        }
                else {
                        sleep(1);
                        continue;
                }
        }
        /* Si DCD remonte, le courant est revenu. */
        if (oldstat == 0 &amp;&amp; status &gt; 0) {
                count++;
                if (count &gt; 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 &amp; 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);
}
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>3) Modifier inittab</P>
<P></P>
<P><CODE>init</CODE> re&ccedil;oit les commandes <CODE>INIT_CMD</CODE> et lance les scripts idoines&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
pf::powerwait:/sbin/init.d/powerfail    start
pn::powerfailnow:/sbin/init.d/powerfail now
po::powerokwait:/sbin/init.d/powerfail  stop
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Ce qui signifie, par exemple&nbsp;: si le courant est coup&eacute; (<CODE>powerwait</CODE>,
lancer le script <CODE>/sbin/init.d/powerfail</CODE> avec le param&egrave;tre
"<CODE>start</CODE>".</P>
<P></P>
<P>4) Le script <CODE>powerfail</CODE></P>
<P></P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#! /bin/sh
# Copyright (c) 1997 Markus Eiden, Markus@Eiden.de
#

case &quot;$1&quot; in
    start)
        echo &quot;LE COURANT EST COUPE !&quot; | wall
        logger &quot;Coupure de courant&quot;
        ;;
    now)
        echo &quot;BATTERIE FAIBLE ! Arret systeme dans une minute&quot; | wall
        logger &quot;Batterie faible, arret systeme dans une minute&quot;
        sync
        /sbin/shutdown -r -t 5 +1
        ;;
    stop)
        echo &quot;LE COURANT EST REVENU !!&quot; | wall
        logger &quot;Courant retabli&quot;

        /sbin/shutdown -c &gt;/dev/null 2&gt;/dev/null  

        ;;
  *)
        echo &quot;Usage: $0 {start|now|stop}&quot;
        exit 1
        ;;
esac

exit 0
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Eh bien, cela devrait &ecirc;tre simple ;-)</P>
<P></P>
<P>Vous voil&agrave; pr&ecirc;t maintenant, mais restez prudent&nbsp;: cela fonctionne pour moi,
mais je ne peux &eacute;videmment pas garantir que quoi que ce soit de cela
fonctionne pour vous.</P>
<P>Un petit conseil pour finir&nbsp;: si <CODE>/sbin/init.d/powerfail</CODE>
arr&ecirc;te votre PC, DTR descend, donc la broche d'arr&ecirc;t (c&ocirc;t&eacute; onduleur) monte.
D&egrave;s cet instant, il faut entre 20 et 30 secondes &agrave; l'onduleur pour
s'arr&ecirc;ter.
C'est de votre responsabilit&eacute; d'emp&ecirc;cher votre machine Linux de red&eacute;marrer
durant ces 20 secondes (en particulier, de monter les volumes disque).
Cela ne fut pas un probl&egrave;me pour mon syst&egrave;me.</P>
<P>Quatre m&eacute;thodes simples permettent d'emp&ecirc;cher Linux de d&eacute;marrer rapidement&nbsp;:</P>
<P>
<OL>
<LI>le BIOS doit r&eacute;aliser certaines routines (comme identifier le nombre
de pistes de votre lecteur de disquettes si vous en avez un)&nbsp;;</LI>
<LI>LILO peut &ecirc;tre configur&eacute; pour attendre s'il est install&eacute;&nbsp;;</LI>
<LI>il peut ne rien y avoir &agrave; faire (comme dans mons cas)&nbsp;;</LI>
<LI>il est possible d'acheter plus de m&eacute;moire afin que le d&eacute;compte dure
30 secondes.
Cela doit correspondre environ &agrave; 1&nbsp;024&nbsp;Mo&nbsp;;-).</LI>
</OL>
</P>
<P></P>
<P></P>
<DT><B>APC Smart-UPS 1&nbsp;400</B><DD><P></P>
<P>Autre jour, autre APC.
Voici pour le <EM>Smart-UPS&nbsp;1&nbsp;400</EM>, en mode b&ecirc;te.</P>
<P></P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
From: &quot;Slavik Terletsky&quot; &lt;ts@polynet.lviv.ua&gt;
To: hjstein@math.huji.ac.il
Subject: my contribution to UPS HOWTO
Date: Mon, 27 Jan 1997 21:10:16 +0000
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>
<P>Daemon d'onduleur pour FreeBSD (2.1.5&nbsp;- test&eacute;).</P>
<P>Sch&eacute;ma de branchement&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
Onduleur (broche, nom)          PC (broche, nom)
----------------------          ---------------------
1 Arret                 &gt;-----------&gt;   4 Terminal pret
2 Courant Coupe         &gt;-----------&gt;   8 Pret a emettre
4 Commun                &gt;-----------&gt;   5 Masse
5 Batterie faible       &gt;----------+&gt;   1 Detection de porteuse
8 Batterie (+24V)       &gt;-|10kOhm|-+
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Description</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
Usage: upsd &lt;device&gt; [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).
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Fonctionnement&nbsp;:</P>
<P><CODE>upsd</CODE> enregistre tous les changements d'&eacute;tat de l'onduleur (courant
pr&eacute;sent ou absent, batterie faible ou bonne).
Lorsque le courant est absent et que la batterie est faible, <CODE>upsd</CODE>
active le signal d'arr&ecirc;t de l'onduleur, attend le nombre de secondes indiqu&eacute;
sur la ligne de commande, et lance le script d'arr&ecirc;t.</P>
<P>Exemple de script&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#!/bin/sh
# Le script est execute lorsque le systeme s'arrete

PATH=/sbin:/bin:/usr/sbin:/usr/bin

echo &quot;ARRET IMMEDIAT DU SYSTEME&quot; | wall

reboot
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Source d'<CODE>upsd</CODE>&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
/* daemon d'onduleur
 * Copyright 1997 Slavik Terletsky. All rights reserved.
 * Auteur: Slavik Terletsky &lt;ts@polynet.lviv.ua&gt;
 * Systeme: FreeBSD
 * Traduction: Bernard Choppy &lt;choppy@imaginet.fr&gt;
 */
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;signal.h&gt;
#include &lt;syslog.h&gt;
#include &lt;unistd.h&gt;
#include &lt;varargs.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;errno.h&gt;
#include &lt;sys/uio.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/ioctl.h&gt;
#include &lt;sys/ttycom.h&gt;

int status;
int wait = 0;
FILE *fd;
char *scr = &quot;/etc/rc.shutdown&quot;;
char *idf = &quot;/var/run/upsd.pid&quot;;

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, &quot;usage: %s &lt;port&gt; [temporisation [script]]\n&quot;, argv[0]);
 exit(1);
 }

 /* controle de l'existence du script */
 if(!(fd = fopen(scr, &quot;r&quot;))) {
 fprintf(stderr, &quot;fopen: %s: %s\n&quot;, scr, sys_errlist[errno]);
 exit(1);
 }
 fclose(fd);

 /* controle si upsd s'execute deja */
 if(fd = fopen(idf, &quot;r&quot;)) {
 fprintf(stderr, &quot;fopen: le fichier %s existe deja\n&quot;, idf);
 exit(1);
 }

 /* passe en daemon */
 switch(fork()) {
 case -1:       /* erreur */
 fprintf(stderr, &quot;fork: %s\n&quot;, sys_errlist[errno]);
 exit(1);
 case  0:       /* fils */
 break;
 default:       /* pere */
 exit(0);
 }

 /* sauvegarde du pid */
 if(!(fd = fopen(idf, &quot;w&quot;))) {
 fprintf(stderr, &quot;fopen: %s: %s\n&quot;, idf, sys_errlist[errno]);
 exit(1);
 }
 fprintf(fd, &quot;%d\n&quot;, (int)getpid());
 fclose(fd);

 /* ouverture du port a surveiller */
 if((pd = open(argv[1], O_RDWR | O_NDELAY)) &lt; 0) {
 fprintf(stderr, &quot;open: %s: %s\n&quot;, argv[1], sys_errlist[errno]);
 exit(1);
 }

 /* le daemon fonctionne */
 openlog(&quot;upsd&quot;, LOG_PID, LOG_DAEMON);
 syslog(LOG_INFO, &quot;daemon demarre&quot;);

 /* reaction au signal */
 (void)signal(SIGTERM, upsterm);

 /* surveillance du port */
 while(1) {
 /* reinitialisation des bits */
 if(ioctl(pd, TIOCMSET, &amp;amp;zero) &lt; 0) {
  fprintf(stderr, &quot;ioctl: %s\n&quot;, sys_errlist[errno]);
  exit(1);
 }

 /* lecture de l'etat du port */
 if(ioctl(pd, TIOCMGET, &amp;amp;status) &lt; 0) {
  fprintf(stderr, &quot;ioctl: %s\n&quot;, sys_errlist[errno]);
  exit(1);
 }

 /* determination de l'etat */
 d5 = status &amp; 0x20;
 d6 = status &amp; 0x40;
 d7 = status &amp; 0x80;

 /* courant present */
 if(!(d7 + d5)) {
  if(!pow) {
   syslog(LOG_CRIT, &quot;courant present&quot;);
   pow = 1;
  }
 /* courant coupe */
 } else {
  if(pow) {
   syslog(LOG_CRIT, &quot;courant coupe&quot;);
   pow = 0;
  }
 }

 /* batterie faible */
 if(!d6 &amp;&amp; !low) {
  syslog(LOG_ALERT, &quot;batterie faible&quot;);
  low = 1;

  /* arret onduleur */
  if(!pow) {
   upsdown(pd);
  }
 }

 /* batterie ok */
 if(d6 &amp;&amp; low) {
  syslog(LOG_CRIT, &quot;batterie ok&quot;);
  low = 0;
 }

 sleep(1);
 }

 /* jamais atteint */
 return 0;

}

void upsterm() {
 /* message de trace de fin */
 syslog(LOG_INFO, &quot;arret du daemon&quot;);

 /* effacement du fichier de pid */
 unlink(idf);

 exit(0);
}

void upsdown(int pd) {
 /* message de trace d'arret */
 syslog(LOG_ALERT, &quot;arret du systeme&quot;);

 /* effacement du fichier de pid */
 unlink(idf);

 /* mesure de securite : vidange des tampons d'ecriture */
 system(&quot;/bin/sync&quot;);
 system(&quot;/bin/sync&quot;);
 system(&quot;/bin/sync&quot;);

 /* arret de l'onduleur */
 status = TIOCM_DTR;
 if(ioctl(pd, TIOCMSET, &amp;amp;status) &lt; 0) {
 fprintf(stderr, &quot;ioctl: %s\n&quot;, sys_errlist[errno]);
 exit(1);
 }

 /* attente puis lancement du script */
 sleep(wait);
 system(scr);
}
# Slavik Terletsky      # University &quot;Lvivska Poytechnika&quot; #
# Network Administrator # mailto:ts@polynet.lviv.ua        #
</PRE>
</CODE></BLOCKQUOTE>
</P>
</DL>
</P>
<P></P>

<HR>
<P>
Chapitre <A HREF="UPS-HOWTO-9.html">suivant</A>,
Chapitre <A HREF="UPS-HOWTO-7.html">Pr&eacute;c&eacute;dent</A>
<P>
Table des mati&egrave;res de <A HREF="UPS-HOWTO.html#toc8">ce chapitre</A>,
 <A HREF="UPS-HOWTO.html#toc">Table des mati&egrave;res</A> g&eacute;n&eacute;rale</P>
<P>
<A HREF="UPS-HOWTO.html">D&eacute;but</A> du document,
 <A HREF="#0"> D&eacute;but de ce chapitre</A></P>
</BODY>
</HTML>