Hallo,
da mir die Google-Charts nicht so richtig gefallen haben, da wurden die Graphen bei mir zu sehr geglättet und außerdem muss die NSA ja nicht wissen wie warm es bei mir im Bad ist:p, hab ich mich mal dran gemacht mir meine eigenen Charts zu programmieren. Vielleicht kann es ja noch jemand gebrauchen…:rolleyes:
Vermutlich werden die PHP-Profis bei dem Code die Kriese kriegen:eek:, aber so können die Charts ohne externe API’s oder zusätzliche Software direkt von IPS erzeugt werden.
Achtung! Bei Variablen mit hoher Anzahl geloggter Werte kann die Erzeugung einer Jahresansicht recht lange dauern!
Mal zwei Beispiele:
Hier das Script mit den Funktionen (einmal anlegen und die ID in den include-Befehl der Charts-Skripte einfügen)
<?
//Kompatibilitätsfunktion für AC-GetLogged_Values
function AC_GetLoggedValuesCompatibility($instanceID, $variableID, $startTime, $endTime, $limit)
{
$values = AC_GetLoggedValues($instanceID, $variableID, $startTime, $endTime, $limit );
if((sizeof($values) == 0) || (end($values)['TimeStamp'] > $startTime))
{
$previousRow = AC_GetLoggedValues($instanceID, $variableID, 0, $startTime - 1, 1 );
$values = array_merge($values, $previousRow);
}
return $values;
}
//********************************************************************************
//Funktion zum Linien im Chart zeichnen
function Linie($Variable,$ChartPNG,$ArchivHandler,$Breite,$Hoehe,$Breite_Chart,$Hoehe_Chart,$Rand_rechts,$Maxwert,$Minwert,$Farbe,$Art,$BoolFaktor,$Zeitbereich)
{
if($Zeitbereich==1){$Dauer=1;} //Stunde
if($Zeitbereich==2){$Dauer=24;} //Tag
if($Zeitbereich==3){$Dauer=7*24;} //Woche
if($Zeitbereich==4){$Dauer=31*24;} //Monat
if($Zeitbereich==5){$Dauer=365*24;} //Jahr
$Linie=AC_GetLoggedValuesCompatibility($ArchivHandler,$Variable,(time()-$Dauer*60*60),time(),0);
$Faktor_x=($Dauer*60*60/$Breite_Chart);
$Faktor_y=($Maxwert-$Minwert)/$Hoehe_Chart;
$Zeit=time();
//Liniengraph
if ($Art==1)
{
$Value=$Linie[0];
$xalt=$Breite-$Rand_rechts;
$yalt=$Hoehe-30-round(($Value['Value']-$Minwert)/$Faktor_y);
foreach($Linie as $wert) {
$x=$Breite-$Rand_rechts-round(($Zeit-$wert['TimeStamp'])/$Faktor_x);
$y=$Hoehe-30-round(($wert['Value']-$Minwert)/$Faktor_y);
if ($x < ($Breite-$Rand_rechts-$Breite_Chart)){$x=($Breite-$Rand_rechts-$Breite_Chart);}
imageline ($ChartPNG , $xalt , $yalt , $x , $y , $Farbe );
$xalt=$x; $yalt=$y;
}
}
//Eckige Linie
if ($Art==2)
{
$Value=$Linie[0];
$xalt=$Breite-$Rand_rechts;
$yalt=$Hoehe-30-round(($Value['Value']-$Minwert)/$Faktor_y);
foreach($Linie as $wert) {
$x=$Breite-$Rand_rechts-round(($Zeit-$wert['TimeStamp'])/$Faktor_x);
$y=$Hoehe-30-round(($wert['Value']-$Minwert)/$Faktor_y);
if ($x < ($Breite-$Rand_rechts-$Breite_Chart)){$x=($Breite-$Rand_rechts-$Breite_Chart);}
imageline ($ChartPNG , $xalt , $yalt , $xalt , $y , $Farbe );
imageline ($ChartPNG , $xalt , $y , $x , $y , $Farbe );
$xalt=$x; $yalt=$y;
}
}
//Boolsche Variable
if ($Art==3)
{
$Value=$Linie[0];
$xalt=$Breite-$Rand_rechts;
if($Value['Value']==TRUE){$yalt=$Hoehe-30-round(1000/192.3);}
if($Value['Value']==FALSE){$yalt=$Hoehe-30;}
foreach($Linie as $wert) {
$x=$Breite-$Rand_rechts-round(($Zeit-$wert['TimeStamp'])/$Faktor_x);
$boolean=($wert['Value']);
if($boolean==TRUE){$y=$Hoehe-30-($Hoehe_Chart/10)*$BoolFaktor;}
if($boolean==FALSE){$y=$Hoehe-30;}
if ($x < ($Breite-$Rand_rechts-$Breite_Chart)){$x=($Breite-$Rand_rechts-$Breite_Chart);}
imageline ($ChartPNG , $xalt , $yalt , $xalt , $y , $Farbe );
imageline ($ChartPNG , $xalt , $y , $x , $y , $Farbe );
$xalt=$x; $yalt=$y;
}
}
//Fenstergriffsensor
if ($Art==4)
{
$Value=$Linie[0];
$xalt=$Breite-$Rand_rechts;
if($Value['Value']==2){$yalt=$Hoehe-30-($Hoehe_Chart/10)*$BoolFaktor;}
if($Value['Value']==1){$yalt=$Hoehe-30-($Hoehe_Chart/10)/2*$BoolFaktor;}
if($Value['Value']==0){$yalt=$Hoehe-30;}
foreach($Linie as $wert) {
$x=$Breite-$Rand_rechts-round(($Zeit-$wert['TimeStamp'])/$Faktor_x);
$boolean=($wert['Value']);
if($boolean==TRUE){$y=$Hoehe-30-($Hoehe_Chart/10)*$BoolFaktor;}
if($boolean==FALSE){$y=$Hoehe-30;}
if ($x < ($Breite-$Rand_rechts-$Breite_Chart)){$x=($Breite-$Rand_rechts-$Breite_Chart);}
imageline ($ChartPNG , $xalt , $yalt , $xalt , $y , $Farbe );
imageline ($ChartPNG , $xalt , $y , $x , $y , $Farbe );
$xalt=$x; $yalt=$y;
}
}
}
//Ende Function Linie()
//Funktion XBeschriftung abhängig vom gewählten Zeitbereich
function XBeschriftung($Zeitbereich,$ChartPNG,$Rand_links,$Rand_rechts,$Hoehe,$Breite,$schwarz,$Breite_Chart)
{
$Zeit=time();
if ($Zeitbereich == 1) //Stunde
{
$xText=date("H:i",$Zeit);
imagestring($ChartPNG, 2, $Rand_links-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("H:i",$Zeit-15*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/4*3-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("H:i",$Zeit-30*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/2-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("H:i",$Zeit-45*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/4-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("H:i",$Zeit-60*60);
imagestring($ChartPNG, 2, $Breite-$Rand_rechts-15, ($Hoehe-20), $xText, $schwarz);
}
if ($Zeitbereich == 2) //Tag
{
$xText=date("H:i",$Zeit);
imagestring($ChartPNG, 2, $Rand_links-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("H:i",$Zeit-6*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/4*3-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("H:i",$Zeit-12*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/2-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("H:i",$Zeit-18*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/4-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("H:i",$Zeit-24*60*60);
imagestring($ChartPNG, 2, $Breite-$Rand_rechts-15, ($Hoehe-20), $xText, $schwarz);
}
if ($Zeitbereich == 3) //Woche
{
$xText=date("d.M",$Zeit-7*24*60*60);
imagestring($ChartPNG, 2, $Rand_links-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-7/4*24*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/4*3-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-7/4*2*24*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/2-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-7/4*3*24*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/4-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit);
imagestring($ChartPNG, 2, $Breite-$Rand_rechts-15, ($Hoehe-20), $xText, $schwarz);
}
if ($Zeitbereich == 4) //Monat
{
$xText=date("d.M",$Zeit);
imagestring($ChartPNG, 2, $Rand_links-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-31/4*2460*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/4*3-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-31/2*24*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/2-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-31/4*3*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/4-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-31*24*60*60);
imagestring($ChartPNG, 2, $Breite-$Rand_rechts-15, ($Hoehe-20), $xText, $schwarz);
}
if ($Zeitbereich == 5) //Jahr
{
$xText=date("d.M",$Zeit);
imagestring($ChartPNG, 2, $Rand_links-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-92*24*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/4*3-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-183*24*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/2-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-274*24*60*60);
imagestring($ChartPNG, 2, $Rand_links+$Breite_Chart/4-15, ($Hoehe-20), $xText, $schwarz);
$xText=date("d.M",$Zeit-365*24*60*60);
imagestring($ChartPNG, 2, $Breite-$Rand_rechts-15, ($Hoehe-20), $xText, $schwarz);
}
}
//ENDE Function XBeschriftung
?>
Für jedes Chart muss dann noch ein Skript angelegt werden, welches die Charts auf ein beliebiges Hintergrundbild zeichnet und dann als *.PNG abspeichert.
Das Skript zum 1. Beispiel:
<?
//*******************************************************************************************************
// EG-Bad
//*******************************************************************************************************
include ("39582.ips.php");
$ArchivHandler=40475 /*[Archive Handler]*/;
$Hintergrund='C:\IP-Symcon\media\Graphen\Hintergrund_grau_weiss_rot_blau.png';
$Zeitbereich=2; //1=Stunde 2=Tag 3=Monat 4=Jahr
//Laden des .PNG Files zur Charterzeugung
$ChartPNG=imagecreatefrompng($Hintergrund);
//Festlegen des Dateinamens und der Variablen
$file='C:\ip-symcon\media\Graphen\EG_Bad.png';
$Variable1=19757 /*[Haus\Erdgeschoss\EG-Bad\Raumregler\EG-Bad-Istdaten\TEMPERATURE]*/;//ID der Variablen
$Variable2=31702 /*[Haus\Erdgeschoss\EG-Bad\Raumregler\EG-Bad-Istdaten\HUMIDITY]*/;//ID der Variablen
$Variable3=51534 /*[Haus\Erdgeschoss\EG-Bad\Raumregler\EG-Bad-Solldaten\SETPOINT]*/;//ID der Variablen
$Variable4=19572 /*[Haus\Erdgeschoss\EG-Bad\Raumregler\EG-Bad-Stellmotor\VALVE_STATE]*/;//ID der Variablen
$Variable5=16142 /*[Haus\Erdgeschoss\EG-Bad\Raumregler\EG-Bad-Fenster\STATE]*/;//ID der Variablen
$Variable6=50450 /*[Haus\Erdgeschoss\EG-Bad\EG-Bad-Heizstrahler\STATE]*/;//ID der Variablen
//Festlegen der Dimensionen des Charts
$size = getimagesize($Hintergrund);
$Breite=$size[0];//Gesamtbreite des .png Files
$Hoehe=$size[1];//Gesamthöhe des .png Files
$Rand_links=40;//linker Rand für Beschriftung
$Rand_oben=40;//Rand oben für Überschrift+Legende
$Rand_rechts=30;//Rand rechts für evtl. 2.Beschriftung
//Farbdefinitionen
$schwarz=imagecolorallocate($ChartPNG,0,0,0);
$grau=imagecolorallocate($ChartPNG,150,150,150);
$weiss=imagecolorallocate($ChartPNG,255,255,255);
$rot=imagecolorallocate($ChartPNG,255,0,0);
$blau=imagecolorallocate($ChartPNG,0,0,255);
$gruen=imagecolorallocate($ChartPNG,0,255,0);
$gelb=imagecolorallocate($ChartPNG,255,255,0);
$lila=imagecolorallocate($ChartPNG,150,0,150);
$petrol=imagecolorallocate($ChartPNG,0,150,150);
//Überschrift
$Ueberschrift = 'EG-Bad';
$text_width = imagefontwidth(5);
$textlaenge = strlen($Ueberschrift);
$width = $textlaenge*$text_width;
imagestring($ChartPNG, 5, ((600/2)-($width/2)), 2, $Ueberschrift, $schwarz);
//Y-Achsen
$Maxwert_l=30;//Maximaler Wert Y-Achse links
$Minwert_l=10;//Minimaler Wert Y-Achse links
$Maxwert_r=100;//Maximaler Wert Y-Achse rechts
$Minwert_r=0;//Minimaler Wert Y-Achse rechts
//Beschriftung Y-Achse links
imagestring($ChartPNG, 3, 5, 20, '°C', $schwarz);
//Beschriftung Y-Achse rechts
$Y_rechts='%';
$text_width = imagefontwidth(3);
$textlaenge = strlen($Y_rechts);
imagestring($ChartPNG, 3, $Breite-$textlaenge*$text_width-5, 20, $Y_rechts, $schwarz);
//Legende
//Reihe 1
imagestring($ChartPNG, 2, $Rand_links, 3 , 'Ist-Temp', $blau); //Linie 1
imagestring($ChartPNG, 2, $Rand_links, 15 , 'Luftfeuchte', $rot); //Linie 2
imagestring($ChartPNG, 2, $Rand_links, 27 , 'Soll-Temp', $gruen); //Linie 3
//Reihe 2
imagestring($ChartPNG, 2, $Breite-$Breite/2+100 , 3, 'Ventil', $gelb); //Linie 1
imagestring($ChartPNG, 2, $Breite-$Breite/2+100 , 15, 'Fenster', $lila); //Linie 2
imagestring($ChartPNG, 2, $Breite-$Breite/2+100 , 27, 'Heizstrahler', $petrol); //Linie 3
//Maße berechnen
$Breite_Chart=$Breite-$Rand_links-$Rand_rechts;
$Hoehe_Chart=$Hoehe-$Rand_oben-30;
$Feld_b=$Breite_Chart/12;
$Feld_h=$Hoehe_Chart/10;
//Gitternetz
//senkrecht
for ($x=0; $x<=12; $x++)
{
imageline ($ChartPNG , ($Breite_Chart+$Rand_links-($Feld_b*$x)) , ($Hoehe-30) , ($Breite_Chart+$Rand_links-($Feld_b*$x)) , $Rand_oben , $grau );
}
//waagerecht
for ($x=0; $x<=10; $x++)
{
imageline ($ChartPNG , $Rand_links , ($Rand_oben+$Feld_h*$x) , ($Breite-$Rand_rechts) , ($Rand_oben+$Feld_h*$x) , $grau );
}
//Linien zeichnen
Linie($Variable1,$ChartPNG,$ArchivHandler,$Breite,$Hoehe,$Breite_Chart,$Hoehe_Chart,$Rand_rechts,$Maxwert_l,$Minwert_l,$blau,1,0,$Zeitbereich);
Linie($Variable2,$ChartPNG,$ArchivHandler,$Breite,$Hoehe,$Breite_Chart,$Hoehe_Chart,$Rand_rechts,$Maxwert_r,$Minwert_r,$rot,1,0,$Zeitbereich);
Linie($Variable3,$ChartPNG,$ArchivHandler,$Breite,$Hoehe,$Breite_Chart,$Hoehe_Chart,$Rand_rechts,$Maxwert_l,$Minwert_l,$gruen,2,0,$Zeitbereich);
Linie($Variable4,$ChartPNG,$ArchivHandler,$Breite,$Hoehe,$Breite_Chart,$Hoehe_Chart,$Rand_rechts,$Maxwert_r,$Minwert_r,$gelb,2,0,$Zeitbereich);
Linie($Variable5,$ChartPNG,$ArchivHandler,$Breite,$Hoehe,$Breite_Chart,$Hoehe_Chart,$Rand_rechts,$Maxwert_r,$Minwert_r,$lila,4,3,$Zeitbereich);
Linie($Variable6,$ChartPNG,$ArchivHandler,$Breite,$Hoehe,$Breite_Chart,$Hoehe_Chart,$Rand_rechts,$Maxwert_r,$Minwert_r,$petrol,3,4,$Zeitbereich);
//X-Beschriftung
XBeschriftung($Zeitbereich,$ChartPNG,$Rand_links,$Rand_rechts,$Hoehe,$Breite,$schwarz,$Breite_Chart);
//Y-Beschriftung links
for ($i=0; $i<=10; $i++)
{
$yText=$Minwert_l+$i*($Maxwert_l-$Minwert_l)/10;
imagestring($ChartPNG, 2, 5, $Hoehe-30-($Hoehe_Chart/10)*$i, $yText, $schwarz);
}
//Y-Beschriftung rechts
for ($i=0; $i<=10; $i++)
{
$yText=$Minwert_r+$i*($Maxwert_r-$Minwert_r)/10;
imagestring($ChartPNG, 2, $Breite-$Rand_rechts+3, $Hoehe-30-($Hoehe_Chart/10)*$i, $yText, $schwarz);
}
//Bild speichern
imagepng($ChartPNG, $file);
// Destroy image
imagedestroy($ChartPNG);
?>
Das Skript zum Ölpreis-Chart:
<?
//*******************************************************************************************************
// Ölpreis
//*******************************************************************************************************
include ("39582.ips.php");
$ArchivHandler=40475 /*[Archive Handler]*/;
//$Hintergrund='C:\IP-Symcon\media\Graphen\Hintergrund_grau_weiss_rot_blau.png';
$Hintergrund='C:\IP-Symcon\media\Graphen\Haus_Hintergrund.png';
$Zeitbereich=5; //1=Stunde 2=Tag 3=Wochw 4=Monat 5=Jahr
//Laden des .PNG Files zur Charterzeugung
$ChartPNG=imagecreatefrompng($Hintergrund);
//Festlegen des Dateinamens und der Variablen
$file='C:\ip-symcon\media\Graphen\Ölpreis.png';
$Variable1=41238 /*[Haus\Heizung\Öl-Preis\Öl-Preis]*/;//ID der Variablen
//Festlegen der Dimensionen des Charts
$size = getimagesize($Hintergrund);
$Breite=$size[0];//Gesamtbreite des .png Files
$Hoehe=$size[1];//Gesamthöhe des .png Files
$Rand_links=60;//linker Rand für Beschriftung
$Rand_oben=40;//Rand oben für Überschrift+Legende
$Rand_rechts=20;//Rand rechts für evtl. 2.Beschriftung
//Farbdefinitionen
$schwarz=imagecolorallocate($ChartPNG,0,0,0);
$grau=imagecolorallocate($ChartPNG,150,150,150);
$weiss=imagecolorallocate($ChartPNG,255,255,255);
$rot=imagecolorallocate($ChartPNG,255,0,0);
$blau=imagecolorallocate($ChartPNG,0,0,255);
$gruen=imagecolorallocate($ChartPNG,0,255,0);
$gelb=imagecolorallocate($ChartPNG,255,255,0);
$lila=imagecolorallocate($ChartPNG,150,0,150);
$petrol=imagecolorallocate($ChartPNG,0,150,150);
//Überschrift
$Ueberschrift = 'Ölpreis';
$text_width = imagefontwidth(5);
$textlaenge = strlen($Ueberschrift);
$width = $textlaenge*$text_width;
imagestring($ChartPNG, 5, ((600/2)-($width/2)), 2, $Ueberschrift, $schwarz);
//Y-Achsen
$Maxwert_l=100;//Maximaler Wert Y-Achse links
$Minwert_l=70;//Minimaler Wert Y-Achse links
$Maxwert_r=100;//Maximaler Wert Y-Achse rechts
$Minwert_r=70;//Minimaler Wert Y-Achse rechts
//Beschriftung Y-Achse links
imagestring($ChartPNG, 3, 5, 20, '€/100L', $schwarz);
//Beschriftung Y-Achse rechts
$Y_rechts='';
$text_width = imagefontwidth(3);
$textlaenge = strlen($Y_rechts);
imagestring($ChartPNG, 3, $Breite-$textlaenge*$text_width-5, 20, $Y_rechts, $schwarz);
//Legende
//Reihe 1
imagestring($ChartPNG, 2, $Rand_links, 3 , 'Euro', $blau); //Linie 1
// imagestring($ChartPNG, 2, $Rand_links, 15 , 'Linie 2', $rot); //Linie 2
// imagestring($ChartPNG, 2, $Rand_links, 27 , 'Linie 3', $gruen); //Linie 3
//Reihe 2
// imagestring($ChartPNG, 2, $Breite-$Breite/2+100 , 3, 'Linie 4', $gelb); //Linie 1
// imagestring($ChartPNG, 2, $Breite-$Breite/2+100 , 15, 'Linie 5', $lila); //Linie 2
// imagestring($ChartPNG, 2, $Breite-$Breite/2+100 , 27, 'Linie 6', $petrol); //Linie 3
//Maße des eigendlichen Charts in Pixel berechnen
$Breite_Chart=$Breite-$Rand_links-$Rand_rechts;
$Hoehe_Chart=$Hoehe-$Rand_oben-30;
$Feld_b=$Breite_Chart/12;
$Feld_h=$Hoehe_Chart/10;
//Gitternetz zeichnen
//senkrecht
for ($x=0; $x<=12; $x++)
{
imageline ($ChartPNG , ($Breite_Chart+$Rand_links-($Feld_b*$x)) , ($Hoehe-30) , ($Breite_Chart+$Rand_links-($Feld_b*$x)) , $Rand_oben , $grau );
}
//waagerecht
for ($x=0; $x<=10; $x++)
{
imageline ($ChartPNG , $Rand_links , ($Rand_oben+$Feld_h*$x) , ($Breite-$Rand_rechts) , ($Rand_oben+$Feld_h*$x) , $grau );
}
//Linien bzw. Graphen zeichnen
Linie($Variable1,$ChartPNG,$ArchivHandler,$Breite,$Hoehe,$Breite_Chart,$Hoehe_Chart,$Rand_rechts,$Maxwert_l,$Minwert_l,$blau,1,0,$Zeitbereich);
//X-Beschriftung
XBeschriftung($Zeitbereich,$ChartPNG,$Rand_links,$Rand_rechts,$Hoehe,$Breite,$schwarz,$Breite_Chart);
//Werte der Variablen für Min/Max/Aktuell auslesen
$Zeit=time();
if ($Zeitbereich == 1) //Stunde
{
$Preis=AC_GetLoggedValues($ArchivHandler,$Variable1,time()-60*60,time(),0);
}
if ($Zeitbereich == 2) //Tag
{
$Preis=AC_GetLoggedValues($ArchivHandler,$Variable1,time()-24*60*60,time(),0);
}
if ($Zeitbereich == 3) //Woche
{
$Preis=AC_GetLoggedValues($ArchivHandler,$Variable1,time()-7*24*60*60,time(),0);
}
if ($Zeitbereich == 4) //Monat
{
$Preis=AC_GetLoggedValues($ArchivHandler,$Variable1,time()-31*24*60*60,time(),0);
}
if ($Zeitbereich == 5) //Jahr
{
$Preis=AC_GetLoggedValues($ArchivHandler,$Variable1,time()-365*24*60*60,time(),0);
}
//Y-Beschriftung links
for ($i=0; $i<=10; $i++)
{
$yText=$Minwert_l+$i*($Maxwert_l-$Minwert_l)/10;
imagestring($ChartPNG, 2, 5, $Hoehe-30-($Hoehe_Chart/10)*$i, $yText, $schwarz);
}
//Maxwert / Minwert / aktuell
$aktuell=$Preis[0]['Value'];
foreach ($Preis as $v)
{
$value[] = $v['Value'];
// rsort($value);
}
rsort($value);
$Max=$value[0];
$Anzahl=count($value);
$Min=$value[$Anzahl-1];
imagestring($ChartPNG, 2, $Rand_links+5, ($Hoehe-$Hoehe_Chart), 'Maximal: '.number_format($Max,2).'EUR', $schwarz);
imagestring($ChartPNG, 2, $Rand_links+5, ($Hoehe-$Hoehe_Chart-20), 'Minimal: '.number_format($Min,2).'EUR', $schwarz);
imagestring($ChartPNG, 2, $Rand_links+5, ($Hoehe-$Hoehe_Chart-40), 'aktuell: '.number_format($aktuell,2).'EUR', $schwarz);
//Bild speichern
imagepng($ChartPNG, $file);
// Destroy image
imagedestroy($ChartPNG);
?>
Mit dem folgenden Skript kann ein Farbverlauf-Hintergrund erzeugt und gespeichert werden:
<?
//Script zum Erzeugen eines Hintergundes für die Charts mit Farbverlauf
//Die Funktionen "gradient" und "hex2rgb" sind von php.net aus einem Beispiel entnommen
//gradient
function gradient($w=100, $h=100, $c=array('#FFFFFF','#FF0000','#00FF00','#0000FF'), $hex=true) {
/*
Generates a gradient image
Author: Christopher Kramer
Parameters:
w: width in px
h: height in px
c: color-array with 4 elements:
$c[0]: top left color
$c[1]: top right color
$c[2]: bottom left color
$c[3]: bottom right color
if $hex is true (default), colors are hex-strings like '#FFFFFF' (NOT '#FFF')
if $hex is false, a color is an array of 3 elements which are the rgb-values, e.g.:
$c[0]=array(0,255,255);
*/
$im=imagecreatetruecolor($w,$h);
if($hex) { // convert hex-values to rgb
for($i=0;$i<=3;$i++) {
$c[$i]=hex2rgb($c[$i]);
}
}
$rgb=$c[0]; // start with top left color
for($x=0;$x<=$w;$x++) { // loop columns
for($y=0;$y<=$h;$y++) { // loop rows
// set pixel color
$col=imagecolorallocate($im,$rgb[0],$rgb[1],$rgb[2]);
imagesetpixel($im,$x-1,$y-1,$col);
// calculate new color
for($i=0;$i<=2;$i++) {
$rgb[$i]=
$c[0][$i]*(($w-$x)*($h-$y)/($w*$h)) +
$c[1][$i]*($x *($h-$y)/($w*$h)) +
$c[2][$i]*(($w-$x)*$y /($w*$h)) +
$c[3][$i]*($x *$y /($w*$h));
}
}
}
return $im;
}
// hex2rgb
function hex2rgb($hex)
{
$rgb[0]=hexdec(substr($hex,1,2));
$rgb[1]=hexdec(substr($hex,3,2));
$rgb[2]=hexdec(substr($hex,5,2));
return($rgb);
}
//**************************************************************************************
//**************************************************************************************
//Bild generieren
//**************************************************************************************
//**************************************************************************************
$Breite=600;
$Hoehe=330;
$ChartPNG=gradient($Breite, $Hoehe, array('#909090', '#FFFFFF', '#FF9090', '#9090FF'));
$file='C:\ip-symcon\media\Graphen\Hintergrund_grau_weiss_rot_blau.png';
//Bild speichern
imagepng($ChartPNG, $file);
// Destroy image
imagedestroy($ChartPNG);
?>
Gruß
Thorsten