View unanswered posts | View active topics It is currently Mon Dec 10, 2018 7:12 pm



Reply to topic  [ 1 post ] 
 fit-statUSB: Perl App for Displaying CPU Temp 
Author Message

Joined: Mon May 28, 2012 12:25 pm
Posts: 104
Post fit-statUSB: Perl App for Displaying CPU Temp
Overview

For most of us, color vision is a most effective means of receiving meaningful information. We instantly understand the message being conveyed by the green, yellow, and red lights of a traffic signal. While driving, flashing red or blue lights may indicate trouble - if you are speeding.

Why then can't color be used to indicate certain operational parameters of your computer? The answer is - color can most certainly be used to provide you with a wide variety of information about your computer and the processes it is running.



An Example - CPU Temperature

What's your computer's CPU temperature?

Certainly there are applets which display your computer's CPU temperature to the tenth of a degree C in the system tray or some other such place. However, do you really want to know that temp to the tenth of a degree, or is it sufficient for your purposes to simply know in general how warm your CPU is running? Why not use a color indicator such as fit-statUSB to provide a general idea of CPU temperature.?

The perl app listed below does just that - it provides a color indication of CPU temperature beginning at blue for cold and hot pink for really warm. CPU temperature is displayed by fit-statUSB via a 20 step color continuum.

COLD------------------------WARM--------------------------HOT
######-######-######-######-######-######-######



Sample Output of Perl App Showing App Window and fit-statUSB Output

Cold CPU
Attachment:
Cold combo.jpeg
Cold combo.jpeg [ 22.81 KiB | Viewed 508 times ]



Warm CPU
Attachment:
Warm combo.jpeg
Warm combo.jpeg [ 21.91 KiB | Viewed 508 times ]



Hot CPU
Attachment:
Hot combo.jpeg
Hot combo.jpeg [ 21.68 KiB | Viewed 508 times ]




Perl App Listing

***********************************************************************************************************************************************************
Important Note:

The following perl app has been specifically written to work with fitlet RM running Linux Mint. Without modification, it is unlikely it will work for other computers. This is because the app determines CPU temperature by processing the output of the bash sensor command, and the output format of the sensor command varies from one computer type to the next. This app has been successfully modified to work on a HP15 laptop running Linux Mint, so with proper modification it may work for your computer type as well.
***************************************************************************************************************************************************************



#!/usr/bin/perl -w
#
#fitletCPUtemp.pl

# Darryl Hassell 8/4/2018

use Tk;
use List::MoreUtils qw(first_index);
use Device::SerialPort;
use Time::HiRes ('sleep');

# Define & Initialize Variables

my $CPU_Temp = 0.0;
my $CPU_Temp_Color = '#FFFFFF';
my $Element = 0;

# Configure Serial Port
my $port = Device::SerialPort -> new("/dev/ttyACM0");
$port -> baudrate(115200);
$port -> databits(8);
$port -> parity("none");
$port -> stopbits(1);
$port -> write_settings;

# Set Sleep Delay After Writes in Seconds
our $delay = 0.1;

# Initialize fit-statUSB to Red - Green - Blue - White
$port -> write("#FF0000\n");
$port -> purge_rx;
sleep(2);

$port -> write("#00FF00\n");
$port -> purge_rx;
sleep(2);

$port -> write("#0000FF\n");
$port -> purge_rx;
sleep(2);

$port -> write("#FFFFFF\n");
$port -> purge_rx;
sleep(2);


# Create Main Window
$WinMain = MainWindow->new;
$WinMain -> resizable (0,0);

# Label Main Window
$myframe = $WinMain -> Frame ->pack();
$CPU_Temp_Label = $myframe -> Label (-text => 'fitlet CPU Temp Monitor'."\n"."$CPU_Temp".' Deg. C.', -background => "$CPU_Temp_Color", -font => "helvetica 9 bold")->pack(-ipadx => 20,-ipady => 20);

# Exit Program Button
$stopbutton = $myframe -> Button (-text => 'Exit', -command => \&Exit, -foreground => 'black', -background => 'lightblue');
$stopbutton -> pack (-side => 'bottom');

$WinMain -> repeat(2000, \&GetCPUTemp);

MainLoop();

################################ Exit Program ################################

sub Exit {

$port -> write("#000000\n");
$port -> purge_rx;
sleep($delay);
exit;
}

################################ CPU Temperature Data ################################

sub GetCPUTemp {

$CPU_Temp_Unfiltered1 = `sensors`;

# Read Unfiltered CPU Temperature Data Into Array
@CPU_Temp_Array1 = split ' ', $CPU_Temp_Unfiltered1;

# Determine Array Index of CPU Indicator k10temp-pci-00c3
my $ArrayIndex1 = first_index { $_ eq 'k10temp-pci-00c3' } @CPU_Temp_Array1;

# Determine Array Index of CPU Temperature
my $ArrayIndex2 = $ArrayIndex1 + 5;

# Read CPU Temp Out Of Array
$CPU_Temp_Unfiltered2 = $CPU_Temp_Array1[$ArrayIndex2];

# Capture Only Numbers From String
@CPU_Temp_Array2 = split '°', $CPU_Temp_Unfiltered2;

$CPU_Temp = $CPU_Temp_Array2[0];

if ($CPU_Temp <= 30){
$CPU_Temp_Color = '#0000FF';
$port -> write("#0000FF\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 30 && $CPU_Temp <= 32){
$CPU_Temp_Color = '#0079FF';
$port -> write("#0079FF\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 32 && $CPU_Temp <= 34){
$CPU_Temp_Color = '#00FFFA';
$port -> write("#00FFFA\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 34 && $CPU_Temp <= 36){
$CPU_Temp_Color = '#00FF67';
$port -> write("#00FF67\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 36 && $CPU_Temp <= 38){
$CPU_Temp_Color = '#00FF00';
$port -> write("#00FF00\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 38 && $CPU_Temp <= 40){
$CPU_Temp_Color = '#37FF00';
$port -> write("#37FF00\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 40 && $CPU_Temp <= 42){
$CPU_Temp_Color = '#85FF00';
$port -> write("#85FF00\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 42 && $CPU_Temp <= 44){
$CPU_Temp_Color = '#BEFF00';
$port -> write("#BEFF00\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 44 && $CPU_Temp <= 46){
$CPU_Temp_Color = '#FFFF00';
$port -> write("#FFFF00\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 46 && $CPU_Temp <= 48){
$CPU_Temp_Color = '#FFEB00';
$port -> write("#FFEB00\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 48 && $CPU_Temp <= 50){
$CPU_Temp_Color = '#FFDA00';
$port -> write("#FFDA00\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 50 && $CPU_Temp <= 52){
$CPU_Temp_Color = '#FFCC00';
$port -> write("#FFCC00\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 52 && $CPU_Temp <= 54){
$CPU_Temp_Color = '#FFA500';
$port -> write("#FFA500\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 54 && $CPU_Temp <= 56){
$CPU_Temp_Color = '#FF8800';
$port -> write("#FF8800\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 56 && $CPU_Temp <= 58){
$CPU_Temp_Color = '#FF6500';
$port -> write("#FF6500\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 58 && $CPU_Temp <= 60){
$CPU_Temp_Color = '#FF3700';
$port -> write("#FF3700\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 60 && $CPU_Temp <= 62){
$CPU_Temp_Color = '#FF0000';
$port -> write("#FF0000\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 62 && $CPU_Temp <= 64){
$CPU_Temp_Color = '#FF003E';
$port -> write("#FF003E\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 64 && $CPU_Temp <= 66){
$CPU_Temp_Color = '#FF0097';
$port -> write("#FF0097\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 66 && $CPU_Temp <= 68){
$CPU_Temp_Color = '#FF00BD';
$port -> write("#FF00BD\n");
$port -> purge_rx;
sleep($delay);
}

elsif ($CPU_Temp > 68 && $CPU_Temp <= 70){
$CPU_Temp_Color = '#FF00CA';
$port -> write("#FF00CA\n");
$port -> purge_rx;
sleep($delay);
}

else {
$CPU_Temp_Color = '#FFB6F5';
$port -> write("#FFB6F5\n");
$port -> purge_rx;
sleep($delay);
}

$CPU_Temp_Label -> configure (-text => 'fitlet CPU Temp Monitor'."\n"."$CPU_Temp".' Deg. C.', -background => "$CPU_Temp_Color");

}




Conclusions

fitstat-USB is a very useful tool for displaying CPU temperature. It makes a great accessory for Compulab's fitlet computer.


Mon Aug 06, 2018 3:23 am
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 1 post ] 

Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF.