diff --git a/draw.php b/draw.php index f3c3649..66dae00 100644 --- a/draw.php +++ b/draw.php @@ -220,7 +220,7 @@ function generateChart($today,$mode,$hours=0,$dateInput){ //only redraw, if new data was added, indicated by 'newData' token left by update.php $newData=false; if(file_exists('newData')){ - unlink('newData'); + @unlink('newData'); $newData=true; } $file_exists=false; diff --git a/index.php b/index.php index acad537..6b28390 100644 --- a/index.php +++ b/index.php @@ -51,6 +51,8 @@ if(isset($_GET['mode']) && $_GET['mode']=='last'){ }else if($type!='none' && ($type=="temp" || $type=="ambi" || $type=="humi" || $type=="baro")){ //mode: day $mode=1; +}else if (isset($_GET['mode']) && $_GET['mode']=='predict'){ + $mode=4; }else{ $html.="Keine weiteren Angaben: Heutige Temperatur wird angezeigt"; $mode=1; @@ -84,11 +86,13 @@ if($mode==1){ $date=array(date("Y"),date("n"),date("j")); } } +$db=new DBLib($database['host'],$database['user'],$database['password'],$database['database']); if(!$error===false){ $html.=$error; -}else{ - $db=new DBLib($database['host'],$database['user'],$database['password'],$database['database']); +}else if($mode != 4){ $html.=generateChart($today,$mode,$num,$date); +}else{ + include('predict.php'); } $runtime=microtime(true)-$start; $html.="
Runtime: ".$runtime." s
"; diff --git a/predict.php b/predict.php new file mode 100644 index 0000000..b5387b0 --- /dev/null +++ b/predict.php @@ -0,0 +1,129 @@ +$value){ + if(!empty($value) && !empty($b[$i])){ + $div+=($value - $averageA)*($b[$i] - $averageB); + $sumA+=pow(($value-$averageA), 2); + $sumB+=pow(($b[$i]-$averageB), 2); + } + } + return ($div / (sqrt($sumA) * sqrt($sumB))); +} +function r($p,$i,$data){ + return average($p,$p) + c($p,$i,$data); +} +function c($p,$i,$data){ + $divident=$divisor=0.0; + foreach($data as $q){ + if (empty($q[$i]) || $p===$q){ + continue; + } + $simPQ=sim($p,$q); + $averageQ=average($q,$p); + $divisor+=abs($simPQ); + $divident+=(($q[$i]-$averageQ)*$simPQ); + } + return ($divident / $divisor); +} +function wrapR($subject, $item, $data){ + return r($data[$subject], $item, $data); +} +function average($set, $controlSet){ + $average=0.0; + $count=0; + foreach($set as $i=>$value){ + if (!empty($value) && !empty($controlSet[$i])){ + $average+=$value; + $count+=1; + } + } + return ($average / $count); +} + +#$ratings=array( +# "alice"=>array(5, 1, 0, 3, 2), +# "bob"=>array(3, 1, 5, 4, 2), +# "carol"=>array(4, 0, 5, 0, 3), +# "chuck"=>array(1, 4, 0, 0, 2), +# "dave"=>array(0, 4, 3, 0, 1), +# "eve"=>array(5, 4, 5, 4, 3), +# "fran"=>array(4, 0, 0, 0,2), +# "gordon"=>array(3, 4, 0, 5, 1), +# "isaac"=>array(5, 0, 4, 3, 0), +# "ivan"=>array(3, 1, 1, 0, 1) +#); +#echo sim($ratings['alice'],$ratings['ivan']); +#echo "
"; +#echo "
"; +#echo wrapR('alice', 2, $ratings); +# +#die(); + + + +echo "[BETA] prediction"; + +$date=array(date("Y"),date("n"),date("j")); +#$date=array(2014, 8, 26); +$diffuse=0; + +$selectionStart=mktime(0,0,0,$date[1],$date[2],$date[0]); +$selectionEnd=$selectionStart+(60*60*(24+date("I",$selectionStart))); +$rangeSelector=array('time',$selectionStart-$diffuse,$selectionEnd+$diffuse); +$data= $db->selectRange('temp2','*',$rangeSelector); +foreach($data as $record){ + $tupel=$record; +} +$data=null; + +#var_dump($tupel); +#echo date("H:i:s", $tupel['time']); +$month=date('n', $tupel['time']); +$year=date('Y', $tupel['time']); +$day=date('j', $tupel['time']); + +$div=getdiv('temp2'); +for($i=1; $i<=$day;$i++){ + $selectionStart=mktime(0,0,0,$month,$i,$year); + $selectionEnd=$selectionStart+(60*60*(24+date("I",$selectionStart))); + $rangeSelector=array('time',$selectionStart-$diffuse,$selectionEnd+$diffuse); + $data= $db->selectRange('temp2','*',$rangeSelector); + $sumary[]=prepareData($data,$div,$selectionStart,$selectionEnd); +} + +#foreach($sumary as $key=>$daily){ +# echo "Day: ".($key+1).""; +# foreach ($daily as $key=>$hour){ +# echo "".$key."-".$hour." "; +# } +# echo ""; +#} +echo "prediction for ".date("d.m.Y"); +echo ""; +echo ""; +for ($i=0;$i<25;$i++){ + $r=wrapR(25,$i,$sumary); + $r=round($r,2); + echo ""; +} +echo "
hour prediction differenceactual measurement
".$i."".$r."".($r-$sumary[25][$i+1])."".$sumary[25][$i+1]."
"; + + +#for($i=0;$i<=24;$i++){ +# $hours[]=$i*60*60; +#} +#var_dump($hours); +#var_dump(array($month,$year,$day)); +$runtime=microtime(true)-$start; +echo "
Runtime: ".$runtime." s
"; +$db->close(); +die(); + diff --git a/recent b/recent index e69de29..d7d3d8c 100644 --- a/recent +++ b/recent @@ -0,0 +1 @@ +Temperatur: 14.75 C
Luftfeuchtigkeit: 84.9 %
Helligkeit: 0.01 Lux
Luftdruck: 981.881mbar \ No newline at end of file diff --git a/update.php b/update.php index 649a148..3f06e08 100644 --- a/update.php +++ b/update.php @@ -12,7 +12,7 @@ $temp=$humi=$ambi=$baro=0; foreach($dir as $file){ if(validFile($file)){ file_put_contents('newData',""); - #echo "parsing file: ".$file."\n"; + echo "parsing file: ".$file."\n"; importLogfiletoDatabase('data/'.$file); //recent records on frontpage: if($file[0].$file[1].$file[2].$file[3].$file[4] == "temp2"){ @@ -27,7 +27,7 @@ foreach($dir as $file){ /// unlink('data/'.$file); }else{ - #echo "invalidFile: ".$file." \n"; + echo "invalidFile: ".$file." \n"; } } $db->close();