weatherget/weather.sh

92 lines
2.4 KiB
Bash
Raw Normal View History

2020-01-21 14:01:04 -07:00
#!/usr/bin/perl -w
use strict;
use warnings;
use Math::Trig;
sub checksources {
return `./wttrin.sh` or `./weatherbug.sh` or `./weathergov.sh` or print "Not Available\n\n#FF0000" and exit 33;
}
sub wavegen {
my $x = shift;
my $period = shift;
my $phaseshift = shift;
my $magnitude = shift;
my $y_adjust = shift;
return sin($x/($period/pi)+$phaseshift)*$magnitude+$y_adjust;
}
sub hexcolor {
my ($temp,$cold,$hot,$rwave,$gwave,$bwave) = @_;
my $temp_gauge = ($temp - $cold)/($hot - $cold)*100;
my $r = (100 * sin($temp_gauge / 10)) + ($temp_gauge - 30) * 2;
my $g = ($temp_gauge - 50) * ($temp_gauge - 75) * (0 - 1) / 10 + 100;
my $b = ($temp_gauge - 25) * ($temp_gauge - 25) * (0 - 1) / 5 + 100;
$r *= 2;
$g *= 2;
$b *= 2;
#brightness
my $brightness = 270; #out of a max of 768 (white)
#sanitize
$r = $r > 0 ? $r : 0;
$g = $g > 0 ? $g : 0;
$b = $b > 0 ? $b : 0;
$r = $r < 255 ? $r : 255;
$g = $g < 255 ? $g : 255;
$b = $b < 255 ? $b : 255;
if ($r+$g+$b < $brightness) {
$brightness -= ($r+$g+$b);
$r += ($brightness/3);
$g += ($brightness/3);
$b += ($brightness/3);
}
if ($rwave) { $r = $rwave }
if ($gwave) { $g = $gwave }
if ($bwave) { $b = $bwave }
my $CR = unpack("H2",pack("I",$r));
my $CG = unpack("H2",pack("I",$g));
my $CB = unpack("H2",pack("I",$b));
return "#".$CR.$CG.$CB;
}
sub getdir {
my $degree = shift;
if ($degree <= 22 ) { return "↑";}
if ($degree <= 67 ) { return "↗";}
if ($degree <= 112 ) { return "→";}
if ($degree <= 157 ) { return "↘";}
if ($degree <= 202 ) { return "↓";}
if ($degree <= 247 ) { return "↙";}
if ($degree <= 292 ) { return "←";}
if ($degree <= 337 ) { return "↖";}
return "↑";
}
my @weather = split(":",checksources) or print "Not Available\n\n#FF0000" and exit 33;
my $type = $weather[0];
my $temp = sprintf("%.0f", ($weather[1] - 32) * (5/9) ); #converts from F to C
my $wind = $weather[2];
my $wdir = getdir($weather[3]);
my $color = hexcolor($temp,-17,42);
if($type =~ /Rain/) {$type = "";}
elsif ($type =~ /Overcast/) {$type = "";}
elsif ($type =~ /cloud/) {$type = "";}
elsif ($type =~ /Clear/) {$type = "";}
elsif ($type =~ /Sun/) {$type = "";}
elsif ($type =~ /Snow/) {$type = "";}
else {$type=$type."...";}
print $type."  ".$temp."  ".$wdir." ".$wind."mph\n\n";
print $color."\n";