2007-01-30 12:47:36 +00:00
< ? php
################# Creates automatically gnuplot-graphics for pgm3
# Thanks to Rudi for his inspiration to automate gnuplot
# (look at his fhzweb.pl in pgm2)
################
2010-03-12 13:02:16 +00:00
function drawgnuplot ( $gnudraw , $gnutyp , $gnuplot , $pictype , $logpath , $FHTyrange , $FHTy2range , $DBUse )
2007-01-30 12:47:36 +00:00
{
2007-10-13 16:36:00 +00:00
if ( $gnutyp == " userdef " )
{
$userdef = $FHTyrange ; # workaround
$userdefnr = $FHTy2range ; # workaround
2007-10-16 21:01:34 +00:00
$gnuplottype = $userdef [ 'gnuplottype' ];
2007-10-13 16:36:00 +00:00
$logfile = $userdef [ 'logpath' ];
$drawuserdef = $userdef [ 'name' ];
$SemanticLong = $userdef [ 'semlong' ];
$SemanticShort = $userdef [ 'semshort' ];
2007-10-14 14:20:25 +00:00
$valuefield = $userdef [ 'valuefield' ];
2007-10-13 16:36:00 +00:00
$type = 'UserDef ' . $userdefnr ;
$IN = " $gnudraw ( $gnutyp $userdefnr ) " ;
2007-10-16 21:01:34 +00:00
if ( $gnuplottype == 'piri' ) $gnutyp = 'piri' ;
if ( $gnuplottype == 'fs20' ) $gnutyp = 'FS20' ;
2007-10-13 16:36:00 +00:00
}
else
{
2007-01-30 12:47:36 +00:00
$logfile = $logpath . " / " . $gnudraw . " .log " ;
2007-10-13 16:36:00 +00:00
$IN = " $gnudraw ( $gnutyp ) " ;
}
2010-03-12 13:02:16 +00:00
### DBUse for
if ( $DBUse == '1' and ( $gnutyp == 'FHT' or $gnutyp == 'HMS100T' or $gnutyp == 'HMS100TF' or $gnutyp == 'CUL_WS' or $gnutyp == 'KS300_t1' or $gnutyp == 'KS300_t2' or $gnutyp == 'WS300_t1' or $gnutyp == 'WS300_t2' ))
{
include " config.php " ;
$logfile = " tmp/ " . $gnudraw . " .log " ;
$f1 = fopen ( $logfile , " w+ " );
};
2007-01-30 12:47:36 +00:00
$gnudraw1 = $gnudraw . '1' ;
$OUT1 = " set output 'tmp/ $gnudraw . $pictype ' " ;
$OUT2 = " set output 'tmp/ $gnudraw1 . $pictype ' " ;
$gplothdr = "
2012-05-08 09:06:39 +00:00
set terminal $pictype crop
2007-01-30 12:47:36 +00:00
set xdata time
set timefmt '%Y-%m-%d_%H:%M:%S'
set xlabel ' '
set ytics nomirror
set y2tics
set title '$IN'
set grid
" ;
2010-03-12 13:02:16 +00:00
2007-01-30 12:47:36 +00:00
$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 " ) - 1 , date ( " Y " ));
2010-03-12 13:02:16 +00:00
$datumweek = mktime ( 0 , 0 , 0 , date ( " m " ) , date ( " d " ) - 6 , date ( " Y " ));
2007-01-30 12:47:36 +00:00
$xrange2 = date ( " Y-m-d " , $datumyesterday );
2010-03-12 13:02:16 +00:00
$xrange3 = date ( " Y-m-d " , $datumweek );
$xrange = " set xrange [' $xrange2 ':' $xrange1 '] " ;
$xrangeweek = " set xrange [' $xrange3 ':' $xrange1 '] " ;
2007-01-30 12:47:36 +00:00
switch ( $gnutyp ) :
2007-10-13 16:36:00 +00:00
Case FS20 : ############################################
$gplotmain =<<< EOD
2010-03-12 13:02:16 +00:00
2007-10-16 21:01:34 +00:00
set size 1 , 0.5
set noytics
set noy2tics
2007-10-13 16:36:00 +00:00
set yrange [ - 0.2 : 1.2 ]
set ylabel " On/Off "
2007-10-30 07:42:38 +00:00
plot " < awk ' { print $ 1, $ 3== \" on \" ? 1 : $ 3== \" dimup \" ? 1 : $ 3== \" dimdown \" ? 0 : $ 3== \" off \" ? 0 : 0.5;}' $logfile " using 1 : 2 title '' with steps
2007-10-13 16:36:00 +00:00
EOD ;
2010-03-12 13:02:16 +00:00
2007-10-13 16:36:00 +00:00
break ;
2010-03-12 13:02:16 +00:00
2007-03-20 18:46:10 +00:00
Case WS300_t1 : ############################################
2010-03-12 13:02:16 +00:00
if ( $DBUse == 1 )
{
$sqlarray = mysql_query ( " select timestamp,reading,value from history where device=' " . $gnudraw . " ' and reading='data' order by timestamp desc limit " . $logrotateKS300lines . " " ) or die ( mysql_error ());
while ( $row = mysql_fetch_object ( $sqlarray )) {
$date = str_replace ( " " , " _ " , $row -> timestamp );
fputs ( $f1 , " $date $gnudraw $row->value\n " );
}
fclose ( $f1 );
}
2007-03-20 18:46:10 +00:00
$gplotmain = "
set ylabel 'Temperature (Celsius)'
set y2label 'Humidity (%)'
2007-10-23 19:42:09 +00:00
plot '$logfile' using 1 : 4 axes x1y1 title 'Temperature' with lines lw 2 , \
2007-03-20 18:46:10 +00:00
'$logfile' using 1 : 6 axes x1y2 title 'Rel. Humidity (%)' with lines
" ;
break ;
2010-03-12 13:02:16 +00:00
2007-03-20 18:46:10 +00:00
Case WS300_t2 : ############################################
2010-03-12 13:02:16 +00:00
if ( $DBUse == 1 )
{
$sqlarray = mysql_query ( " select timestamp,reading,value from history where device=' " . $gnudraw . " ' and reading='data' order by timestamp desc limit " . $logrotateKS300lines . " " ) or die ( mysql_error ());
while ( $row = mysql_fetch_object ( $sqlarray )) {
$date = str_replace ( " " , " _ " , $row -> timestamp );
fputs ( $f1 , " $date $gnudraw $row->value\n " );
}
fclose ( $f1 );
}
2007-03-20 18:46:10 +00:00
$gplotmain =<<< EOD
set ylabel " Air Pressure (hPa) "
set y2label " Willi "
plot " < grep -v avg $logfile " using 1 : 8 axes x1y1 title 'Air Pressure' with lines , \
" < grep -v avg $logfile " using 1 : 10 axes x1y2 title 'Willi' with lines
EOD ;
break ;
2010-03-12 13:02:16 +00:00
2007-01-30 12:47:36 +00:00
Case KS300_t1 : ############################################
2010-03-12 13:02:16 +00:00
if ( $DBUse == 1 )
{
$sqlarray = mysql_query ( " select timestamp,reading,value from history where device=' " . $gnudraw . " ' and reading='data' order by timestamp desc limit " . $logrotateKS300lines . " " ) or die ( mysql_error ());
while ( $row = mysql_fetch_object ( $sqlarray )) {
$date = str_replace ( " " , " _ " , $row -> timestamp );
fputs ( $f1 , " $date $gnudraw $row->value\n " );
}
fclose ( $f1 );
}
2007-01-30 12:47:36 +00:00
$gplotmain = "
set ylabel 'Temperature (Celsius)'
set y2label 'Humidity (%)'
2007-10-23 19:42:09 +00:00
plot '$logfile' using 1 : 4 axes x1y1 title 'Temperature' with lines lw 2 , \
2007-01-30 12:47:36 +00:00
'$logfile' using 1 : 6 axes x1y2 title 'Rel. Humidity (%)' with lines
" ;
break ;
2010-03-12 13:02:16 +00:00
2007-01-30 12:47:36 +00:00
Case KS300_t2 : ############################################
2010-03-12 13:02:16 +00:00
if ( $DBUse == 1 )
{
$sqlarray = mysql_query ( " select timestamp,reading,value from history where device=' " . $gnudraw . " ' and reading='data' order by timestamp desc limit " . $logrotateKS300lines . " " ) or die ( mysql_error ());
while ( $row = mysql_fetch_object ( $sqlarray )) {
$date = str_replace ( " " , " _ " , $row -> timestamp );
fputs ( $f1 , " $date $gnudraw $row->value\n " );
}
fclose ( $f1 );
}
$gplotmain = "
set ylabel 'Wind (Km/h)'
set y2label 'Rain (l/m2)'
plot '$logfile' using 1 : 8 axes x1y1 title 'Wind' with lines , \
'$logfile' using 1 : 10 axes x1y2 title 'Rain' with lines
" ;
2007-01-30 12:47:36 +00:00
break ;
2010-03-12 13:02:16 +00:00
2007-01-30 12:47:36 +00:00
Case FHT : ############################################
2010-03-12 13:02:16 +00:00
if ( $DBUse == 1 )
{
$sqlarray = mysql_query ( " select timestamp,reading,value from history where device=' " . $gnudraw . " ' order by timestamp desc limit " . $logrotateFHTlines . " " ) or die ( mysql_error ());
while ( $row = mysql_fetch_object ( $sqlarray )) {
$date = str_replace ( " " , " _ " , $row -> timestamp );
fputs ( $f1 , " $date $gnudraw $row->reading $row->value\n " );
}
fclose ( $f1 );
}
2007-01-30 12:47:36 +00:00
$gplotmain = "
set ylabel 'Temperature (Celsius)'
2007-02-22 17:35:04 +00:00
set yrange [ $FHTyrange ]
2007-01-30 12:47:36 +00:00
set grid ytics
set y2label 'Actuator (%)'
2007-02-22 17:35:04 +00:00
set y2range [ $FHTy2range ]
2007-01-30 12:47:36 +00:00
" ;
2007-09-05 20:05:39 +00:00
$gplotmain2 = "
set ylabel 'Temperature (Celsius)'
set grid ytics
" ;
2007-01-30 12:47:36 +00:00
$gplotmaintmp = <<< EOD
plot " < awk '/measured/ { print $ 1, $ 4}' $logfile " \
2007-10-23 19:42:09 +00:00
using 1 : 2 axes x1y1 title 'Measured temperature' with lines lw 2 , \
2007-01-30 12:47:36 +00:00
" < awk '/actuator/ { print $ 1, $ 4+0}' $logfile " \
using 1 : 2 axes x1y2 title 'Actuator (%)' with steps lw 1 , \
" < awk '/desired/ { print $ 1, $ 4}' $logfile " \
using 1 : 2 axes x1y1 title 'Desired temperature' with steps
2007-09-05 20:05:39 +00:00
EOD ;
$gplotmainonlymeasured = <<< EOD
plot " < awk '/measured/ { print $ 1, $ 4}' $logfile " \
2007-10-23 19:42:09 +00:00
using 1 : 2 axes x1y1 title 'Measured temperature' with lines lw 2
2007-01-30 12:47:36 +00:00
EOD ;
$gplotmain = $gplotmain . $gplotmaintmp ;
2007-09-05 20:05:39 +00:00
$gplotmain2 = $gplotmain2 . $gplotmainonlymeasured ;
2007-01-30 12:47:36 +00:00
break ;
Case HMS100T : ############################################
2010-03-12 13:02:16 +00:00
if ( $DBUse == 1 )
{
$sqlarray = mysql_query ( " select timestamp,reading,value from history where device=' " . $gnudraw . " ' and reading='data' and type='HMS' order by timestamp desc limit " . $logrotateHMSlines . " " ) or die ( mysql_error ());
while ( $row = mysql_fetch_object ( $sqlarray )) {
$date = str_replace ( " " , " _ " , $row -> timestamp );
fputs ( $f1 , " $date $gnudraw $row->value\n " );
}
fclose ( $f1 );
}
2007-01-30 12:47:36 +00:00
$gplotmain = "
set ylabel 'Temperature (Celsius)'
2007-10-23 19:42:09 +00:00
plot '$logfile' using 1 : 4 axes x1y1 title 'Temperature' with lines lw 2
2007-01-30 12:47:36 +00:00
" ;
break ;
2007-10-13 16:36:00 +00:00
Case userdef : ############################################
$gplotmain =<<< EOD
\n set ylabel '$SemanticLong ( $SemanticShort )'
2007-10-16 21:01:34 +00:00
set size 1 , 0.5
set noy2tics
2007-10-23 19:42:09 +00:00
plot " $logfile " using 1 : $valuefield axes x1y1 title '$SemanticLong' with lines lw 2
2007-10-16 21:01:34 +00:00
EOD ;
break ;
Case piri : ############################################
$gplotmain =<<< EOD
\n set ylabel '$drawuserdef'
set noytics
set noy2tics
set size 1 , 0.5
set yrange [ - 1.2 : 2.2 ]
plot " < awk ' { print $ 1, 1; }' $logfile " \
using 1 : 2 title '$drawuserdef' with impulses
2007-10-23 19:42:09 +00:00
plot " $logfile " using 1 : $valuefield axes x1y1 title '$SemanticLong' with lines lw 2
2007-10-13 16:36:00 +00:00
EOD ;
break ;
2007-01-30 12:47:36 +00:00
Case HMS100TF : ############################################
2009-12-19 06:20:16 +00:00
Case CUL_WS : ############################################
2010-03-12 13:02:16 +00:00
if ( $DBUse == 1 )
{
$sqlarray = mysql_query ( " select timestamp,reading,value from history where device=' " . $gnudraw . " ' and reading='data' and (type='HMS' or type='CUL_WS') order by timestamp desc limit " . $logrotateHMSlines . " " ) or die ( mysql_error ());
while ( $row = mysql_fetch_object ( $sqlarray )) {
$date = str_replace ( " " , " _ " , $row -> timestamp );
fputs ( $f1 , " $date $gnudraw $row->value\n " );
}
fclose ( $f1 );
}
2007-01-30 12:47:36 +00:00
$gplotmain = "
set ylabel 'Temperature (Celsius)'
set y2label 'Humidity (%)'
plot '$logfile' using 1 : 4 axes x1y1 title 'Temperature' with lines lw 2 , \
'$logfile' using 1 : 6 axes x1y2 title 'Rel. Humidity (%)' with lines
" ;
break ;
default :
endswitch ;
2010-03-12 13:02:16 +00:00
$message = $OUT1 . $gplothdr . $xrangeweek . $gplotmain ;
$f3 = fopen ( " tmp/gnu1 " , " w+ " );
fputs ( $f3 , $message );
fclose ( $f3 );
2007-01-30 12:47:36 +00:00
exec ( " $gnuplot tmp/gnu1 " , $output );
$message = $OUT2 . $gplothdr . $xrange . $gplotmain ;
$f2 = fopen ( " tmp/gnu2 " , " w " );
fputs ( $f2 , $message );
fclose ( $f2 );
exec ( " $gnuplot tmp/gnu2 " , $output );
2007-09-04 09:38:27 +00:00
$FOUT = 'tmp/' . $gnudraw1 . '.' . $pictype ;
$FS = filesize ( $FOUT );
2007-10-13 16:36:00 +00:00
if (( $FS == '0' ) and ( $gnutyp != " userdef " )) ##Grafic mistake (e.G. no actuator). Draw againg without actuator
2007-09-05 20:05:39 +00:00
{
$message = $OUT1 . $gplothdr . $gplotmain2 ;
$f1 = fopen ( " tmp/gnu1 " , " w " );
fputs ( $f1 , $message );
fclose ( $f1 );
exec ( " $gnuplot tmp/gnu1 " , $output );
$message = $OUT2 . $gplothdr . $xrange . $gplotmain2 ;
$f2 = fopen ( " tmp/gnu2 " , " w " );
fputs ( $f2 , $message );
fclose ( $f2 );
exec ( " $gnuplot tmp/gnu2 " , $output );
}
2007-01-30 12:47:36 +00:00
};
?>