<?php
/******************************************************************************
* Weather Display clientraw.txt current conditions parser
* Copyright (C) 2005 Anole Computer Services, LLC
* scripts@anolecomputer.com
*
* 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 2
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
*******************************************************************************
* This script parses the Weather Display Generated clientraw files to
* provide the data for a php based web site
*
* parse_clientraw.php v 2.0
*******************************************************************************/

/********************************************/
/*********** User Configuration *************/
/********************************************/

// clientraw.txt PATH: defines the path to the clientraw.txt file. 
// path can be absolute or relative
// THIS IS NOT A URL!!
// if using WD clientrawextra.txt supply the path to the directory in which
// it resides.
$clientraw_path  ='./'; 

// temp conversion precision
// determines the number of decimal places
$temp_prec = '1';

// wind conversion precision
// determines the number of decimal places
$wind_prec = '1';

// barometer conversion precision
// determines the number of decimal places
$barom_prec = '2';

// rain conversion precision
// determines the number of decimal places
$rain_prec = '2';


/******************************************************/
/************ End of User Configuration ***************/
/******************************************************/

/***************/
/* HERE WE GO! */
/***************/

// get the data files
$dataraw = file_get_contents("$clientraw_path/clientraw.txt");
$datarawextra = file_get_contents("$clientraw_path/clientrawextra.txt");

// put the  data into arrays
$data = explode(" ", $dataraw);
$dataextra = explode(" ", $datarawextra);

// HUMIDITY
(float)$Humidity = "$data[5]";

// TEMPERATURE
// current
(float)$Temp = "$data[4]";
//$Temp = sprintf("%01.1f", CtoF($Temp, $temp_prec));

(float)$WindChill = "$data[44]";
//$WindChill = sprintf("%01.1f",CtoF($WindChill, $temp_prec));

(float)$HeatIndex = "$data[112]";
//$HeatIndex = sprintf("%01.1f",CtoF($HeatIndex, $temp_prec));

(float)$DewPoint = "$data[72]";
//$DewPoint = sprintf("%01.1f",CtoF($DewPoint, $temp_prec));

// historical
(float)$TempMonthHigh = $dataextra[61];
//$TempMonthHigh = sprintf("%01.1f", CtoF($TempMonthHigh, $temp_prec));
$TempMonthHighTime = date('g:ia' , strtotime("$dataextra[62]:$dataextra[63]"));
$TempMonthHighDate = "$dataextra[65]/$dataextra[64]/$dataextra[66]";

(float)$TempMonthLow = $dataextra[67];
//$TempMonthLow = sprintf("%01.1f", CtoF($TempMonthLow, $temp_prec));
$TempMonthLowTime = date('g:ia' , strtotime("$dataextra[68]:$dataextra[69]"));
$TempMonthLowDate = "$dataextra[71]/$dataextra[70]/$dataextra[72]";

(float)$TempYearHigh = $dataextra[187];
//$TempYearHigh = sprintf("%01.1f", CtoF($TempYearHigh, $temp_prec));
$TempYearHighTime = date('g:ia' , strtotime("$dataextra[188]:$dataextra[189]"));
$TempYearHighDate = "$dataextra[191]/$dataextra[190]/$dataextra[192]";

(float)$TempYearLow = $dataextra[193];
//$TempYearLow = sprintf("%01.1f", CtoF($TempYearLow, $temp_prec));
$TempYearLowTime = date('g:ia' , strtotime("$dataextra[194]:$dataextra[195]"));
$TempYearLowDate = "$dataextra[197]/$dataextra[196]/$dataextra[198]";

(float)$TempAllTimeHigh = $dataextra[313];
//$TempAllTimeHigh = sprintf("%01.1f", CtoF($TempAllTimeHigh, $temp_prec));
$TempAllTimeHighTime = date('g:ia' , strtotime("$dataextra[314]:$dataextra[315]"));
$TempAllTimeHighDate = "$dataextra[317]/$dataextra[316]/$dataextra[318]";

(float)$TempAllTimeLow = $dataextra[319];
//$TempAllTimeLow = sprintf("%01.1f", CtoF($TempAllTimeLow, $temp_prec));
$TempAllTimeLowTime = date('g:ia' , strtotime("$dataextra[320]:$dataextra[321]"));
$TempAllTimeLowDate = "$dataextra[323]/$dataextra[322]/$dataextra[324]";

(float)$HeatIndexMonthHigh = $dataextra[175];
//$HeatIndexMonthHigh = sprintf("%01.1f", CtoF($HeatIndexMonthHigh, $temp_prec));
$HeatIndexMonthHighTime = date('g:ia' , strtotime("$dataextra[176]:$dataextra[177]"));
$HeatIndexMonthHighDate = "$dataextra[179]/$dataextra[178]/$dataextra[180]";

(float)$HeatIndexYearHigh = $dataextra[301];
//$HeatIndexYearHigh = sprintf("%01.1f", CtoF($HeatIndexYearHigh, $temp_prec));
$HeatIndexYearHighTime = date('g:ia' , strtotime("$dataextra[302]:$dataextra[303]"));
$HeatIndexYearHighDate = "$dataextra[305]/$dataextra[304]/$dataextra[306]";

(float)$HeatIndexAllTimeHigh = $dataextra[427];
//$HeatIndexAllTimeHigh = sprintf("%01.1f", CtoF($HeatIndexAllTimeHigh, $temp_prec));
$HeatIndexAllTimeHighTime = date('g:ia' , strtotime("$dataextra[428]:$dataextra[429]"));
$HeatIndexAllTimeHighDate = "$dataextra[431]/$dataextra[430]/$dataextra[432]";

(float)$WindChillMonthLow = $dataextra[133];
//$WindChillMonthLow = sprintf("%01.1f", CtoF($WindChillMonthLow, $temp_prec));
$WindChillMonthLowTime = date('g:ia' , strtotime("$dataextra[134]:$dataextra[135]"));
$WindChillMonthLowDate = "$dataextra[137]/$dataextra[136]/$dataextra[138]";

(float)$WindChillYearLow = $dataextra[259];
//$WindChillYearLow = sprintf("%01.1f", CtoF($WindChillYearLow, $temp_prec));
$WindChillYearLowTime = date('g:ia' , strtotime("$dataextra[260]:$dataextra[261]"));
$WindChillYearLowDate = "$dataextra[263]/$dataextra[262]/$dataextra[264]";

(float)$WindChillAllTimeLow = $dataextra[385];
//$WindChillAllTimeLow = sprintf("%01.1f", CtoF($WindChillAllTimeLow, $temp_prec));
$WindChillAllTimeLowTime = date('g:ia' , strtotime("$dataextra[386]:$dataextra[387]"));
$WindChillAllTimeLowDate = "$dataextra[389]/$dataextra[388]/$dataextra[390]";

// WIND
// current
(float)$Wind = round($data[1],1);
$Wind = KTStoKMH($Wind, $wind_prec);
if ($Wind == 0) {
   $Wind = "Windstil";
} // end if

(float)$Gust = round($data[2],1);
$Gust = KTStoKMH($Gust, $wind_prec);

$WindDir = "$data[3]";
switch (TRUE) {
  case (($WindDir >= 349) and ($WindDir <= 360)):
    $WindDirTxt = 'N';
  break;
  case (($WindDir >= 0) and ($WindDir <= 11)):
    $WindDirTxt = 'N';
  break;
  case (($WindDir > 11) and ($WindDir <= 34)):
    $WindDirTxt = 'NNO';
  break;
  case (($WindDir > 34) and ($WindDir <= 56)):
    $WindDirTxt = 'NE';
  break;
  case (($WindDir > 56) and ($WindDir <= 78)):
    $WindDirTxt = 'ONO';
  break;
  case (($WindDir > 78) and ($WindDir <= 101)):
    $WindDirTxt = 'O';
  break;
  case (($WindDir > 101) and ($WindDir <= 124)):
    $WindDirTxt = 'OZO';
  break;
  case (($WindDir > 124) and ($WindDir <= 146)):
    $WindDir = 'ZO';
  break;
  case (($WindDir > 146) and ($WindDir <= 169)):
    $WindDirTxt = 'ZZO';
  break;
  case (($WindDir > 169) and ($WindDir <= 191)):
    $WindDirTxt = 'Z';
  break;
  case (($WindDir > 191) and ($WindDir <= 214)):
    $WindDirTxt = 'ZZW';
  break;
  case (($WindDir > 214) and ($WindDir <= 236)):
    $WindDirTxt = 'ZW';
  break;
  case (($WindDir > 236) and ($WindDir <= 259)):
    $WindDirTxt = 'WZW';
  break;
  case (($WindDir > 259) and ($WindDir <= 281)):
    $WindDirTxt = 'W';
  break;
  case (($WindDir > 281) and ($WindDir <= 304)):
    $WindDirTxt = 'WNW';
  break;
  case (($WindDir > 304) and ($WindDir <= 326)):
    $WindDirTxt = 'NW';
  break;
  case (($WindDir > 326) and ($WindDir <= 349)):
    $WindDirTxt = 'NNW';
  break;
} // end switch

// historical
(float)$WindMonthHigh = $dataextra[109];
$WindMonthHigh = sprintf("%01.1f", KTStoKMH($WindMonthHigh, $wind_prec));
$WindMonthHighTime = date('g:ia' , strtotime("$dataextra[110]:$dataextra[111]"));
$WindMonthHighDate = "$dataextra[113]/$dataextra[112]/$dataextra[114]";

(float)$WindYearHigh = $dataextra[235];
$WindYearHigh = sprintf("%01.1f", KTStoKMH($WindYearHigh, $wind_prec));
$WindYearHighTime = "$dataextra[236]:$dataextra[237]";
$WindYearHighDate = "$dataextra[239]/$dataextra[238]/$dataextra[240]";

(float)$WindAllTimeHigh = $dataextra[361];
$WindAllTimeHigh = sprintf("%01.1f", KTStoKMH($WindAllTimeHigh, $wind_prec));
$WindAllTimeHighTime = date('g:ia' , strtotime("$dataextra[362]:$dataextra[363]"));
$WindAllTimeHighDate = "$dataextra[365]/$dataextra[364]/$dataextra[366]";

(float)$GustMonthHigh = $dataextra[73];
$GustMonthHigh = sprintf("%01.1f", KTStoKMH($GustMonthHigh, $wind_prec));
$GustMonthHighTime = date('g:ia' , strtotime("$dataextra[74]:$dataextra[75]"));
$GustMonthHighDate = "$dataextra[77]/$dataextra[76]/$dataextra[78]";

(float)$GustYearHigh = $dataextra[199];
$GustYearHigh = sprintf("%01.1f", KTStoKMH($GustYearHigh, $wind_prec));
$GustYearHighTime = date('g:ia' , strtotime("$dataextra[200]:$dataextra[201]"));
$GustYearHighDate = "$dataextra[203]/$dataextra[202]/$dataextra[204]";

(float)$GustAllTimeHigh = $dataextra[325];
$GustAllTimeHigh = sprintf("%01.1f", KTStoKMH($GustAllTimeHigh, $wind_prec));
$GustAllTimeHighTime = date('g:ia' , strtotime("$dataextra[326]:$dataextra[327]"));
$GustAllTimeHighDate = "$dataextra[329]/$dataextra[328]/$dataextra[330]";

// BAROMETER
// current
(float)$Barom = "$data[6]";
//$Barom = sprintf("%01.2f", MBtoINCHES($Barom, $barom_prec));

$BaromTrend = $data[50];
settype($BaromTrend,float);
switch (TRUE) {
   case (($BaromTrend >= -.6) and ($BaromTrend <= .6)):
     $BaromTrendWords = "Stabiel";
   break;
   case (($BaromTrend > .6) and ($BaromTrend <= 2)):
     $BaromTrendWords = "Stijgend";
   break;
   case ($BaromTrend > 2):
     $BaromTrendWords = "Snel Stijgend";
   break;
   case (($BaromTrend < -.6) and ($BaromTrend >= -2)):
     $BaromTrendWords = "Dalend";
   break;
   case ($BaromTrend < -2):
     $BaromTrendWords = "Snel Dalend";
   break;
} // end switch

(float)$BaromTodayHigh = "$data[131]";
//$BaromTodayHigh = sprintf("%01.2f", MBtoINCHES($BaromTodayHigh, $barom_prec));

(float)$BaromTodayLow = "$data[132]";
//$BaromTodayLow = sprintf("%01.2f", MBtoINCHES($BaromTodayLow, $barom_prec));

// historical values
(float)$BaromMonthHigh = $dataextra[91];
//$BaromMonthHigh = sprintf("%01.2f", MBtoINCHES($BaromMonthHigh, $barom_prec));
$BaromMonthHighTime = date('g:ia' , strtotime("$dataextra[92]:$dataextra[93]"));
$BaromMonthHighDate = "$dataextra[95]/$dataextra[94]/$dataextra[96]";

(float)$BaromMonthLow = $dataextra[85];
//$BaromMonthLow = sprintf("%01.2f", MBtoINCHES($BaromMonthLow, $barom_prec));
$BaromMonthLowTime = date('g:ia' , strtotime("$dataextra[86]:$dataextra[87]"));
$BaromMonthLowDate = "$dataextra[89]/$dataextra[88]/$dataextra[90]";

(float)$BaromYearHigh = $dataextra[217];
//$BaromYearHigh = sprintf("%01.2f", MBtoINCHES($BaromYearHigh, $barom_prec));
$BaromYearHighTime = date('g:ia' , strtotime("$dataextra[218]:$dataextra[219]"));
$BaromYearHighDate = "$dataextra[221]/$dataextra[220]/$dataextra[222]";

(float)$BaromYearLow = $dataextra[211];
//$BaromYearLow = sprintf("%01.2f", MBtoINCHES($BaromYearLow, $barom_prec));
$BaromYearLowTime = date('g:ia' , strtotime("$dataextra[212]:$dataextra[213]"));
$BaromYearLowDate = "$dataextra[215]/$dataextra[214]/$dataextra[216]";

(float)$BaromAllTimeHigh = $dataextra[343];
//$BaromAllTimeHigh = sprintf("%01.2f", MBtoINCHES($BaromAllTimeHigh, $barom_prec));
$BaromAllTimeHighTime = date('g:ia' , strtotime("$dataextra[344]:$dataextra[345]"));
$BaromAllTimeHighDate = "$dataextra[347]/$dataextra[346]/$dataextra[348]";

(float)$BaromAllTimeLow = $dataextra[337];
//$BaromAllTimeLow = sprintf("%01.2f", MBtoINCHES($BaromAllTimeLow, $barom_prec));
$BaromAllTimeLowTime = date('g:ia' , strtotime("$dataextra[338]:$dataextra[339]"));
$BaromAllTimeLowDate = "$dataextra[341]/$dataextra[340]/$dataextra[342]";

// RAIN 
// current
(float)$RainToday = "$data[7]";
//$RainToday = sprintf("%01.2f", MMtoINCHES($RainToday, $rain_prec));

(float)$RainMonth = "$data[8]";
//$RainMonth = sprintf("%01.2f", MMtoINCHES($RainMonth, $rain_prec));

(float)$RainYear = "$data[9]";
//$RainYear = sprintf("%01.2f", MMtoINCHES($RainYear, $rain_prec));

(float)$RainRateCurrent = "$data[10]";
//$RainRateCurrent = MMtoINCHES($RainRateCurrent, 6);
$RainRateCurrent = sprintf("%01.2f", $RainRateCurrent * 60);   

// historical
$RainYesterday = sprintf("%01.2f", $dataextra[533]);

(float)$RainRateMonthHigh = $dataextra[79];
//$RainRateMonthHigh = MMtoINCHES($RainRateMonthHigh, $rain_prec);
$RainRateMonthHigh = sprintf("%01.2f", $RainRateMonthHigh * 60);
$RainRateMonthHighTime = date('g:ia' , strtotime("$dataextra[80]:$dataextra[81]"));
$RainRateMonthHighDate = "$dataextra[83]/$dataextra[82]/$dataextra[84]";

(float)$RainRateYearHigh = $dataextra[205];
//$RainRateYearHigh = MMtoINCHES($RainRateYearHigh, $rain_prec);
$RainRateYearHigh = sprintf("%01.2f", $RainRateYearHigh * 60);;
$RainRateYearHighTime = date('g:ia' , strtotime("$dataextra[206]:$dataextra[207]"));
$RainRateYearHighDate = "$dataextra[209]/$dataextra[208]/$dataextra[210]";

(float)$RainRateAllTimeHigh = $dataextra[331];
//$RainRateAllTimeHigh = MMtoINCHES($RainRateAllTimeHigh, $rain_prec);
$RainRateAllTimeHigh = sprintf("%01.2f", $RainRateAllTimeHigh * 60);;
$RainRateAllTimeHighTime = date('g:ia' , strtotime("$dataextra[332]:$dataextra[333]"));
$RainRateAllTimeHighDate = "$dataextra[335]/$dataextra[334]/$dataextra[336]";

(float)$RainDailyMonthHigh = $dataextra[97];
//$RainDailyMonthHigh = sprintf("%01.2f", MMtoINCHES($RainDailyMonthHigh, $rain_prec));
$RainDailyMonthHighTime = date('g:ia' , strtotime("$dataextra[98]:$dataextra[99]"));
$RainDailyMonthHighDate = "$dataextra[101]/$dataextra[100]/$dataextra[102]";

(float)$RainDailyYearHigh = $dataextra[223];
//$RainDailyYearHigh = sprintf("%01.2f", MMtoINCHES($RainDailyYearHigh, $rain_prec));
$RainDailyYearHighTime = date('g:ia' , strtotime("$dataextra[224]:$dataextra[225]"));
$RainDailyYearHighDate = "$dataextra[227]/$dataextra[226]/$dataextra[228]";

(float)$RainDailyAllTimeHigh = $dataextra[349];
//$RainDailyAllTimeHigh = sprintf("%01.2f", MMtoINCHES($RainDailyAllTimeHigh, $rain_prec));
$RainDailyAllTimeHighTime = date('g:ia' , strtotime("$dataextra[350]:$dataextra[351]"));
$RainDailyAllTimeHighDate = "$dataextra[353]/$dataextra[352]/$dataextra[354]";

(float)$Rain1HrMonthHigh = $dataextra[103];
//$Rain1HrMonthHigh = sprintf("%01.2f", MMtoINCHES($Rain1HrMonthHigh, $rain_prec));
$Rain1HrMonthHighTime = date('g:ia' , strtotime("$dataextra[104]:$dataextra[105]"));
$Rain1HrMonthHighDate = "$dataextra[107]/$dataextra[106]/$dataextra[108]";

(float)$Rain1HrYearHigh = $dataextra[229];
//$Rain1HrYearHigh = sprintf("%01.2f", MMtoINCHES($Rain1HrYearHigh, $rain_prec));
$Rain1HrYearHighTime = date('g:ia' , strtotime("$dataextra[230]:$dataextra[231]"));
$Rain1HrYearHighDate = "$dataextra[233]/$dataextra[232]/$dataextra[234]";

(float)$Rain1HrAllTimeHigh = $dataextra[355];
//$Rain1HrAllTimeHigh = sprintf("%01.2f", MMtoINCHES($Rain1HrAllTimeHigh, $rain_prec));
$Rain1HrAllTimeHighTime = date('g:ia' , strtotime("$dataextra[356]:$dataextra[357]"));
$Rain1HrAllTimeHighDate = "$dataextra[359]/$dataextra[358]/$dataextra[360]";

$RainDaysSinceLast = $dataextra[482];
$RainDaysThisMonth = $dataextra[483];

// Misc.
$Date = $data[74];
$Time = date('g:ia' , strtotime("$data[29]:$data[30]:$data[31]"));
$WDVersion = $dataextra[534];
$Sunrise = $dataextra[556];
$Sunset = $dataextra[557];
$Moonrise = $dataextra[558];
$Moonset = $dataextra[559];
$MoonPhase = $dataextra[560];
$MoonAge = $dataextra[561];

/************ Function Definitions *************/

// CtoF: converts degrees Celcius to degress Farenheight
function CtoF($value, $precision) {
  global $temp_prec;
  return round($value = ((1.8* $value) + 32),$precision);
} // end function C_to_F

// KTStoMPH: converts knots to MPH
function KTStoMPH($value, $precision) {
  global $wind_prec;
  return round($value = (1.1508 * $value),$precision);
} // end function KTStoMPH


// KTStoKMH: converts knots to MPH
function KTStoKMH($value, $precision) {
  global $wind_prec;
  return round($value = (1.85 * $value),$precision);
} // end function KTStoMPH

// MBtoINCHES: converts mb to in/Hg
function MBtoINCHES($value, $precision) {
  global $barom_prec;
  return round($value = ($value / 33.86388158),$precision);
} // end function MBtoINCHES

// MMtoINCHES: converts mm to inches
function MMtoINCHES($value, $precision) {
  global $rain_prec;
  return round($value = (.0393700787 * $value),$precision);
} // end function MMtoINCHES
 
/************* End of Function Definitions ****************/

?>
