Ce site contient essentiellement des notes de travail. Le contenu est en constante évolution, et loin d'être achevé. (+ d'infos)
La plupart des documentations informatiques sont orientées Debian / Ubuntu.

Electronique/Hardware/Ecrans/LCDSmartie/Perl

De Ordinoscope.net
Sauter à la navigation Sauter à la recherche

Affiche les lignes suivantes:

  • load
  • CPU temp
  • HDD temp
  • Température interne (par lecture préalable du thermomètre embarqué)

Pré-requis

# apt-get install libdevice-serialport-perl


ld023-load-temp.pl

#!/usr/bin/perl -w
use Device::SerialPort;

my $port;
my $i = 0;
my $deg = chr(223);

init ('/dev/ttyUSB0');
while (1) {
	$i++;
	$load = trim (`cat /proc/loadavg | cut -d' ' -f-3`);
	$cputemp = trim (`sensors | grep "CPU Temp" | awk '{print \$3}'`);
	$hddtemp = trim (`hddtemp /dev/sda | awk '{print \$3}'`);

	$cputemp =~ s/[+°C]//g;
	$cputemp = int ($cputemp + 0.5) . $deg . 'C';
	$hddtemp =~ s/°/$deg/g;

	$inttemp = get_temp ();

	send_line (1, "Load: $load");
	send_line (2, "CPU temp: $cputemp");
	send_line (3, "HDD temp: $hddtemp");
	send_line (4, "Int temp: $inttemp");
	sleep (1);
}

sub init {
	my $dev = shift;
	$port = Device::SerialPort->new($dev) || die "Cannot open $dev\n" ;
	$port->databits(8);
	$port->baudrate(9600);
	$port->parity("none");
	$port->stopbits(1);
	$port->write (chr(0xfe) . chr(0x53) . chr(0x75) . chr(0x72) . chr(0x65));
}

sub get_temp {
	$port->write (chr(0xfe) . chr(0x77));
	my $return = $port->read (5);
	$return =~ s/^\s+|\s+$//g;
	return $return;
}

sub send_line {
	my $ln = shift;
	my $str = sprintf ("%-20s", shift);
	$port->write (chr(0xfe) . chr(0x47) . chr(0x01) . chr($ln) . $str);
}

sub send_temp {
	my $ln = shift;
	$port->write (chr(0xfe) . chr(0x57) . chr($ln));
}

sub trim {
	my $str = shift;
	$str =~ s/^\s+|\s+$//g;
	return $str;
}