#!/usr/bin/perl
#
        my $Version = "1.0.1";

# You need to set your $password below
#
# Use as is, user assumes all risk, no warranty is expressed or implied. This
# has been rigorously tested but hey, this is Open Source, use at your own risk.
#
# Copyright 2012 Curtis J Blank a.k.a. curtronics dot com
# Subject to GPL License
#

use strict;
use DBI;

my $user = "<user>";
my $DBhost = "localhost";
my $DBname = "Weather";
my $vpID = 0;	# Vantage Pro Console ID 0 (zero is default)

my $true = 1;
my $false = 0;

my $Y;
my $Interactive;

my $QUERY_STRING = $ENV{'QUERY_STRING'};
if ($QUERY_STRING ne "") {
    # run as CGI, so look at env variables
    my @PARAMS = split /\+/, $QUERY_STRING;
    $Y = $PARAMS[0];
    $Interactive = $false;
} else {
    # Assume a storage map by default
    $Y = $ARGV[0];
    shift;
    $Interactive = $true;
}

if (! $Interactive) { print "Content-type: text/html\n\n<pre>\n\n"; }

if ($Y eq "") {
    exit(1);
}

sub max {
    my $max = shift(@_);
    my $tmpmax;
    foreach $tmpmax (@_) { $max = $tmpmax if $max < $tmpmax; }
    return $max;
}

sub min {
    my $min = shift(@_);
    my $tmpmin;
    foreach $tmpmin (@_) { $min = $tmpmin if $tmpmin < $min; }
    return $min;
}

my $dbh = DBI->connect("DBI:mysql:$DBname;mysql_read_default_file=~$user/.my.cnf;mysql_read_default_group=getDBYearlyHiLo","$user");
if (!$dbh) { die("ERROR! Connecting to $DBhost $DBname.\n"); }

my $Query = "SELECT bYear, InTempHigh, InTempLow, OutTempHigh, OutTempLow, InHumHigh, InHumLow, OutHumHigh, OutHumLow, WindSpeedHigh, WindSpeedLow, BarometerHigh, BarometerLow, TotalRain, RainDayTotal, RainRateHigh, WindChillLow, HeatIndexHigh, SolarRadHigh, UVHigh, TotalET, ETDayTotal, DewPointHigh, DewPointLow, THSWHigh, InTempHighDT, InTempLowDT, OutTempHighDT, OutTempLowDT, InHumHighDT, InHumLowDT, OutHumHighDT, OutHumLowDT, WindSpeedHighDT, WindSpeedLowDT, BarometerHighDT, BarometerLowDT, RainDayTotalDT, RainRateHighDT, WindChillLowDT, HeatIndexHighDT, SolarRadHighDT, UVHighDT, ETDayTotalDT, DewPointHighDT, DewPointLowDT, THSWHighDT, HourlyTHSWIndex, HourlyDewPointHigh, HourlyDewPointLow, HourlyETHigh, HourlyTotalET, HourlyTHSWIndexDT, HourlyDewPointHighDT, HourlyDewPointLowDT, HourlyETHighDT, UpdateTS as LastUpdate FROM YHL WHERE vpID = \"$vpID\" && bYear= $Y";

my $sth = $dbh->prepare($Query);
#printf stderr "\nQuerying DB... ";
$sth = $dbh->prepare($Query);
$sth->execute();
#printf stderr "Done.\n";

my $samples = $sth->rows;
my $avgCount = max(int($samples*0.01),1);

#printf stderr "\nSetting up list...\n\n";
my $ref = $sth->fetchrow_hashref();
my $bYear = $ref->{bYear};
my $InTempHigh = $ref->{InTempHigh};
my $InTempLow = $ref->{InTempLow};
my $OutTempHigh = $ref->{OutTempHigh};
my $OutTempLow = $ref->{OutTempLow};
my $InHumHigh = $ref->{InHumHigh};
my $InHumLow = $ref->{InHumLow};
my $OutHumHigh = $ref->{OutHumHigh};
my $OutHumLow = $ref->{OutHumLow};
my $WindSpeedHigh = $ref->{WindSpeedHigh};
my $WindSpeedLow = $ref->{WindSpeedLow};
my $BarometerHigh = $ref->{BarometerHigh};
my $BarometerLow = $ref->{BarometerLow};
my $TotalRain = $ref->{TotalRain};
my $RainDayTotal = $ref->{RainDayTotal};
my $RainRateHigh = $ref->{RainRateHigh};
my $WindChillLow = $ref->{WindChillLow};
my $HeatIndexHigh = $ref->{HeatIndexHigh};
my $SolarRadHigh = $ref->{SolarRadHigh};
my $UVHigh = $ref->{UVHigh};
my $TotalET = $ref->{TotalET};
my $ETDayTotal = $ref->{ETDayTotal};
my $DewPointHigh = $ref->{DewPointHigh};
my $DewPointLow = $ref->{DewPointLow};
my $THSWHigh = $ref->{THSWHigh};
my $InTempHighDT = $ref->{InTempHighDT};
my $InTempLowDT = $ref->{InTempLowDT};
my $OutTempHighDT = $ref->{OutTempHighDT};
my $OutTempLowDT = $ref->{OutTempLowDT};
my $InHumHighDT = $ref->{InHumHighDT};
my $InHumLowDT = $ref->{InHumLowDT};
my $OutHumHighDT = $ref->{OutHumHighDT};
my $OutHumLowDT = $ref->{OutHumLowDT};
my $WindSpeedHighDT = $ref->{WindSpeedHighDT};
my $WindSpeedLowDT = $ref->{WindSpeedLowDT};
my $BarometerHighDT = $ref->{BarometerHighDT};
my $BarometerLowDT = $ref->{BarometerLowDT};
my $RainDayTotalDT = $ref->{RainDayTotalDT};
my $RainRateHighDT = $ref->{RainRateHighDT};
my $WindChillLowDT = $ref->{WindChillLowDT};
my $HeatIndexHighDT = $ref->{HeatIndexHighDT};
my $SolarRadHighDT = $ref->{SolarRadHighDT};
my $UVHighDT = $ref->{UVHighDT};
my $ETDayTotalDT = $ref->{ETDayTotalDT};
my $DewPointHighDT = $ref->{DewPointHighDT};
my $DewPointLowDT = $ref->{DewPointLowDT};
my $THSWHighDT = $ref->{THSWHighDT};
my $HourlyTHSWIndex = $ref->{HourlyTHSWIndex};
my $HourlyDewPointHigh = $ref->{HourlyDewPointHigh};
my $HourlyDewPointLow = $ref->{HourlyDewPointLow};
my $HourlyETHigh = $ref->{HourlyETHigh};
my $HourlyTotalET = $ref->{HourlyTotalET};
my $HourlyTHSWIndexDT = $ref->{HourlyTHSWIndexDT};
my $HourlyDewPointHighDT = $ref->{HourlyDewPointHighDT};
my $HourlyDewPointLowDT = $ref->{HourlyDewPointLowDT};
my $HourlyETHighDT = $ref->{HourlyETHighDT};
my $LastUpdate = $ref->{LastUpdate};

if ($LastUpdate ne "0000-00-00 00:00:00") { printf "%-22s        @ %-24s\n", "LastUpdate", $LastUpdate; }
#printf "%-22s %-24s\n", "bYear", $bYear;
if ($BarometerHigh ne "") { printf "%-22s %6s @ %-24s\n", "BarometerHigh", $BarometerHigh, $BarometerHighDT; }
#printf "%-22s %-24s\n", "BarometerHighDT", $BarometerHighDT;
if ($BarometerLow ne "") { printf "%-22s %6s @ %-24s\n", "BarometerLow", $BarometerLow, $BarometerLowDT; }
#printf "%-22s %-24s\n", "BarometerLowDT", $BarometerLowDT;
if ($DewPointHigh ne "") { printf "%-22s %6s @ %-24s\n", "DewPointHigh", $DewPointHigh, $DewPointHighDT; }
#printf "%-22s %-24s\n", "DewPointHighDT", $DewPointHighDT;
if ($DewPointLow ne "") { printf "%-22s %6s @ %-24s\n", "DewPointLow", $DewPointLow, $DewPointLowDT; }
#printf "%-22s %-24s\n", "DewPointLowDT", $DewPointLowDT;
if ($ETDayTotal ne "") { printf "%-22s %6s @ %-24s\n", "ETDayTotal", $ETDayTotal, $ETDayTotalDT; }
#printf "%-22s %-24s\n", "ETDayTotalDT", $ETDayTotalDT;
if ($HeatIndexHigh ne "") { printf "%-22s %6s @ %-24s\n", "HeatIndexHigh", $HeatIndexHigh, $HeatIndexHighDT; }
#printf "%-22s %-24s\n", "HeatIndexHighDT", $HeatIndexHighDT;
if ($HourlyDewPointHigh ne "") { printf "%-22s %6s @ %-24s\n", "HourlyDewPointHigh", $HourlyDewPointHigh, $HourlyDewPointHighDT; }
#printf "%-22s %-24s\n", "HourlyDewPointHighDT", $HourlyDewPointHighDT;
if ($HourlyDewPointLow ne "") { printf "%-22s %6s @ %-24s\n", "HourlyDewPointLow", $HourlyDewPointLow, $HourlyDewPointLowDT; }
#printf "%-22s %-24s\n", "HourlyDewPointLowDT", $HourlyDewPointLowDT;
if ($HourlyETHigh ne "") { printf "%-22s %6s @ %-24s\n", "HourlyETHigh", $HourlyETHigh, $HourlyETHighDT; }
#printf "%-22s %-24s\n", "HourlyETHighDT", $HourlyETHighDT;
if ($HourlyTHSWIndex ne "") { printf "%-22s %6s @ %-24s\n", "HourlyTHSWIndex", $HourlyTHSWIndex, $HourlyTHSWIndexDT; }
#printf "%-22s %-24s\n", "HourlyTHSWIndexDT", $HourlyTHSWIndexDT;
printf "%-22s %-24s\n", "HourlyTotalET", $HourlyTotalET;
if ($InHumHigh ne "") { printf "%-22s %6s @ %-24s\n", "InHumHigh", $InHumHigh, $InHumHighDT; }
#printf "%-22s %-24s\n", "InHumHighDT", $InHumHighDT;
if ($InHumLow ne "") { printf "%-22s %6s @ %-24s\n", "InHumLow", $InHumLow, $InHumLowDT; }
#printf "%-22s %-24s\n", "InHumLowDT", $InHumLowDT;
if ($InTempHigh ne "") { printf "%-22s %6s @ %-24s\n", "InTempHigh", $InTempHigh, $InTempHighDT; }
#printf "%-22s %-24s\n", "InTempHighDT", $InTempHighDT;
if ($InTempLow ne "") { printf "%-22s %6s @ %-24s\n", "InTempLow", $InTempLow, $InTempLowDT; }
#printf "%-22s %-24s\n", "InTempLowDT", $InTempLowDT;
if ($OutHumHigh ne "") { printf "%-22s %6s @ %-24s\n", "OutHumHigh", $OutHumHigh, $OutHumHighDT; }
#printf "%-22s %-24s\n", "OutHumHighDT", $OutHumHighDT;
if ($OutHumLow ne "") { printf "%-22s %6s @ %-24s\n", "OutHumLow", $OutHumLow, $OutHumLowDT; }
#printf "%-22s %-24s\n", "OutHumLowDT", $OutHumLowDT;
if ($OutTempHigh ne "") { printf "%-22s %6s @ %-24s\n", "OutTempHigh", $OutTempHigh, $OutTempHighDT; }
#printf "%-22s %-24s\n", "OutTempHighDT", $OutTempHighDT;
if ($OutTempLow ne "") { printf "%-22s %6s @ %-24s\n", "OutTempLow", $OutTempLow, $OutTempLowDT; }
#printf "%-22s %-24s\n", "OutTempLowDT", $OutTempLowDT;
if ($RainDayTotal ne "") { printf "%-22s %6s @ %-24s\n", "RainDayTotal", $RainDayTotal, $RainDayTotalDT; }
#printf "%-22s %-24s\n", "RainDayTotalDT", $RainDayTotalDT;
if ($RainRateHigh ne "") { printf "%-22s %6s @ %-24s\n", "RainRateHigh", $RainRateHigh, $RainRateHighDT; }
#printf "%-22s %-24s\n", "RainRateHighDT", $RainRateHighDT;
if ($SolarRadHigh ne "") { printf "%-22s %6s @ %-24s\n", "SolarRadHigh", $SolarRadHigh, $SolarRadHighDT; }
#printf "%-22s %-24s\n", "SolarRadHighDT", $SolarRadHighDT;
if ($THSWHigh ne "") { printf "%-22s %6s @ %-24s\n", "THSWHigh", $THSWHigh, $THSWHighDT; }
#printf "%-22s %-24s\n", "THSWHighDT", $THSWHighDT;
if ($TotalET ne "") { printf "%-22s %6s\n", "TotalET", $TotalET; }
if ($TotalRain ne "") { printf "%-22s %6s\n", "TotalRain", $TotalRain; }
if ($UVHigh ne "") { printf "%-22s %6s @ %-24s\n", "UVHigh", $UVHigh, $UVHighDT; }
#printf "%-22s %-24s\n", "UVHighDT", $UVHighDT;
if ($WindChillLow ne "") { printf "%-22s %6s @ %-24s\n", "WindChillLow", $WindChillLow, $WindChillLowDT; }
#printf "%-22s %-24s\n", "WindChillLowDT", $WindChillLowDT;
if ($WindSpeedHigh ne "") { printf "%-22s %6s @ %-24s\n", "WindSpeedHigh", $WindSpeedHigh, $WindSpeedHighDT; }
#printf "%-22s %-24s\n", "WindSpeedHighDT", $WindSpeedHighDT;
if ($WindSpeedLow ne "") { printf "%-22s %6s @ %-24s\n", "WindSpeedLow", $WindSpeedLow, $WindSpeedLowDT; }
#printf "%-22s %-24s\n", "WindSpeedLowDT", $WindSpeedLowDT;

if ($sth) { $sth->finish(); }
if ($dbh) { $dbh->disconnect(); }

#
