trinity-users@lists.pearsoncomputing.net

Message: previous - next
Month: December 2016

Re: [trinity-users] "Arbitrary changes to their UI"

From: midi-pascal <midi-pascal@...>
Date: Fri, 9 Dec 2016 20:02:54 -0500
<snip>
>>> I'm that guy off screen, haveing handily exceeded the average life
>>> time the media is going nuts over.
>>>
>>> This is off topic as can be, but calling the service has never
>>> actually put me in touch with anybody that knew what I was talking
>>> about. so...
>>>
>>> However, your sig makes me lodge a conplaint about a service thats
>>> has apparently been discontinued, eg the access to current
>>> conditions at "KCKB", or for that matter any other net station.
>>>
>>> I have a system monitor called gkrellm that has a weather plugin,
>>> and its last valid connection was July 28th, 11:53 pm. I found it
>>> quite handy, and since it was a totally automated service, self
>>> updating at about 30 minute intervals, saw no financial advantage
>>> for NWS/you in shutting off that service.  Can it not be restored? I
>>> believe the problem lies in the DNS lookup of KCKB or any other of
>>> the 4 letter station codes used for this service nationwide. You can
>>> PM me at gheskett at shentel dot net
>> I made a workaround for this problem when gkrellm weather plugin
>> stopped working.
>> It is only a Perl script (native to the plugin) to modify.
>> If   you are interested I can send it with instructions to this list.
>>
>> Cheers.
>>
> Please, send away!  And thank you, as a perl geek I am not. I speak just
> enough C or assembly(on a 6x09 platform), to be dangerous.
Here is  the Perl script in attachment :-)
The problem is that the URL to fetch the weather data changed and the 
data format too...

The script name is: GrabWeather
To install it, replace the existing one in /usr/share/gkrellm/:
sudo cp GrabWeather /usr/share/gkrellm/
make sure it is executable:
sudo chmod 755 /usr/share/gkrellm/GrabWeather

Then restart gkrellm.
That's it!

Disclaimer :-)
It worked perfectly for me but I cannot ensure it will work for you...

Enjoy!

midi-pascal
#!/usr/bin/perl

#
# Grabs the latest local weather conditions from the 
# National Weather Service (NWS).  Uses the decoded METAR reports.
#
# Need to give the 4-character METAR station code on the 
# Command Line. E.g.;
#
#           GrabWeather YSSY
#


use strict;
use IO::File;

my $StationID    = uc shift @ARGV or die "Usage: $0 <station-id>\n";
my $ReportDir  = '.wmWeatherReports';
my $WeatherSrc = 'http://tgftp.nws.noaa.gov/data/observations/metar/decoded/';
my $DataFileName;
my $TxtFileName;
my $home;

sub initialize
{
  #  Change to users home directory.
  $home = $ENV{HOME} || (getpwuid($<))[7];
  chdir() || chdir($home) or die "chdir '$home' failed: $!";
  # Create the report directory if needed
  unless(-e $ReportDir) {
    mkdir $ReportDir, 0755 or die "unable to mkdir '$ReportDir': $!";
  }
  chdir $ReportDir or die "chdir '$ReportDir' failed: $!";
  # Set the file name to get from $WeatherSrc
  $TxtFileName = "$StationID.TXT";
  # Set the file name for results
  $DataFileName = "$StationID.dat";

  # Get the html file from $WeatherSrc
  my $cmd = qq{wget --proxy=off --passive-ftp --tries=0 --quiet } .
            qq{--output-document=$home/$ReportDir/$TxtFileName $WeatherSrc/$TxtFileName};
  `$cmd` == 0 or die "unable to fetch weather: $?";
}

############################################ main ############################################
initialize();

#
# Parse TXT File. 
#

my %stats = (
  temp           => -99.0, #
  chill          => -99.0,
  dew_point      => -99.0, #
  pressure       => -99.0, #
  humidity       => -99.0, #
  universal_time => '99:99',
);


my $fh = new IO::File $TxtFileName 
  or die "unable to read '$TxtFileName': $!";

my $line = 0;
while (<$fh>) {
  chomp;
  if ($line == 0) {
    $stats{station_info} = $1, next if /^(.*)\s\(/;
    $line++;
  }
  $stats{update_time}  = $1, next if / ([0-2.][0-9.]:[0-5.][0-9.])\s[AP]M/;
  $stats{sky_conditions} = $1, next if /Sky conditions: (.*)/;
  $stats{temp} = $1, next if /Temperature:\s*(\-{0,1}[0-9.]{1,}).*/;
  $stats{chill} = $1, next if /Windchill:\s*(\-{0,1}[0-9.]{1,}).*/;
  $stats{dew_point} = $1, next if /Dew Point:\s*(\-{0,1}[0-9.]{1,}).*/;
  $stats{pressure} = $2, next if /Pressure\s\(altimeter\):\s*(.*)\s*([0-9.]{4,}).*/;
  $stats{humidity} = $1, next if /Relative Humidity:\s*(\d{1,})\%.*/;
  $stats{coded_metar} = $1, next if /ob: (.*)/;
}
close $fh or die "error closing '$TxtFileName': $!";

#
#  Isolate the Wind groups out of the coded METAR report.
#  There may be two groups - the normal one and a variability set.
#
$stats{wind_group} = $stats{coded_metar};
$stats{wind_group} =~ s/ RMK\s.*$//;

$stats{var_flag} = 1 if $stats{wind_group} =~ /\d+(KT|MPS)\s\d+V\d+\s/;
if ($stats{wind_group} =~ /\s(\w{3})(?:(\d+)G)?(\d+)(KT|MPS)\s/) {
  @stats{qw( direction speed1 speed2 )} = ($1, $2, $3);
  if ($4 eq 'MPS') {
    $stats{speed1} *= 1.942 if defined $stats{speed1};
    $stats{speed2} *= 1.942; 
  }
}

#
#  Get the Time out of the coded Metar Report.
#

if ($stats{coded_metar} =~ /$StationID \d+?(\d{2})(\d{2})Z/) {
  $stats{universal_time} = "$1:$2";
}

#
#  Write out the stuff we need to the Data File. This is the file that will
#  be read by GKrellWeather.
#
#print "$DataFileName\n";
my $fh = $STDOUT; my $fh = new IO::File ">$DataFileName" 
  or die "unable to write '$DataFileName': $!";

print $fh
  map { "$stats{$_}\n" }
    qw( station_info update_time sky_conditions universal_time
        temp dew_point chill pressure humidity );

if (not exists $stats{direction}) {
  print $fh "-99\n";
} elsif ($stats{direction} =~ /VRB/) {
  print $fh "99\n";
} elsif ($stats{var_flag}) {
  print $fh $stats{direction} * -1, "\n";
} else {
  print $fh $stats{direction} + 0, "\n";
}

if (not $stats{direction}) {
  print $fh "-99\n";
} elsif (defined $stats{speed1} and defined $stats{speed2}) {
  my $ave_speed = (($stats{speed1} + $stats{speed2})/2.0) * 1.15155;
  print $fh "-$ave_speed\n";
} else {
  print $fh $stats{speed2} * 1.15155, "\n";
}

close $fh or die "error closing '$DataFileName': $!";