X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=shell%2Fbin%2Ftemperature.pl;fp=shell%2Fbin%2Ftemperature.pl;h=42eaffe666eb0fe4fa1caf5f4f4ec45f2d11b9a8;hb=29fe133e2b4ca2a25342fa9a4c3e661bc38895f2;hp=0000000000000000000000000000000000000000;hpb=3e17e82d591782b4750382b00c5bf6ee96eddedf;p=config%2Fdotfiles.git diff --git a/shell/bin/temperature.pl b/shell/bin/temperature.pl new file mode 100755 index 0000000..42eaffe --- /dev/null +++ b/shell/bin/temperature.pl @@ -0,0 +1,96 @@ +#!/usr/bin/perl + +# Copyright (C) 2011-2012 Simon Ruderich +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +use strict; +use warnings; + + +if (scalar @ARGV != 1 and (scalar @ARGV != 2 or not $ARGV[0] =~ /-[st]/)) { + print STDERR "Usage: $0 [-s | -t] \n"; + print STDERR "\n"; + print STDERR "Normally this is /sys/devices/platform/*.\n"; + exit 1; +} +if (scalar @ARGV == 1) { + @ARGV = ('', $ARGV[0]); +} + +my $temperature_path = "$ARGV[1]/temp1_input"; +my $critical_path = "$ARGV[1]/temp1_crit"; + +# No temperature information available. +if (not -e $temperature_path or not -e $critical_path) { + print STDERR "'$temperature_path' or '$critical_path' not found.\n"; + exit 1; +} + +my $screen_mode = ($ARGV[0] eq '-s'); +my $tmux_mode = ($ARGV[0] eq '-t'); + +my $temperature; +my $critical; + +my $file; +open $file, '<', $temperature_path or die $!; +$temperature = <$file>; +close $file or die $!; +open $file, '<', $critical_path or die $!; +$critical = <$file>; +close $file or die $!; + +my $value = int($temperature / 1000); +my $risk = ($critical - $temperature)/$critical; + +$value .= "\xb0"; # degree symbol in UTF-8 + +# GNU screen mode with colors. +if ($screen_mode) { + my $color; + if ($risk < 0) { + $color = 'br r'; # bold reverse + } elsif ($risk < 0.1) { + $color = 'b r'; + } elsif ($risk < 0.2) { + $color = 'b y'; + } else { + $color = 'b g'; + } + + print "\005{+$color}$value\005{-}\n"; + +# Same in tmux mode. +} elsif ($tmux_mode) { + my $color; + my $style = 'bold'; + if ($risk < 0) { + $color = 'red'; + $style = 'reverse'; # blink doesn't work for me + } elsif ($risk < 0.1) { + $color = 'red'; + } elsif ($risk < 0.2) { + $color = 'yellow'; + } else { + $color = 'green'; + } + + print "#[fg=$color,$style]$value#[default]\n"; + +# Plain text output. +} else { + print "$value\n"; +}