Le HOWTO des onduleurs (UPS) Harvey J. Stein, hjstein@math.huji.ac.il, Berger Financial Research, Ltd. v1.3, 16 April 1995 adaptation francaise B.Choppy, 8 juillet 1995 Ce document vous aidera a connecter un onduleur sur une machine Linux... si vous avez de la chance ... Copyright (c) 1994 by Harvey J. Stein. Vous pouvez utiliser ce document comme vous l'entendez, tant qu'il reste intact. En particulier, cette note (ainsi que les contri- butions ci-dessous) doit rester intouchee. NdT : La traduction de ce HOWTO est particulierement delicate, en ce qu'il integre de nombreux messages echanges sur InterNet reproduits a l'identique. Autant que possible, on aura conserve la presentation generale de ces messages, ainsi que leur signification (y compris parfois une tournure inele- gante ou un mot-a-mot desagreable), au detriment de la traduction integrale et de l'utilisation de tournures plus courantes en Francais. Dans certains cas, une partie en anglais est conservee, en particulier dans les en-tetes de messages. Les noms de signaux et broches de con- nexion ont ete traduits, mais leur abreviation originelle conserve (par exemple, DCD : Detection de porteuse). Une copie de la notice originale de copyright est conservee. Le traducteur prie les lecteurs de bien vouloir l'excuser de ces desagrements. (version originale conservee volontairement) You may use this document as you see fit, as long as it remains intact. In particular, this notice (along with the contributions below) must remain untouched. 11.. IInnttrroodduuccttiioonn Ce HOWTO concerne la connexion d'un onduleur sur un PC sous Linux. L'idee est d'etablir la connexion de telle sorte que Linux puisse s'arreter proprement lorsque le courant s'arrete. Dans une large mesure, ce document est redondant, car toutes les informations de base sont contenues dans la page de man powerd livree avec le paquetage SysVinit. De tout facon, il semble qu'il y ait periodiquement de nombreuses discussions sur le Net concernant la connexion de PC Linux a des onduleurs (et les versions de Linux que j'ai installees ne comportaient pas de page de man powerd). J'ai pense qu'il pourrait etre une bonne idee de faire un HOWTO, car : +o Une seconde source d'informations peut aider a la comprehension de la methode de connexion de Linux a un onduleur, meme s'il s'agit simplement de la meme information, ecrite differemment. +o Le HOWTO peut servir de repository pour les donnees specifiques des onduleurs. +o Le HOWTO contient des details supplementaires qui ne se trouvent pas dans la page de man de powerd. Quoi qu'il arrive, ceci ne remplace pas la page de man de powerd. Esperons qu'apres avoir lu les deux, les gens seront a meme de se debrouiller avec les onduleurs. 11..11.. CCoonnttrriibbuutteeuurrss Je suis debiteur a vie de ceux dont j'ai recu de l'aide, des suggestions, ainsi que des donnees specifiques d'onduleurs. La liste inclut, dans l'ordre d'apparition dans ce document : +o Miquel van Smoorenburg (miquels@cistron.nl.mugnet.org) +o Danny ter Haar (danny@caution.cistron.nl.mugnet.org) +o Hennus Bergman (hennus@sky.nl.mugnet.org) +o Tom Webster (webster@kaiwan.com) +o Marek Michalkiewicz (ind43@sun1000.ci.pwr.wroc.pl) +o Christian G. Holtje (docwhat@uiuc.edu) +o Ben Galliart (bgallia@orion.it.luc.edu) +o Lam Dang (angit@netcom.com) 11..22.. AAvveerrttiisssseemmeenntt iimmppoorrttaanntt Je ne peux reellement pas garantir que quelque partie de ceci fonctionne pour vous. Connecter un onduleur a un ordinateur peut etre un travail d'astuce. L'un ou l'autre, ou les deux peuvent bruler, exploser, mettre le feu, ou commencer la Troisieme Guerre Mondiale. De plus, j'ai seulement une experience directe de l'onduleur Advice 1200 A, et je n'ai pas eu a fabriquer de cable. Donc, _S_O_Y_E_Z _P_R_U_D_E_N_T_, _R_A_S_S_E_M_B_L_E_Z _T_O_U_T_E _L_'_I_N_F_O_R_M_A_T_I_O_N _P_O_S_S_I_B_L_E _S_U_R _V_O_T_R_E _O_N_D_U_L_E_U_R_. _R_E_F_L_E_C_H_I_S_S_E_Z _D_'_A_B_O_R_D_, _N_E _C_R_O_Y_E_Z _P_A_S _A _P_R_I_O_R_I _C_E _Q_U_E _V_O_U_S _L_I_S_E_Z _I_C_I. Par ailleurs, j'ai fait en sorte de tout faire fonctionner avec mes onduleurs, sans beaucoup d'informations des constructeurs, et sans faire fumer quoi que ce soit, donc c'est possible. 11..33.. AAuuttrreess ddooccuummeennttss Ce document ne traite pas des fonctions et possibilites generales des onduleurs. Pour ce genre d'informations, voyez la Foire Aux Questions UPS.faq, disponible en FTP anonyme sur navigator.jpl.nasa.gov (128.149.23.82) dans pub/doc/faq/UPS.faq, et qui peut probablement atre trouvee quelque part sur rtfm.mit.edu. Elle est maintenue par Nick Christenson (npc@minotaur.jpl.nasa.gov). Par E-mail avec lui, il souhaiterait qu'apparaisse UPS ou UPS FAQ ou quelque chose de similaire dans la ligne Subject de votre message. 22.. QQuuee ddeevveezz--vvoouuss ffaaiirree ((ssoommmmaaiirreemmeenntt)) ?? +o Branchez le PC sur l'onduleur. +o Connectez le port serie du PC a l'onduleur avec un cable special. +o Lancez powerd sur le PC. +o Configurez votre initd pour faire quelque chose de raisonnable lors des evenements powerfail et powerok (comme demarrer un shutdown et tuer tous les shutdown en cours, respectivement, par exemple). 33.. CCoommmmeenntt eesstt--ccee ssuuppppoossee ffoonnccttiioonnnneerr ?? TTrraavvaaiill ddee ll''oonndduulleeuurr Lorsque le courant s'arrete, l'onduleur continue d'alimenter le PC et signale l'arret du courant par bascule d'un relais ou d'un optocoupleur sur son port de controle. TTrraavvaaiill dduu ccaabbllee Le cable est concu de telle maniere que lorsque l'onduleur bascule ledit relais, cela monte un signal de controle particulier de la ligne serie (typiquement, DCD, Detection de Porteuse) TTrraavvaaiill ddee ppoowweerrdd Powerd controle le port serie. Il maintient leves/baisses les signaux de controle du port serie dont l'onduleur a besoin (typiquement, DTR, Terminal de Donnees Pret, doit rester leve, et touts les signaux qui coupent l'onduleur doivent etre maintenues baisses). Lorsque powerd voit le signal de controle de l'onduleur monter, il ecrit FAIL dans /etc/powerfail et envoie un signal SIGPWR au process initd. Lorsque le signal de controle redescend, il ecrit OK dans /etc/powerfail et envoie un signal SIGPWR a initd. TTrraavvaaiill ddee iinniittdd ((eenn pplluuss ddee ttoouutt ccee qquu''iill ffaaiitt ppaarr aaiilllleeuurrss)) Lorsqu'il recoit un signal SIGPWR, il regarde dans /etc/powerfail. Si celui-ci contient FAIL, il execute l'entree powerfail du fichier /etc/inittab. S'il contient OK, il execute l'entree powerokwait de inittab. 44.. OOuu oobbtteenniirr llee llooggiicciieell aapppprroopprriiee ?? La derniere fois que j'ai regarde, le paquetage a prendre etait /pub/Linux/system/Daemons/SysVinit-2.50.tgz sur sunsite.unc.edu ou un miroir. Il inclut une copie de powerd.c, shutdown.c et initd qui comprend le signal SIGPWR et interprete correctement les entrees powerfail et powerokwait du fichier inittab. Evidemment, maintenant, je suis sur que de nouvelles versions sont disponibles. Quoi que vous ayez peut differer de la description presentee ici, mais adherera probablement a la philosophie generale du systeme. 55.. CCoommmmeenntt ccoonnffiigguurreerr ttoouutt ccaa ?? Ce qui suit presuppose que vous disposez d'un cable qui fonctionne correctement avec powerd.c. Si vous n'etes pas sur de cela, voyez la section : id="hacking" name="Analyse de cables et modification de powerd.c"> pour toute information sur les cables mal decrits et la reconfiguration de wtt/powerd/. Les sections ``Assignement des broches du port serie'' et ``Correspondance entre ioctl et RS232'' seront aussi utiles. Si vous devez fabriquer un cable, voyez la section : ``Comment realiser un cable~?'' pour les details generaux, et la sous-section de : ``Informations sur un certain nombre d'onduleurs'' qui se rapporte a votre onduleur. Cette derniere peut aussi contenir des informations sur les cables fournis par le constructeur. Vous voudrez probablement lire toute la section ``Informations sur un certain nombre d'onduleurs'' car chaque section contient quelques details supplementaires generalement utiles. +o Editez /etc/inittab. Placez-y quelque chose de ce genre : # Que faire si le courant s'arrete (arreter le systeme et vider la batterie) pf::powerfail:/etc/powerfailscript +5 # Si le courant revient avant la fin du shutdown, arreter celui-ci pg:0123456:powerokwait:/etc/powerokscript +o Ecrivez les scripts /etc/powerfailscript et /etc/powerokscript pour arreter le systeme apres cinq minutes, ou mener toute action appropriee, et tuer le shutdown en cours, respectivement. En fonction de votre version de shutdown, cela sera, soit si trivial que vous n'aurez meme pas a ecrire de script, soit un script d'une ligne bash, quelque chose du genre : kill `ps -aux | grep "shutdown" | grep -v grep | awk '{print $2}'` et vous conserverez les scripts (au cas ou cela ne vous arriverait pas dans un parfait etat, la premiere apostrophe sur la ligne ci-dessus est une quote inversee, la seconde et la troisieme sont des apostro- phes, et la derniere est aussi une quote inversee). +o Dites a initd de relire le fichier inittab avec : telinit q +o Editez rc.local pour lancer powerd lors du lancement. Syntaxe : powerd Remplacez par le port serie modem sur lequel sera connecte l'onduleur, comme : /dev/cua1. +o Connectez le port serie du PC a celui de l'onduleur. NE BRANCHEZ PAS ENCORE LE PC SUR L'ONDULEUR. +o Branchez une lampe sur l'onduleur. +o Allumez l'onduleur et la lampe. +o Lancez powerd. +o Testez la configuration : +o Debranchez l'onduleur. +o Controlez que la lampe reste allumee. +o Controlez que /etc/powerfailscript est lance. +o Controlez que le shutdown est lance. +o Rebranchez l'onduleur. +o Controlez que la lampe reste allumee. +o Controlez que /etc/powerokscript est lance. +o Controlez que /etc/powerfailscript n'est pas lance +o Controlez que le shutdown est bien arrete. +o Redebranchez l'onduleur. Laissez-le debranche et verifiez que le PC s'arrete proprement dans un delai correct. +o LLaa PPaarrttiiee DDeelliiccaattee.. Une fois que tout semble correct, arretez le PC et branchez-le sur l'onduleur. Lancez un script qui synchronise le disque dur toutes les secondes ou a peu pres (sync). Simultanement, lancez un second script qui execute un find sur votre disque entier. Le premier sert a rendre l'operation plus sure, et le second, a consommer le maximum de puissance. Maintenant, tirez sur la prise de l'onduleur, verifiez une fois de plus que le PC est lance, et attendez. Assurez-vous que le PC s'arrete correctement avant que la batterie soit vide. C'est dangereux, car si la batterie n'assure pas le delai d'arret du PC, vous pouvez vous retrouver avec un systeme de fichiers corrompu, et peut-etre meme la perte de tous vos fichiers. Vous voudrez probablement realiser une sauvegarde complete avant ce test, et positionner le delai de shutdown tres court pour commencer. Felicitations ! Vous avez maintenant un PC sous Linux protege par onduleur qui va s'arreter proprement lors d'une coupure de courant ! 66.. AAmmeelliioorraattiioonnss UUttiilliissaatteeuurr +o Trifouillez powerd.c pour suivre la ligne indiquant un faible niveau de batteries. Dans ce cas, executez un shutdown iimmmmeeddiiaatt. +o Modifiez la procedure de shutdown, afinq que, lorsqu'elle s'execute dans des conditions de coupure de courant, elle eteigne l'onduleur apres avoir effectue tout le necessaire. 77.. CCoommmmeenntt rreeaalliisseerr uunn ccaabbllee ?? Cette section est juste composee de messages que j'ai vus sur le Net. Je ne l'ai pas realise, donc je ne peux parler d'experience. Si quelqu'un le peut, qu'il ecrive cette section pour moi :). Voir aussi le message concernant le GPS1000 dans la section ``GPS1000 d'ACCODATA'' >From miquels@caution.cistron.nl.mugnet.org Wed Jul 21 14:26:33 1993 Newsgroups: comp.os.linux Subject: Re: Interface onduleur pour Linux~? From: miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg) Date: Sat, 17 Jul 93 18:03:37 Distribution: world Organization: Cistron Electronics. Dans l'article <1993Jul15.184450.5193@excaliber.uucp> joel@rac1.wam.umd.edu (Joel M. Hoffman) ecrit~: >Je ne vais pas tarder a acheter un onduleur, et ai remarque que certains >d'entre eux ont des interfaces reseau pour prevenir celui-ci lorsque le >courant est coupe. > >Y a-t-il une telle interface pour Linux~? > >Merci.. > >-Joel >(joel@wam.umd.edu) > Lorsque je travaillais sur la derniere version de SysVinit (2.4 actuellement), j'ai eu temporairement un onduleur sur mon ordinateur, donc j'ai ajoute le support de celui-ci. Vous l'avez peut-etre vu que dans le dernier fichier d'en-tete , il y a maintenant un #define SIGPWR 30 :-). Malgre tout, je n'avais pas une telle interface speciale, mais la sortie de nombreux onduleurs est juste un relais qui s'ouvre ou se ferme en cas de coupure de courant. J'ai reflechi a une methode simple pour connecter ca sur la ligne DCD du port serie. Dans le paquetage SysVinit, il y a un demon appele "powerd" qui garde un oeil sur cette ligne serie et envoie SIGPWR a init lorsque l'etat change, pour qu'init puisse faire quelque chose (comme arreter le systeme dans les 5 minutes). La methode de connexion de l'onduleur a la ligne serie est decrite dans le source "powerd.c", mais je vais le dessiner ici pour explications~: +------------------------o DTR | +---+ | | resistance | | 10 kilo-Ohm | | +---+ Vers le port serie | +-----o-------+------------------------o DCD | | o relais | \ de l' | \ onduleur | | | +-----o-------+------------------------o GND Joli dessin, hein~? J'espere que cela peut etre utile. SysVinit peut etre trouve sur sunsite (et tsx-11 probablement) dans SysVinit2.4.tar.z Mike. -- Miquel van Smoorenburg, Ibmio.com: cannot open CONFIG.SYS: file handle broke off. >From danny@caution.cistron.nl.mugnet.org Wed Jul 21 14:27:04 1993 Newsgroups: comp.os.linux Subject: Re: Interface onduleur pour Linux~? From: danny@caution.cistron.nl.mugnet.org (Danny ter Haar) Date: Mon, 19 Jul 93 11:02:14 Distribution: world Organization: Cistron Electronics. Dans l'article <9307174330@caution.cistron.nl.mugnet.org> miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg) ecrit : >La methode de connexion de l'onduleur a la ligne serie est decrite dans le >source "powerd.c", mais je vais le dessiner ici pour explications~: Le dessin n'etait pas vraiment claire, utilisez plutot celui-ci~! > > +------------------------o DTR > | > +---+ > | | resistance > | | 10 kilo-Ohm > | | > +---+ Vers le port serie > | > +-----o-------+------------------------o DCD > | > o relais > \ de l' > \ onduleur > | > +-----o--------------------------------o GND > Le DTR est maintenu haut. Lorsque le courant de l'onduleur s'arrete, le relais se ferme. L'ordinateur controle la descente de la ligne DCD. Lorsque cela arrive, il lance une sequence shutdown... _____ Danny -- <=====================================================================> Danny ter Haar or Robins law #103: 'a couple of lightyears can't part good friends' 88.. AAnnaallyyssee ddee ccaabblleess eett mmooddiiffiiccaattiioonn ddee ppoowweerrdd..cc Essayez d'obtenir la documentation des cables que votre revendeur d'onduleurs fournit. En particulier, recherchez : +o Quelles lignes doivent etre maintenues hautes. +o Quelle(s) ligne(s) eteint(gnent) l'onduleur. +o Quelles lignes l'onduleur modifie pour indiquer que : +o Le courant est coupe. +o La batterie est faible. Il vous faut ensuite modifier powerd.c en consequence. Si vous avez des problemes pour obtenir les informations precitees, ou si vous voulez juste les controler (une _b_o_n_n_e idee), le programme suivant peut vous y aider. C'est une version inversee de powerd.c. Il vous permet de positionner les signaux du port depuis la ligne de commande, puis il controle le port, en affichant l'etat des signaux chaque seconde. Je l'ai utilise en "upscheck /dev/cua1 2" (par exemple) pour monter le deuxieme bit (DTR) et descendre les autres. Le nombre en base 2 indique les bits a monter, ainsi par exemple pour monter les bits 1, 2 et 3 (et descendre les autres), utilisez 7. Voir le code pour les details. Voici le programme (non teste) upscheck.c. Il n'est pas teste car j'ai modifie la version que j'avais utilisee au depart pour le rendre plus clair, et que je ne peux tester la nouvelle version pour le moment. ______________________________________________________________________ /* * upscheck Controle comment l'ordinateur et l'onduleur communiquent * * Usage: upscheck * Par exemple, upscheck /dev/cua4 4 pour monter le bit 3 et * controler /dev/cua4. * * Author: Harvey J. Stein * (mais en realite juste une modification mineure de Miquel van * Smoorenburg's powerd.c * * Version: 1.0 19940802 * */ #include #include #include #include #include #include #include #include /* Programme principal. */ int main(int argc, char **argv) { int fd; /* Ces parametres TIOCM_* sont definis dans , qui */ /* est inclus indirectement ici. */ int dtr_bit = TIOCM_DTR; int rts_bit = TIOCM_RTS; int set_bits; int flags; int status, oldstat = -1; int count = 0; int pc; if (argc < 2) { fprintf(stderr, "Usage: upscheck \n"); exit(1); } /* Ouvre le device a controler. */ if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) { fprintf(stderr, "upscheck: %s: %s\n", argv[1], sys_errlist[errno]); exit(1);} /* Recupere les bits a positionner sur la ligne de commande */ sscanf(argv[2], "%d", &set_bits); while (1) { /* Positionne les bits specifies sur la ligne de commande (et */ /* seulement eux). */ ioctl(fd, TIOCMSET, &set_bits); fprintf(stderr, "Positionnement de %o.\n", set_bits); sleep(1); /* Recupere les bits actuellement positionnes */ ioctl(fd, TIOCMGET, &flags); fprintf(stderr, "Les signaux sont %o.\n", flags); /* Piochez ici en changeant TIOM_CTS par un autre TIOCM jusqu'a */ /* ce que le programme detecte que le courant est coupe lorsque */ /* vous debranchez l'onduleur. Ensuite, vous saurez comment */ /* modifier powerd.c */ if (flags & TIOCM_CTS) { pc = 0 ; fprintf(stderr, "Le courant est la.\n"); } else { pc = pc + 1 ; fprintf(stderr, "Le courant est coupe.\n"); } } close(fd); } ______________________________________________________________________ 99.. AAssssiiggnneemmeenntt ddeess bbrroocchheess dduu ppoorrtt sseerriiee La section qui precede presuppose la connaissance de la correspondance entre les signaux de terminal et les broches du port serie. Voici une reference de cette correspondance, reprise du document de David Tal : ``Cables et connecteurs frequemment utilises''. J'inclus un diagramme illustrant les connecteurs, et une table donnant la corresopondance entre les numeros de broches et les signaux de ligne de terminal. | | | | | | | | |DB-25 | DB-9 | Nom | EIA | CCITT | DTE-DCE | Description | |Broche | Broche | | | | | | +-------+---------+--------+-------+---------+----------+-------------------------------------------+ |1 | | FG | AA | 101 | --- | Masse de chassis GND | |2 | 3 | TD | BA | 103 | ---> | Donnees transmises, TxD | |3 | 2 | RD | BB | 104 | <--- | Donnees recues, RxD | |4 | 7 | RTS | CA | 105 | ---> | Requete pour envoyer | |5 | 8 | CTS | CB | 106 | <--- | Pret a envoyer | |6 | 6 | DSR | CC | 107 | <--- | Jeu de donnees pret | |7 | 5 | SG | AB | 102 | ---- | Masse de signal, GND | |8 | 1 | DCD | CF | 109 | <--- | Detection de porteuse | |9 | | -- | -- | - | - | Tension positive continue de test | |10 | | -- | -- | - | - | Tension negative continue de test | |11 | | QM | -- | - | <--- | Mode d'egalisation | |12 | | SDCD | SCF | 122 | <--- | Detection de porteuse secondaire | |13 | | SCTS | SCB | 121 | <--- | Pret a envoyer secondaire | |14 | | STD | SBA | 118 | ---> | Donnees transmise secondaires | |15 | | TC | DB | 114 | <--- | Signal d'horloge de l'emetteur | |16 | | SRD | SBB | 119 | <--- | Signal d'horloge secondaire du recepteur | |17 | | RC | DD | 115 | ---> | Signal d'horloge du recepteur | |18 | | DCR | -- | - | <--- | Horloge divisee du recepteur | |19 | | SRTS | SCA | 120 | ---> | Requete pour emettre secondaire | |20 | 4 | DTR | CD | 108.2 | ---> | Terminal de donnees pret | |21 | | SQ | CG | 110 | <--- | Detection de qualite de signal | |22 | 9 | RI | CE | 125 | <--- | Indicateur de sonnerie | |23 | | -- | CH | 111 | ---> | Selecteur de vitesse de donnees | |24 | | -- | CI | 112 | <--- | Selecteur de vitesse de donnees | |25 | | TC | DA | 113 | <--- | Horloge transmise | Assignement des broches de port serie (RS-232C), DB-25 et DB-9 ______________________________________________________________________ 1 13 1 5 _______________________________ _______________ \ . . . . . . . . . . . . . / \ . . . . . / Connecteurs \ . . . . . . . . . . . . / \ . . . . / RS-232 vus de --------------------------- ----------- l'arriere de 14 25 6 9 l'ordinateur DTE : Equipement terminal de donnees (i.e. ordinateur) DCE : Equipement de communication de donnees (i.e. modem) RxD : Donnees recues; 1 est transmis "bas", 0 "haut" TxD : Donnees envoyees; 1 est transmis "bas", 0 "haut" DTR : DTE annonce qu'il est alimente et pret a communiquer DSR : DCE annonce qu'il est pret a communiquer; "bas" raccroche le modem RTS : DTE demande a DCE la permission d'envoyer des donnees CTS : DCE agree la RTS RI : DCE indique au DTE qu'il tente d'etablir une connexion DCD : DCE annonce qu'une connexion est etablie ______________________________________________________________________ 1100.. CCoorrrreessppoonnddaannccee eennttrree iiooccttll eett RRSS223322 Puisque vous pouvez aussi devoir modifier powerd.c pour monter et descendre les signaux corrects, vous pouvez aussi avoir besoin des valeurs numeriques des differents signaux de terminal. Ils peuvent etre trouves dans /usr/include/linux/termios.h, mais sont reproduits ici comme reference. Puisqu'ils peuvent etre sujets a changements, vous auriez avantage a les verifier avec ledit fichier. ______________________________________________________________________ /* lignes modem */ #define TIOCM_LE 0x001 #define TIOCM_DTR 0x002 #define TIOCM_RTS 0x004 #define TIOCM_ST 0x008 #define TIOCM_SR 0x010 #define TIOCM_CTS 0x020 #define TIOCM_CAR 0x040 #define TIOCM_RNG 0x080 #define TIOCM_DSR 0x100 #define TIOCM_CD TIOCM_CAR #define TIOCM_RI TIOCM_RNG ______________________________________________________________________ Notez que la troisieme colonne est en hexadecimal. 1111.. IInnffoorrmmaattiioonnss ssuurr uunn cceerrttaaiinn nnoommbbrree dd''oonndduulleeuurrss Cette section contient des informations specifiques de certains onduleurs. Ce que je souhaiterais serait de disposer des informations sur le port de controle de l'onduleur (ce que fait chaque broche et ce qu'elle attend qui soit fait), sur le cable fourni par le constructeur (ce qu'il connecte et ou), ainsi qu'une version modifiee de powerd.c qui fonctionne avec l'onduleur. Ce que j'ai actuellement est une description a peu pres complete de chaque onduleur. Je voudrais essayer d'affiner chaque information, mais comme je ne peux tester chaque onduleur, il est difficile de decider exactement de ce qui est necessaire. De plus, chaque onduleur semble avoir quelques trucs supplementaires qui sont bien decrits par les auteurs de chaque section. Ainsi, pour l'heure, je laisse tout en place. Tout pour un HOWTO epais. VVeeuuiilllleezz mm''eennvvooyyeerr vvooss eexxppeerriieenncceess ppoouurr lleess iinncclluurree iiccii.. 1111..11.. EExxppeerriieenncceess ggeenneerraalleess.. J'ai conserve les commentaires des gens, mais n'ai pas encore obtenu la permission de les inclure ici. Voici un sommaire general 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 forces d'utiliser leurs onduleurs "intelligents" en mode "idiot", comme souligne 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 discute de details techniques au telephone, repondu aux questions par fax et est serviable en general. 1111..22.. AAddvviiccee 11220000 AA Onduleurs d'Advice Electronics, Tel Aviv, Israel (Tout leur materiel porte une etiquette a leur nom). Specification des broches du port de controle. +o 2 - Coupure de courant. +o 5 - Batterie faible. +o 6 - Extinction de l'onduleur. +o 4 - Masse commune des broches 2, 5 et 6. Ils m'ont aussi donne le dessin suivant qui ne m'a servi a rien, mais peut vous etre utile si vous souhaitez fabriquer vous-meme un cable : ______________________________________________________________________ 2 ----------+ | \ \| |-------------- /| \/ <--- Le "\/" indique le type de ce | transistor. J'ai oublie ce que | cela veut dire, mais ce n'est +-----+ pas fondamental. / / / 5 ----------+ | \ \| |-------------- /| \/ | | +-----+ / / / +------------- | / 10K |/ 6 --\/\/\/--| |\ \/ | | +-----+ / / / 4 ----------+ | | +-----+ / / / ______________________________________________________________________ Cable fourni Ils m'ont d'abord donne un cable qui appartenait a un paquetage DOS de controle de l'onduleur appele RUPS. Je l'ai utilise pour les tests. Une fois ceux-ci satisfaisants, ils m'ont donne un cable qu'ils utilisent pour les serveurs Netware connectes a des onduleurs. Il fonctionnait a l'identique. Voici les details : +o DTR - Alimentation du cable (powerd.c doit le monter). +o CTS - Courant present (descend quand le courant est coupe). +o DSR - Batterie faible (descend lorsque la batterie faiblit). +o RTS - Extinction de l'onduleur (a monter pour eteindre). (Le powerd.c inclus dans SysVinit place ou laisse RTS haut, causant l'arret de l'onduleur immediatement lors du lancement de powerd !) 1111..33.. GGPPSS11000000 dd''AACCCCOODDAATTAA >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 , Colin Owen Rafferty 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 Hennus Bergman 1111..44.. TTrriippppLLiittee BBCC775500LLAANN ((SSttaannddbbyy UUPPSS)) From: Tom Webster 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 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, # Fred N. van Kempen, # # Modifie : 01/15/94 - Ajout du support de shutdown d'inverseur # Tom Webster 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 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 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 1111..55.. AAPPCC BBaacckkuupp--UUPPSS 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. 1111..55..11.. UUnn mmeessssaaggee dd''aavveerrttiisssseemmeenntt 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 1111..55..22.. BBUUPPSS--HHOOWWTTOO 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 Information de cablage et aide : Ben Galliart Traduction : Bernard Choppy 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 cote ARRIERE (celui ou vous soudez les cables sur les broches). Les lettres V, R et B representent les couleurs des cables que j'ai utilises, 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 numerotation differente. Ignorez-la ! Utilisez la notre... Je l'ai deja changee pour vous !). --------------------- Cote Male (vers l'onduleur) ! \ B R * * * / \ * * * V / ------------ --------------------- Cote femelle (vers le port COM) ! \ R * * * V / \ * B * * / ------------ Pour ceux qui preferent les chiffres : Male Femelle --------------------------------------- 1 7 Bleu 2 1 Rouge 9 5 Vert --------- Complement : Utilisation des broches RS-232 ! ----------- Puisque nous avons eu a trouver cette information : >Depuis l'ARRIERE (cote soudure), les broches sont numerotees 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 etait la connexion de la ligne RS-232 de l'onduleur "Fail Output" sur CD, le chassis de l'onduleur sur Gnd, et l'entree "Shut Down" sur RTS. Facile, maintenant qu'on vous le dit, non ? Je n'ai aucune idee du bon fonctionnement du logiciel ci-dessous, si vous achetez le cable d'APC. Il peut fonctionner, ou non. *** Le Logiciel *** Ok, j'utilise le paquetage SysVInit de Miquel van Smoorenburg pour Linux (voir a la fin pour emplacements, remerciements, adresses E- mail, etc.). Je ne sais ce qui doit etre 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 regarde dans le code de Miquel pour comprendre comment ioctl() fonctionnait. Si je n'avais pas eu cet exemple, j'aurais eu des problemes. J'ai aussi utilise la routine powerfail() (a l'identique, je crois), puisqu'elle doit interagir avec init, j'ai pense qu'il devait savoir ca mieux que moi. Le fichier .c est a la fin de ce document, et necessite seulement d'etre copie/colle. 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 etre lance comme demon pour controler l'etat de l'onduleur et l'indiquer a init, soit etre lance pour envoyer la commande "kill-power" (coupure d'alimentation) a l'onduleur. L'alimentation ne sera coupee que s'il y a un probleme secteur et que l'onduleur est sur batteries. Une fois le courant revenu, il se rallume. Pour le lancer comme demon, entrez simplement : backupsd /dev/backups /dev/backups est un lien vers /dev/cua0 (COM 1, pour les DOSseurs) actuellement. La beaute du lien est que je n'ai qu'a le refaire si je passe sur COM 2 ou COM 3. Ensuite, si le secteur s'arrete, 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 lance si le courant baisse, et powerokwait s'il revient. Voici mon rc.power complet : ______________________________________________________________________ #! /bin/sh # # rc.power Ce fichier est execute par init en cas de coupure de courant # # Version : @(#)/etc/rc.d/rc.power 1.50 1994-08-10 # # Auteur : Christian Holtje, # # 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 probleme, la... Je n'ai pas eu le temps de le trouver... S'il y a un gourou "sh" par ici... J'ai laisse un petit detail de cote, c'est de faire couper l'alimentation par l'onduleur si le PC est arrete courant coupe. Cela est realise en ajoutant la ligne suivante a la fin de votre script halt : /sbin/backupsd /dev/backups killpower Cela va simplement couper l'alimentation si le secteur est coupe. *** 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'etre prudent en general. Evidemment, je ne fais que vous le recommander. Je n'ai pas ete prudent du tout, et j'ai eu a nettoyer ma partition plusieurs fois pendant les tests de ma configuration. Mais elle fonctionne. :-) *** Ou 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 a cote : 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 dus *** Merci a Miquel van Smoorenburg pour son superbe paquetage SysVInit et son powerd.c qui m'ont beaucoup aides. Christian Holtje Documentation backupsd.c (Ce qui n'est pas de Miquel) rc.power Ben Galliart Le cable Informations sur le standard RS-232 Astuces bruyantes (non rapportees 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 * 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 responsabilite concernant son * utilisation, bonne ou mauvaise. */ #include #include #include #include #include #include #include #include /* 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 [killpower]\n", argv[0]); exit(1); } /* Ouverture du port */ if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) { fprintf(stderr, "%s : %s : %s\n", argv[0], argv[1], sys_errlist[errno]); exit(1); } if ( argc >= 3 && (strcmp(argv[2], "killpower")==0) ) { /* Coupons l'alimentation */ fprintf(stderr, "%s : Tentative de coupure d'alimentation !\n", argv[0] ); ioctl(fd, TIOCMBIS, &killpwr_bit); /* Hmmm... Si vous avez une coupure d'alimentation, */ /* ce code ne sera jamais execute */ exit(0); } else /* Puisqu'il ne faut pas couper l'alimentation, il faut restaurer */ /* RTS (killpwr_bit) */ ioctl(fd, TIOCMBIC, &killpwr_bit); /* Passe en demon. */ switch(fork()) { case 0: /* Je suis le fils */ setsid(); break; case -1: /* Passage demon manque */ fprintf(stderr, "%s : fork impossible.\n", argv[0]); exit(1); default: /* Je suis le pere */ exit(0); } /* Maintenant, on scrute la ligne DCD */ while(1) { ioctl(fd, TIOCMGET, &flags); status = (flags & TIOCM_CD); /* Si DCD est monte, le secteur est coupe */ if (oldstat == 0 && status != 0) { count++; if (count > 3) powerfail(0); else { sleep(1); continue; } } /* Si DCD est redescendu, le secteur est revenu */ if (oldstat > 0 && status == 0) { count++; if (count > 3) powerfail(1); else { sleep(1); continue; } } /* Reinit du compteur, sauvegarde de l'etat et sleep 2 secondes */ count = 0; oldstat = status; sleep(2); } /* Erreur ! (ne doit pas arriver) */ return(1); } /* Signale a init que le courant est coupe ou revenu */ void powerfail(ok) int ok; { int fd; /* Cree le fichier necessaire a init pour shutdown/abandon */ unlink(PWRSTAT); if ((fd = open(PWRSTAT, O_CREAT|O_WRONLY, 0644)) >= 0) { if (ok) write(fd, "OK\n", 3); else write(fd, "FAIL\n", 5); close(fd); } kill(1, SIGPWR); } /* Fin de Fichier */ ______________________________________________________________________ 1111..66.. AAPPCC SSmmaarrtt--UUPPSS,, MMooddeellee 660000 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 tres intelligent de leur part, j'ai dit :). La methode generale est d'acheter a 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 indique plus haut. Voici quelques informations sur la fabrication d'un cable pour cela. Vous aurez probablement a modifier powerd.c comme indique en section ``Analyse de cables 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 1122.. CCoommmmeenntt eetteeiinnddrree dd''aauuttrreess mmaacchhiinneess ssuurr llee mmeemmee oonndduulleeuurr ?? Certaines personnes (y compris moi-meme), ont plusieurs PC Linux connectes sur un onduleur. Un PC controle l'onduleur et doit eteindre les autres PC lorsque le secteur est coupe. Il y a de nombreuses manieres de realiser cela, toutes sont en "faites-le vous-meme" actuellement, et de nombreuses sont simplement hypothetiques. Nous supposons que les PC peuvent communiquer sur un reseau. Appelons le PC qui surveille l'onduleur le maitre, et les autres PC, les esclaves. 1122..11.. MMeetthhooddee ddee ll''eettaatt dduu ppoorrtt Configurez un port sur le maitre qui, lorsqu'on y est connecte, envoie soit "OK", soit "FAIL", soit "BATLOW" lorsque le courant est la, qu'il est coupe, ou que la batterie est faible, respectivement. Montez cela sur le port 13 (le port time) sur lequel vous pouvez faire un telnet et recevoir l'heure locale. Montez sur les esclaves une version de powerd qui lit ce port plutot que de controler une ligne serie. Je pense que c'est probablement la meilleure methode, et j'ai l'intention d'upgrader mes systemes pour l'utiliser. 1122..22.. MMeetthhooddee dd''eemmiissssiioonn eenn ll''aaiirr Identique a la section ``Methode de l'etat du port'', mais par emission d'un message broadcast Ethernet signifiant l'evenement. Cela peut avoir des implications de securite, puisqu'il peut etre {{spoofed}} 1122..33.. MMeetthhooddee dduu ppsseeuuddoo--llooggiinn Configurez les pseudo-login sur les esclaves avec les noms powerok et powerfail, tous les deux avec le meme UID. Faites de /etc/powerokscript le shell du user powerok, et de /etc/powerfailscript celui du user powerfail. Sur le maitre, faites en sorte que le script /etc/powerokscript fasse un rlogin sur chaque esclave en tant que user powerok et que le script /etc/powerfailscript fasse un rlogin en tant que powerfail sur chaque esclave. Placez un fichier powerfail pour autoriser le root du master a entrer comme users powerok et powerfail sur chaque esclave. C'est le systeme que j'utilise actuellement. Malheureusement, j'ai quelques difficultes a faire que les login distants s'executent et rendent la main sans se bloquer. Il faudrait probablement que le script /etc/powerfailscript fasse les rsh sur les esclaves en tache de fond pour lui eviter de bloquer. Neammoins, je n'ai jamais obtenu de login correct en tache de fond. J'ai meme essayes des combinaisons complexes comme faire se loger toto sur l'esclave. Tout ce que j'ai utilise avait des problemes et se trouvait bloque par un entree tty (ou sortie, je ne m'en rappelle plus). En plus, cela peut creer des trous de securite.