Le HOWTO des onduleurs (UPS) Harvey J. Stein, hjstein@math.huji.ac.il, Berger Financial Research, Ltd. adaptation francaise B.Choppy, 10 mai 1998 v2.42, 18 novembre 1997 Ce document vous aidera a connecter un onduleur sur une machine Linux... si vous avez de la chance ... Copyright (c) 1994, 1995, 1996, 1997 Harvey J. Stein. Vous pouvez utiliser ce document comme vous l'entendez, tant qu'il reste intact. En particulier, cette note (ainsi que les contributions 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 le sens general de ces messages, sans toutefois les reproduire systematiquement en entier, leur lecture en devenant vite fastidieuse. Dans certains cas, une partie en anglais est conservee, en particulier dans les en-tetes de messages. Les noms de signaux et broches de connexion ont ete traduits, mais leur abreviation originelle conserve (par exemple, DCD : Detection de porteuse). Une copie de la notice originale de copyright est conservee, y compris dans les sources des programmes. Le traducteur attire l'attention de ses lecteurs sur le risque d'erreur introduite lors de la traduction des commentaires et messages dans les programmes source, pouvant rendre ceux-ci impossibles a com- piler ou inutilisables. La reference en ce cas est, comme toujours, la version originelle du document (en anglais). Version originale de la notice de copyright : 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. Cela inclut la reference a des paquetages logiciels existants facilitant l'etablissement de ce genre de communications, et la maniere dont celles-ci sont realisees. Ce dernier point est souvent superfetatoire si vous pouvez trouver un paquetage tout configure pour votre onduleur. Sinon, il vous faudra lire ce qui suit. Dans une large mesure, le present document est encore plus redondant que lorsque j'en ai ecrit la premiere version en 1994. Toutes les informations de base ont toujours ete presentes dans les pages de man de _p_o_w_e_r_d fournies avec le paquetage _S_y_s_V_i_n_i_t. Alors qu'en 1994 il arrivait souvent que les distributions ne comportent meme pas lesdites pages de man, je ne crois pas que ce soit encore le cas. De plus, lorsque j'ai ecrit la premiere version de ce Howto, il n'existait aucun autre logiciel que _p_o_w_e_r_d pour la communication et le controle entre Linux et les onduleurs. Maintenant, il existe un certain nombre de paquetages de controle d'onduleurs dans le repertoire UPS de Sunsite. Malgre tout, je continue a maintenir le Howto des onduleurs. Pourquoi donc ? Eh bien : +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 - de nombreux onduleurs ne sont pas encore geres par les paquetages generaux ; +o le HOWTO contient des details supplementaires qui ne se trouvent pas dans d'autres documents ; +o ce document semble avoir maintenant sa vie propre. La necessite de creation d'un Howto se fait sentir clairement. Il est moins evident de definir l'instant ou il doive etre mis en sommeil. 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 : +o Hennus Bergman (hennus@sky.nl.mugnet.org) ; +o Charli (mephistos@impsat1.com.ar) ; +o Ciro Cattuto (Ciro Cattuto) ; +o Nick Christenson (npc@minotaur.jpl.nasa.gov) ; +o Lam Dang (angit@netcom.com) ; +o Markus Eiden (Markus@eiden.de) ; +o Dan Fandrich (dan@fch.wimsey.bc.ca) ; +o Ben Galliart (bgallia@orion.it.luc.edu) ; +o Danny ter Haar (dth@cistron.nl) ; +o Christian G. Holtje (docwhat@uiuc.edu) ; +o Raymond A. Ingles (inglesra@frc.com) ; +o Peter Kammer (pkammer@ics.uci.edu) ; +o Marek Michalkiewicz (ind43@sun1000.ci.pwr.wroc.pl) ; +o Jim Ockers (ockers@umr.edu) ; +o Evgeny Stambulchik (fnevgenv@plasma-gate.weizmann.ac.il) ; +o Clive A. Stubbings (cas@vjet.demon.co.uk) ; +o Miquel van Smoorenburg (miquels@cistron.nl) ; +o Slavik Terletsky (ts@polynet.lviv.ua) ; +o Tom Webster (webster@kaiwan.com). Notez que les adresses e-mail apparaissant dans les extraits de courriers ci-apres peuvent etre obsoletes. Ce qui precede l'est propablement aussi, mais quelques-unes sont plus recentes que ce qui se trouve plus bas. Mes excuses aussi a quiconque j'aie oublie de citer dans cette liste. Envoyez-moi un e-mail et je vous ajouterai. 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, je n'ai une experience directe que 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 _N_I _A_I_L_L_E_U_R_S. D'un autre cote, j'ai reussi a 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 La FAQ UPS. Elle peut aussi etre trouvee sur ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/comp/answers/UPS-faq. Elle est maintenue par Nick Christenson, mais semble n'avoir pas ete mise a jour depuis 1995. Si vous lui envoyez un e-mail, il souhaiterait qu'apparaisse _U_P_S ou _U_P_S _F_A_Q ou quelque chose de similaire dans la ligne Subject de votre message. Il y a aussi de plus en plus de constructeurs d'onduleurs present sur le Net. Certains d'entre aux fournissent reellement des informations utiles sur leur site Web. Une liste pratique des sites web des constructeurs est disponible sur Repertoire des onduleurs. Le meme site propose aussi une FAQ des onduleurs. 22.. NNoottee iimmppoorrttaannttee ccoonncceerrnnaanntt ll''oobbssoolleesscceennccee ddeess iinnffoorrmmaattiioonnss Je viens de decouvrir qu'une partie de la documentation ci-dessous est obsolete. En particulier, le daemon _i_n_i_t fourni avec le dernier paquetage sysinit est plus sophistique que ce que j'ai decrit. Bien qu'il semble que la compatibilite ascendante soit assuree pour ce qui est ecrit ici, il apparait que certaines fonctions non documentees sont ttrreess iimmppoorrttaanntteess pour la gestion des onduleurs. Le mecanisme de controle indique ci-apres permet seulement a _p_o_w_e_r_d d'envoyer a _i_n_i_t un des messages _p_o_w_e_r_f_a_i_l ou _p_o_w_e_r_o_k. _i_n_i_t execute une commande lorsqu'il recoit _p_o_w_e_r_f_a_i_l et une autre lorsqu'il recoit _p_o_w_e_r_o_k. Cela complexifie la logique de _p_o_w_e_r_d pour la gestion des signaux de batterie faible et autres sortes de situations speciales. Les nouvelles versions d'_i_n_i_t (depuis la version 2.58, apparemment) sont plus sophistiquees. Il est possible de leur demander d'executer un script parmi _t_r_o_i_s. Ainsi, _i_n_i_t peut avoir un script _p_o_w_e_r_f_a_i_l pour traiter une coupure de courant, un script _p_o_w_e_r_f_a_i_l_n_o_w pour realiser un arret immediat et un script _p_o_w_e_r_o_k pour bloquer tout arret en cours. C'est nettement plus propre que les circonvolutions necessaires avec le mecanisme detaille plus bas. Bien qu'une grande partie du document soit fondee sur l'ancienne methode de communication avec _i_n_i_t, je viens d'ajouter deux nouvelles sections dans lesquelles les auteurs utilisent la nouvelle methode. Il s'agit de ``Trust Energy Protector 400/600'' et APC Smart-UPS 700. La premiere est particulierement detaillee. Les deux comportent un _p_o_w_e_r_d_._c qui demande a _i_n_i_t un shutdown immediat lorsqu'un signal de batterie faible est recu, ainsi que les lignes correspondantes de _/_e_t_c_/_i_n_i_t_t_a_b. Pour tout le reste, je peux juste vous dire de regarder dans le code source de _i_n_i_t. Aussi, pour autant que je sache, de nombreux paquetages cites ci- dessous utilisent aussi la nouvelle methode de communication. (-- NdT : Il semble que la plupart des contributeurs a ce Howto s'appuient sur le redemarrage de l'ordinateur (/sbin/reboot), couple a une temporisation, pour realiser l'extinction de l'onduleur. Cette methode semble hasardeuse. Le traducteur propose humblement au lecteur d'etudier la possibilite de remplacer la relance complete (reboot) par un arret systeme propre (shutdown -h) ou moins propre (halt). Cette methode permet d'eviter totalement le risque que l'onduleur s'arrete "trop tard" dans le processus de demarrage de l'ordinateur (i.e. lorsque les systemes de fichiers sont deja montes).--) 33.. OOnndduulleeuurr bbeettee,, oonndduulleeuurr iinntteelllliiggeenntt Les onduleurs peuvent se classer dans deux categories : "intelligents" ou "betes". La difference entre les deux reside dans la quantite d'informations que l'on peut obtenir de et le niveau de controle que l'on peut exercer sur l'onduleur. OOnndduulleeuurr ""bbeettee"" +o se connecte a l'ordinateur par le port serie ; +o utilise les lignes de controle modem pour communiquer avec celui-ci ; +o peut indiquer si le courant est present ou non ; +o peut typiquement indiquer si la batterie est faible ; +o accepte habituellement un ordre d'arret de la part de l'ordinateur. OOnndduulleeuurr ""iinntteelllliiggeenntt"" +o se connecte a l'ordinateur par le port serie ; +o communique avec celui-ci par transfert de donnees normal sur le port serie ; +o dispose typiquement d'une sorte de langage de commandes que l'ordinateur peut utiliser pour obtenir diverses informations, positionner certains parametres de fonctionnement et controler l'onduleur (pour arreter celui-ci, par exemple). Habituellement, les onduleurs intelligents peuvent fonctionner en mode bete. C'est utile, car pour autant que je sache, les entreprises qui construisent les onduleurs les plus populaires (notamment APC) ne diffusent leur protocole de communication qu'aux entreprises qui signent un accord de confidentialite. Autant que je sache, les seuls onduleurs intelligents avec lesquels il soit simple de communiquer sont ceux faits par Best. De plus, Best documente completement le mode intelligent (ainsi que le mode bete) et fournit le source de programmes qui communiquent avec leurs onduleurs. Tous les paquetages indiques dans la section ``Logiciels'' communiqueront avec les onduleurs en mode bete. C'est tout ce dont on a reellement besoin. Ceux specifiques des onduleurs APC annoncent diverses possibilites d'utilisation en mode intelligent, mais je ne sais pas exactement ce qu'ils permettent. Une implementation complete vous affichera une fenetre avec toutes sortes de jauges affichant diverses statistiques de l'onduleur, telles que charge, temperature interieure, historique des coupures, voltages d'entree et de sortie, etc. Il semble que le paquetage _s_m_u_p_s_d_-_0_._9_-_1_._i_3_8_6_._r_p_m (section ``Logiciels'' se rapproche de cela. Je ne suis pas sur pour les autres. Le reste de ce document est essentiellement limite a la configuration de votre systeme avec un onduleur bete. L'idee generale est a peu pres la meme avec un onduleur intelligent, mais les details de fonctionnement de _p_o_w_e_r_d et le type de cable sont differents pour un onduleur intelligent. 44.. LLooggiicciieellss Fondamentalement, tout ce qu'il vous faut est un executable _p_o_w_e_r_d, habituellement place dans _/_s_b_i_n_/_p_o_w_e_r_d. Il fait habituellement partie du paquetage _S_y_s_V_i_n_i_t. Pour autant que je sache, toutes les distributions actuelles de Linux contiennent une version recente de _S_y_s_V_i_n_i_t. Les versions tres anciennes ne comportaient pas _p_o_w_e_r_d. Le seul probleme que vous puissiez rencontrer est que votre cable ne corresponde pas a la configuration de _p_o_w_e_r_d, auquel cas vous devrez, soit rebrocher votre cable, soit trouver une copie de _p_o_w_e_r_d_._c et le modifier pour le faire fonctionner avec votre cable. Ou, pour cela, vous pouvez toujours utiliser l'un des paquetages suivants, dont de nombreux permettent la configuration du cable. Comme indique, une alternative au _p_o_w_e_r_d du paquetage _S_y_s_V_i_n_i_t est l'utilisation de l'un des paquetages disponibles maintenant. il existe de nombreux paquetages qui aident a configurer la communication entre l'ordinateur et un onduleur. Aucun d'entre eux n'etait disponible lorsque j'ai ecrit ce Howto pour la premiere fois, c'est pourquoi j'ai eu a l'ecrire. En fait, il y a de bonnes chances que vous puissiez utiliser l'un de ces paquetages logiciels et eviter totalement le present Howto ! Au 15 mars 1997 a peu pres, le repertoire UPS de Sunsite disposait d'un certain nombre de paquetages. D'autres sites semblent avoir aussi des paquetages de controle d'onduleurs. Voici ce que j'ai trouve (tous sur Sunsite sauf deux) : EEnnhhaanncceedd AAPPCC BBaacckkUUPPSS..ttaarr..ggzz Un paquetage de controle des onduleurs intelligents APC Smart- UPS. Il semble suivre basiquement le BUPS-Howto (Back-UPS- Howto, inclus ci-apres), mais semble aussi disposer d'une sorte de signal de batterie faible. EEnnhhaanncceedd AAPPCC UUPPSSDD--vv11..44..ttaarr..ggzz Le fichier _._l_s_m dit qu'il s'agit du meme paquetage que le precedent, sous forme de _._t_a_r_._g_z dans un _._t_a_r_._g_z ! La documentation est legere. Il semble gerer les onduleurs APC dans les deux modes bete et intelligent, mais je ne peux m'en assurer. EEnnhhaanncceedd AAPPCC UUPPSSDD--vv11..44..ttaarr..ggzz Un autre paquetage de controle des onduleurs APC Smart-UPS. Semble inclure une sorte de support maitre/esclave (i.e. une machine en previent une autre de s'arreter lorsque le courant est coupe). Semble utiliser les onduleurs en mode intelligent, par opposition a la bascule des lignes modem. ssmmuuppssdd--00..99--11..ii338866..rrppmm ssmmuuppssdd--00..99--11..ssrrcc..rrppmm L'auteur ( David E. Myers) ecrit : smupsd surveille un APC Smart-UPS[TM] sous Red Hat[TM] Linux. Si le courant est coupe, smupsd arretera le systeme et l'onduleur de maniere correcte. smupsd a les fonctionnalites suivantes : +o arret du systeme et de l'onduleur en fonction de la charge residuelle de ce dernier ou du temps ecoule depuis la coupure de courant ; +o surveillance des parametres de l'onduleur en temps reel depuis toute machine a l'aide du programme graphique upsmon, ecrit en JavaTM ; +o trace des parametres de l'onduleur dans un fichier pour analyse et edition ; +o mode maitre/esclave permettant a des systemes additionnels partageant le meme onduleur de lire les parametres de celui-ci sur la machine qui lui est connectee par port serie ; +o controle des acces reseau a l'aide du fichier _/_e_t_c_/_h_o_s_t_s_._a_l_l_o_w. ggeennppoowweerr--11..00..11..ttggzz Un paquetage general de gestion d'onduleurs. Inclut des configurations pour beaucoup d'onduleurs - deux pour TrippLite et trois pour APC. Contient une bonne documentation. Un bon achat. ppoowweerrdd--22..00..ttaarr..ggzz Un _p_o_w_e_r_d de remplacement de celui du paquetage _S_y_s_V_i_n_i_t. A l'oppose des commentaires de la documentation, il ne semble pas avoir ete fusionne avec ce dernier (du moins jusqu'a la version 2.62). Ses avantages resident dans le fait qu'il puisse agir comme serveur pour d'autres _p_o_w_e_r_d tournant sur d'autres machines (lorsque plusieurs machines d'un reseau partagent le meme onduleur) et etre configure par le biais d'un fichier - le source ne necessite donc ni edition ni recompilation. uuppssdd--11..00..ttggzz Un autre _p_o_w_e_r_d de remplacement. Semble etre assez comparable en fonctionnalites avec powerd-2.0.tar.gz. cchheecckkuuppss..ttaarr Ce paquetage est destine a controler les onduleurs Best. Il provient directement du site Web de Best. Comporte des binaires pour de nombreux _u_n_i_x mais, plus important, inclut le code source, il est donc possible de l'essayer sous Linux, et s'il ne fonctionne pas, de tenter de le corriger. Le source inclut aussi bien les "controles de base (basic checkups)" que les "controles avances (advanced checkups)" qui sont un peu plus sophistiques - ils declenchent un shutdown lorsque l'onduleur indique une duree d'alimentation restante de X minutes, plutot qu'au bout de Y minutes apres la coupure de courant. Le programme de controles avances declenche aussi sur diverses alarmes telles que "temperature ambiante elevee", "batterie proche du minimum", "tension de sortie faible" ou "alarme test declenchee par l'utilisateur". bbeessttuuppss--00..99..ttaarr..ggzz Un paquetage qui peut bien se trouver sur Sunsite a l'instant ou vous lisez ceci. C'est une paire de modules de communication qui travaillent avec les onduleurs Best Ferrups. Il gere l'onduleur en mode intelligent. Il inter-opere correctement avec _p_o_w_e_r_d_-_2_._0 - utile si vous avez un gros Ferrups pour toutes les machines d'un reseau. Note : ce paquetage doit encore etre charge vers Sunsite. Je continue a presser l'auteur de le finir et de le charger, mais il doit encore en trouver le temps. LLaannSSaaffee IIIIII Deltec Electronics (et Exide) vendent un paquetage logiciel appele LanSafe III. Il existe une version Linux. Il est fourni avec leurs onduleurs. Ils disent qu'il fonctionne aussi avec d'autres onduleurs (en mode bete). aappccuuppssdd--22..88..ttaarr..ggzz L'auteur (Andre Hedrick) ecrit : apcupsd-2.1.tar.gz remplace Enhanced_APC_UPSD.tar.gz. C'est un paquetage tres complet pour les onduleurs APC. Il gere toute leur gamme. J'ai maintenant ajoute un mode intelligent au paquetage et un support pour les cables APC ou maison si aucun cable APC n'est gere. ssmmaarrttuuppss--11..11..ttggzz Du fichier _._l_s_m : Un powerd et un utilitaire graphique sous X11 qui vous montre les voltages, frequences, pourcentages de charge et niveau de batterie en temps reel. Les protocoles "Safeware" et "Tripplite" sont geres. Source et binaires ELF. uuppss..ttaarr..ggzz Du fichier _._l_s_m : Programme qui interagit avec les sauvegardes batteries (onduleurs Powerbox). uussvvdd--22..00..00..ttggzz Du fichier _._l_s_m : uvsd est un daemon qui surveille l'etat d'un onduleur et reagit aux changements d'etats (coupure de courant, retour du courant, batterie faible). Vous pouvez ecrire vos propres scripts qui sont appeles dans ces cas. Il ne necessite _p_a_s SysVinit. Notez que j'ai seulement jete un coup d'oeil aux paquetages. Je ne les ai pas utilises. Nous etions proches d'utiliser bestups-0.9.tar.gz et powerd-2.0.tar.gz mais nous ne l'avons jamais fait. 55.. FFaaiitteess--llee vvoouuss--mmeemmee Ce chapitre est specifiquement destine au controle des onduleurs betes. Neammoins, une grande partie du processus est a peu pres identique pour les onduleurs intelligents. La principale difference reside dans la maniere dont le daemon (typiquement _p_o_w_e_r_d) de surveilance communique avec l'onduleur. Avant de faire quoi que ce soit, je suggere l'algorithme suivant : +o parcourir ce document ; +o telecharger et etudier tous les paquetages qui semblent adaptes specifiquement a son onduleur ; +o telecharger et etudier les paquetages plus generiques. Notes que certains d'entre eux sont en fait plus puissants, mieux documentes et plus faciles d'emploi que leurs equivalents specifiques ; +o si les choses ne se passent pas bien ou si certains points restent obscurs, lire le present document avec attention et bidouiller avec ardeur et precaution... 55..11.. QQuuee ffaauutt--iill ffaaiirree ((ssoommmmaaiirreemmeenntt)) ?? +o brancher l'ordinateur sur l'onduleur ; +o connecter le port serie de l'ordinateur a l'onduleur avec un cable special ; +o lancer _p_o_w_e_r_d (ou un de ses equivalents) sur l'ordinateur ; +o configurer _i_n_i_t pour realiser quelque chose de raisonnable sur les evenements _p_o_w_e_r_f_a_i_l et _p_o_w_e_r_o_k (comme lancer un _s_h_u_t_d_o_w_n et tuer tout _s_h_u_t_d_o_w_n en cours respectivement, par exemple). 55..22.. 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 _D_C_D, detection de porteuse) TTrraavvaaiill ddee ppoowweerrdd Le daemon _p_o_w_e_r_d controle le port serie. Il maintient leves/baisses les signaux de controle du port serie dont l'onduleur a besoin (typiquement _D_T_R, Terminal de Donnees Pret, doit rester leve, et touts les signaux qui coupent l'onduleur doivent etre maintenus baisses). Lorsque _p_o_w_e_r_d voit le signal de controle de l'onduleur monter, il ecrit FAIL dans /etc/powerstatus et envoie un signal SIGPWR au process _i_n_i_t (les anciennes versions de _p_o_w_e_r_d et _i_n_i_t ecrivent dans /etc/powerfail). Lorsque le signal de controle redescend, il ecrit OK dans /etc/powerstatus et envoie un signal SIGPWR a _i_n_i_t. TTrraavvaaiill ddee iinniitt ((eenn pplluuss ddee ttoouutt ccee qquu''iill ffaaiitt ppaarr aaiilllleeuurrss)) Lorsqu'il recoit un signal SIGPWR, il regarde dans /etc/powerstatus. 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. 55..33.. CCoommmmeenntt ccoonnffiigguurreerr ttoouutt ccaa ?? Ce qui suit presuppose que vous disposez d'un cable qui fonctionne correctement avec _p_o_w_e_r_d. Si vous n'en etes pas sur, voyez la section : ``Analyse de cables et modification de powerd.c'' pour toute information sur les cables mal decrits et la reconfiguration de _p_o_w_e_r_d. 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 parcourir 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 _b_a_s_h, 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 _i_n_i_t de relire le fichier inittab avec : telinit q +o Editez rc.local pour lancer _p_o_w_e_r_d lors du lancement. Syntaxe : powerd Remplacez par le port serie modem sur lequel sera connecte l'onduleur, comme dans : /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 _p_o_w_e_r_d. +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 devriez probablement realiser une sauvegarde complete avant ce test, et positionner un 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 ! 55..44.. AAmmeelliioorraattiioonnss UUttiilliissaatteeuurr +o Bidouillez powerd.c pour surveiller la ligne indiquant un faible niveau de batterie. Dans ce cas, executez un shutdown iimmmmeeddiiaattee ; +o Modifiez la procedure de shutdown, afin que lorsqu'elle s'execute dans des conditions de coupure de courant, elle eteigne l'onduleur apres avoir effectue tout le necessaire. 66.. NNootteess ssuurr llee mmaatteerriieell 66..11.. 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'' pour ne pas citer toutes les donnees specifiques de la section ``Informations sur un certain nombre d'onduleurs'' >From miquels@caution.cistron.nl.mugnet.org Wed Jul 21 14:26:33 1993 Newsgroups: comp.os.linux Subject: Re: Interface onduleur pour Linux ? From: miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg) Date: Sat, 17 Jul 93 18:03:37 Distribution: world Organization: Cistron Electronics. Dans l'article <1993Jul15.184450.5193@excaliber.uucp> joel@rac1.wam.umd.edu (Joel M. Hoffman) ecrit_: >Je ne vais pas tarder a acheter un onduleur, et ai remarque que certains >d'entre eux ont des interfaces reseau pour prevenir celui-ci lorsque le >courant est coupe. > >Y a-t-il une telle interface pour Linux ? > >Merci.. > >-Joel >(joel@wam.umd.edu) > Lorsque je travaillais sur la derniere version de SysVinit (2.4 actuellement), j'ai eu temporairement un onduleur sur mon ordinateur, donc j'ai ajoute le support de celui-ci. Tu as peut-etre vu que dans le dernier fichier d'en-tete , 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 clair, utilisez plutot celui-ci ! > > +------------------------o DTR > | > +---+ > | | resistance > | | 10 kilo-Ohm > | | > +---+ Vers le port serie > | > +-----o-------+------------------------o DCD > | > o relais > \ de l' > \ onduleur > | > +-----o--------------------------------o GND > Le DTR est maintenu haut. Lorsque le courant de l'onduleur s'arrete, le relais se ferme. L'ordinateur controle la descente de la ligne DCD. Lorsque cela arrive, il lance une sequence shutdown... _____ Danny -- <=====================================================================> Danny ter Haar or Robins law #103: 'a couple of lightyears can't part good friends' 66..22.. 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, ou utiliser l'un des paquetages configurables cites plus haut (voir _g_e_n_p_o_w_e_r_-_1_._0_._1_._t_g_z, _p_o_w_e_r_-_2_._0_._t_a_r_._g_z ou _u_p_s_d_-_1_._0_._t_g_z decrits dans la section ``Logiciels''. Si vous utilisez l'un des paquetages, suivez les instruction correspondantes. Si vous voulez bidouiller powerd.c, lisez ce qui suit. Si vous avez des 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 bidouillee 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 (_D_T_R) 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. NdT : La traduction des commentaires et messages peut aussi avoir altere le comportement du programme. ______________________________________________________________________ /* * 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 peripherique a controler. */ if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) { fprintf(stderr, "upscheck: %s: %s\n", argv[1], sys_errlist[errno]); exit(1);} /* Recupere les bits a positionner sur la ligne de commande */ sscanf(argv[2], "%d", &set_bits); while (1) { /* Positionne les bits specifies sur la ligne de commande (et */ /* seulement eux). */ ioctl(fd, TIOCMSET, &set_bits); fprintf(stderr, "Positionnement de %o.\n", set_bits); sleep(1); /* Recupere les bits actuellement positionnes */ ioctl(fd, TIOCMGET, &flags); fprintf(stderr, "Les signaux sont %o.\n", flags); /* Piochez ici en changeant TIOM_CTS par un autre TIOCM jusqu'a */ /* ce que le programme detecte que le courant est coupe lorsque */ /* vous debranchez l'onduleur. Ensuite, vous saurez comment */ /* modifier powerd.c */ if (flags & TIOCM_CTS) { pc = 0 ; fprintf(stderr, "Le courant est la.\n"); } else { pc = pc + 1 ; fprintf(stderr, "Le courant est coupe.\n"); } } close(fd); } ______________________________________________________________________ 66..33.. 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. Si vous avez besoin d'une reference generale sur le brochage de cables, celle de David Tal en est une bonne, mais je n'arrive plus a localiser ce document sur le Net. Mais j'ai trouve un bon livre de remplacement, c'est The Hardware Book. NdT : si un lecteur francais veut proposer une reference dans la langue de Moliere, qu'il n'hesite pas a me contacter. Autres sites utiles : +o Yost Serial Device Wiring Standard qui contient des informations interessantes sur les connecteurs RJ-45 et les cables quatre paires pour toutes les connexions serie ; +o Stokely consulting pour l'information generale sur Unix et en particulier leur Unix Serial Port Resources ; +o Unix Workstation System Administration Education Certification qui contient : RS-232: Connectors and Cables. Incidemment, il semble que le paquetage Linuxdoc-sgml ne formate plus les tableaux tres bien en sortie _h_t_m_l. Si vous voulez pouvoir lire la table qui suit, vous devrez probablement vous referer a la version _D_V_I ou texte simple du present document. | | | | | | | | |DB-25 | DB-9 | Nom | EIA | CCITT | DTE-DCE | Description | |Broche | Broche | | | | | | +-------+---------+--------+-------+---------+----------+-------------------------------------------+ |1 | | FG | AA | 101 | --- | Masse de chassis GND | |2 | 3 | TD | BA | 103 | ---> | 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 ______________________________________________________________________ 66..44.. 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. 77.. QQuuee ffaaiirree ssii ll''oonn nn''eenn ssoorrtt ppaass ?? Voici une nouvelle solution pour le controle lorsque l'onduleur et l'ordinateur ne s'entendent pas. Je dois dire qu'a chaque fois que je lis cela, je suis effare de l'intelligence de cette solution. From: " Raymond A. Ingles" To: hjstein@math.huji.ac.il Subject: UPS HOWTO tip Date: Mon, 24 Feb 1997 11:48:32 -0500 (EST) Je ne sais pas si d'autres trouveront ca utile, mais je pense pouvoir diffuser ceci pour inclusion possible dans le HOWTO. Merci de maintenir un HOWTO que je trouve si utile ! -------------------- Ma fiancee m'a offert un onduleur, un Tripp-Lite 400, je crois. Il etait le bienvenu et semble fonctionner comme prevu, mais malheureusement, ne dispose pas d'interface serie pour prevenir l'ordinateur d'une coupure de courant. Il semble prevu pour une utilisation personnelle quand l'ordinateur ne reste pas seul. Evidemment, cela etait inacceptable et j'ai commence a travailler sur un systeme de surveillance de ligne, en imaginant ouvrir la boite et voir comment ajouter le hard que le constructeur avait omis. J'ai alors realise qu'il y avait une solution plus simple et moins chere (bien qu'un peu moins dotee en fonctionnalites). J'avais un vieux modem 2 400 baud que je n'utilisais pas, que j'ai branche sur un port serie inutilise de l'ordinateur. Je l'ai ensuite branche sur une prise anti-surtensions, elle-meme branchee sur la prise murale. J'ai configure powerd avec les options suivantes : ---- serialline /dev/ttyS1 monitor DCD failwhen low ---- Maintenant, lorsque le courant est coupe (ou, bien que cela ne soit pas arrive recemment, lorsque je debranche le parasurtenseur pour tester la configuration), le modem tombe mais l'onduleur commence a alimenter l'ordinateur. Lorsque powerd se rend compte que le modem a descendu DCD, il declenche la sequence powerfail. Evidemment, il y a certaines limitations. Il n'est pas possible de faire indiquer par le modem que la batterie est faible, etc. On peut seulement indiquer que le courant est coupe. Maintenant, ce n'est pas cher et je deteste laisser un equipement informatique inutilise. Ces temps-ci, il est possible d'avoir un modem 2 400 baud quasi gratuitement. Je continue a conseiller un onduleur avec des possibilites de communication completes, mais si l'on est coince avec un qui n'en a pas, cela peut au moins etre utile. Sincerement, Ray Ingles (810) 377-7735 inglesra@frc.com "Anybody who has ever seen a photograph showing the kind of damage that a trout traveling that fast can inflict on the human skull knows that such photographs are very valuable. I paid $20 for mine." - Dave Barry 88.. 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.. 88..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. AAPPCC :: Ne donneront pas d'informations sur leur mode "intelligent" sans votre signature d'un accord de confidentialite. Donc, les gens sont forces d'utiliser leurs onduleurs "intelligents" en mode "bete", comme souligne plus bas. Diverses tentatives de retro- ingenierie ont ete soldees par des niveaux de reussite differents. BBeesstt :: Serviables et aimables. Fournissent le code source et la documentation pour les deux modes. TTrriipppp LLiittee :: Une personne a dit que Tripp ne diffuserait pas non plus d'information. UUppssoonniicc :: Quelqu'un a dit qu'Upsonic a discute de details techniques au telephone, repondu aux questions par fax et est serviable en general. 88..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 !) 88..33.. nnaammee==""TTrruusstt EEnneerrggyy PPrrootteeccttoorr 440000//660000"" Cette section n'est pas utile seulement pour le Trust Energy Protector. Elle illustre les nouvelles fonctionnalites d'_i_n_i_t. Comment utiliser un Trust Energy Protector 400/650 sous Linux ? par Ciro Cattuto Version 1.0 - 31 mars 1997 CCoonnnneexxiioonn PPCC--oonndduulleeuurr Le Trust Energy Protector 400/650 est equipe d'un port de signaux. A l'aide d'un cable adapte, il est possible de connecter celui-ci sur un ordinateur pour reagir aux evenements concernant l'alimentation electrique. LLee ppoorrtt ddee ssiiggnnaauuxx ddee ll''oonndduulleeuurr L'assignement des broches du port de signaux DB-9 de l'onduleur est le suivant, comme indique dans le manuel utilisateur : bbrroocchhee 22 Ce relais est ferme lorsque le courant d'alimentation est coupe. bbrroocchhee 44 Masse des broches 2 et 5. bbrroocchhee 55 Ce relais est ferme lorsque la batterie dispose de moins d'une minute et demi d'autonomie. bbrroocchhee 66 L'utilisateur peut envoyer un signal haut (+5V a +12V) durant plus d'une milliseconde pour eteindre l'onduleur. Cette option ne peut etre activee que durant une coupure de courant. bbrroocchhee 77 Masse de la broche 6. llee ccaabbllee Voici le cable que j'ai utilise pour connecter l'onduleur au port serie de mon ordinateur. cote ordinateur (DB-15) cote onduleur (DB-9) ==================================================================== 6 DSR --+ [R] = resistance 10 kohm | 20 DTR --+----+ | | [R] [R] +--- 7 | | | 8 DCD --+----|-------------- ---------------------|--- 2 | | 7 GND -------|-------------- ---------------------+--- 4 | ... 5 CTS -------+-------------- ------------------------- 5 2 TX ---------------------- ------------------------- 6 ==================================================================== Pour un port serie DB-9, les broches 6, 20, 8, 7, 5 et 2 correspondent respectivement aux broches 6, 4, 1, 5, 8 et 3. CCoommmmeenntt ffoonnccttiioonnnnee llee ccaabbllee ?? L'ordinateur monte DTR et verifie que DSR soit haut pour s'assurer que le cable soit connecte a l'ordinateur. Tant que le courant est la, DCD et CTS sont hauts tous les deux (a cause des resistances). Lorsque le courant est coupe, le relais entre les broches 2 et 4 de l'onduleur se ferme, et DCD descend pour signaler la coupure. De meme, lorsque les batteries sont faibles, le relais entre les broches 5 et 4 se ferme, faisant descendre CTS. Durant une coupure de courant, l'ordinateur peut eteindre l'onduleur en montant TX durant 1 ms au moins. Cela peut etre realise aisement en envoyant un octet 0xFF au port serie avec une vitesse faible. llee ddaaeemmoonn ppoowweerrdd Pour utiliser les informations disponibles sur le port serie, il faut utiliser un programme qu surveille celui-ci, decode le signal et envoie les messages appropries au systeme d'exploitation, en l'occurence au processus init. Ce dernier peut executer des scripts et programmes concus pour gerer (proprement !) l'evenement de coupure de courant. ccoommppiilleerr ppoowweerrdd En annexe A se trouve le code de powerd, le daemon que j'utilise pour surveiller le Trust Energy Protector 400/650. Pour le compiler, il faut le source du paquetage SysVinit (j'ai utilise celui de sysvinit-2.60). Ecrasez simplement le powerd.c d'origine et compilez-le. CCoommmmeenntt ffoonnccttiioonnnnee ppoowweerrdd ?? Des le demarrage, _p_o_w_e_r_d ouvre le peripherique serie connecte a l'onduleur et monte DTR. Ensuite, il forke un daemon et se termine en laissant celui-ci tourner. Le daemon _p_o_w_e_r_d peut se trouver dans l'un des trois etats suivants : EEttaatt 00 -- llee ccoouurraanntt eesstt bboonn Dans cet etat, _p_o_w_e_r_d lit le port serie toutes les T0_SLEEP secondes (voir les lignes #define au debut du code source). Si DCD descend, _p_o_w_e_r_d bascule en etat 1. Si CTS descend, _p_o_w_e_r_d bascule en etat 2 (cela ne doit pas arriver si DCD n'est pas descendu avant, mais j'ai prefere assurer le coup). EEttaatt 11 -- llee ccoouurraanntt eesstt ccoouuppee Une coupure de courant a ete detectee. DCD est bas et _p_o_w_e_r_d lit le port de l'onduleur toutes les T1_SLEEP secondes. Si DCD remonte, il bascule en etat 0. Si CTS tombe, il bascule en etat 2. EEttaatt 22 -- llaa bbaatttteerriiee eesstt ffaaiibbllee La batterie de l'onduleur est faible. Le daemon _p_o_w_e_r_d reste dans cet etat. A chaque changement d'etat de _p_o_w_e_r_d, il previent le processus _i_n_i_t afin que l'action appropriee soit effectuee. Ces evenements sont traces a l'aide du systeme de trace du systeme d'exploitation (NdT : _s_y_s_l_o_g_d). Si DSR est bas, c'est qu'il y a un probleme au niveau du cable. _p_o_w_e_r_d continue a surveiller la ligne DSR et envoit un message d'avertissement toutes les deux minutes au systeme de trace. UUttiilliisseerr ppoowweerrdd Le daemon _p_o_w_e_r_d doit etre lance par les scripts d'initialisation durant le demarrage du systeme. J'ai ajoute les lignes suivantes dans mon script /etc/rc.d/rc.local : # Ajout du support de l'onduleur echo "Demarrage du processus powerd..." rm -f /etc/turnUPSoff stty -crtscts speed 75 < /dev/cua3 > /dev/null if [ -x /usr/sbin/powerd ] then /usr/sbin/powerd /dev/cua3 fi En premier, on efface (si necessaire) le fichier /etc/turnUPSoff. Celui-ci est utilise par le script de shutdown (/etc/rc.d/rc.0 dans mon cas) pour decider s'il faut arreter l'onduleur ou non. Voir plus bas pour plus d'informations. Ensuite, on desactive le controle de flux materiel sur le peripherique serie connecte a l'onduleur et on positionne la vitesse a 75 bauds. Maintenant, nous sommes sur que le signal TX restera haut suffisamment longtemps pour arreter l'onduleur si nous envoyons un caractere 0xFF au port serie (a nouveau, voir plus bas). Enfin, nous lancons le daemon _p_o_w_e_r_d en lui indiquant le port a surveiller. Notez que nous n'avons pas a lire de caracteres sur ce port, donc pas d'inquietude en cas de conflit d'interruptions - il n'aura aucune influence. LLee ffiicchhiieerr iinniittttaabb eett lleess ssccrriippttss ddee sshhuuttddoowwnn Le processus _p_o_w_e_r_d tourne maintenant, et il enverra des signaux a init en cas de coupure de courant. Il faut maintenant configurer le systeme afin qu'il puisse reagir de maniere utile lorsque ces signaux sont recus. MMooddiiffiiccaattiioonn ddee iinniittttaabb Ajoutez les lignes suivantes a proximite du debut de votre fichier /etc/inittab : # Quoi faire lorsque le courant est coupe (shutdown temporise) pf::powerfail:/etc/powerfail_script # Si le courant revient avant le shutdown, arreter celui-ci pg::powerokwait:/etc/powerokay_script # Si la batterie de l'onduleur est faible, faire un shutdown immediat pc::powerfailnow:/etc/powerfailnow_script LLeess ssccrriippttss Les scripts powerfail_script, powerokay_script et powerfailnow_script sont executes lorsque _i_n_i_t recoit le signal correspondant. Il ont la responsabilite d'arreter le systeme de maniere propre ou d'arreter un shutdown en cours au cas ou le courant reviendrait. Voici les scripts que j'utilise actuellement : /etc/powerfail_script #!/bin/sh /bin/sync /usr/bin/sleep 10m kill -9 `ps auxw | \ grep "shutdown" | \ grep -v grep | \ awk '{print $2}'` >/etc/turnUPSoff /sbin/shutdown -t30 -h +3 "Coupure de courant" Mon Trust Energy Protector 400 n'alimente que l'ordinateur, j'ai donc une reserve de courant assez importante. Dans mon secteur, les coupures de courant ne durent souvent que quelques minutes, donc le systeme reagit a celles-ci de la maniere suivante : Il attent 10 minutes (habituellement, le courant revient avant) puis arrete le systeme, en laissant aux utilisateurs le temps de fermer leurs applications et de se deconnecter. Avant d'executer la commande _s_h_u_t_d_o_w_n, je verifie qu'il n'y a pas d'autre shutdown en cours. Je cree aussi le fichier /etc/turnUPSoff afin que le systeme arrete l'onduleur. /etc/powerokay_script #!/bin/sh kill `ps auxw | \ grep "powerfail_script" | \ grep -v grep | \ awk '{print $2}'` kill -9 `ps auxw | \ grep "shutdown" | \ grep -v grep | \ awk '{print $2}'` rm -f /etc/turnUPSoff Si le courant revient, on tue le script _p_o_w_e_r_f_a_i_l___s_c_r_i_p_t et tout _s_h_u_t_d_o_w_n en cours. On n'oublie pas de supprimer /etc/turnUPSoff. /etc/powerfailnow_script #!/bin/sh kill -9 `ps auxw | \ grep "shutdown" | \ grep -v grep | \ awk '{print $2}'` >/etc/turnUPSoff /sbin/shutdown -h now "Batterie de l'onduleur faible. ARRET IMMEDIAT." Si la batterie faiblit, on s'assure qu'aucun _s_h_u_t_d_o_w_n ne soit en cours, on cree le fichier /etc/turnUPSoff puis on arrete le systeme immediatement. LLee ssccrriipptt dd''aarrrreett ssyysstteemmee Lorsque l'arret du systeme est effectue, on peut arreter l'onduleur en montant le signal TX du port serie durant plus d'une milliseconde. Celui-ci est deja configure correctement par la commande stty du script rc.local. Si le fichier /etc/turnUPSoff est present, on envoit l'octet 0xFF (tous les bits a 1) sur le port serie. Pour cela, on ajoute les lignes suivantes autour de la fin du script d'arret (/etc/rc.d/rc.0 dans mon cas). L'emplacement correct depend de la maniere dont le systeme est configure, mais il doit pouvoir se situer avant la commande _e_c_h_o qui affiche le message "System is halted". # Est-on dans un cas de coupure de courant ? if [ -f /etc/turnUPSoff ] then echo "Arret de l'onduleur" sleep 5 echo -e "\377" >/dev/cua3 exit 1 fi RReemmaarrqquueess ggeenneerraalleess Ce document contient des choses que j'ai apprises en tentant de configurer _m_o_n systeme Linux avec le Trust Energy Protector 400. Certaines informations (le chemin d'acces aux scripts d'initialisation, par exemple) peuvent etre specifiques a mon systeme, et il vous faudra vraisemblablement faire quelques adaptations. Neammoins, j'espere que ce document sera une trace utile pour ceux qui essaieront d'utiliser un onduleur de ce type sous Linux. Si vous rencontrez des difficultes, recherchez des informations plus generales dans le reste de ce Howto. Bonne chance ! RReettoouurr dd''iinnffoorrmmaattiioonnss J'apprecierais enormement tout retour d'informations concernant ce document, afin de pouvoir affiner celui-ci et y corriger de possibles erreurs (je sais que l'anglais que j'utilise n'est pas excellent, mais apres tout, je suis italien ! (-- NdT : On se demande quelquefois s'il faut vraiment tout traduire :-))--) ). Envoyez tout commentaire/suggestion/critique a l'adresse suivante : ciro@stud.unipg.it Si vous rencontrez des problemes d'utilisation de l'onduleur Trust Energy Protector 400/650 sous Linux, vous pouvez aussi me contacter. J'essaierai de vous aider. IInnffoorrmmaattiioonnss lleeggaalleess Je n'ai aucune relation avec Trust Networking Products. L'information contenue dans ce document est livree "telle quelle". Vous pouvez l'utiliser a vos risques et perils. Je ne puis etre tenu responsable d'un quelconque dommage ni perte de donnees resultant de l'utilisation du code ni des informations donnees ici. Ciro Cattuto AAppppeennddiixx AA -- CCooddee ssoouurrccee dduu ddaaeemmoonn ppoowweerrdd>> powerd.c /* * powerd Recoit les evenements de coupure de courant * depuis un Trust Energy Protector 400/650 * et previent init * * Usage: powerd * * Author: Ciro Cattuto * * Version 1.0 - 31 Mars 1997 * * Ce code est largement fonde sur le powerd.c original de * Miquel van Smoorenburg . * * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * * Ce programme est un logiciel libre ; vous pouvez le distribuer * et/ou le modifier selon les termes de la Licence Publique Generale * GNU publiee par la Free Software Foundation version 2 ou (comme * vous le voulez) toute version ulterieure. * */ /* etat 0 - le courant est la */ #define T0_SLEEP 10 /* intervalle de lecture du port en secondes */ #define T0_DCD 3 /* duree avec DCD monte avant de realiser une action */ #define T0_CTS 3 /* duree avec CTS monte avant de realiser une action */ /* etat 1 - le courant est coupe */ #define T1_SLEEP 2 /* intervalle de lecture du port */ #define T1_DCD 3 /* idem T0_DCD */ #define T1_CTS 3 /* idem T0_CTS */ #define DSR_SLEEP 2 #define DSR_TRIES 60 /* On utilise le nouveau mode de communication avec init. */ #define NEWINIT #include #include #include #include #include #include #include #include #include #include #include #include 'paths.h' #ifdef NEWINIT #include 'initreq.h' #endif #ifndef SIGPWR # define SIGPWR SIGUSR1 #endif #ifdef NEWINIT void alrm_handler() { } #endif /* Dire a init que le courant est coupe (1), revenu (0) ou que les batteries de l'onduleur sont faibles (2). */ void powerfail(int event) { int fd; #ifdef NEWINIT struct init_request req; /* On remplit la structure necessaire */ memset(&req, 0, sizeof(req)); req.magic = INIT_MAGIC; switch (event) { case 0: req.cmd = INIT_CMD_POWEROK; break; case 1: req.cmd = INIT_CMD_POWERFAIL; break; case 2: default: req.cmd = INIT_CMD_POWERFAILNOW; } /* On ouvre le fifo (avec timeout) */ signal(SIGALRM, alrm_handler); alarm(3); if ((fd = open(INIT_FIFO, O_WRONLY)) >= 0 && write(fd, &req, sizeof(req)) == sizeof(req)) { close(fd); return; } /* On revient a l'ancienne methode... */ #endif /* On cree un fichier info pour init */ unlink(PWRSTAT); if ((fd = open(PWRSTAT, O_CREAT|O_WRONLY, 0644)) >= 0) { switch (event) { case 0: write(fd, 'OK\n', 3); break; case 1: write(fd, 'FAIL\n', 5); break; case 2: default: write(fd, 'LOW\n', 4); break; } close(fd); } kill(1, SIGPWR); } /* Programme principal. */ int main(int argc, char *argv[]) { int fd; int dtr_bit = TIOCM_DTR; int flags; int DCD, CTS; int status = -1; int DCD_count = 0, CTS_count = 0; int tries; if (argc < 2) { fprintf(stderr, 'Usage: powerd \n'); exit(1); } /* On demarre syslog. */ openlog('powerd', LOG_CONS|LOG_PERROR, LOG_DAEMON); /* On ouvre le port a surveiller. */ if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) { syslog(LOG_ERR, '%s: %s', argv[1], sys_errlist[errno]); closelog(); exit(1); } /* La ligne est ouverte, donc DTR est haut. On le force tout de meme pour plus de surete */ ioctl(fd, TIOCMBIS, &dtr_bit); /* On passe en daemon. */ switch(fork()) { case 0: /* Fils */ closelog(); setsid(); break; case -1: /* Erreur */ syslog(LOG_ERR, 'Impossible de forker.'); closelog(); exit(1); default: /* Pere */ closelog(); exit(0); } /* On relance syslog. */ openlog('powerd', LOG_CONS, LOG_DAEMON); /* Maintenant, on echantillonne la ligne DCD */ while(1) { /* On lit le statut. */ ioctl(fd, TIOCMGET, &flags); /* On controle la connexion. DSR doit etre haut */ tries = 0; while((flags & TIOCM_DSR) == 0) { /* On continue a essayer, et on previent toutes les deux minutes */ if ((tries % DSR_TRIES) == 0) syslog(LOG_ALERT, 'Erreur de connexion onduleur'); sleep(DSR_SLEEP); tries++; ioctl(fd, TIOCMGET, &flags); } if (tries > 0) syslog(LOG_ALERT, 'Connexion onduleur OK'); /* On calcule l'etat en cours. */ DCD = flags & TIOCM_CAR; CTS = flags & TIOCM_CTS; if (status == -1) { status = (DCD != 0) ? 0 : 1; if (DCD == 0) { syslog(LOG_ALERT, 'Coupure de courant. Onduleur actif.'); powerfail(1); } } switch (status) { case 0: if ((DCD != 0) && (CTS != 0)) { DCD_count = 0; CTS_count = 0; sleep(T0_SLEEP); continue; } if (DCD == 0) DCD_count++; if (CTS == 0) CTS_count++; if ((DCD_count < T0_DCD) && (CTS_count < T0_CTS)) { sleep(1); continue; } if (CTS_count == T0_CTS) { status = 2; syslog(LOG_ALERT, 'Batteries faibles !'); break; } status = 1; DCD_count = 0; syslog(LOG_ALERT, 'Coupure de courant. Onduleur actif.'); break; case 1: if ((DCD == 0) && (CTS != 0)) { DCD_count = 0; CTS_count = 0; sleep(T1_SLEEP); continue; } if (DCD != 0) DCD_count++; if (CTS == 0) CTS_count++; if ((DCD_count < T1_DCD) && (CTS_count < T1_CTS)) { sleep(1); continue; } if (CTS_count == T1_CTS) { status = 2; syslog(LOG_ALERT, 'Batteries faibles !'); break; } status = 0; DCD_count = 0; CTS_count = 0; syslog(LOG_ALERT, 'Courant present.'); break; case 2: sleep(1); continue; default: break; } powerfail(status); } /* N'arrive jamais */ return(0); } 88..44.. TTrruusstt UUPPSS 440000--AA J'ai recu un message a propos du Trust UPS 400-A. Je ne sais pas si c'est le meme que le Trust Energy Protector 400, donc voici le message (-- (NdT : le texte qui suit a ete reformate. Le document d'origine comporte une copie de courrier electronique)--) : Marcel Amerlaan 16 juillet 1997 ddiissppoonniibbiilliittee Cet onduleur ne semble plus etre fabrique par son constructeur, mais cela ne veut pas dire qu'il ne soit plus disponible : j'ai achete le mien tres peu cher il y a seulement un mois. De plus, cette entreprise reetiquette souvent ses produits. ccaabbllee Il est facile a fabriquer a l'aide du cable d'origine pour powerd et de la documentation de Trust. Il presente deux ameliorations : +o indication de batterie faible ; +o extinction de l'onduleur. Type : "pleur" Cable power : {TIOCM_DTR, 0} Inverter Kill : {TIOCM_RTS, 1} Inverter Kill Time : 5 Power Check : {TIOCM_CTS, 0} Battery Check : {TIOCM_CAR, 0} Cable Check : {TIOCM_RI, 0} La fonction "cable check" n'est pas utilisee car l'onduleur ne semble pas la reconnaitre. ccoonncclluussiioonn Voila tout ce que je crois savoir. Si vous voulez plus d'informations sur l'onduleur, le cable ou le logiciel, contactez-moi. Et souvenez-vous que tout ce qui est decrit ici fonctionne pour moi mais je ne garantis pas que ce soit le cas pour vous. Marcel Ammerlaan CEO Pleursoft (cela explique le nom du cable, n'est-ce pas :-) Pays Bas 88..55.. SSuussttaaiinneerr SS--4400aa Informations sur le Sustainer S-40a (-- (NdT : le texte qui suit a ete reformate. Le document d'origine comporte une copie de courrier electronique)--) : Evgeny Stambulchik 10 septembre 1995 eennvviirroonnnneemmeenntt Sustainer S-40a avec le paquetage unipower (recemment renomme genpower), cable maison (cf. infra). J'ai envoye une copie de tout ca a Tom Webster, l'auteur du paquetage, et cela devrait apparaitre dans la nouvelle version. ccaabbllee +o Note : les broches d'arret indiquees dans la documentation technique (4 et 6) sont incorrectes. Les bonnes sont 6 et 7, comme sur le schema joitnt ; +o Note 2 : les broches cote PC entre parenthese sont pour un connecteur 25 broches, les autres pour un 9 broches. COTE ONDULEUR COTE LINUX 2 COUPURE DE COURANT 1 (8) +----o----------------------------+------------------o DCD | | o | / | / | | 4 MASSE COMMUNE | 5 (7) +----o-------------+--------------|------------------o GND | | | \ | | \ | | o | | | 5 BATTERIE | FAIBLE | 8 (5) +----o-------------|--------------|--------+---------o CTS | | | | +-+-+ +-+-+ | | | | | | Resistances| | | | | | | | | | 3 x 10 kohm| | | | | +-+-+ +-+-+ | | | 4 (20) | +--------+---------o DTR | | 6 ARRET DE | L'ONDULEUR +-------+ 7 (4) +-+ +---o-------------|---------------+ +---------o RTS \ | | +-------+ \| -+- | | <- \ / | /| -+- | / | 7 | | +---o-------------+ --+-- --- - ffiicchhiieerr uunniippoowweerrdd..hh /************************************************************************/ /* Fichier : unipowerd.h */ /* Programme : unipowerd Version: 1.0.0 */ /* Auteur : Tom Webster */ /* Creation : 1994/04/20 */ /* Modification : Tom Webster Date: 1995/04/09 */ /* Modification : Evgeny Stambulchik (pour onduleur Sustainer) */ /* */ /* Compilation : GCC 2.5.8 */ /* Compilateur : Linux 1.0.9 */ /* ANSI C Compatible : Non */ /* POSIX Compatible : Oui ? */ /* */ /* But : Fichier d'entete pour unipowerd. */ /* : Contient les informations de configuration */ /* : de unipowerd. Editez ce fichier comme indique */ /* : pour activer les fonctionnalites et ajuster */ /* : unipowerd pour votre onduleur. */ /* */ /* Copyright : GNU Copyleft */ /************************************************************************/ /* Lignes de controle RS232 */ /* */ /* D D */ /* T C */ /* Macro Anglais E E */ /* ---------------------------------------------- */ /* TIOCM_DTR DTR - Data Terminal Ready --> */ /* TIOCM_RTS RTS - Ready to send --> */ /* TIOCM_CTS CTS - Clear To Send <-- */ /* TIOCM_CAR DCD - Data Carrier Detect <-- */ /* TIOCM_RNG RI - Ring Indicator <-- */ /* TIOCM_DSR DSR - Data Signal Ready <-- */ #define HIGH (1) #define LOW 0 #define PWRSTAT '/etc/powerstatus' #define UPSSTAT '/etc/upsstatus' /* CABLEPOWER est la ligne qui alimente le cable */ /* pour la surveillance normale. */ #define CABLEPOWER TIOCM_DTR #define POWERBIT TIOCM_CAR #define POWEROK HIGH /* CABLECHECK vaut 1 pour surveiller la batterie ??*/ /* CABELCHECK vaut 0 pour ne rien surveiller */ #define CABLECHECK 0 #define CABLEBIT TIOCM_RNG #define CABLEOK HIGH /* BATTCHECK vaut 1 pour surveiller la batterie */ /* BATTCHECK vaut 0 pour ne rien surveiller */ #define BATTCHECK 1 #define BATTBIT TIOCM_CTS #define BATTOK HIGH /* INVERTERKILL vaut 1 pour gerer l'arret de l'onduleur */ /* INVERTERKILL vaut 0 pour ne rien gerer. */ /* INVERTERBIT est la ligne qui eteint l'onduleur en */ /* mode powerfail. */ /* INVERTERTIME est la duree en secondes de maintien haut */ /* de la ligne INVERTERBIT en haut pour eteindre. */ #define INVERTERKILL 1 #define INVERTERBIT TIOCM_RTS #define INVERTERTIME 5 /************************************************************************/ /* Fin du fichier unipowerd.c */ /************************************************************************/ ffiicchhiieerr ggeennppoowweerrdd..hh Pour la nouvelle version du logiciel (_g_e_n_p_o_w_e_r_d), je pense qu'il faut ajouter la ligne suivante : /* Evgeny's Sustainer S-40A */ {'sustainer', {TIOCM_DTR,0}, {TIOCM_RTS,1}, 5, {TIOCM_CAR,0}, {TIOCM_CTS,0}, {0,0}} 88..66.. SSyysstteell Une autre entreprise israelienne. Je ne leur ai jamais achete d'onduleur, mais il m'ont for aimablement fourni une documentation detaillee sur leur port de communication. Il devrait etre assez facile de controler leur onduleur. Leur numero de telephone est : 972-8-409-019 (fax 972-8-407-216). 88..77.. DDeelltteecc PPoowweerr,, FFiisskkaarrss PPoowweerr SSyysstteemmss eett EExxiiddee Fiskars est une holding finnoise, anciennement proprietaire de Deltec Power. En mars 1996, Fiskars a vendu Deltec Power a Exide. A cette date, Deltec Power etait l'un des plus gros constructeurs d'onduleurs. Avec Fiskars, Deltec fabriquait les PowerServers 10, 20, 30 et 40. La page web de Deltec Power en mentionne d'autres. Exide joint maintenant un logiciel de controle avec ses onduleurs qui fonctionne sous Linux. Ils vendent aussi celui-ci separement et affirment qu'il fonctionne avec d'autres onduleurs aussi. J'aimerais avoir des nouvelles de gens qui utilisent ce logiciel. Voici l'annonce qu'ils m'ont envoyee par e-mail : Exide Electronics annonce Lansafe III, logiciel de gestion d'onduleurs sous Linux. Lansafe III est une application de gestion d'onduleurs. Elle permet l'arret automatique du systeme en cas de coupure de courant de longue duree qui depasserait l'autonomie de la batterie de l'onduleur. Lansafe III permet les messages "broadcast" et l'envoi de courriers electroniques en fonction des reglages utilisateur. La sequence d'arret peut aussi etre parametree. Lansafe III fonctionne avec la plus grande partie des onduleurs Exide Electronics. Il permet aussi l'arret automatique simple avec des onduleurs d'autres constructeurs. Lansafe III pour Linux fonctionne sur les systemes Linux a base Intel. Deux interfaces sont fournies : mode caracteres et X11/Motif. Lansafe III fonctionne sur toutes les plateformes majeures de systemes d'exploitation : Linux, IBM AIX, HP UX, Digital Unix, SCO Unix, Solaris, SunOS, AT&T Unix, toutes les plateformes Windows, OS/2, Novell et Macintosh en particulier. Lansafe III est fourni avec les onduleurs Exide suivant : +o OneUPS Plus ; +o NetUPS ; +o PowerWare Prestige ; +o PowerWare Profile ; +o PowerWare Plus 5xx. Il est aussi fourni avec les onduleurs FPS Power Systems : +o PowerRite Plus ; +o PowerRite Max ; +o PowerWorks A30 ; +o PowerWorks A40 ; +o series 9 000 ; +o series 10 000. Il est aussi possible d'acquerir une licence logicielle separee pour l'utilisation d'un onduleur plus ancien ou d'un autre constructeur. Les licences simples sont a USD 149, des licences site sont disponibles. Pour tout detail, visitez nos sites web : www.exide.com, www.fiskarsUPS.com et www.deltecpower.com Accessoirement, lorsque j'ai tente de me connecter a www.fiskarsUPS.com, il m'a ete demande une identification et un mot de passe. 88..88.. OOnndduulleeuurr BBeeaavveerr mmooddeellee UUBB550000 Dan Fandrich ecrit : Je pense avoir reussi a faire fonctionner mon vieil onduleur Beaver modele UB500 avec genpower. L'interface utilise des niveaux de tension compatibles RS-232, donc l'installation est simple. Ily a un connecteur DB-9 femelle a l'arriere qui se connecte directement dans un port serie DB-9 de PC a l'aide d'un cable droit. Les interrupteurs DIP permettent quelques ajustements. Pour emuler le type d'onduleurs apc1-nt de genpower, ils doivent etre positionnes comme suit : +o 1 on (CTS = coupure de courant) ; +o 2 off (CTS = batterie faible) ; +o 3 off (DSR = coupure de courant) ; +o 4 off (DSR = batterie faible) ; +o 5 off (CD = coupure de courant) ; +o 6 on (CD = batterie faible) ; +o 7 off (RI = coupure de courant) ; +o 8 off (RI = batterie faible) ; +o 9 on (DTR = extinction) ; +o 10 off (RTS = extinction). Les interrupteurs forment des groupes de paires adjacentes pour chaque broche de sortie. Ils sont exclusifs mutuellement - ne tentez pas de positionner ON les 5 et 6 ensemble, par exemple, ou vous ferez un court-circuit entre les signaux coupure de courant et batterie faible. C'est tout ce qu'il y a a dire. Vous pouvez ajouter cela a votre documentation. 88..99.. SSeennddoomm Charli ecrit : J'ai connecte un onduleur Seldom avec powerd. Peut-etre que ce qui suit sera utile avec d'autres onduleurs. J'ai utilise le diagramme de la page de man de _p_o_w_e_r_d : 9 broches 25 broches DTR 4 20 ---------- | > DSR 6 6 -- < 10k > DCD 1 8 ------------------- relais GND 5 7 ------------------- En fait, l'onduleur seldom n'utilise pas de relais mais quelque chose d'autre et fonctionne dans un sens, _m_a_i_s _p_a_s _d_a_n_s _l_'_a_u_t_r_e. Si donc le cable ne fonctionne pas, il faut essayer d'inverser les broches sur le "relais". 88..1100.. BBeesstt L'information sur les onduleurs Best est disponible sur le site web de Best Power. Leur site contient un paquetage checkup.tar (section ``Logiciels'') de communication avec leurs onduleurs, aussi bien en modes intelligent que bate, fourni en sources, donc compilable sous Linux. BBeesstt FFoorrttrreessss aavveecc llee llooggiicciieell ddee BBeesstt Mini-Howto des onduleurs Best Power par Michael Stutz et http://dsl.org/m. Version 1.0, 14 aout 1997 88..1100..11.. AAvveerrttiisssseemmeenntt Copyright 1997 Michael Stutz (-- NdT : la traduction de ce paragraphe est fournie a titre indicatif au lecteur. Se reporter a la version originale pour les termes exacts.--) ; cette information est libre ; elle peut etre redistribuee et/ou modifiee selon les termes de la Licence Publique Generale GNU (GPL) version 2 ou (a votre preference) ulterieure, pour autant que la presente phrase soit conservee ; cette information est fournie SANS AUCUNE GARANTIE ; sans meme de garantie implicite d'adaptation a un besoin particulier ; se reporter a la GPL de GNU pour plus de details. 88..1100..22.. IInnttrroodduuccttiioonn Best Power est constructeur d'onduleurs de haute qualite, et leur serie Fortress est particulierement bien adaptee a des utilisateurs habituels de Linux. Bien que ses produits ne soient actuellement pas aussi bon marche que certains autres (comme ceux d'APC), Best Power fournit le code source de son logiciel et a ete tres reactif quant aux questions posees par des utilisateurs de Linux. De plus, son materiel semble choisi souvent par les consommateurs, ce qui en fait un bon choix pour les utilisateurs de Linux. Ce document decrit l'installation d'un onduleur Best Power Fortress (le modele utilise est un 660a de 1996 accompagne de son CD-ROM) sur une machine Linux. 88..1100..33.. IInnssttaallllaattiioonn 88..1100..33..11.. MMaatteerriieell Installez l'onduleur comme indique par les instructions. Les series _F_o_r_t_r_e_s_s de Best Power sont fournies avec un cable RS-232 destine a etre connecte a un port serie libre a l'ariere de l'ordinateur. 88..1100..33..22.. LLooggiicciieell Voici ce qui differe du manuel, qui ne contient pas actuellement d'instructions specifiques pour Linux. En revanche, le CD-ROM d'accompagnement conient avec le code source du logiciel de l'onduleur, ce qui en rend la mise en oeuvre triviale. Pour realiser celle-ci, suivez les etapes ci-dessous, et utilisez le manuel comme reference pour avoir une vue d'ensemble sur le fonctionnement general du logiciel. J'ai pris la liberte de faire quelques modifications dans ce HOWTO sur la configuration du logiciel _F_o_r_t_r_e_s_s pour Unix d'une maniere qui me semble plus adaptee a un systeme Linux. Par exemple, j'ai elimine la necessite d'un repertoire /etc/best, et place les executables dans /usr/local/bin qui me semble un endroit plus approprie. +o D'abord, creez le script "upsdown" destine a etre execute lors d'un arret secteur. Celui-ci va arreter le systeme : cat > /etc/upsdown <From hennus@sky.nl.mugnet.org Thu Mar 10 15:10:22 1994 Newsgroups: comp.os.linux.help Subject: Re: shutdown automatique avec un onduleur From: hennus@sky.nl.mugnet.org (Hennus Bergman) Date: Tue, 1 Mar 1994 22:17:45 GMT Distribution: world Organization: The Organization For Removal Of On-Screen Logos Dans l'article , 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 programme pour l'arreter >depuis /etc/brc. RSN. > Colin Rafferty, Lehman Brothers Hennus Bergman 88..1122.. TTrriippppLLiittee BBCC775500LLAANN ((SSttaannddbbyy UUPPSS)) Tom Webster, l'auteur du paquetage _g_e_n_p_o_w_e_r, m'a envoye des informations sur le _T_r_i_p_p_L_i_t_e _B_C_7_5_0_L_A_N. Si vous avez l'un d'entre eux, c'est probablement le meilleur paquetage pour commencer. Mais pour etre exhaustif, voici le diagramme de brochage du cable (realise par tatonnements, et sans documentation) : Onduleur Systeme DB-25 DB-25 1 <--------------> 1 Masse 2 <--------------> 4 Coupure de secteur 8 <--------------> 8 Circuit de detection 3 <--------------> 2 Inverseur d'arret 20 <--------------> 22 Circuit 88..1133.. AAPPCC Si la plethore de paquetages pour APC cites plus haut ne vous permettent pas de demarrer, il est possible que la section qui suit soit d'une certaine utilite. 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. UUnn mmeessssaaggee dd''aavveerrttiisssseemmeenntt Message de Marek Michalkiewicz sur le BUPS-HOWTO (-- (NdT : le texte qui suit a ete reformate. Le document d'origine comporte une copie de courrier electronique)--) : Si vous voulez connecter un onduleur APC Back-UPS sur votre machine Linux, ce qui suit peut vous interesser. Il y a un bon BUPS-HOWTO qui decrit comment le faire. Mais il comporte un "bug". Le signal RTS du port serie est utilise pour arreter l'onduleur. Celui-ci ne s'arretera que s'il travaille sur 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 propre APC Back-UPS 600. L'utilisation de RTS peut etre dangereuse, car ce dernier est monte a l'ouverture du peripherique. 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 precis. Cela peut arriver par exemple si l'onduleur est eteint, et que le courant revienne seulement pour un moment. Soit il faut lancer backupsd avant de monter les systemes de fichiers en lecture/ecriture, soit (de preference) utiliser TX (broche 3) plutot que RTS (broche 7) pour eteindre l'onduleur (la numerotation est pour un DB-9). On peut utiliser ioctl(fd, TCSBRKP, 10); pour monter TX pendant une seconde, par exemple. L'utilisation de TX doit etre plus sure. Je posterai peut-etre les diff si le temps me le permet... BBUUPPSS--HHOOWWTTOO Luminated Software Group Presente HOWTO utilisation d'onduleurs _B_a_c_k_-_U_P_S (d'_A_P_C) (pour proteger votre systeme Linux) Version: 1.01 BETA Document de : Christian G. Holtje Information sur le cablage et aide : Ben Galliart Adaptation francaise : 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. AAtttteennttiioonn !! Ni moi, ni aucun de ceux qui on ecrit ou aide a ce document, ne garantissons quoi que ce soit concernant 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 : Le document d'origine contient des references de pieces detachees Radio-Shack, qui etaient distribuees par le reseau Tandy en France. Ce reseau n'existe plus, et les references ont donc ete supprimees de la version francaise. Le lecteur neammoins interesse pourra se reporter a la version anglaise du present document.--) Bien, vous venez juste d'acheter (ou vous allez le faire) un _B_a_c_k_-_U_P_S d'_A_P_C (d'autres modeles pourront peut-etre beneficier 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 _P_o_w_e_r_-_C_h_u_t_e, 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 arreter automatiquement mon systeme 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 du coin : +o 1 connecteur a souder subminiature male DB-9 ; +o 1 connecteur a souder subminiature femelle DB-9 ; +o 2 boitiers pour les connecteurs ci-dessus (vendus separement en general) ; +o Du cable multi-brins (pas du mono-brin). Il vous faut aussi, mais vous pourrez peut-etre l'emprunter : +o un fer a souder ; +o 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 manuel de l'_A_P_C 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 comportement du logiciel ci-dessous, si vous achetez le cable d'APC. Il peut fonctionner, ou non. *** Le Logiciel *** J'utilise le paquetage _S_y_s_V_I_n_i_t de Miquel van Smoorenburg pour Linux (voir a la fin pour emplacements, remerciements, adresses E- mail, etc.). Je ne sais ce qui doit etre change 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() (telle quelle, 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 daemon 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 celle-ci fonctionne. :-) *** Ou l'obtenir *** Le SysVInit de Miquel van Smoorenburg's peut se trouver sur : SysVinit-2.50.tgz et une correction pour certains shell bash se trouve juste a cote : SysVinit-2.50.patch1 Pour ce qui est d'obtenir ce HOWTO, vous pouvez m'envoyer un E- mail, docwhat@uiuc.edu avec pour sujet :'request' et le mot-clef 'backups' dans le corps du message : Demande du HOWTO original (il est possible que j'automatise cela, et d'autres choses). *** Section des remerciements qui sont dus *** Merci a : +o Miquel van Smoorenburg pour son superbe paquetage _S_y_s_V_I_n_i_t et son powerd.c qui m'ont beaucoup aides ; +o Christian Holtje Documentation backupsd.c (ce qui n'est pas de Miquel) rc.power ; +o Ben Galliart Le cable, informations sur le standard RS-232 et astuces bruyantes (non rapportees ici). ___________________________________________________________________ /* backupsd.c -- Simple daemon pour lire les signaux de coupure de * courant d'un onduleur Back-UPS (d'APC). * * Certaines parties proviennent du powerd.c de Miquel van Smoorenburg * D'autres sont originales de Christian Holtje * 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 */ ___________________________________________________________________ AAuuttrreess iinnffoorrmmaattiioonnss (-- (NdT : Le document original comporte de nombreuses copies de courriers electroniques a ce point. Le traducteur s'est permis d'en realiser une synthese plus courte et, il l'espere, plus facile a utiliser)--) Message de Jim Ockers du 12 janvier 1995 dans comp.os.linux.hardware : Selon la base de connaissances (_K_n_o_w_l_e_d_g_e_B_a_s_e) de _M_i_c_r_o_s_o_f_t, il semble que la broche 5 du connecteur des onduleurs _A_P_C _B_a_c_k_-_U_P_S et _S_m_a_r_t_-_U_P_S (teste avec un _B_a_c_k_-_U_P_S _4_0_0 sous _W_i_n_d_o_w_s _N_T) monte un signal "batterie faible" deux minutes au moins avant l'epuisement de la batterie. Ce signal est au niveau "TTL collecteur ouvert", et peut etre ramene aux niveaux RS-232 selon le schema suivant : Broche 5 Broche 8 +---------+ o------| 10 kOhm |-------o +---------+ Par ailleurs, le manuel de l'onduleur stipule que la broche commune a utiliser est la 4 (et non la 9, meme si celles-ci sont branchees ensemble). Message de Peter Kammer du 7 octobre 1996 : Les schemas de brochage sont inverses en ce qui concerne les connecteurs males : en effet, les broches sont numerotees de maniere inverse sur les connecteurs males et femelles (puisque leurs sens s'opposent lors du brancement). Il faut donc considerer que les schemas pour les connecteurs males sont vus cote exterieur et non cote interieur (soudure), contrairement a ce qui est indique. Par ailleurs, il existe un document de reference technique pour les onduleurs _B_a_c_k_-_U_P_S qui se trouve sur le site web d'_A_P_C. Message de Troy Muller du 6 avril 1997 : L'onduleur _B_a_c_k_-_U_P_S _P_r_o _6_5_0 fonctionne avec le cable standard d'_A_P_C. La reference du cable est 940-023A et le logicel est _E_n_h_a_n_c_e_d___A_P_C___B_a_c_k_U_P_S. Ce logiciel envoit des messages globaux toutes les deux secondes, mais un eu de bidouillage de dowalll.c permet de limiter cette fonction. AAPPCC SSmmaarrtt--UUPPSS De nombreuses personnes ont un APC Smart UPS. Il semble qu'il existe des paquetages pour utiliser ceux-ci en mode "intelligent" (voir les paquetages mentionnes plus haut Enhanced_APC_UPSD-v1.4.tar.gz, apcd-0.5.tar.gz et smupsd-0.7-1.i386.rpm decrits dans la section ``Logiciels''). Je ne sais pas ce que vaut le support pour chacun d'eux. Il semble qu'_A_P_C ccoonnttiinnuuee a refuser de publier son protocole pour le mode "intelligent" sans un accord de non-diffusion, ainsi tout le monde a du faire de la retro-ingenierie dessus. Le consensus general est d'investr dans une gamme qui publie cette information, comme _B_e_s_t. Une autre possibilite est d'utiliser la version du logiciel de controle d'onduleurs _P_o_w_e_r_c_h_u_t_e d'_A_P_C pour _S_C_O _U_n_i_x via le paquetage de compatibilite _i_B_C_S. Clive A. Stubbings me dit que cela fonctionne bien apres quelques ajustements du script d'installation. Il dit que le seul probleme est que "l'interface graphique semble avoir des problemes a controler des onduleurs a-travers le reseau". Si vous possedez un _A_P_C _S_m_a_r_t_-_U_P_S et que vous n'arriviez pas a le faire fonctionner en mode intelligent avec aucun de ces logiciels, vous pouvez malgre tout encore l'utiliser en mode bete. Les sections qui suivent detaillent cette procedure. J'ai recu, en particulier, des messages concernant les modeles _6_0_0, _7_0_0 et _1_4_0_0. Il vous faudra probablement bidouiller powerd.c comme indique dans la section ``Analyse de cables et modification de powerd.c''. Message de Lam Dang du 19 aout 1994 dans comp.os.lnux.misc : Realisation du cable pour un _A_P_C _S_m_a_r_t_-_U_P_S _m_o_d_e_l_e _6_0_0. Le cable est a realiser entre un connecteur DB-9 femelle sur l'onduleur et un DB-25 male sur l'ordinateur. Le boitier du DB-25 est assez grand pour contenir un regulateur de tension et deux resistances. L'interface entre le connecteur de l'onduleur et celui du PC est ainsi : Onduleur (DB-9) PC (DB-25) 1 (Extinction) 20 (DTR) 3 (Coupure de secteur) 5 (CTS) 4 (Commun) 7 (GND) 5 (Batterie faible) 8 (DCD) 9 (Masse chassis) 1 (Chassis Ground) Vous pouvez utiliser la broche 6 de l'onduleur au lieu de la broche 3 (elles sont inverses l'une de l'autre). La complication est de monter les broches collecteur ouvert 3 (ou 6) et 5 de l'onduleur. Ce 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. 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. Lorsque l'onduleur passe 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) en court-circuitant les broches 8 et 20, par exemple, doit eteindre l'onduleur apres environ 15 secondes. Lorsque la diode "Low Battery" du panneau frontal s'allume, la broche 8 (DCD) doit descendre a 0V aussi. Les tensions de l'interface onduleur sont NEGATIVES pour la coupure de secteur (sur la broche 3 de l'onduleur) et la batterie faible, et POSITIVE pour l'arret a distance. Les parametres de ligne serie comme la vitesse n'ont aucune importance. Liste du materiel necessaire : +o un boitier DB-9 ; +o un connecteur sub-DB-25 femelle ; +o un regulateur de tension 7805 +5Vdc ; +o deux resistances de 4,7kohm ; +o un carte a composants perforee ; +o un cable avec au moins un connecteur 9 broches male. Et de plus : +o un multimetre ; +o un fer a souder; +o quelques heures... AAPPCC SSmmaarrtt--UUPPSS 770000 Voici quelques details sur le fonctionnement du modele 700 en mode bete, qui presente une utilisation futee d'un transistor place dans le cable qui eteint l'onduleur lorsque l'ordinateur est eteint. From: Markus Eiden Sender: eiden@eiden.de To: "Harvey J. Stein" Subject: Re: APC Smart-UPS Date: Sun, 30 Mar 1997 16:21:05 +0200 J'utilise un APC Smart-UPS 700 pour mon systeme Linux sur une carte ASUS. Pour utiliser quelques possibilites de l'onduleur, il faut quatre choses : 1) faire un cable RS-232 avec une petite interface ; 2) le source du powerd du paquetage sysvinit (j'utilise la version 2.6 de Miquel van Smoorenburg). Il faut ensuite modifier ce powerd ; 3) changer /etc/inittab ; 4) faire un script qui lance certaines commandes si le courant est coupe ou si la batterie est faible. Quelques possibilites : Lorsque le secteur est coupe, un script est lance et une entree est faite dans syslog. Si la batterie est faible, un autre script est lance (qui arete l'ordinateur, evidemment) et une entree est faite dans syslog. Si l'ordinateur est arrete et que le courant l'est aussi, l'onduleur sera arrete a son tour. 1) D'abord le cable : Si l'on jette un coup d'oeil a l'arriere de l'onduleur, on y trouve un connecteur femelle comme celui-ci : 8 1: Eteint l'onduleur lorsque le courant est coupe et que la broche 1 est haute. X X X X 3: Descend en cas de coupure de curant. X X X X X 4: Masse 5: Descend en cas de baisse de la batterie. 1 3 4 5 8: +24V D'un autre cote, l'arriere du PC presente un connecteur male comme celui-ci : 8 6 1: DCD X X X X 4: DTR X X X X X 5: GND 5 4 1 6: DSR 8: CTS Il faut realiser l'interface suivant entre ces connecteurs : PC UPS #------------------ (8) | 470 Ohm | #-----#-----#-----#-----#-----#----- ca. 9-12V | | | | | | 47 3.3 3.3 3.3 1 470 kOhm kOhm kOhm kOhm kOhm Ohm | | | | | | (8) ------------------------# | | | | | | | (6) ------------#------------------------------------------- (5) | | | | (1) ------------------#------------------------------------- (3) | | | | C#------------------------- (1) | -| | | B/ | (4) ------#-----12kOhm---------| | \>E | | | (5)-----------------------------#-------#------------------- (4) +o j'utilise un transistor "BC140", mais a peut pres n'importe quel transistor NPN devrait faire l'affaire ;-) +o Le transistor fonctionne comme "inverseur". Si l'on eteint l'ordinateur ET que le courant est coupe, la broche 4 du PC descend et la broche 1 de l'onduleur monte. Cela eteint l'nduleur pour economiser la batterie. 2) Le source de _p_o_w_e_r_d J'ai juste retouche tres peu le source (donc c'est en fait celui de Miquel). (a) Emet une "alerte" vers syslogd si la broche 8 du PC (DCD) est basse (c'est qu'alors, le cable n'est pas connecte) ; (b) DCD descendu a zero -> le courant est coupe -> appel de powerfail(0) -> envoi de INIT_CMD_POWERFAIL au processus init ; (c) DCD remonte -> le courant est revenu -> appel de powerfail(1) -> envoi de INIT_CMD_POWEROK au processus init ; (d) DSR et DCD descendus a zero -> le courant est coupe et la batterie est faible > appel de powerfail(2) -> envoi de INIT_CMD_POWERFAILNOW au processus init. Et voila. /* * powerd Surveille la ligne DCD d'un port serie connecte a un * onduleur. Si le courant est coupe, previent init. * Si le courant revient, previent init encore. * Tant que le courant est la, DCD doit etre "haut". Lorsque * le courant est coupe, DCD doit descendre. * Powerd maintient DTR haut, donc en branchant une resistance * de 10 kOhm entre DCD et DTR, l'onduleur ou un simple relais * peuvent descendre DCD a la masse. * Il faut aussi brancher DSR et DTR ensemble. Ainsi, powerd * peut controler ici et la que DSR soit haut, et il sait donc * que l'onduleur est connecte !! * * Usage: powerd /dev/cua4 (ou tout autre port serie). * * Auteur: Miquel van Smoorenburg, . * Quelques changements mineurs de Markus Eiden, * pour APC-Smart-UPS-powerd. * * Version: 1.31, 29-Feb-1996. * * Traduction: Bernard Choppy (choppy@imaginet.fr) * * Ce programme fut developpe initialement pour mon employeur * ** Cistron Electronics ** * qui a autorise la distribution de celui-ci pour un usage * generalise. * * Copyright 1991-1996 Cistron Electronics. * * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * * Ce programme est un logiciel libre ; vous pouvez le diffuser * et/ou modifier selon les termes de la GPL (GNU Public License) * de la Free Software Foundation; au choix dans la version 2 de * cette licence, ou (a votre choix) toute autre version. * * Modifications mineures pour APC-powerd par Markus Eiden * Markus@Eiden.de */ /* Utilisation de la nouvelle methode de communication avec init */ #define NEWINIT #include #include #include #include #include #include #include #include #include #include #include #include "paths.h" #ifdef NEWINIT #include "initreq.h" #endif #ifndef SIGPWR # define SIGPWR SIGUSR1 #endif #ifdef NEWINIT void alrm_handler() { } #endif /* Avise init du changement d'etat du courant */ void powerfail(ok) int ok; { int fd; #ifdef NEWINIT struct init_request req; /* Remplissage de la structure de requete */ memset(&req, 0, sizeof(req)); req.magic = INIT_MAGIC; /* INIT_CMD_* sont definis dans initreq.h * * Jetez un coup d'oeil a init.c et /etc/inittab * * * * ok=0 -> INIT_CMD_POWERFAIL -> powerwait * * ok=1 -> INIT_CMD_POWEROK -> powerokwait * * ok=2 -> INIT_CMD_POWERFAILNOW -> powerfailnow */ switch (ok) { case 0 : req.cmd = INIT_CMD_POWERFAIL; /* Coupure -> alerte */ break; case 1 : req.cmd = INIT_CMD_POWEROK; /* Retour du courant -> arrete l'alerte */ break; case 2 : req.cmd = INIT_CMD_POWERFAILNOW; /* Coupure et batterie faible -> arret systeme */ break; } /* Ouvre le fifo (avec timeout) */ signal(SIGALRM, alrm_handler); alarm(3); if ((fd = open(INIT_FIFO, O_WRONLY)) >= 0 && write(fd, &req, sizeof(req)) == sizeof(req)) { close(fd); return; } /* On en revient a l'ancienne methode... */ #endif /* Creaton d'un fichier info pour init */ unlink(PWRSTAT); if ((fd = open(PWRSTAT, O_CREAT|O_WRONLY, 0644)) >= 0) { if (ok) write(fd, "OK\n", 3); else write(fd, "FAIL\n", 5); close(fd); } kill(1, SIGPWR); } /* Programme principal */ int main(int argc, char **argv) { int fd; int dtr_bit = TIOCM_DTR; int flags; int status, oldstat = -1; int count = 0; int tries = 0; int powerfailed = 0; int rebootnow = 0; if (argc < 2) { fprintf(stderr, "Usage: powerd \n"); exit(1); } /* Lancement de syslog */ openlog("powerd", LOG_CONS|LOG_PERROR, LOG_DAEMON); /* Ouverture du port a surveiller */ if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) { syslog(LOG_ERR, "%s: %s", argv[1], sys_errlist[errno]); closelog(); exit(1); } /* Port ouvert, DTR doit etre haut. On le force tout de meme...*/ /* Fonctionnement : Batterie faible -> Arret -> DTR descend -> * * transistor ouvert -> La broche d'arret onduleur monte -> * * l'onduleur s'arrete apres 20 s environ. S'il y a une coupu- * * re et que l'ordinateur est eteint, l'onduleur s'arrete. * * Si le courant revient, l'onduleur s'allume, l'ordinateur * * demarre, et powerd est lance. * * */ ioctl(fd, TIOCMBIS, &dtr_bit); /* Passe en daemon. */ switch(fork()) { case 0: /* Fils */ closelog(); setsid(); break; case -1: /* Erreur */ syslog(LOG_ERR, "impossible de forker."); closelog(); exit(1); default: /* Pere */ closelog(); exit(0); } /* Relance syslog. */ openlog("powerd", LOG_CONS, LOG_DAEMON); syslog(LOG_INFO, "APCpowerd demarre..."); /* On surveille DCD */ while(1) { /* Lecture de l'etat. */ ioctl(fd, TIOCMGET, &flags); /* Controle de connexion : CTS doit etre haut */ tries = 0; /* TIOCM_*- Se reporter a .../ams/termios.h */ while((flags & TIOCM_CTS) == 0) { /* On continue a essayer, et alerte toutes les 2 minutes */ if ((tries % 60) == 0) syslog(LOG_ALERT, "Onduleur non connecte"); sleep(2); tries++; ioctl(fd, TIOCMGET, &flags); } if (tries > 0) syslog(LOG_ALERT, "Onduleur reconnecte"); /* Calcule l'etat en cours */ status = (flags & TIOCM_CAR); /* Si DCD est passe a zero, le courant a ete coupe */ if (oldstat != 0 && status == 0) { count++; if (count > 3) { powerfailed = 1; powerfail(0); } else { sleep(1); continue; } } /* Si DCD remonte, le courant est revenu. */ if (oldstat == 0 && status > 0) { count++; if (count > 3) { powerfailed = 0; /* eigentlich unnoetig: */ rebootnow = 0; powerfail(1); } else { sleep(1); continue; } } /* Batterie faible et courant coupe ? */ if (rebootnow==0) if (powerfailed==1) if ((flags & TIOCM_DSR) == 0) { rebootnow=1; powerfail(2); } /* Reinitialisation, stockage de l'etat et attente 2s. */ count = 0; oldstat = status; sleep(2); } /* N'arrive jamais */ return(0); } 3) Modifier inittab init recoit les commandes INIT_CMD et lance les scripts idoines : pf::powerwait:/sbin/init.d/powerfail start pn::powerfailnow:/sbin/init.d/powerfail now po::powerokwait:/sbin/init.d/powerfail stop Ce qui signifie, par exemple : si le courant est coupe (powerwait, lancer le script /sbin/init.d/powerfail avec le parametre "start". 4) Le script powerfail #! /bin/sh # Copyright (c) 1997 Markus Eiden, Markus@Eiden.de # case "$1" in start) echo "LE COURANT EST COUPE !" | wall logger "Coupure de courant" ;; now) echo "BATTERIE FAIBLE ! Arret systeme dans une minute" | wall logger "Batterie faible, arret systeme dans une minute" sync /sbin/shutdown -r -t 5 +1 ;; stop) echo "LE COURANT EST REVENU !!" | wall logger "Courant retabli" /sbin/shutdown -c >/dev/null 2>/dev/null ;; *) echo "Usage: $0 {start|now|stop}" exit 1 ;; esac exit 0 Eh bien, cela devrait etre simple ;-) Vous voila pret maintenant, mais restez prudent : cela fonctionne pour moi, mais je ne peux evidemment pas garantir que quoi que ce soit de cela fonctionne pour vous. Un petit conseil pour finir : si /sbin/init.d/powerfail arrete votre PC, DTR descend, donc la broche d'arret (cote onduleur) monte. Des cet instant, il faut entre 20 et 30 secondes a l'onduleur pour s'arreter. C'est de votre responsabilite d'empecher votre machine Linux de redemarrer durant ces 20 secondes (en particulier, de monter les volumes disque). Cela ne fut pas un probleme pour mon systeme. Quatre methodes simples permettent d'empecher Linux de demarrer rapidement : 1. le BIOS doit realiser certaines routines (comme identifier le nombre de pistes de votre lecteur de disquettes si vous en avez un) ; 2. LILO peut etre configure pour attendre s'il est installe ; 3. il peut ne rien y avoir a faire (comme dans mons cas) ; 4. il est possible d'acheter plus de memoire afin que le decompte dure 30 secondes. Cela doit correspondre environ a 1 024 Mo ;-). AAPPCC SSmmaarrtt--UUPPSS 11 440000 Autre jour, autre APC. Voici pour le _S_m_a_r_t_-_U_P_S _1 _4_0_0, en mode bete. From: "Slavik Terletsky" To: hjstein@math.huji.ac.il Subject: my contribution to UPS HOWTO Date: Mon, 27 Jan 1997 21:10:16 +0000 Daemon d'onduleur pour FreeBSD (2.1.5 - teste). Schema de branchement : Onduleur (broche, nom) PC (broche, nom) ---------------------- --------------------- 1 Arret >-----------> 4 Terminal pret 2 Courant Coupe >-----------> 8 Pret a emettre 4 Commun >-----------> 5 Masse 5 Batterie faible >----------+> 1 Detection de porteuse 8 Batterie (+24V) >-|10kOhm|-+ Description Usage: upsd [wait [script]] device - device name upsd interacts thru (e.g. /dev/cuaa1) wait - time (secs) to wait before running script, (default value 0 sec). script - system shutdown script (default /etc/rc.shutdown). Fonctionnement : upsd enregistre tous les changements d'etat de l'onduleur (courant present ou absent, batterie faible ou bonne). Lorsque le courant est absent et que la batterie est faible, upsd active le signal d'arret de l'onduleur, attend le nombre de secondes indique sur la ligne de commande, et lance le script d'arret. Exemple de script : #!/bin/sh # Le script est execute lorsque le systeme s'arrete PATH=/sbin:/bin:/usr/sbin:/usr/bin echo "ARRET IMMEDIAT DU SYSTEME" | wall reboot Source d'upsd : /* daemon d'onduleur * Copyright 1997 Slavik Terletsky. All rights reserved. * Auteur: Slavik Terletsky * Systeme: FreeBSD * Traduction: Bernard Choppy */ #include #include #include #include #include #include #include #include #include #include #include #include int status; int wait = 0; FILE *fd; char *scr = "/etc/rc.shutdown"; char *idf = "/var/run/upsd.pid"; void upsterm(); void upsdown(int); int main(int argc, char *argv[]) { int pd; int zero = 0; char d5, d6, d7; char low = 0; char pow = 1; /* controle des arguments */ switch(argc) { case 4: scr = argv[3]; case 3: wait = atoi(argv[2]); case 2: break; default: fprintf(stderr, "usage: %s [temporisation [script]]\n", argv[0]); exit(1); } /* controle de l'existence du script */ if(!(fd = fopen(scr, "r"))) { fprintf(stderr, "fopen: %s: %s\n", scr, sys_errlist[errno]); exit(1); } fclose(fd); /* controle si upsd s'execute deja */ if(fd = fopen(idf, "r")) { fprintf(stderr, "fopen: le fichier %s existe deja\n", idf); exit(1); } /* passe en daemon */ switch(fork()) { case -1: /* erreur */ fprintf(stderr, "fork: %s\n", sys_errlist[errno]); exit(1); case 0: /* fils */ break; default: /* pere */ exit(0); } /* sauvegarde du pid */ if(!(fd = fopen(idf, "w"))) { fprintf(stderr, "fopen: %s: %s\n", idf, sys_errlist[errno]); exit(1); } fprintf(fd, "%d\n", (int)getpid()); fclose(fd); /* ouverture du port a surveiller */ if((pd = open(argv[1], O_RDWR | O_NDELAY)) < 0) { fprintf(stderr, "open: %s: %s\n", argv[1], sys_errlist[errno]); exit(1); } /* le daemon fonctionne */ openlog("upsd", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "daemon demarre"); /* reaction au signal */ (void)signal(SIGTERM, upsterm); /* surveillance du port */ while(1) { /* reinitialisation des bits */ if(ioctl(pd, TIOCMSET, &zero) < 0) { fprintf(stderr, "ioctl: %s\n", sys_errlist[errno]); exit(1); } /* lecture de l'etat du port */ if(ioctl(pd, TIOCMGET, &status) < 0) { fprintf(stderr, "ioctl: %s\n", sys_errlist[errno]); exit(1); } /* determination de l'etat */ d5 = status & 0x20; d6 = status & 0x40; d7 = status & 0x80; /* courant present */ if(!(d7 + d5)) { if(!pow) { syslog(LOG_CRIT, "courant present"); pow = 1; } /* courant coupe */ } else { if(pow) { syslog(LOG_CRIT, "courant coupe"); pow = 0; } } /* batterie faible */ if(!d6 && !low) { syslog(LOG_ALERT, "batterie faible"); low = 1; /* arret onduleur */ if(!pow) { upsdown(pd); } } /* batterie ok */ if(d6 && low) { syslog(LOG_CRIT, "batterie ok"); low = 0; } sleep(1); } /* jamais atteint */ return 0; } void upsterm() { /* message de trace de fin */ syslog(LOG_INFO, "arret du daemon"); /* effacement du fichier de pid */ unlink(idf); exit(0); } void upsdown(int pd) { /* message de trace d'arret */ syslog(LOG_ALERT, "arret du systeme"); /* effacement du fichier de pid */ unlink(idf); /* mesure de securite : vidange des tampons d'ecriture */ system("/bin/sync"); system("/bin/sync"); system("/bin/sync"); /* arret de l'onduleur */ status = TIOCM_DTR; if(ioctl(pd, TIOCMSET, &status) < 0) { fprintf(stderr, "ioctl: %s\n", sys_errlist[errno]); exit(1); } /* attente puis lancement du script */ sleep(wait); system(scr); } # Slavik Terletsky # University "Lvivska Poytechnika" # # Network Administrator # mailto:ts@polynet.lviv.ua # 99.. 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. 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. Dans les temps anciens, cela necessitait une amusante programmation. Maintenant, la meilleure chose a faire semble etre de trouver l'un des paquetages powerd-2.0.tar.gz ou upsd-1.0.tgz cites a la section ``Logiciels'' et de suivre les instructions. Les deux sont capables de fonctionner sur les esclaves dans un mode qui les connecte a un processus powerd ou upsd s'executant sur le maitre pour lui demander l'etat de l'onduleur. Certains des paquetages specifiques pour APC semblent disposer aussi de cette fonctionnalite. Neammoins, si votre reseau n'est pas sur, vous pouvez etre amene a souhaiter plus de securite dans ce montage, puisqu'il est possible de "pirater" un powerd esclave pour lui faire croire que le courant est coupe. Une autre possibilite est d'utiliser le protocole SNMP (Simple Network Management Protocol - protocole simplifie d'administration de reseau). Le detail de l'utilisation de SNMP depasse le cadre de ce document, pour ne pas dire que cela me depasse tout court actuellement. 99..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 _p_o_w_e_r_d 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. 99..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}} 99..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 essaye 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. .