


2. Réalisation
2.1 La prise
Comme vous avez été voir le UPS-Howto, je vais juste vous rappeler comment fonctionne un onduleur:L'appareil est branché sur le 220v d'un coté, l'ordinateur se branche sur l'onduleur, et un cable série relie ces deux derniers pour communiquer. Les diverses informations fournies par l'onduleur sont:
- réseau electrique ok
- coupure réseau electrique
- batterie faible
- retour à 220v du réseau (arret du shutdown en cours)
Pour cela, nous avons besoin de peu de matériel:
- un fer à souder, avec la soudure;
- une prise série femelle
- une résistance de 10 kilo-ohm
- un mini bouton (arret/marche)
- du fil (pour relier les broches du bouton avec celles de la prise)
-------------------------
\ 5 4 3 2 1 / shema d'une prise série femelle, vue de face
\ 9 8 7 6 / (de toute façon, les chiffres sont gravés sur la prise)
---------------------
et voici comment connecter les composants:
+------------------------o DTR (broche n°4)
|
+---+
| | resistance
| | 10 kilo-Ohm
| |
+---+
|
+-----o-------+------------------------o DCD (broche n° 1)
|
o bouton poussoir
\ ou
\ mini interrupteur
|
+-----o--------------------------------o GND (broche n° 5)
Le DTR est maintenu haut.Lorsque vous basculez le bouton, l'ordinateur détecte la descente de la ligne DCD.
Lorsque cela arrive, il lance une sequence shutdown...
A priori, le montage ne devrait pas poser de problème... Meme moi, j'y suis arrivé!
Je pense meme que l'on pourrai ajouter un autre interrupteur, sur une autre broche, puis recuperer cette autre donnée pour en faire ce que l'on veut.
Pour rappel, je met ici, quelques info sur l'assignement des broches du port série, ainsi que les correspondances entre les signaux de terminal et des broches du port série. Ces correspondances, sont reprise du HOWTO-UPS, qui les a reprise du document de David Tal : "Câbles et connecteurs fréquemment utilisés".
DB-25 DB-9 Nom EIA CCITT DTE-DCE Description Broche Broche
---------------------------------------------------------------------------------------------------
1 FG AA 101 --- Masse de chassis GND
2 3 TD BA 103 ---> Données transmises, TxD
3 2 RD BB 104 <--- Données reçues, RxD
4 7 RTS CA 105 ---> Requête pour envoyer
5 8 CTS CB 106 <--- Prêt à envoyer
6 6 DSR CC 107 <--- Jeu de données prêt
7 5 SG AB 102 ---- Masse de signal, GND
8 1 DCD CF 109 <--- Détection de porteuse
9 -- -- - - Tension positive continue de test
10 -- -- - - Tension négative continue de test
11 QM -- - <--- Mode d'égalisation
12 SDCD SCF 122 <--- Détection de porteuse secondaire
13 SCTS SCB 121 <--- Prêt à envoyer secondaire
14 STD SBA 118 ---> Données transmise secondaires
15 TC DB 114 <--- Signal d'horloge de l'émetteur
16 SRD SBB 119 <--- Signal d'horloge secondaire du récepteur
17 RC DD 115 ---> Signal d'horloge du récepteur
18 DCR -- - <--- Horloge divisée du récepteur
19 SRTS SCA 120 ---> Requête pour émettre secondaire
20 4 DTR CD 108.2 ---> Terminal de données prêt
21 SQ CG 110 <--- Détection de qualité de signal
22 9 RI CE 125 <--- Indicateur de sonnerie
23 -- CH 111 ---> Sélecteur de vitesse de données
24 -- CI 112 <--- Sélecteur de vitesse de données
25 TC DA 113 <--- Horloge transmise
---------------------------------------------------------------------------------------------
1 13 1 5
_______________________________ _______________
\ . . . . . . . . . . . . . / \ . . . . . / Connecteurs
\ . . . . . . . . . . . . / \ . . . . / RS-232 vus de
--------------------------- ----------- l'arriére de
14 25 6 9 l'ordinateur
|DB25|DB-9|nom |
+----+----+----+-----------------------------------------------------------------------------
| | :DTE : Equipement terminal de données (i.e. ordinateur)
| | :DCE : Equipement de communication de données (i.e. modem)
| 3 | 2 :RxD : Données reçues; 1 est transmis "bas", 0 "haut"
| 2 | 3 :TxD : Données envoyées; 1 est transmis "bas", 0 "haut"
| 20 | 4 :DTR : DTE annonce qu'il est alimenté et prêt à communiquer
| 6 | 6 :DSR : DCE annonce qu'il est prêt à communiquer; "bas" raccroche le modem
| 4 | 7 :RTS : DTE demande à DCE la permission d'envoyer des données
| 5 | 8 :CTS : DCE agrée la RTS
| 22 | 9 :RI : DCE indique au DTE qu'il tente d'établir une connexion
| 8 | 1 :DCD : DCE annonce qu'une connexion est établie
+----+----+----+-----------------------------------------------------------------------------
2.2 Le logiciel
C'est un peu plus compliqué. Nous allons donc commencer par préparer le terrain, faire quelques tests, puis on améliorera après.
En premier, il faut vérifier sur quelle sortie série vous avez branché votre boitier. Pour rappel:
- /dev/ttyS0 correspond à COM 1 sous MSDOS
- /dev/ttyS1 correspond à COM 2 sous MSDOS
~/genpower-1.0.2/$ su
password:
/home/admin/genpower-1.0.2/# ln -s /dev/ttyS0 /dev/ups
/home/admin/genpower-1.0.2/# exit
Nous ferons donc toujours référence à ce périphérique, à présent.Selon votre ditribution, vérifiez si vous avez les autorisations de lecture/écriture sur /dev/ttySx. C'est béte, mais c'est toujours source de perturbation!
A présent, un petit test?
J'ai trouvé le programme suivant sur usenet, écrit par Alessandro Rubini pour tester le port série. Pour vous éviter de refaire cette recherche, vous pouvez trouver l'archive prète à être compilée sur ce site.
Décompactez, compilez, et lancez le petit éxécutable créé:
~/$ tar xzvf genteste.tar.gz
~/$ cd genteste
~/genteste/$ ./compile genteste
~/genteste/$ ./genteste
Voici le résultat chez moi:
~/genteste/$ ./genteste /dev/ups -rts +dtr 1
CTS DTR DCD
0 0 0
0 0 0
0 0 0
0 0 1 <----- je bascule le bouton
0 0 1 <----- je change rien...
0 0 1 <----- idem....
0 0 0 <----- J'ai rebasculé le bonton!
0 0 0
Terminez par 'Control C' pour stopper le processus.
Ce test est positif, mais si vous voulez, vous pouvez aussi en faire un autre avec le package gepower.
Récupérer l'archive genpower-1.0.2.tar.gz
qui contient les sources de l'utilitaire avec lequel nous allons pouvoir récupérer les signaux sur la prise série.
Ensuite, on décompacte ça et on va dans le répertoire créé:
~/$ tar xzvf genpower-1.0.2.tar.gz
~/$ cd genpower-1.0.2
La prochaine opération, c'est de lire les fichiers README et genpower.docs, puis de créer les executables:
~/genpower-1.0.2/$ make
Surtout pas de make install, on veut juste essayer gentest!A présent, LE test:
~/genpower-1.0.2/$ ./gentest -d /dev/ups
---------------
DTR = Set
RTS = Cleared
CAR = High (*)
CTS = Low ( )
DSR = Low ( )
RNG = Low ( )
---------------
DTR = Set <----- ici, le bouton est basculé
RTS = Cleared
CAR = Low (*)
CTS = Low ( )
DSR = Low ( )
RNG = Low ( )
Terminez par 'Control C' pour stopper le processus.
Bon, en principe, ça fonctionne. A présent, mettons tout cela sur la linuxette.
2.3 Installation
Commencez par récupérer l'archive complete, puis décompactez tout ça. Ensuite passez sous root, puis executez install.sh:
~/$ tar xzvf oupsd-1.0.tar.gz
~/$ cd oupsd-1.0/
~/oupsd-1.0/ $ su
passwrd:
~/oupsd-1.0/ # ./install.sh
Si tout c'est bien passé, vous devriez avoir tout d'installé. En tout état de cause, lisez le fichier README!
Pour rappel:
- Configuration d'init
- Le script powerfail
- Le demon
- Demande du status actuel
Il nous faut avertir correctement Init de ce qu'il doit 'écouter' et quoi faire en fonction des messages, Voici ce que contient mon fichier /etc/inittab:
~/$ cat /etc/inittab | grep power
# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
On voit que selon le signal reçu ('pf', 'pn' ou 'po'), Init appelle le script /etc/init.d/powerfail, et lui passe comme argument l'action à effectuer.Par défaut, sur ma debian, les lignes ne sont pas commentées, mais le script n'est pas présent, bien sur. Et donc là, on ne change rien!
Celui ci est simple, puisque nous n'avons pas besoin de gérer l'interruption de l'arret de la machine (lorsque le courant revient, normalement, l'onduleur peut indiquer à l'ordinateur que celui ci peut reprendre le cours de son travail). De toute façon, le script est tellement simple, que vous pouvez largement l'améliorer!
Entre autre, vous pouvez changer la commande shutdown par ce que vous voulez! Une fois le script powerfail appelé par init, la commande shutdown sera appele une minute apres. Il doit se trouvez dans /etc/init.d/, porter le nom de powerfail, et n'être executable que par root.
Meme remarque que pour le script, nous n'avons pas besoin de quelque chose de très poussé, et donc, on va se contenter d'un démon powerd minimal, basé sur le source original powerd.c, de Miquel van Smoorenburg (je ne suis pas sur de la validité de l'adresse email). Vous pouvez trouver ici meme le source original, trouvé sur le site src.openresources.com. Notre demon ne fait pas grand chose: il regarde le status de la prise, au demarrage du demon, puis attend un changement sur celle ci. Cela permet de placer le bouton dans n'importe quelle position, du momment que le demon le note en premier. Une fois une modification du bouton detectee, le demon attent 15 seconds (afin d'être sur que c'est bien un changement d'etat, puis envoi la commande 'pf' a init. Comme powerfail, le demon ne doit etre executable que par root (par sécurité).
C'est un petit utilitaire que vous pouvez utiliser pour connaitre l'état actuel de la prise. Il se trouve dans /usr/bin, et peut etre appelé soit directement, soit en utilisant le script powerfail de cette facon: /etc/init.d/powerfail status.
A noter: pour la commande d'arret de la machine, utilisez 'man shutdown' pour connaitre l'utilisation de ses parametres, et modifiez dans /etc/init.d/powerfail ceux
que j'ai mis, si ceux-ci ne conviennent pas.


