added prediction (based on current month)
parent
1dab64041e
commit
620d0e779b
2
draw.php
2
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;
|
||||
|
|
|
|||
|
|
@ -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.="<div style='position:fixed;bottom:20px;right:50px;' >Runtime: ".$runtime." s</div>";
|
||||
|
|
|
|||
|
|
@ -0,0 +1,129 @@
|
|||
<?php
|
||||
|
||||
$start=microtime(true);
|
||||
|
||||
function sim($a, $b){
|
||||
$averageA=average($a,$b);
|
||||
$averageB=average($b,$a);
|
||||
$div=0.0;
|
||||
$sumA=0;
|
||||
$sumB=0;
|
||||
foreach($a as $i=>$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 "<br>";
|
||||
#echo "<br>";
|
||||
#echo wrapR('alice', 2, $ratings);
|
||||
#
|
||||
#die();
|
||||
|
||||
|
||||
|
||||
echo "<title>[BETA] prediction</title>";
|
||||
|
||||
$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 "<tr><td>Day: ".($key+1)."</td>";
|
||||
# foreach ($daily as $key=>$hour){
|
||||
# echo "<td>".$key."-".$hour." ";
|
||||
# }
|
||||
# echo "</tr>";
|
||||
#}
|
||||
echo "prediction for ".date("d.m.Y");
|
||||
echo "<table border='border-collapse'>";
|
||||
echo "<tr><th>hour</th> <th>prediction</th> <th>difference</th><th>actual measurement</th></tr>";
|
||||
for ($i=0;$i<25;$i++){
|
||||
$r=wrapR(25,$i,$sumary);
|
||||
$r=round($r,2);
|
||||
echo "<tr><td>".$i."</td><td>".$r."</td><td>".($r-$sumary[25][$i+1])."</td><td>".$sumary[25][$i+1]."</td></tr>";
|
||||
}
|
||||
echo "</table>";
|
||||
|
||||
|
||||
#for($i=0;$i<=24;$i++){
|
||||
# $hours[]=$i*60*60;
|
||||
#}
|
||||
#var_dump($hours);
|
||||
#var_dump(array($month,$year,$day));
|
||||
$runtime=microtime(true)-$start;
|
||||
echo "<div style='position:fixed;bottom:20px;right:50px;' >Runtime: ".$runtime." s</div>";
|
||||
$db->close();
|
||||
die();
|
||||
|
||||
1
recent
1
recent
|
|
@ -0,0 +1 @@
|
|||
Temperatur: 14.75 C<br>Luftfeuchtigkeit: 84.9 %<br>Helligkeit: 0.01 Lux<br>Luftdruck: 981.881mbar
|
||||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Reference in New Issue