Come gestire i sensori della scheda madreQualche giorno fa un amico mi ha fatto scoprire il pacchetto lm_sensors: una serie di moduli in grado di gestire i sensori presenti nella scheda madre al fine di poter monitorare vari parametri come la velocità delle ventole di raffreddamento, la temperatura interna del computer e le tensioni di alimentazione. Nel sistema in pratica viene creata una nuova directory virtuale /proc/sys/dev/sensors/ attraverso la quale si possono leggere tali valori oltre ai valori soglia. Sebbene nel pacchetto venga fornita anche una libreria linkabile per poter implementare direttamente all'interno dei propri programmi la gestione dei sensori e un demone per il controllo continuo dei loro valori, ci sono una serie di cose che non mi piacciono e che mi hanno spinto a crearmi un qualcosa per conto mio:
Poiché in realtà ogni sistema usa un ridotto numero dei moduli forniti è possibile alleggerire un po' la cosa copiandosi direttamente nella directory misc dei moduli del kernel i file necessari e gestire il tutto lavorando direttamente sui file nella directory /proc. Dopo aver quindi smanettato un po' ho ridotto all'essenziale i moduli, come mostrato dalla lista:
Attenzione perché sebbene risulti che il modulo i2c-piix4 non è utilizzato, se viene rimosso non sarà più possibile accedere correttamente ai dati in /proc. Il modulo i2c-proc serve invece per aggiungere nella directory /proc/bus anche le voci riguardanti il sistema di controllo dei sensori, nel mio caso i seguenti due file:
Non è comunque necessario caricare tale modulo se non ci interessa avere le informazioni sul bus utilizzato. Alla fine dei giochi in definitiva per caricare tutti i moduli necessari al mio sistema per gestire i sensori mi basta dare i seguenti comandi:
A questo punto come dicevo all'interno di /proc/sys/dev/sensors/ sono disponibili una serie di file virtuali contenenti i valori misurati dai sensori; studiando un po' la documentazione fornita e i sorgenti, ho creato un semplice script perl (tipo sconosciuto, 1528 byte) in grado di visualizzare in maniera formattata tali valori:
Il passo successivo è stato quello di creare (questa volta in C) un demone (sorgente C, 6950 byte) in grado di controllare costantemente tali valori e avvisare in caso di problemi; nel programma sono presenti due diverse definizioni del numero di secondi dopo il quale ricontrollare il sistema, a seconda che si sia verificato un allarme oppure no. Il caso di allarme, viene segnalato il problema a tutti gli utenti collegati, e dopo il numero definito di controllo consecutivi con esito negativo, il sistema si spegne automaticamente. Logicamente tutti i problemi che si verificano vengono accuratamente scritti anche nel log si sistema. RIFERIMENTIVi metto a disposizione tutto il materiale, ricordandovi che è stato sviluppato per funzionare sul mio sistema, che monta una scheda madre Asus P2B-F: molto probabilmente sarà necessario modificare i moduli da caricare al boot, adattare i vari nomi dei file da controllare e le costanti per le quali moltiplicare le tensioni di alimentazione.
|