Hi,
You must rewrite a major part of mysqlweather.php in this way :
- modify the method to retrieve numbers of records, last and first timestamp
- modify the unpack string
- possibly add sql field (requieres other changes in mysqlweather_mean.php)
So, you should try this script...I've made all changes, but not tested...
GraphWeather PHP is beta beta version, in rewriting this, i've found
minors bugs, and odd algorithm (i was very inspirated the day I wrote it
)
Code :
<?
// ----------------------------------------------------------------------
// - UPDATE data DATABASE
// ----------------------------------------------------------------------
echo '## UPDATE data DATABASE ##<br>';
// $INFORMATION_LENGTH=28; no infos at the end of WS3600 file
$DATA_LENGTH=56; // Size is now 56 bytes
$DELPHI1970=25569 // need a conversion from delphi to unix timestamp
// Get file size
$HISTORY_DAT_SIZE=filesize($HISTORY_DAT);
// Get the numbers of new records
$handle=@fopen($HISTORY_DAT,"r");
if ($handle)
{
$RECORDS=$HISTORY_DAT_SIZE/$DATA_LENGTH;
$buffer=fread($handle, 8); // timestamp is double so read 8 bytes
$date=unpack("d",$buffer); // unpack timestamp as double
$FIRST_HISTORYDAT_RECORD=($date-$DELPHI1970)*86400; // delphi/unix conversion
fseek($handle,-$DATA_LENGTH,SEEK_END);
$buffer=fread($handle, 8);
$date=unpack("d",$buffer);
$LAST_HISTORYDAT_RECORD= ($date-$DELPHI1970)*86400;
echo 'Records in history.dat : ',$RECORDS,'<br>';
echo 'First record in history.dat : ',date("d/m/y H:i",$FIRST_HISTORYDAT_RECORD),'<br>';
echo 'Last record in history.dat : ',date("d/m/y H:i",$LAST_HISTORYDAT_RECORD),'<br>';
$sql="SELECT MAX(`timestamp`) FROM data";
$query=mysql_query($sql);
$list=mysql_fetch_array($query);
if (isset($list[0]))
{
$LAST_UPDATE=$list[0];
echo 'Last update : ',date("d/m/y H:i", $LAST_UPDATE),'<br>';
if($HISTORY_DAT_SIZE>0)
{
// iter from the end of file
$RECORDS_TO_UPDATE=-1;
fseek($handle,-$DATA_LENGTH,SEEK_END);
do
{
$buffer=fread($handle, 8);
$date=unpack("d",$buffer);
$date=($date-$DELPHI1970)*86400;
$RECORDS_TO_UPDATE++;
if ((ftell($handle)-$DATA_LENGTH-8)<0) break;
fseek($handle,-$DATA_LENGTH-8,SEEK_CUR);
}
while ($date>$LAST_UPDATE);
fseek($handle,$DATA_LENGTH-8,SEEK_CUR);
}
else $RECORDS_TO_UPDATE=0;
}
else
{
$RECORDS_TO_UPDATE=$RECORDS;
fseek($handle,0);
}
echo 'Records to update : ',$RECORDS_TO_UPDATE,'<br>';
if ($RECORDS_TO_UPDATE!=0)
{
$sql = "INSERT INTO data (Timestamp,abs_pressure,wind_speed,wind_direction,wind_chill,total_rainfall,indoor_temp,outdoor_temp,outdoor_dew_point,indoor_humidity,outdoor_humidity)";
$sql.= "VALUES ";
for($i=0;$i<$RECORDS_TO_UPDATE;$i++)
{
$unpackstr="dTimestamp/fAbsPressure/fPressure/fWindSpeed/S2WindDirection/fWindGust/fTotalRainfall";
$unpackstr.="/fNewRainfall/fIndoorTemp/fOutdoorTemp";
$unpackstr.="/fIndoorHumidity/fOutdoorHumidity/VUnknown";
$buffer=fread($handle,$DATA_LENGTH);
$data=unpack($unpackstr,$buffer);
$timestamp=($Timestamp-$DELPHI1970)*86400;
//Dewpoint calculation
$es=6.11*pow(10,7.5*$data["OutdoorTemp"]/($data["OutdoorTemp"]+237.7));
$data["OutdoorDewPoint"]=( 237.7*log($es*$data["OutdoorHumidity"]/611,10) )/( 7.5-log($es*$data["OutdoorHumidity"]/611,10) );
//Windchild calculation
if (($data["OutdoorTemp"]<5)&&($data["WindSpeed"]>5))
{
$data["WindChill"]=13.12+0.6215*$data["OutdoorTemp"]-11.37*pow($data["WindSpeed"],0.16)+0.3965*$data["OutdoorTemp"]*pow($data["WindSpeed"],0.16);
}
else $data["WindChill"]=$data["OutdoorTemp"];
$data["Pressure"]=round($data["Pressure"],1);
$data["WindSpeed"]=round($data["WindSpeed"]*3.6,1);
$data["WindChill"]=round($data["WindChill"],1);
$data["TotalRainfall"]=round($data["TotalRainfall"],1);
$data["IndoorTemp"]=round($data["IndoorTemp"],1);
$data["OutdoorTemp"]=round($data["OutdoorTemp"],1);
$data["OutdoorDewPoint"]=round($data["OutdoorDewPoint"],1);
$data["IndoorHumidity"]=round($data["IndoorHumidity"],1);
$data["OutdoorHumidity"]=round($data["OutdoorHumidity"],1);
/*
$count=$i+1;
echo "Record $count at ".date("d/m/y H:i",$timestamp)." ";
echo $data["Unknown"]." - ";
echo $data["Timestamp1"]." - ";
echo $data["Timestamp2"]." - ";
echo $data["Pressure"]." - ";
echo $data["WindSpeed"]." - ";
echo $data["WindDirection1"]." - ";
echo $data["WindChill"]." - ";
echo $data["TotalRainfall"]." - ";
echo $data["IndoorTemp"]." - ";
echo $data["OutdoorTemp"]." - ";
echo $data["OutdoorDewPoint"]." - ";
echo $data["IndoorHumidity"]." - ";
echo $data["OutdoorHumidity"]."<br>";
*/
$sql.="('".$timestamp;
$sql.= "','".$data["Pressure"];
$sql.= "','".$data["WindSpeed"];
$sql.= "','".$data["WindDirection1"];
$sql.= "','".$data["WindChill"];
$sql.= "','".$data["TotalRainfall"];
$sql.= "','".$data["IndoorTemp"];
$sql.= "','".$data["OutdoorTemp"];
$sql.= "','".$data["OutdoorDewPoint"];
$sql.= "','".$data["IndoorHumidity"];
$sql.= "','".$data["OutdoorHumidity"];
if ($i==$RECORDS_TO_UPDATE-1) $sql.= "')";
else $sql.= "'),";
}
$query = mysql_query($sql) or die( "Erreur SQL : ".$sql." ".mysql_error() );
echo 'Database successfully updated.<br>';
}
fclose($handle);
}
else echo "Unable to open history.dat<br>";
?>