<?php ################# Creates graphics vor pgm3 ################ include "../config.php"; include "functions.php"; $userdefnr=$_GET['userdefnr']; #$userdefnr=0; $room=$userdef[$userdefnr]['room']; $file= $userdef[$userdefnr]['logpath']; $drawuserdef=$userdef[$userdefnr]['name']; $imgmaxxuserdef=$userdef[$userdefnr]['imagemax']; $imgmaxyuserdef=$userdef[$userdefnr]['imagemay']; $SemanticLong=$userdef[$userdefnr]['semlong']; $SemanticShort=$userdef[$userdefnr]['semshort']; $valuefield=$userdef[$userdefnr]['valuefield']; $type='UserDef '.$userdefnr; $logrotateUSERDEFlines=$userdef[$userdefnr]['logrotatelines']; $maxcountUSERDEF=$userdef[$userdefnr]['maxcount']; $XcorrectMainTextUSERDEF=$userdef[$userdefnr]['XcorrectMainText']; $gnuplottype=$userdef[$userdefnr]['gnuplottype']; # echo "userdefnr: $userdefnr"; # echo "file: $file"; #exit; if (! file_exists($file)) show_error($file,$drawuserdef,$imgmaxxuserdef,$imgmaxyuserdef,$type,$userdefnr); ## do we really need a new graphic?? $execorder=$tailpath.' -1 '.$file; exec($execorder,$tail1); $parts = explode(" ", $tail1[0]); $today= date("H"); $savefile=$AbsolutPath."/tmp/USERDEF.".$drawuserdef.".log.".$parts[0].".png"; if (file_exists($savefile)) { $fmtime=date ("H", filemtime($savefile)); #at least one new graphic per hour (gnuplot) if ($fmtime == $today) { $im2 = @ImageCreateFromPNG($savefile); header("Content-type: image/png"); imagePng($im2); exit; # ;-))) } } else #delete old pngs { $delfile=$AbsolutPath."/tmp/USERDEF.".$drawuserdef.".log.*.png"; foreach (glob($delfile) as $filename) { unlink($filename); } } $_SESSION["arraydata"] = array(); $array = file($file); $oldmin=0; //only the data from every 10min $oldhour=0; //only the data from every 10min $mintemp=100; $maxtemp=-100; $counter=count($array); #Logrotate if ((($logrotateUSERDEFlines+100) < $counter) and ($logrotate == 'yes')) LogRotate($array,$file,$logrotateUSERDEFlines); #echo "test1"; #print_r($array[1]); #print_r($array[1][12]); exit; ########################################################################### for ($x = 0; $x < $counter; $x++) { list ($date,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$f10) = preg_split("/[\s,]+/", $array[$x]); if ((($array[$x][14] != $oldmin) or ($array[$x][12] != $oldhour) or ($x==$counter-1)) and ( $date !="NEWLOGS")) { switch ($valuefield): Case 1: $value=$date;break; Case 2: $value=$f2;break; Case 3: $value=$f3;break; Case 4: $value=$f4;break; Case 5: $value=$f5;break; Case 6: $value=$f6;break; Case 7: $value=$f7;break; Case 8: $value=$f8;break; Case 9: $value=$f9;break; Case 10: $value=$f10;break; endswitch; $oldmin=$array[$x][14]; $oldhour=$array[$x][12]; array_push( $_SESSION["arraydata"],array($date,$value)); $temp=$value; } } # Start Graphic $im = ImageCreateTrueColor($imgmaxxuserdef,$imgmaxyuserdef); $black = ImageColorAllocate($im, 0, 0, 0); $bg1p = ImageColorAllocate($im, $bg1_R,$bg1_G,$bg1_B); $bg2p = ImageColorAllocate($im, $buttonBg_R,$buttonBg_G,$buttonBg_B); $bg3p = ImageColorAllocate($im, $fontcol_grap_R,$fontcol_grap_G,$fontcol_grap_B); $white = ImageColorAllocate($im, 255, 255, 255); $gray= ImageColorAllocate($im, 133, 133, 133); $red = ImageColorAllocate($im, 255, 0, 0); $green = ImageColorAllocate($im, 0, 255, 0); $yellow= ImageColorAllocate($im, 255, 255, 0); $orange= ImageColorAllocate($im, 255, 230, 25); ImageFill($im, 0, 0, $bg2p); ImageRectangle($im, 0, 0, $imgmaxxuserdef-1, $imgmaxyuserdef-1, $white); $xold=$imgmaxxuserdef; $resultreverse = array_reverse($_SESSION["arraydata"]); if ( $imgmaxxuserdef > count ($resultreverse) ) { $_SESSION["maxdata"] = count ($resultreverse); } else { $_SESSION["maxdata"] = $imgmaxxuserdef; }; ################### ### min/max $mintemp=1000; $maxtemp=-1000; for ($x = 0; $x <= $_SESSION["maxdata"]; $x++) { if ( $resultreverse[$x][1] > $maxtemp ) $maxtemp=$resultreverse[$x][1]; if ( ($resultreverse[$x][1] < $mintemp) and ($resultreverse[$x][1]>-1000) ) $mintemp=$resultreverse[$x][1]; } $tempdiff=$maxtemp-$mintemp; if ($tempdiff==0) $tempdiff=1; $fac=$imgmaxyuserdef/$tempdiff; $yold=round($imgmaxyuserdef-(($resultreverse[0][1]-$mintemp)*$fac)); ################### if ($maxcountUSERDEF < $_SESSION["maxdata"]) {$anzlines=$maxcountUSERDEF;} else {$anzlines= $_SESSION["maxdata"];} if ($gnuplottype=='piri' or $gnuplottype=='fs20') { $datumtomorrow= mktime (0,0,0,date("m") ,date("d")+1,date("Y")); $xrange1= date ("Y-m-d",$datumtomorrow); $datumyesterday= mktime (0,0,0,date("m") ,date("d")-5,date("Y")); $xrange2= date ("Y-m-d",$datumyesterday); $xrange="set xrange ['$xrange2':'$xrange1']"; $gnuplotfile=$AbsolutPath."/tmp/".$drawuserdef; $gnuplotpng=$drawuserdef.".sm.png"; $messageA=<<<EOD #set terminal png transparent crop size 625,83 #set terminal png transparent crop size $imgmaxxuserdef-$x+5,83 set terminal png transparent crop size $imgmaxxuserdef-100,$imgmaxyuserdef+31 set output '$AbsolutPath/tmp/$gnuplotpng' set key off set xdata time set timefmt '%Y-%m-%d_%H:%M:%S' set noytics #set border linecolor rgbcolor "#F5F5F5" set border linecolor rgbcolor "#6394BD" #set border linecolor rgbcolor "#6E94B7" #set border linecolor rgb "$bg2" #set border linecolor rgb "white" #set noborder #set noxtics unset label $xrange set grid linetype 1 linecolor rgb "white" set yrange [-0.3:1.3] #set size 0.8,0.15 set format x '' EOD; } switch ($gnuplottype): Case 'piri': $messageB=<<<EOD plot "< awk '{print $1, 1; }' $file "\ using 1:2 title '' with impulses EOD; break; Case 'fs20': $actdate= date("Y-m-d_H:i:s"); $newlastline=$actdate." ".$f2." ".$f3." ".$f4." ".$f5." ".$f6; array_push( $array ,$newlastline); $filename=substr($file,strrpos($file, '/')+1); $filename=$AbsolutPath.'/tmp/'.$filename.'.tmp'; $f1=fopen("$filename","w"); for ($x = 0; $x <= count($array); $x++) { fputs($f1,$array[$x]); } fputs($f1,"\n"); fclose($f1); $messageB=<<<EOD plot "< awk '{print $1, $3==\"on\"? 1 : $3==\"dimup\"? 1 : $3==\"dimdown\"? 0 : $3==\"off\"? 0 : 0.5;}' \ $filename" using 1:2 title '' with steps EOD; break; default: for ($x = 0; $x < $anzlines; $x++) { $parts = explode("_", $resultreverse[$x][0]); if ( ($parts[0] != $olddate) ) { $olddate=$parts[0]; ImageLine($im, $imgmaxxuserdef-$x, 0,$imgmaxxuserdef-$x , $imgmaxyuserdef, $bg1p); } $y = round($imgmaxyuserdef-(($resultreverse[$x][1]-$mintemp)*$fac)); ImageLine($im, $imgmaxxuserdef-$x, $y, $xold, $yold, $red); $xold=$imgmaxxuserdef-$x; $yold=$y; }; ImageLine($im, $imgmaxxuserdef-$x, 0,$imgmaxxuserdef-$x , $imgmaxyuserdef, $yellow); break; endswitch; if ($gnuplottype=='piri' or $gnuplottype=='fs20') { $message=$messageA.$messageB; $f1=fopen("$AbsolutPath/tmp/$drawuserdef","w+"); fputs($f1,$message); fclose($f1); exec("$gnuplot $AbsolutPath/tmp/$drawuserdef",$output); #echo "output: $output";exit; #sleep(3); $w = imagesx($im); $h = imagesy($im); $im2 = imagecreatefrompng("$AbsolutPath/tmp/$gnuplotpng"); $w2 = imagesx($im2); $h2 = imagesy($im2); #ImageCopy($im,$im2,163,10,0,0,$w2,$h2); ImageCopy($im,$im2,153,5,0,0,$w2,$h2); } ImageLine($im, $imgmaxxuserdef-$maxcountUSERDEF, 0,$imgmaxxuserdef-$maxcountUSERDEF , $imgmaxyuserdef, $white); $tempTEMP=$temp; ############################################################################# $text=$SemanticLong; $fontsize=7; $txtcolor=$bg3p; ImageTTFText ($im, $fontsize, 0, 3, 10, $txtcolor, $fontttf, $text); $txtcolor=$bg3p; $fontsize=9; $text=$tempTEMP." ".$SemanticShort; $tvalue=$tempTEMP; ImageTTFText ($im, $fontsize, 0, 90-$XcorrectMainTextUSERDEF, 37, $txtcolor, $fontttfb, $text); $txtcolor=$bg3p; $fontsize=7; if (is_numeric($mintemp) || is_numeric($maxtemp)) { $text="min= $mintemp max= $maxtemp"; ImageTTFText ($im, $fontsize, 0, 67-$XcorrectMainTextUSERDEF, 49, $txtcolor, $fontttf, $text); } $text=$resultreverse[0][0]; ImageTTFText ($im, $fontsize, 0, $imgmaxxuserdef-127, 15, $txtcolor, $fontttf, $text); ############################################################################# ## general $txtcolor=$bg3p; $fontsize=9; $text= $drawuserdef; ImageTTFText ($im, 8, 0,90-$XcorrectMainTextUSERDEF, 22, $txtcolor, $fontttfb, $text); $fontsize=7; $text=$txtroom.$room; ImageTTFText ($im, $fontsize, 0, 3, $imgmaxyuserdef-7, $txtcolor, $fontttf, $text); $text=$type; ImageTTFText ($im, $fontsize, 0, 5, $imgmaxyuserdef-17, $txtcolor, $fontttf, $text); ############################################################################# #ok. let's draw imagePng($im,$savefile); header("Content-type: image/png"); imagePng($im); ############################################################### ## first start: shows the required logfiles function show_error($file,$drawuserdef,$imgmaxx,$imgmaxy,$type,$section) { $im = ImageCreateTrueColor($imgmaxx,$imgmaxy); $black = ImageColorAllocate($im, 0, 0, 0); $bg2p = ImageColorAllocate($im, 175,198,219); $white = ImageColorAllocate($im, 255, 255, 255); $red = ImageColorAllocate($im, 255, 0, 0); ImageFill($im, 0, 0, $bg2p); ImageRectangle($im, 0, 0, $imgmaxx-1, $imgmaxy-1, $white); include "../config.php"; $bg3p = ImageColorAllocate($im, $fontcol_grap_R,$fontcol_grap_G,$fontcol_grap_B); $text="There is a new supported $type-Device but no Logfile $file"; $fontsize=9; $txtcolor=$bg3p; ImageTTFText ($im, $fontsize, 0, 5, 17, $txtcolor, $fontttf, $text); $text="Please check the userdef[$section] of <pgm3>/config.php and refresh your browser"; ImageTTFText ($im, $fontsize, 0, 5, 45, $txtcolor, $fontttf, $text); header("Content-type: image/png"); imagePng($im); exit; } ############################################################### ?>