Logo PJ
Home
Arcade
Musica
Bicicletta
FabLab
Linux
DreamBox
Giochi
 
   Introduzione   Perle   Programmi   SSH   SAMBA   Firewall   GPS   WIFI   Jukebox   PCcar 

Gestione di un UPS dumb

Se c'è una cosa che odio dell'ambiente Linux è quando ti danno direttamente gli eseguibili dei programmi: stai sicuro che ci sarà sempre qualche rogna in agguato! Mi è successo con i driver per la Sound Blaster Live (non li posso usare in kernel maggiori alla 2.2.9 o nei 2.3.x) e mi è successo pure con il programma per gestire il mio UPS della Online: probabilmente a causa delle nuove librerie glibc il programma mi va in segmentation fault ogni volta che lo lancio.

Nella vita non bisogna mai arrendersi e quindi mi sono preso il programma powerd di Miquel van Smoorenburg, la cui funzione è appunto quella di gestire i gruppi di continuità. Pure troppo bene in quanto appunto per poter essere il più generico possibile permette di lavorare con UPS smart (utilizzano la seriale per mandare e ricevere comandi in maniera classica), UPS dumb (utilizzano i segnali della seriale per indicare lo stato della corrente e delle batterie), con segnali di mancata corrente arrivati dalla rete (non quella elettrica!) e da stream di dati. In poche parole un programma abbastanza complesso, in cui il solo capire quali sono i segnali da utilizzare e come configurarli diventa una agonia.

Visto che quello che serve a me, come penso a molte altre persone che utilizzano Linux in ambiente domestico, è un semplice programmino che controlli i segnali della seriale e si comporti di conseguenza, mi sono armato di editor e mi sono scritto un programma per conto mio: in definitiva, a conti fatti, non ci sono molte cose da dover gestire e quindi in una mezza giornata si possono ottenere buoni risultati.

La cosa che in realtà mi ha creato qualche problema è stato il capire come bisogna segnalare a init che è andata via la corrente (questo in realtà in maniera empirica lo avevo capito) e che la batteria è ormai scarica e occorre spegnere il sistema. L'ambiente Unix, e quindi ancora di più Linux, rendono disponibili in linea numerosi manuali, il problema alle volte è solo quello di capire dove cercare una cosa: vuoi capire come init gestisce l'assenza di corrente? man init! ci vuol tanto??

Prima di procedere con la descrizione del programma, occorre che vi dica quali segnali della seriale gestisce il mio UPS, in modo che sia per voi molto semplice modificarli secondo le vostre esigenze.


Pin Segnale Stato Descrizione
1 CD Normalmente aperto Viene chiuso in caso di blackout o di tensione di rete in ingresso al di fuori dell'intervallo permesso.
5 Massa   Collegamento di massa
7 RTS   Quando arriva un segnale positivo (da 5V a 12V DC) l'UPS si spegne.
8 CTS Normalmente aperto Viene chiuso quando le batterie sono così scariche da consentire, in condizione di carico al 100% collegato all'UPS, un'autonomia inferiore ai 2 minuti.
9 RING Normalmente chiuso Viene aperto in caso di blackout o di tensione di rete in ingresso al di fuori dell'intervallo permesso.

Inoltre l'UPS si spegne automaticamente quando non rileva più tensione sulla porta seriale (cioé quando è stato spento il computer).

Il programma quindi apre la porta seriale, abbassa il segnale RTS altrimenti in caso di assenza di corrente l'UPS si spegnerebbe subito e comincia a monitorare lo stato della seriale; nel caso rilevi dei cambiamenti provvede ad avvisare gli utenti collegati al sistema e il processo init, che si gestisce gli eventi come definito nel file /etc/inittab. Vi mostro qui a titolo di esempio come ho configurato le tre voci in questione:

# Manca la corrente pf::powerfail:/sbin/shutdown -h +10 \ "**MANCA LA CORRENTE** Salvare tutti i lavori in corso..." # La batteria e' esaurita pn::powerfailnow:/sbin/shutdown -h now \ "**LA BATTERIA E' ESAURITA** Spegnimento del sistema in corso..." # E' tornata la corrente pr:12345:powerokwait:/sbin/shutdown -c \ "**E' TORNATA LA CORRENTE** Il sistema riprende le normali operazioni"

RIFERIMENTI

Vi metto a disposizione i file necessari per gestire il gruppo di continuità. Vi ricordo di controllare accuratamente che segnali della seriale gestisce il vostro UPS e di modificare il programma di conseguenza (mi è successo un paio di volte durante le prove del powerd che nel momento di assenza di corrente l'UPS si spegnesse immediatamente, per la gioia del pinguino). Il programma si riferisce a /dev/UPS, che nel mio sistema è un link simbolico al dispositivo seriale che pilota il gruppo di continuità.

  • Il sito ufficiale del programma powerd a cui mi sono ispirato.
  • Il demone (sorgente C, 4409 byte) per il controllo constante dei valori della seriale.
  • Lo script di init (tipo sconosciuto, 613 byte) per lanciare il demone in ambiente RedHat o Mandrake.