11. ioctlInformations sur un certain nombre d'onduleurs

Contenu de cette section

Cette section contient des informations spécifiques de certains onduleurs. Ce que je souhaiterais serait de disposer des informations sur le port de contrôle de l'onduleur (ce que fait chaque broche et ce qu'elle attend qui soit fait), sur le câble fourni par le constructeur (ce qu'il connecte et où), ainsi qu'une version modifiée de powerd.c qui fonctionne avec l'onduleur. Ce que j'ai actuellement est une description à peu près complète de chaque onduleur. Je voudrais essayer d'affiner chaque information, mais comme je ne peux tester chaque onduleur, il est difficile de décider exactement de ce qui est nécessaire. De plus, chaque onduleur semble avoir quelques trucs supplémentaires qui sont bien décrits par les auteurs de chaque section. Ainsi, pour l'heure, je laisse tout en place. Tout pour un HOWTO épais.

Veuillez m'envoyer vos expériences pour les inclure ici.

11.1 Expériences générales.

J'ai conservé les commentaires des gens, mais n'ai pas encore obtenu la permission de les inclure ici. Voici un sommaire général de ce que j'ai entendu dire.

APC: Ne donneront pas d'informations sur leur mode "intelligent" sans votre signature d'un accord de non-diffusion. Donc, les gens sont forcés d'utiliser leurs onduleurs "intelligents" en mode "idiot", comme souligné plus bas.

Tripp Lite: Une personne a dit que Tripp ne diffuserait pas non plus d'information.

Upsonic: Quelqu'un a dit qu'Upsonic a discuté de détails techniques au téléphone, répondu aux questions par fax et est serviable en général.

11.2 Advice 1200 A

Onduleurs d'Advice Electronics, Tel Aviv, Israël (Tout leur matériel porte une étiquette à leur nom).

Spécification des broches du port de contrôle.

Ils m'ont aussi donné le dessin suivant qui ne m'a servi à rien, mais peut vous être utile si vous souhaitez fabriquer vous-même un câble~:


         2 ----------+
                     |
                     \
                      \|
                       |--------------
                      /|
                    \/      <--- Le "\/" indique le type de ce
                    |            transistor. J'ai oubli&eacute; ce que
                    |            cela veut dire, mais ce n'est
                 +-----+         pas fondamental.
                /  /  /


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


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


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


Câble fourni

Ils m'ont d'abord donné un câble qui appartenait à un paquetage DOS de contrôle de l'onduleur appelé RUPS. Je l'ai utilisé pour les tests. Une fois ceux-ci satisfaisants, ils m'ont donné un câble qu'ils utilisent pour les serveurs Netware connectés à des onduleurs. Il fonctionnait à l'identique. Voici les détails~:

(Le powerd.c inclus dans SysVinit place ou laisse RTS haut, causant l'arrêt de l'onduleur immédiatement lors du lancement de powerd~!)

11.3 Advice 1200 AGPS1000 d'ACCODATA

   >From hennus@sky.nl.mugnet.org Thu Mar 10 15:10:22 1994
   Newsgroups: comp.os.linux.help
   Subject: Re: auto-shutdown avec un onduleur
   From: hennus@sky.nl.mugnet.org (Hennus Bergman)
   Date: Tue, 1 Mar 1994 22:17:45 GMT
   Distribution: world
   Organization: The Organization For Removal Of On-Screen Logos

   Dans l'article <CRAFFERT.94Feb28125452@nostril.lehman.com>,
   Colin Owen Rafferty <craffert@nostril.lehman.com> ecrit :
   >Je suis pret a acheter un onduleur pour ma machine, et j'en
   >voudrais un qui sache faire un "auto-shutdown".
   >
   Je viens d'en acheter un vraiment pas cher :-)
   C'est un GPS1000 d'ACCODATA. Tout le monde connait la bonne qualite
   de leur production (je n'ai pas d'actions chez eux :-() ?

   >Je suppose que tous ont une sorte de connexion serie qui previent le
   >systeme de cela.
   >
   Je l'ai pris 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'"entree" pour arreter la batterie (il relache le relais de puissance).
   Le troisieme est une sorte d'acquittement de la commande d'arret. Je
   pense que l'interface de mon onduleur a ete concue pour etre connectee
   a des niveaux TTL, mais avec quelques resistances il peut etre connecte a
   un port serie. Il est branche de telle sorte qu'avec un port RS-232 on
   ne puisse utiliser les deux optocoupleurs de sortie; mais l'acquittement
   de la commande d'arret n'est pas vraiment necessaire. On peut se conten-
   ter de celui qui est important (Notez qu'il est possible de faire fumer
   la partie transistor des optocoupleurs avec des niveaux RS-232 si on
   le branche mal). ;-)

   J'esperais etre capable de le connecter a mon port de jeux inutilise,
   mais ce dernier n'a pas de sortie, n'est-ce pas~?
   Je vais probablement finir par mettre un port parallele supplementaire
   pour ca.

   Tous les onduleurs n'utilisent pas d'optocoupleurs, certains se contentent
   de simple relais, qui sont moins difficiles a connecter, mais bien sur,
   pas aussi `elegants'.

   >Quelqu'un a-t-il ecrit un paquetage qui surveille l'onduleur et effectue
   >un shutdown (ou similaire) lorsque le courant s'arrete ?
   SysVinit-2.4 (et probablement 2.5 aussi bien) a un demon `powerd' qui
   surveille le port serie en continu et previent init quand CD (Detection
   de porteuse) tombe. Init active ensuite un shutdown avec un delai. Si le
   courant revient apres quelques minutes, le shutdown est arrete. Tres beau.
   Le seul probleme que j'aie eu avec est qu'il ne dit pas a l'onduleur de
   s'arreter lorsque le shutdown est fini. Il attend simplement la avec une
   invite root. Je vais probablement ecrire un petit program pour l'arreter
   >depuis /etc/brc. RSN.

   >    Colin Rafferty, Lehman Brothers <craffert@lehman.com>

   Hennus Bergman

11.4 TrippLite BC750LAN (Standby UPS)

From: Tom Webster <webster@kaiwan.com>
To: hjstein@MATH.HUJI.AC.IL (Harvey J. Stein)
Subject: Re: SOS - Powerd & onduleurs - SOS
Date: Mon, 8 Aug 1994 12:26:09 -0700 (PDT)

Harvey,

Tout d'abord, laisse-moi dire que la lecture de ton HOWTO m'a beaucoup plu.
C'est a peu pres ce que j'esperais voir devenir mon document. J'ai ecrit
mon pseudo-HOWTO tard dans la nuit, car je continuais a voir le message
"Puis-je connecter un onduleur a Linux...", a peu pres une fois par mois
dans c.o.l.*. Le mien traite specifiquement de la connexion d'un modele
particulier d'onduleur (series TrippLite BCxxx/LAN) sur une machine Linux
et de l'adaptation de powerd a ce cas.

Il necessite quelques ameliorations, les choses etant un peu bidouillees.
Maintenant que je l'ai poste trois ou quatre fois en reponse aux question,
je recois finalement quelques feedback (qui trouvent ces erreurs). Les
problemes que je lui connais jusqu'a present sont :

La version correcte de SysVinit est 2.4 et non 2.04.

Il y a certains arguments concernant la necessite d'une ou plusieurs
resistances dans mon cable. Le seul endroit ou j'aie vu que ce serait
necessaire est sur l'extinction de l'inverseur, pour etre sur de ne pas
envoyer une trop forte tension dans l'onduleur. Pour le circuit de
detection, je ne vous pas pourquoi un equipement DTE ne peut admettre
de voir son signal boucle vers lui-meme. Tout ce que je fais est de
connecter une ligne qui est maintenue haute sur le signal Detection de
porteuse.

Je dois etre un peu plus clair sur le fonctionnement de l'onduleur lorsqu'il
entre en mode coupure de courant. Les TrippLite fournissent _et_ un circuit
ouvert _et_ un circuit ferme en cas de coupure de courant, deux broches
differentes et une broche de masse commune. Ainsi tout ce que j'ai a faire
est de brancher une broche maintenue haute sur la ligne Detection de porteuse
et de la router sur le circuit ouvert sur coupure de l'onduleur, pour faire
tomber la detection de porteuse. Je pense que cela trompe quelque personnes
qui ont lu la description de Miquel van Smoorenburg d'un onduleur qui fournit
seulement un circuit ferme sur coupure de courant, et necessite un cable
beaucoup plus complique.

Voila, c'est tout ce a quoi je pense pour l'instant. Je prevois de regarder si
mon cable continue a fonctionner si j'insere des resistance dans tous les
circuits. Si c'est le cas, je ferai les modifications dans mon document, que
tu devrais trouver ce week-end.


Tom

----------------

De Linux et les onduleurs
[ou comment connecter un onduleur TrippLite BCXXXLAN]

par Tom Webster <webster@kaiwan.com>
   05/20/94 (Version 1.0)

1.0 Introduction
J'ai bataille sur la connexion d'un TrippLite BC750LAN (onduleur autonome)
sur ma machine Linux il y a a peu pres six mois. Puisque j'ai vu differentes
demandes sur ce sujet, je le mets sous un format relativement stable afin de
n'avoir qu'a l'envoyer lorsque la question reapparait.

1.1 Les Resultats
Lorsque le courant est coupe dans mon appartement, les choses suivantes se
passent :

   1.  L'onduleur bascule son inverseur et l'ordinateur commence a
       fonctionner sur l'onduleur. L'alarme de l'onduleur commence a
       retentir. Si le courant revient, l'onduleur re-bascule son
       inverseur et retourne sur le secteur. Rien d'autre n'arrive,
       sauf que l'alarme s'arrete.

   2.  Si le courant est coupe depuis 15 a 30 secondes, le systeme
       envoie en message aux utilisateurs (par wall) et commence un
       shutdown (pour arreter) dans les cinq minutes. Si le courant
       revient, le shutdown est abandonne, et un message explicatif
       est envoye aux utilisateurs (par wall).

   3.  Pendant que le systeme est en phase de shutdown, son dernier
       acte doit etre d'eteindre l'onduleur, pour couper le courant
       du systeme. Cela est fait apres le umount des disques, et est
       realise pour eviter que le systeme arrete consomme de la
       puissance de l'onduleur.

   4.  Quand le courant secteur revient, le systeme redemarre
       normalement.

Le BC750 a suffisamment de jus pour maintenir mon systeme en fonction
un certain temps, donc pourquoi l'eteins-je apres seulement cinq
minutes ? La reponse se trouve dans quelques regles pifometriques
(elles peuvent varier chez vous) :

   a.  Si le courant baisse ou s'arrete, 90% des fois ce sera pour
       0 a 2 minutes.

   b.  Si cela dure plus longtemps, c'est que ca durera entre une
       demi-heure et cinq heures.

   c.  Si cela dure un moment (voir b), le courant va revenir et
       repartir au moins une fois pendant que l'entreprise d'electricite
       travaille sur la ligne (le courant reviendra pour 5 a 45 secondes,
       puis s'arretera a nouveau).

Donc, j'ai configure mon systeme pour couvrir la majorite des coupures
que j'ai, sans tenter de tenir celles qui durent vraiment longtemps.
J'ai aussi garde une grosse reserve dans l'onduleur pour gerer les
situations d'aller-retour.

1.2  Avertissement
Je ne fait aucune garantie d'aucune sorte sur la fiabilite ou la securite
induites par mon avis. C'est ainsi que mon systeme est configure, et
autant que je puisse le dire, il fonctionne bien pour moi. Votre
configuration peut necessiter des differrences pour correspondre a vos
besoins, en particulier si vous utilisez differents types d'onduleurs.

2.0  Materiel
Dans le cas de mon onduleur, j'ai pense que l'interface RS-232 etait,
quelque part, mal nommee. Je pensais que l'onduleur envoyait et
recevait des donnees, comme lorsque l'on communique avec un modem avec
les commandes "AT". Ce n'etait pas le cas. Il semble qu'elle s'appelle
RS-232 parce qu'elle est batie dans les limites des specifications
RS-232 en termes de tension et de limites de signaux. Pour communiquer
avec l'onduleur, vous devez pouvoir detecter les changements d'etat de
certaines lignes et changer l'etat de certaines autres. Le fait que ces
lignes puissent n'avoir rien en commun avec les lignes que votre
systeme puisse s'attendre a utiliser, s'il communiquait avec un modem ou
une imprimante, explique probablement pourquoi votre onduleur necessite
des cables speciaux pour permettre aux logiciels (y compris ceux du
constructeur) de communiquer avec l'onduleur.

Au travers d'essais et d'erreurs avec un boitier de brassage RS-232, j'ai
pu definir un diagramme de cable pour relier l'onduleur a l'ordinateur.
Veuillez noter que je l'ai realise sans regarder le cable officiel
TrippLite et que celui-ci peut etre different.

       Onduleur              Systeme
         DB-25               DB-25
           1 <-------------->  1       Masse

           2 <-------------->  4       Coupure de secteur
           8 <-------------->  8       Circuit de detection

           3 <-------------->  2       Inverseur d'arret
          20 <--------------> 22       Circuit

Une fois le cable broche ainsi, branchez simplement le cote onduleur
sur celui-ci et le cote systeme sur un port serie libre de votre
machine. Vous aurez vraisemblablement a vous debrouiller avec des
adaptateurs 9->25 et 25->9 pour faire aller votre cable, mais vous
devriez pouvoir gerer cela avec un bon magasin d'informatique.

3.0 Logiciel
Le logiciel que j'utilise est disponible pour les utilisateurs de
Linux et se trouve sur de nombreuses distributions (SLS et Slackware
au minimum). Cette configuration a fonctionne pour moi sur les noyaux
0.99.9, 0.99.14 et 1.0.

3.1 Init System V
Ce paquetage est necessaire pour faire fonctionner le tout. Si vous
utilisez encore le paquetage "Init simple", il est peut-etre temps
d'envisager la mise a jour. La version que j'utilise est 2.04, et je
crois que Miquel van Smoorenburg est l'auteur du paquetage.

3.2 powerd
powerd est le demon du courant, par defaut il surveille le changement
d'etat de la ligne DCD et indique ces changements au systeme par le
mecanisme du signal. Le source de powerd est fourni dans le paquetage
Init System V. Compilez-le, deplacez-le dans un repertoire de binaires
(je l'ai mis dans /sbin sur mon systeme), et modifiez votre script
rc.local pour lancer le demon. La partie correspondante de mon rc.local
a l'allure suivante :

    ----- couper ici -----
    # Ajoute le support de l'onduleur
    echo "Demarrage du demon powerd..."
    if [ -x /sbin/powerd ]; then
       /sbin/powerd /dev/cua4
    fi
    ----- couper ici -----

3.3 inittab
Votre inittab doit etre modifie pour gerer correctement les signaux que
powerd enverra s'il y a une coupure secteur. Les lignes correspondantes
de mon inittab ont l'allure suivante :

   ----- couper ici -----
   # Quoi faire si le courant est coupe (passer en mono-utilisateur)
   pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"

   # Si le courant revient, abandonner le shutdown en cours.
   pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"

   # Si le courant revient en mono-utilisateur, passer en multi-utilisateur.
   ps:S:powerokwait:/sbin/init 2
   ----- couper ici -----

3.4 rc.0 (brc)
En fonction de la configuration de votre systeme, l'un des scripts
rc.0 ou brc est execute immediatement avant le shutdown. Ces scripts
prennent soin de diverses choses, comme demonter les disques ou autre
nettoyage de derniere minute.

Le circuit de l'inverseur de shutdown est concu pour signaler un
shutdown a un inverseur lorsque des donnees sont envoyees sur la ligne
DTR. Dans mon cas, j'ai juste transmis un court fichier sur le port
serie (/etc/passwd car j'etais sur de toujours le trouver la). Mon
rc.0 est comme ci-dessous, notez qu'il est surtout conservateur, le
sync peut etre supprime et les delais de sleep peuvent probablement
etre affines, mais cela fonctionne, donc je ne m'y suis pas plus
interesse.

  ----- couper ici -----
  #! /bin/sh
  #
  # brc       Ce fichier est execute par init(8) lors du shutdown du
  #           systeme (i.e. place en niveau de fonctionnement 0).
  #           Habituellement, il s'occupe de demonter tous les systemes
  #           de fichiers non indispensables.
  #
  # Version:  @(#)/etc/brc            2.01    02/17/93
  #
  # Auteurs:  Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
  #           Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
  #
  # Modifie : 01/15/94 - Ajout du support de shutdown d'inverseur
  #           Tom Webster <webster@kaiwan.com>

  PATH=/sbin:/bin:/usr/sbin:/usr/bin
  echo Descente des systemes de fichiers...
  sync
  umount -a
  sleep 2
  cat /etc/passwd > /dev/cua4
  sleep 5
  echo Done.
  ----- couper ici -----

(Sur mon onduleur, l'inverseur fonctionne seulement lorsque le courant est
coupe, donc cela ne pose pas de probleme d'envoyer le signal d'arret a
chaque shutdown)

4.0 Conclusion
Bien, c'est ainsi que j'ai branche mon onduleur TrippLite sur mon Linux.
N'hesitez pas a m'envoyer un mot avec le resultat de vos tentatives, en
particulier si vous avez des ameliorations. :->

From: Tom Webster <webster@kaiwan.com>
To: hjstein@MATH.HUJI.AC.IL (Harvey J. Stein)
Subject: Re: SOS - Powerd & onduleurs - SOS
Date: Thu, 11 Aug 1994 12:20:50 -0700 (PDT)

Harvey,

> Comme j'essayais de le dire, powerd peut simplement lancer shutdown
> directement dans un evenement de baisse de batterie, de telle sorte
> qu'init n'ait pas besoin de s'en occuper ni d'etre modifie - pas de
> nouveau signal necessaire. Bien que cela viole la belle separation
> des taches de powerd et init, c'est plus facile que d'ajouter un
> nouveau signal. Ou penses-tu seulement a une autre commande ? Quelque
> chose comme avoir powerok/powerfail/powerfailnow en tant que commandes
> d'inittab qui s'executent lorsque SIGPWR est recu et que /etc/powerfail
> contient OK/FAIL/LOWBATT (respectivement). Cela serait plsu propre,
> mais de faire executer shutdown -r now a powerd est evident a faire,
> et peut aussi bien etre fait - la logique serait la meme quelle que
> soit l'action prise par powerd lors de la baisse de batterie. Pour
> l'instant, il peut simplement lancer shutdown, et lorsqu'init sera
> modifie, il pourra ecrire LOWBATT dans /etc/powerfail (ou quel que soit
> le nom de ce fichier) et envoyer SIGPWR a init.

Je voudrais ajouter la commande LOWBATT, ce serait plus propre ainsi.
J'ai juste besoin de jeter un coup d'oeil au code et de voir quelle
serait la difficulte de l'ajouter. Je dois aussi regarder mon branchement,
je pense que cela pourrait vouloir dire que j'aie a faire passer mon
systeme par la procedure entiere de descente pour un test final (une fois
que je penserai qu'il fonctionne).

Tom



From: Tom Webster <webster@kaiwan.com>
To: hjstein@MATH.HUJI.AC.IL (Harvey J. Stein)
Subject: Re: SOS - Powerd & onduleurs - SOS
Date: Mon, 15 Aug 1994 09:46:06 -0700 (PDT)

Harvey,

Eh bien, j'ai passe a peu pres tout mon week-end a prendre des
mesures au multimetre pour les comparer a la documentation de mon
onduleur. Les seules conclusions auxquelles je sois arrivee sont :

1.  Mon systeme a fonctionne 8 a 9 mois maintenant. S'il avait du
faire fumer quelque chose, ce serait deja fait.

2.  Si mon succes est fonde sur les defauts de mon port serie (j'ai
une carte STB 4COM), je n'ai aucun moyen de le verifier sur mon
systeme. Je devrai laisser le probleme a quelque pauvre ame du Net.

3.  Autant que je puisse dire, la seule justification de la resistance
de 10 kohm dans le diagramme de Miquel etait de maintenir la ligne plus
haut que DCD, meme apres la mise a la masse du circuit.

4.  Le seul circuit qui doive faire autre chose que d'etre change par
l'onduleur (le circuit de shutdown de l'inverseur) contient une
resistance de 40 kohm (a l'interieur de l'onduleur). Cela doit eviter
tout probleme.

5.  Le circuit de Miquel fonctionne pour une detection de coupure de
courant, et peut etre extrapole pour inclure le circuit de batterie
faible. Si mon circuit s'avere inutilisable pour d'autres, il
necessitera plus de soudures que je ne voudrais en faire dans un cable.

Par ailleurs, j'en ai eu assez ce matin et ai commande un cable chez
TrippLite. J'ai commande le cable LanTastic/LAN Manager/Win NT, c'est
juste un cable (9M-9F) sans logiciel. Cela va m'economiser environ 40
dollars (le cable PC Unix (avec logiciel) est a environ 140 dollars).
La motivation de cela etait triple :

(1)  Sous un an, je vais probablement utiliser Windows 4.0 ou Windows
NT 3.50 (j'ai ete beta-site 3.1) et les deux supporteront le controle
d'onduleur (je sais que NT le fait et j'ai vu l'icone de gestion de
l'energie sur un bureau Windows 4.0 dans un magazine d'informatique).

(2)  Mon cable actuel ne sera compatible avec aucun autre logiciel de
gestion pour d'autres OS (sauf chance extraordinaire), et travailler
avec un cable connu (et j'espere qu'il sera bientot standard ?) sur un
powerd modifie peut elargir l'audience.

(3)  Je peux toujours analyser le cable pour voir si TrippLite inclut
une certaine securite dans ses cables.

Il devrait etre la d'ici une semaine ou a peu pres. En attendant, je
vais commencer a regarder dans powerd pour inclure LOWBATT.


Tom

11.5 APC Backup-UPS

Il semble qu'il y ait une certaine controverse sur la fiabilite des informations indiquees ici sur les APC Back-UPS. Donc, soyez prudent. Je preface 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, a nouveau, comme je n'ai aucun onduleur APC, je ne peux verifier la fiabilite d'aucun de ces messages.

Un message d'avertissement

From ind43@sun1000.ci.pwr.wroc.pl Sun Oct  9 11:00:42 1994
Newsgroups: comp.os.linux.admin
Subject: BUPS-HOWTO warning
From: ind43@sun1000.ci.pwr.wroc.pl (Marek Michalkiewicz)
Date: 6 Oct 1994 18:38:15 GMT
Organization: Technical Univeristy of Wroclaw
NNTP-Posting-Host: ci3ux.ci.pwr.wroc.pl
X-Newsreader: TIN [version 1.2 PL2]

Si vous voulez connecter un onduleur APC Back-UPS sur votre Linux, ce
qui suit peut vous interesser.

Il y a un bon BUPS-HOWTO qui decrit comment le faire. Mais il a un "bug".

Le signal RTS du port serie est utilise pour arreter l'onduleur. Celui-ci
ne s'arretera que s'il travaille sur sa batterie. Le manuel indique que le
le signal d'arret doit durer au moins 0,5ms. Mais un temps inferieur est
suffisant, au moins pour mon APC Back-UPS 600.

L'utilisation de RTS est dangereux, car ce dernier est monte a l'ouverture
du device. 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 a ce moment. Cela peut arriver par exemple
lorsque l'onduleur est eteint, et que le courant revient pour un moment.

Soit il faut lancer backupsd avant de monter les systemes de fichiers en
lecture/ecriture, soit (mieux) utiliser TX (broche 3) plutot que RTS
(broche 7) pour eteindre l'onduleur (la numerotation est pour un DB-9).
Utilisez ioctl(fd, TCSBRKP, 10); pour monter TX pendant une seconde, par
exemple. L'utilisation de TX doit etre sure. Je posterai peut-etre les
diff si le temps me le permet...

-- Marek Michalkiewicz
ind43@ci3ux.ci.pwr.wroc.pl

BUPS-HOWTO

Luminated Software Group Presente

HOWTO utilisation d'onduleurs de secours (d'APC) (pour proteger votre Linux)

Version: 1.01 BETA

Document de : Christian G. Holtje <docwhat@uiuc.edu> Information de cablage et aide : Ben Galliart <bgallia@orion.it.luc.edu> Traduction : Bernard Choppy <bernard.choppy@alias.fdn.fr>

Ce document est place dans le Domaine Public a une condition. Celle-ci est que ce qui appartient a Cesar revienne a Cesar. Modifiez ceci autant que vous voulez, rappelez juste que nous avons travaille dessus.

******************************************************************************* Attention ! Ni moi, ni aucun de ceux qui on ecrit ou aide a ce document, ne garantissons quoi que ce soit pour ces textes/sources/indications. Si quoi que ce soit est endommage, nous n'y sommes POUR RIEN ! Cela fonctionne POUR AUTANT QUE NOUS LE SACHIONS, mais nous pouvons avoir fait des erreurs. Donc, soyez prudent ! *******************************************************************************

NdT : Ce document contient des references de pieces detachees Radio-Shack, qui etaient vendues par le reseau Tandy en France. Ce reseau n'existe plus, mais la reference peut tout de meme etre utile.

Ok, vous venez juste d'acheter (ou vous allez le faire) un Back-UPS d'APC (d'autres pourront peut-etre tirer quelque chose de ces informations, avec peu ou pas de modifications, mais nous ne savons pas). Vous avez jete un coup d'oeil au prix du couple logiciel/cable Power-Chute, et n'etes pas sur que le jeu en vaille la chandelle. Bien, j'ai fait mon propre cable, et mon propre logiciel et je les utilise pour eteindre automatiquement mon Linux lors d'une coupure secteur. Vous savez quoi ? vous pouvez aussi !

*** Le Cable ***

C'etait la partie la plus difficile a 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'electronique local :

1 connecteur a souder subminiature male DB-9
        [Radio Shack cat. no. 276-1537c]
1 connecteur a souder subminiature femelle DB-9
        [Radio Shack cat. no. 276-1538c]
2 boitiers pour les connecteurs ci-dessus (vendus separement en general)
Du cable multi-brins (pas mono-brin)

Il vous faut aussi, mais vous pourrez peut-etre l'emprunter~:

1 fer a souder
de la soudure

Ok... voici comment connecter le tout !

Ces diagrammes montrent le côté ARRIERE (celui où vous soudez les câbles sur les broches). Les lettres V, R et B représentent les couleurs des câbles que j'ai utilisés, et facilitent la distinction des lignes (Note~: j'utilise la numerotation standard RS-232 (pour autant qu'on puisse dire). Le livre de l'APC utilise une numérotation différente. Ignorez-la~! Utilisez la nôtre... Je l'ai déjà changée pour vous~!).

   ---------------------     Cote Male (vers l'onduleur) !
    \  B   R  *  *  * /     
      \  *  *  *  V  / 
        ------------


   ---------------------     Cote femelle (vers le port COM) !
    \  R   *  *  *  V /
      \  *  B  *  *  / 
        ------------

Pour ceux qui préfèrent les chiffres~:

        Male            Femelle
---------------------------------------
        1               7               Bleu
        2               1               Rouge
        9               5               Vert

--------- Complement~: Utilisation des broches RS-232~! ----------- Puisque nous avons eu à trouver cette information~:

>Depuis l'ARRIERE (côté soudure), les broches sont numérotées ainsi~:

   ---------------------
    \  1   2  3  4  5 /
      \  6  7  8  9  / 
        ------------

Les broches signifient

        Numero  Nom                     Abreviation (parfois prefixee par D)
        1       Detection de porteuse           CD
        2       Reception de donnees            RD
        3       Transmission de donnees         TD(?)
        4       Terminal de donnees pret        DTR
        5       Masse de signal                 Gnd
        6       Jeu de donnees pret             DSR
        7       Demande pour envoyer            RTS(?)
        8       Pret a envoyer                  CS
        9       Indicateur de sonnerie          RI

Ce que nous avons fait était la connexion de la ligne RS-232 de l'onduleur "Fail Output" sur CD, le châssis de l'onduleur sur Gnd, et l'entrée "Shut Down" sur RTS. Facile, maintenant qu'on vous le dit, non~?

Je n'ai aucune idée du bon fonctionnement du logiciel ci-dessous, si vous achetez le câble d'APC. Il peut fonctionner, ou non.

*** Le Logiciel ***

Ok, j'utilise le paquetage SysVInit de Miquel van Smoorenburg pour Linux (voir à la fin pour emplacements, remerciements, adresses E-mail, etc.). Je ne sais ce qui doit être changer pour utiliser l'init de quelqu'un d'autre, mais je sais que ce code (qui suit) fonctionne avec celui de Miquel. Simplement ainsi je remercie comme je le dois. J'ai regardé dans le code de Miquel pour comprendre comment ioctl() fonctionnait. Si je n'avais pas eu cet exemple, j'aurais eu des problèmes. J'ai aussi utilisé la routine powerfail() (à l'identique, je crois), puisqu'elle doit interagir avec init, j'ai pensé qu'il devait savoir ça mieux que moi. Le fichier .c est à la fin de ce document, et nécessite seulement d'être copié/collé. Pour cela, supprimez simplement tout ce qui n'est pas du code. Ce document doit se terminer par la ligne /* Fin de Fichier */... coupez le reste.

Ce programme peut, soit être lancé comme démon pour contrôler l'état de l'onduleur et l'indiquer à init, soit être lancé pour envoyer la commande "kill-power" (coupure d'alimentation) à l'onduleur. L'alimentation ne sera coupée que s'il y a un problème secteur et que l'onduleur est sur batteries. Une fois le courant revenu, il se rallume.

Pour le lancer comme démon, entrez simplement~: backupsd /dev/backups

/dev/backups est un lien vers /dev/cua0 (COM 1, pour les DOSseurs) actuellement. La beauté du lien est que je n'ai qu'à le refaire si je passe sur COM~2 ou COM~3.

Ensuite, si le secteur s'arrête, init lancera les commandes de powerwait. Un exemple (qui vient de mon /etc/inittab)~:

#Voici les actions de coupure de courant
pf::powerwait:/etc/rc.d/rc.power start
po::powerokwait:/etc/rc.d/rc.power stop

Powerwait sera lancé si le courant baisse, et powerokwait s'il revient.

Voici mon rc.power complet~:


#! /bin/sh
#
# rc.power      Ce fichier est ex&eacute;cut&eacute; par init en cas de coupure de courant
#
# Version :     @(#)/etc/rc.d/rc.power   1.50    1994-08-10
#
# Auteur :      Christian Holtje, <docwhat@uiuc.edu>
#

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

  # Regarde comment nous avons ete appele
  case "$1" in
        start)
                echo "Attention - probleme d'alimentation secteur." | wall
                # Sauvegarde le niveau de fonctionnement actuel
                ps | gawk '{ if (($5 == "init") && ($1 == "1")) print $6 }' \
                         | cut -f2 -d[ | cut -f1 -d] \
                         > /tmp/run.level.power
                /sbin/shutdown -h +1m
                ;;
        stop)
                echo "Alimentation secteur revenue." | wall
                echo "Tentative d'arret du shutdown." | wall
                shutdown -c
                ;;
        *)
                echo "Usage:  $0 [start|stop]"
                exit 1
                ;;
  esac

Pas mal, non~? En fait, il y a un petit problème, là... Je n'ai pas eu le temps de le trouver... S'il y a un gourou "sh" par ici...

J'ai laissé un petit détail de côté, c'est de faire couper l'alimentation par l'onduleur si le PC est arrêté courant coupé. Cela est réalisé en ajoutant la ligne suivante à la fin de votre script halt~:

  /sbin/backupsd /dev/backups killpower

Cela va simplement couper l'alimentation si le secteur est coupé.

*** Tester le tout ***

C'est juste une petite section pour vous dire~:

SOYEZ PRUDENT~!

Je vous recommande la sauvegarde de vos partitions Linux, avec plusieurs "sync" avant de tester, et d'être prudent en général. Evidemment, je ne fais que vous le recommander. Je n'ai pas été prudent du tout, et j'ai eu à nettoyer ma partition plusieurs fois pendant les tests de ma configuration. Mais elle fonctionne. :-)

*** Où l'obtenir ***

Le SysVInit de Miquel van Smoorenburg's peut se trouver sur~:

sunsite.unc.edu:/pub/Linux/system/Daemons/SysVinit-2.50.tgz

et une correction pour certains shell bash se trouve juste à côté~:

sunsite.unc.edu:/pub/Linux/system/Daemons/SysVinit-2.50.patch1

Pour ce qui est d'obtenir ce HOWTO, vous pouvez m'envoyer un E-mail, docwhat@uiuc.edu avec pour sujet~:'request' et le mot-clef 'backups' dans le corps du message (il est possible que j'automatise cela, et d'autres choses).

*** Section des remerciements qui sont dûs ***

Merci à Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org> pour son superbe paquetage SysVInit et son powerd.c qui m'ont beaucoup aidés.

Christian Holtje <docwhat@uiuc.edu> Documentation backupsd.c (Ce qui n'est pas de Miquel) rc.power

Ben Galliart <bgallia@orion.it.luc.edu> Le câble Informations sur le standard RS-232 Astuces bruyantes (non rapportées ici)


/*  backupsd.c -- Simple demon pour lire les signaux de coupure de
 *                courant d'un onduleur Back-UPS (d'APC).
 * 
 *  Certaines parties proviennent du powerd.c de Miquel van Smoorenburg
 *  D'autres sont originales de Christian Holtje <docwhat@uiuc.edu>
 *  Je crois qu'on peut dire que c'est dans le Domaine Public, simplement
 *  n'oubliez pas de citer les auteurs originaux, la ou c'est necessaire.
 *
 *  Avertissement : Nous ne garantissons RIEN de ce logiciel, ni
 *                  n'assumons aucune responsabilit&eacute; concernant son
 *                  utilisation, bonne ou mauvaise.
 */

#include <sys/types.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>

/* C'est le fichier necessaire pour SysVInit */
#define PWRSTAT         "/etc/powerstatus"

void powerfail(int fail);

/* Programme principal */
int main(int argc, char **argv)
{
  int fd;
  int killpwr_bit = TIOCM_RTS;
  int flags;
  int status, oldstat = -1;
  int count = 0;

  if (argc < 2) {
        fprintf(stderr, "Usage: %s <device> [killpower]\n", argv[0]);
        exit(1);
  }

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

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

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


  /* Maintenant, on scrute la ligne DCD */
  while(1) {
      ioctl(fd, TIOCMGET, &amp;flags);
      status = (flags & TIOCM_CD); 
      /* Si DCD est monte, le secteur est coupe */
      if (oldstat == 0 && status != 0) {
          count++;
          if (count > 3) powerfail(0);
          else { sleep(1); continue; }
      }
      /* Si DCD est redescendu, le secteur est revenu */
      if (oldstat > 0 && status == 0) {
          count++;
          if (count > 3) powerfail(1);
          else { sleep(1); continue; }
      }
      /* Reinit du compteur, sauvegarde de l'etat et sleep 2 secondes */
      count = 0;
      oldstat = status;
      sleep(2);
  }
  /* Erreur ! (ne doit pas arriver) */
  return(1);
}


/* Signale a init que le courant est coupe ou revenu */
void powerfail(ok)
int ok;
{
  int fd;

  /* Cree le fichier necessaire a init pour shutdown/abandon */
  unlink(PWRSTAT);
  if ((fd = open(PWRSTAT, O_CREAT|O_WRONLY, 0644)) >= 0) {
        if (ok)
                write(fd, "OK\n", 3);
        else
                write(fd, "FAIL\n", 5);
        close(fd);
  }
  kill(1, SIGPWR);
}

/* Fin de Fichier */

11.6 APC Smart-UPS, Modèle 600

De nombreuses personnes ont un APC Smart UPS. Pour autant que je sache, aucun ne peut l'utiliser en mode "intelligent" (smart) sous Linux. C'est parce qu'APC refuse de diffuser son protocole pour le mode "intelligent" sans un accord de non-diffusion. Pas très intelligent de leur part, j'ai dit :).

La méthode générale est d'acheter à un endroit qui diffuse l'information. J'ai entendu dire que Best en fait partie.

Si vous etes coince avec un APC Smart-UPS, cous pouvez toujours l'utiliser, mais seulement en mode "idiot" comme tout autre onduleur indiqué plus haut.

Voici quelques informations sur la fabrication d'un câble pour cela. Vous aurez probablement à modifier powerd.c comme indiqué en section Analyse de câbles et modification de powerd.c

From dangit@netcom.com Mon Aug 22 10:16:23 1994
Newsgroups: comp.os.linux.misc
Subject: Cable de controle d'onduleur pour APC
From: dangit@netcom.com (Lam Dang)
Date: Fri, 19 Aug 1994 11:56:28 GMT
Organization: NETCOM On-line Communication Services (408 261-4700 guest)
X-Newsreader: TIN [version 1.2 PL1]

[Pas fait la premiere fois]

Quelques habitues du Net m'ont demande ce que je savais sur les cables de
controle d'onduleur. Voici ce que j'ai trouve lorsque j'en ai fait un pour
mon APC Smart-UPS, modele 600. Je n'en prends pas la responsabilite. C'est
juste un rapport d'experimentations; utilisez-le a vos risques et perils.
Veuillez lire le manuel de l'utilisateur d'abord, en particulier section
6.4 : Port d'Interface d'Ordinateur.

Le cable est a realiser entre un connecteur DB-9 femelle sur l'onduleur
et un DB-25 male sur l'ordinateur. Puisque j'ai coupe un bout d'un cable
9 broches pour le remplacer par un DB-25, j'ai du faire TRES ATTENTION
AUX NUMEROS DES BROCHES. Le boitier du DB-25 est assez grand pour contenir
un regulateur de tension et deux resistances. J'ai eu tout le materiel
(liste ci-dessous) chez Radio-Shack pour moins de 10 dollars. Comme Windows
NT Advanced Server 3.5 (beta 2) le necessite, l'"interface" entre le
connecteur de l'onduleur et celui du PC est ainsi :

        Onduleur (DB-9)         PC (DB-25)

        1 (Extinction)           20 (DTR)
        3 (Coupure de secteur)    5 (CTS)
        4 (Commun)                7 (GND)
        5 (Batterie faible)       8 (DCD)
        9 (Masse chassis)         1 (Chassis Ground)

C'est assez sommaire. Vous pouvez utiliser la broche 6 de l'onduleur au
lieu de la broche 3 (elles sont inverses l'une de l'autre). La complication
est de monter les broches collecteur ouvert 3 (ou 6) et 5 de l'onduleur.

Ce modele APC fournit une sortie non regulee de 24 V continu sur la broche 8.
La tension de sortie est disponible tout le temps (au moins un peu apres
que le signal de batterie faible soit monte). L'intensite est limitee a 40mA.
Pour monter, la broche 8 est l'alimentation d'un regulateur de tension de +5V/
La sortie de ce regulateur 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.

Testez votre cable sans le connecter au PC. Lorsque l'onduleur est alimente,
les broches 5 (CTS) et 8 (DCD) cote PC doivent etre tres proches de 5V, et
monter la broche 20 pendant 5 secondes ne doit avoir aucun effet. Ensuite,
retirez la prise secteur de l'onduleur pour le passer sur batteries. La
broche 5 (CTS) doit tomber a 0V, la broche 8 (DCD) doit rester a l'identique
a 5V, et monter la broche 20 (DTR), par exemple, en court-circuitant les
broches 8 et 20, doit eteindre l'onduleur apres environ 15 secondes.

Conservez l'onduleur sur batterie jusqu'a l'allumage de la diode "Low
Bettery" du panneau frontal. Maintenant, la broche 8 (DCD) doit descendre
a 0V aussi. Attendez que la batterie soit rechargee. Ensuite, connectez
votre cable au PC, desactivez les options de l'onduleur en positionnant
tous ses interrupteurs sur ON, et lancez votre logiciel favori de controle
d'onduleur.

Pour ceux qui veulent l'utiliser avec Windows NT Advanced Server, 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'arret a distance. Les parametres de ligne serie comme la vitesse n'ont
aucune importance.

Je n'ai pas teste mon cable avec le powerd de Linux. Si vous le faites,
faites-le nous savoir. J'utilise NT aussi souvent que Linux sur le meme PC.
Je dois etre conforme au schema d'onduleur de NT. Peut-etre quelqu'un
pourrait-il modifier powerd pour le faire fonctionner avec et en poster le
source ici.

Liste du materiel necessaire :

        1 boitier DB-9 (Radio Shack 276-1510)
        1 connecteur sub-DB-25 femelle (276-1430)
        1 regulateur de tension 7805 +5Vdc (276-1770)
        2 resistances de 4,7kohm
        1 carte a composants perforee (276-148)
        1 cable avec au moins un connecteur 9 broches male.

Il vous faudra un multimetre, un fer a souder et quelques heures.

Esperant etre utile,

Amities,

--
Lam Dang
dangit@netcom.com


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre