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

# 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;
use CGI qw(:standard);

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 $YMD;
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;
    $YMD = $PARAMS[0];
    $Interactive = $false;
} else {
    # Assume a storage map by default
    $YMD = $ARGV[0];
    shift;
    $Interactive = $true;
}

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

if ($YMD 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=getDBDailyHiLo","$user");
if (!$dbh) { die("ERROR! Connecting to $DBhost $DBname.\n"); }

my $Query = "SELECT YearMonthDay, YearMonth, bDate, bYear, bMonth, bDay, 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, HourlyOutTempHigh, HourlyOutTempLow, HourlyInTempHigh, HourlyInTempLow, HourlyOutHumHigh, HourlyOutHumLow, HourlyInHumHigh, HourlyInHumLow, HourlyWindSpeedAvg, HourlyWindDirAvg, HourlyWindSpeedHigh, HourlyBarometerHigh, HourlyBarometerLow, HourlyRainAmount, HourlyRainRate, HourlyWindChill, HourlyHeatIndex, HourlySolarRad, HourlyETHigh, HourlyTotalET, HourlyTHSWIndexDT, HourlyDewPointHighDT, HourlyDewPointLowDT, HourlyOutTempHighDT, HourlyOutTempLowDT, HourlyInTempHighDT, HourlyInTempLowDT, HourlyOutHumHighDT, HourlyOutHumLowDT, HourlyInHumHighDT, HourlyInHumLowDT, HourlyWindSpeedAvgDT, HourlyWindDirAvgDT, HourlyWindSpeedHighDT, HourlyBarometerHighDT, HourlyBarometerLowDT, HourlyRainAmountDT, HourlyRainRateDT, HourlyWindChillDT, HourlyHeatIndexDT, HourlySolarRadDT, HourlyETHighDT, UpdateTS as LastUpdate FROM DHL WHERE vpID = \"$vpID\" && YearMonthDay = $YMD";

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 $YearMonthDay = $ref->{YearMonthDay};
my $YearMonth = $ref->{YearMonth};
my $bDate = $ref->{bDate};
my $bYear = $ref->{bYear};
my $bMonth = $ref->{bMonth};
my $bDay = $ref->{bDay};
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 $HourlyOutTempHigh = $ref->{HourlyOutTempHigh};
my $HourlyOutTempLow = $ref->{HourlyOutTempLow};
my $HourlyInTempHigh = $ref->{HourlyInTempHigh};
my $HourlyInTempLow = $ref->{HourlyInTempLow};
my $HourlyOutHumHigh = $ref->{HourlyOutHumHigh};
my $HourlyOutHumLow = $ref->{HourlyOutHumLow};
my $HourlyInHumHigh = $ref->{HourlyInHumHigh};
my $HourlyInHumLow = $ref->{HourlyInHumLow};
my $HourlyWindSpeedAvg = $ref->{HourlyWindSpeedAvg};
my $HourlyWindDirAvg = $ref->{HourlyWindDirAvg};
my $HourlyWindSpeedHigh = $ref->{HourlyWindSpeedHigh};
my $HourlyBarometerHigh = $ref->{HourlyBarometerHigh};
my $HourlyBarometerLow = $ref->{HourlyBarometerLow};
my $HourlyRainAmount = $ref->{HourlyRainAmount};
my $HourlyRainRate = $ref->{HourlyRainRate};
my $HourlyWindChill = $ref->{HourlyWindChill};
my $HourlyHeatIndex = $ref->{HourlyHeatIndex};
my $HourlySolarRad = $ref->{HourlySolarRad};
my $HourlyETHigh = $ref->{HourlyETHigh};
my $HourlyTotalET = $ref->{HourlyTotalET};
my $HourlyTHSWIndexDT = $ref->{HourlyTHSWIndexDT};
my $HourlyDewPointHighDT = $ref->{HourlyDewPointHighDT};
my $HourlyDewPointLowDT = $ref->{HourlyDewPointLowDT};
my $HourlyOutTempHighDT = $ref->{HourlyOutTempHighDT};
my $HourlyOutTempLowDT = $ref->{HourlyOutTempLowDT};
my $HourlyInTempHighDT = $ref->{HourlyInTempHighDT};
my $HourlyInTempLowDT = $ref->{HourlyInTempLowDT};
my $HourlyOutHumHighDT = $ref->{HourlyOutHumHighDT};
my $HourlyOutHumLowDT = $ref->{HourlyOutHumLowDT};
my $HourlyInHumHighDT = $ref->{HourlyInHumHighDT};
my $HourlyInHumLowDT = $ref->{HourlyInHumLowDT};
my $HourlyWindSpeedAvgDT = $ref->{HourlyWindSpeedAvgDT};
my $HourlyWindDirAvgDT = $ref->{HourlyWindDirAvgDT};
my $HourlyWindSpeedHighDT = $ref->{HourlyWindSpeedHighDT};
my $HourlyBarometerHighDT = $ref->{HourlyBarometerHighDT};
my $HourlyBarometerLowDT = $ref->{HourlyBarometerLowDT};
my $HourlyRainAmountDT = $ref->{HourlyRainAmountDT};
my $HourlyRainRateDT = $ref->{HourlyRainRateDT};
my $HourlyWindChillDT = $ref->{HourlyWindChillDT};
my $HourlyHeatIndexDT = $ref->{HourlyHeatIndexDT};
my $HourlySolarRadDT = $ref->{HourlySolarRadDT};
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", "YearMonthDay", $YearMonthDay;
#printf "%-22s %-24s\n", "YearMonth", $YearMonth;
#printf "%-22s %-24s\n", "bDate", $bDate;
#printf "%-22s %-24s\n", "bDay", $bDay;
#printf "%-22s %-24s\n", "bMonth", $bMonth;
#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 ($HourlyBarometerHigh ne "") { printf "%-22s %6s @ %-24s\n", "HourlyBarometerHigh", $HourlyBarometerHigh, $HourlyBarometerHighDT; }
#printf "%-22s %-24s\n", "HourlyBarometerHighDT", $HourlyBarometerHighDT;
if ($HourlyBarometerLow ne "") { printf "%-22s %6s @ %-24s\n", "HourlyBarometerLow", $HourlyBarometerLow, $HourlyBarometerLowDT; }
#printf "%-22s %-24s\n", "HourlyBarometerLowDT", $HourlyBarometerLowDT;
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 ($HourlyHeatIndex ne "") { printf "%-22s %6s @ %-24s\n", "HourlyHeatIndex", $HourlyHeatIndex, $HourlyHeatIndexDT; }
#printf "%-22s %-24s\n", "HourlyHeatIndexDT", $HourlyHeatIndexDT;
if ($HourlyInHumHigh ne "") { printf "%-22s %6s @ %-24s\n", "HourlyInHumHigh", $HourlyInHumHigh, $HourlyInHumHighDT; }
#printf "%-22s %-24s\n", "HourlyInHumHighDT", $HourlyInHumHighDT;
if ($HourlyInHumLow ne "") { printf "%-22s %6s @ %-24s\n", "HourlyInHumLow", $HourlyInHumLow, $HourlyInHumLowDT; }
#printf "%-22s %-24s\n", "HourlyInHumLowDT", $HourlyInHumLowDT;
if ($HourlyInTempHigh ne "") { printf "%-22s %6s @ %-24s\n", "HourlyInTempHigh", $HourlyInTempHigh, $HourlyInTempHighDT; }
#printf "%-22s %-24s\n", "HourlyInTempHighDT", $HourlyInTempHighDT;
if ($HourlyInTempLow ne "") { printf "%-22s %6s @ %-24s\n", "HourlyInTempLow", $HourlyInTempLow, $HourlyInTempLowDT; }
#printf "%-22s %-24s\n", "HourlyInTempLowDT", $HourlyInTempLowDT;
if ($HourlyOutHumHigh ne "") { printf "%-22s %6s @ %-24s\n", "HourlyOutHumHigh", $HourlyOutHumHigh, $HourlyOutHumHighDT; }
#printf "%-22s %-24s\n", "HourlyOutHumHighDT", $HourlyOutHumHighDT;
if ($HourlyOutHumLow ne "") { printf "%-22s %6s @ %-24s\n", "HourlyOutHumLow", $HourlyOutHumLow, $HourlyOutHumLowDT; }
#printf "%-22s %-24s\n", "HourlyOutHumLowDT", $HourlyOutHumLowDT;
if ($HourlyOutTempHigh ne "") { printf "%-22s %6s @ %-24s\n", "HourlyOutTempHigh", $HourlyOutTempHigh, $HourlyOutTempHighDT; }
#printf "%-22s %-24s\n", "HourlyOutTempHighDT", $HourlyOutTempHighDT;
if ($HourlyOutTempLow ne "") { printf "%-22s %6s @ %-24s\n", "HourlyOutTempLow", $HourlyOutTempLow, $HourlyOutTempLowDT; }
#printf "%-22s %-24s\n", "HourlyOutTempLowDT", $HourlyOutTempLowDT;
if ($HourlyRainAmount ne "") { printf "%-22s %6s @ %-24s\n", "HourlyRainAmount", $HourlyRainAmount, $HourlyRainAmountDT; }
#printf "%-22s %-24s\n", "HourlyRainAmountDT", $HourlyRainAmountDT;
if ($HourlyRainRate ne "") { printf "%-22s %6s @ %-24s\n", "HourlyRainRate", $HourlyRainRate, $HourlyRainRateDT; }
#printf "%-22s %-24s\n", "HourlyRainRateDT", $HourlyRainRateDT;
if ($HourlySolarRad ne "") { printf "%-22s %6s @ %-24s\n", "HourlySolarRad", $HourlySolarRad, $HourlySolarRadDT; }
#printf "%-22s %-24s\n", "HourlySolarRadDT", $HourlySolarRadDT;
if ($HourlyTHSWIndex ne "") { printf "%-22s %6s @ %-24s\n", "HourlyTHSWIndex", $HourlyTHSWIndex, $HourlyTHSWIndexDT; }
#printf "%-22s %-24s\n", "HourlyTHSWIndexDT", $HourlyTHSWIndexDT;
if ($HourlyTotalET ne "") { printf "%-22s %-24s\n", "HourlyTotalET", $HourlyTotalET; }
if ($HourlyWindChill ne "") { printf "%-22s %6s @ %-24s\n", "HourlyWindChill", $HourlyWindChill, $HourlyWindChillDT; }
#printf "%-22s %-24s\n", "HourlyWindChillDT", $HourlyWindChillDT;
if ($HourlyWindDirAvg ne "") { printf "%-22s %6s @ %-24s\n", "HourlyWindDirAvg", $HourlyWindDirAvg, $HourlyWindDirAvgDT; }
#printf "%-22s %-24s\n", "HourlyWindDirAvgDT", $HourlyWindDirAvgDT;
if ($HourlyWindSpeedAvg ne "") { printf "%-22s %6s @ %-24s\n", "HourlyWindSpeedAvg", $HourlyWindSpeedAvg, $HourlyWindSpeedAvgDT; }
#printf "%-22s %-24s\n", "HourlyWindSpeedAvgDT", $HourlyWindSpeedAvgDT;
if ($HourlyWindSpeedHigh ne "") { printf "%-22s %6s @ %-24s\n", "HourlyWindSpeedHigh", $HourlyWindSpeedHigh, $HourlyWindSpeedHighDT; }
#printf "%-22s %-24s\n", "HourlyWindSpeedHighDT", $HourlyWindSpeedHighDT;
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(); }

#
