Q&A Highcharts - Multigraph V1.0

Ja da hat sich wirklich ein Fehler mit den „Pies“ eingeschlichen… Werde heute nachmittag nochmals danach schauen und mich dann melden…

Danke KHC

Hier das Bugfix. Wird mit der nächsten Highcharts-Version veröffentlicht. Im Highcharts-Script in der Funktion „CreateTooltipString“ die Zeile

$offset .= "'".$Name."': ".$Serie['Offset']."',";

einfach auskommentieren. Dann sollten die Pies wieder laufen.

Das ganze sieht dann folgendermaßen aus:

function CreateTooltipString($CfgDaten)
	{
		$s = "";
		$offset = "";	// => ab V1.0006 Offset zum Darstellen von z.B.: Monat und Vormonat in einem Chart

		foreach ($CfgDaten['Series'] as $Serie )
		{
			if (strrpos($Serie['Param'],'pie') > 0)
			{
				$CountOfSerie = count($Serie['Value']);
				for ($i=0; $i<$CountOfSerie; $i++)
				{
					$Name = $Serie['Name'][$i];
					// => ab V1.0005 (somit muss nur mehr einmal die Einheit übergeben werden, falls alle identisch sind)
					if ($i < count($Serie['Unit']))
						$Unit = $Serie['Unit'][$i];

					$s .= "'".$Name."': this.y + ' ". $Unit."',";
					//$offset .= "'".$Name."': ".$Serie['Offset']."',";
				}
			}
			else

Hallo,

habe endlich Highcharts „zum laufen“ gebracht und zumindest teilweise verstanden wie es funktioniert.
Ein Frage stellt sich mir aber jetzt: Muss ich jedesmal das ganze „anlegen“ (Variable, Scripte,…) wenn ich eine Chartserie anzeigen lassen möchte? Beispiel: Cartserie 1 mit Ist- und Solltemperatur sowie Stellantriebsdaten (%) des Wohnzimmers. Das ganze möchte ich nun auch für das Esszimmer machen.

Ups, eine zweite Frage fällt mir noch ein: Ich möchte gerne den Stromverbrauch und gleichzeitig die Produktionswerte der PV-Anlage anzeigen lassen. Beide Werte sind vorhanden und werden geloggt. Mit Highcharts anzeigen lassen geht aber irgendwie nicht. Ich habe gelesen dass die Werte als Zähler geloggt sein müssen. Das habe ich umgestellt. Hat mir dazu jemand einen Tipp?

Viele Grüße

Michael

hier gibt es 2 Mögliche Ansätze:

  1. ja, du legst für jedes Diagramm je eine neue String-Var und ein HC-Config-Script an
  2. Du legst eine String-Var an, darunter für jedes Diagramm, welches Du designen möchtest, ein individuelles HC-Config-Script. Das macht dann Sinn, wenn man (2+) verschiedene Sichten in einem WFE-Fenster darstellen möchte. Das jeweilige Diagramm kann dann im WFE durch das unter dem Diagramm erscheindende Script angezeigt werden (das jeweils ausgelöste Script füllt die Variable)

hast Du die umgestellte Var auch neu aggregiert? wenn ja werden wohl weitere Fehler-Infos benötigt, um die Ursache einzugrenzen

Es gibt auch noch Probleme mit Boolean-Variablen in verbindung mit ReplaceValue …

// Warmwasser Zirkulationspumpe
	$CfgDaten["Series"][] = array("Id"=>53839,
	"Name" =>"WWZ",
	"Unit"=>NULL,
	"ReplaceValues"=>array(0=>0.2,1=>20),
	"Param" =>"type:'area',
	step: true,
	yAxis: 0,
	shadow: true,
	lineWidth: 1,
	states: {hover:{lineWidth: 2}},
	marker: { enabled: false, states: { hover: { enabled: true, symbol: 'circle', radius: 4, lineWidth: 1}}}");

Das ist meine Warmwasserzirkulationspumpe; sie liefert 0 oder 1.
Funktioniert die Anzeige bei Euch?

nun, vielleicht hättest du auch dein Problem schildern sollen… dann hätte man mit dem Posting was Konkretes anfangen können.
Möglicherweise ist es dieses Problem(?):

Bool-Vars mit Replace Value werden bei mir mit max. 1-2 historischen Datensätzen angezeigt. Eine weiter zurückreichende Historie ist in den Daten nicht enthalten.

Hier mal ein Auszug aus einem meiner Diagramme (.tmp-File), „Niederschlag“ ist die Bool-Var mit Replace Value, vergleichend ist noch „Rohdaten“ enthalten (Datensatz gekürzt):


series: [
						{name: 'Niederschlag', type:'area', step:true, yAxis: 0, visible: false, color: '#818181', shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}},
			marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}, data: [[Date.UTC(2012,3,24,19,50,42), 4],[Date.UTC(2012,3,24,21,50,55), 4]]},
{name: 'Rohdaten', type:'spline', step:true, yAxis: 0, visible: true, color: '#2CAB61', shadow: true, dashStyle: 'shortdot', lineWidth: 1, states: {hover:{lineWidth: 2}},
			marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}, data: [[Date.UTC(2012,3,24,00,00,00), 4],[Date.UTC(2012,3,24,06,00,17), 4.012],[Date.UTC(2012,3,24,06,00,19), 4.009],[Date.UTC(2012,3,24,06,00,22), 4.005],[Date.UTC(2012,3,24,06,00,25), 4.002],[Date.UTC(2012,3,24,06,00,27), 4],[Date.UTC(2012,3,24,06,12,39), 4.009],[Date.UTC(2012,3,24,06,12,42), 4.005],[Date.UTC(2012,3,24,06,12,46), 4.001],

@honk0504 - du hast recht. Hier hat sich ein Tippfehler eingeschlichen. Habe dir eine Vorabversion der V1.0008 als PM gesandt - damit sollte das Problem behoben sein. Ich denke bis zum Wochenende habe ich alles nochmals durchgetestet und dann stelle ich die Version final ins Netz.

Alles kein wirkliches Problem … freue mich sehr das der Fehler gefunden ist und behoben wird. Ich werde es direkt heute abend testen und unmittelbar berichten. :D:loveips:

Ja, ich kann bestätigen, dass das Problem gelöst ist. :smiley:
Vielen Dank für das blitzschnelle BugFixing.

Ich habe noch eine Sache festgestellt. Ich habe drei Datenquellen: Sollwerte in kWh, Ertrag in kWh und eine Quote aus beiden (Ertrag ist x% von Soll). Diese drei Werte möchte ich per HC visualisieren.
Sollwerte:

[Date.UTC(2012,0, 1, 00, 00, 00),148.78], [Date.UTC(2012,1, 1, 00, 00, 00),229.04], [Date.UTC(2012,2, 1, 00, 00, 00),369.71], [Date.UTC(2012,3, 1, 00, 00, 00),435.38], [Date.UTC(2012,4, 1, 00, 00, 00),484.43], [Date.UTC(2012,5, 1, 00, 00, 00),475.92], [Date.UTC(2012,6, 1, 00, 00, 00),486.46], [Date.UTC(2012,7, 1, 00, 00, 00),460.92], [Date.UTC(2012,8, 1, 00, 00, 00),384.3], [Date.UTC(2012,9, 1, 00, 00, 00),290.66], [Date.UTC(2012,10, 1, 00, 00, 00),176.75], [Date.UTC(2012,11, 1, 00, 00, 00),111.48],

Quote:

[Date.UTC(2012,0, 1, 00, 00, 00),97.3], [Date.UTC(2012,1, 1, 00, 00, 00),117.3], [Date.UTC(2012,2, 1, 00, 00, 00),111], [Date.UTC(2012,3, 1, 00, 00, 00),91.6],

Ertrag: geloggte Variable

Wenn ich das jetzt so in mein Script einbette,

	$CfgDaten["Series"][] = array("Id"=>57373 ,
	"AggType"=>3,
	"Name" =>"Ertrag in kWh",
	"Unit"=>NULL,
	"ReplaceValues"=>false,
	"Param" =>"type:'line',
	color: '#FFFF55',
	threshold: 0.5,
	fillOpacity: 0.5,
	step :false,
	yAxis: 0,
	shadow: false,
	lineWidth: 2,
	states: {hover:{lineWidth: 3}},
	marker: { enabled: true,
	states: { hover: { enabled: true, radius: 4}}}");

	// Y-Achsen
	$CfgDaten["yAxis"][] = array("Name" =>"Ertrag in kWh", "Unit"=>"kWh","Opposite"=>false,"TickInterval"=>100, "alternateGridColor"=>"#FDFFD5");
	//oder direkt den String für die Achsen übergeben $CfgDaten["yAxis"][] = "title: { text: 'Heizungssteller / Luftfeuchte' }, min:0";

	// X-Achse ist autom. Time-Format

	// => ab V1.0002
	// HighchartConfig String
	$CfgDaten["HighChartCfg"]= true;  // false = default String wird verwendet

	// Beispiel für ein von extern übergebener CfgString. Dies entspricht exakt dem Highcrats ConfigString aus der Highcharts.com/ref
	// zusätzlich können bzw. teilweise müssen folgenden Platzhalter verwendet werden.
	// %title.text% = $CfgDaten["Title"]
	// %subtitle.text% = CfgDaten["SubTitle"], oder bei "" der automatisch erzeugte Zeitraum
	// %yAxis% = die genierten y-Achsen welche durch $CfgDaten["yAxis"] konfiguriert wurden
	// %tooltip% = der generiert Tooltip
	// %xAxis.min% und %xAxis.may% = der durch $CfgDaten["StartTime"] und $CfgDaten["EndTime"] festgelegte Zeitraum
	// %data% = die aus der Datenbank gelesenen Daten, ohne diesen Platzhalter läuft gar nichts
		$CfgDaten["HighChartCfg"]="
			credits: {
				enabled: false
			},
			chart: {
				renderTo: 'container',
	         defaultSeriesType: 'line',
	         zoomType: 'x'

			},
		   plotOptions: {
         	series: {
            	animation: { duration: 2000 },
            	pointWidth: 30 // Balkenbreite
        		},
    		},
			title: {
				text: '%title.text%',
				//x: -20
			},
			subtitle: {
				text: '%subtitle.text%'
				//x: -20
			},
			exporting: {
				buttons: {
					printButton: {
						enabled: false
					},
					exportButton: {
						enabled: false
					}
				}
			},
      	legend: {
	        layout: 'vertical',
	        backgroundColor: '#1f2f40',
	        align: 'left',
	        verticalAlign: 'top',
	        floating: true,
	        x: 100,
	        y: 0
		   },
			xAxis: [{
				type: 'datetime',
				 dateTimeLabelFormats: { second: '%H:%M:%S',
					minute: '%H:%M',
					hour: '%H:%M',
					day: '%e. %b',
					week: '%e. %b',
					month: '%B',
					year: '%Y'
				 },
				 labels: {
				   rotation: 1 // Rotation der X-Achsen-Beschriftung
				 },
				 tickInterval: 30*24*3600*1000, //30 Tage x 24 Std. x 3600 sek x 1000ms - 30 Tage = Monat
 	         title: {
 	           text: 'Zeitraum: Monate'
              //align: 'center'
        		}

			}],
			yAxis: [	%yAxis% ],
			tooltip: {
				shared: true,
				crosshairs: true,},
			series: [
                            {name: 'Sollwerte in kWh', Unit: 'kWh', type:'column', yAxis: 0, visible: true, color: '#A5A5A5', shadow: true, lineWidth: 1, showInLegend: true, enableMouseTracking: true,
                                states: {hover:{lineWidth: 1}},dashStyle: 'shortdot', marker: { enabled: true, states: { hover: { enabled: false, radius: 4}}},
                                data:[$PV_Ertrag_Soll]
                            }, %data%
                            {name: 'Quote in %', Unit: '%', type:'line', yAxis: 0, visible: true, color: '#C00000', shadow: true, lineWidth: 0, showInLegend: false, enableMouseTracking: true,
                                states: {hover:{lineWidth: 1}}, marker: { enabled: false, states: { hover: { enabled: false, radius: 4}}},
                                data:[$PV_Quote]
                            },
                  ]
		});";


dann zweigt HC nichts an; das Fenster ist leer. VOR V1.0008 lief das anstandslos. Wenn ich nun die Quote raus nehme, dann sieht es richtig aus (nur eben ohne Quote). Woran kann das liegen? Ich habe nichts geändert … :confused:
EDIT: Aussehen sollte es eigentlich so.
@khc: Kann es sein, dass es sich hierbei um einen Bug handelt?

Hi,

ich weiß nicht ob ich in diesem Thread wirklich richtig bin, habe eine vermutlich banale Frage:

Dies geht:
$CfgDaten[„Series“] = array(„Id“=>35116, „Name“ …

Dies nicht:
$CfgDaten[„Series“] = array(„Id“=>$SollTempID, „Name“…

Dabei ist $SollTempID=35116

Können an dieser Stelle keine Variablen verwendet werden - wie kann ich mir helfen??

Hi Herbert,

doch, das geht. Bei mir sind alle HC-Scripte so aufgebaut. Welche Fehlermeldung bekommst Du?


$CfgDaten["Series"][] = array("Id"=>$chart_var7_id, "Name" =>$chart_var7_name, "AggType"=>1,	"Unit"=> $chart_var7_unit,

Leider kein Fehler - einfach keine Kurve.

Ich rufe das Script aus einem anderen nur per include auf, ermittle aber die Variablen im Script

  1. $SollTempID = @IPS_GetVariableIDByName(„Soll Temperatur“, $Par_ID);

Dies funktioniert auch, wenn ich das Script allerdings direkt ausführe natürlich nicht (braucht ja die „Umgebung“ des aufrufenden Scripts

welchen Grund hat denn das „@“ vor dem Befehl? hiermit wird eine fehlermeldung unterdrückt. Nimm das mal raus und schau, ob du eine Fehlermeldung bekommst. Vermutlich wird nicht die richtige ID ermittelt

Es ist mir ein Rätsel:

$SollTempID = IPS_GetVariableIDByName("Soll Temperatur", $Par_ID);

// $SollTempID = 42616;
echo"
SolltempId=$SollTempID";

Kommentiere ich nur die oberste Zeile aus geht es, kommentiere ich nur die mittlere aus geht es nicht.
Unterste Zeile liefert immer das gleiche …

Probiere es mal mit

$CfgDaten["Series"][] = array("Id"=>(int)$SollTempID, "Name".....

Augenmerk auf das (int)

Falls es im Array nicht funktioniert zuvor bereits umwandeln.

 
$SollTempID = (int)$SollTempID;

Hab beides probiert - Fehler bleibt leider

Hm.

Ich habe es einmal auf meinem System nachgestellt.

 $id_elevation = @IPS_GetVariableIDByName("Elevation", 14242);
// $id_elevation = 24817 /*[Infos\Wetterdaten\Sonnenstand\Elevation]*/;

 echo $id_elevation;

 $CfgDaten["Series"][] = array("Id"=>$id_elevation, "Name" =>$elevation,"Unit"=>"", "ReplaceValues"=>false,
  "Param" =>"type:'spline', step:false, yAxis: $elevation_axis, shadow: true, color: '#FF0000', fillOpacity: 0.5, lineWidth: 1, zIndex: 3, states: {hover:{lineWidth: 2, shadow: true}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");

Funktioniert wie es soll und wie Du es möchtest.

Im Moment kann ich Dir auch nicht weiterhelfen.

Ich rufe das Script aus einem anderen nur per include auf, ermittle aber die Variablen im Script

Zeig uns mal deinen Aufruf.

Von wo nach wo holst oder übergibst Du die ID?

hallo,

vielen Dank für Eure Mühe.

Anbei mein Script, ich rufe dies „zur Fehlersuche“ direkt auf. Auch hier der Fehler:
SolltempID wird Graph angezeigt, bei IstTempID nicht …

<?
	//
	//include ('14253.ips.php');
	//
	//
	$Par_ID=IPS_GetParent($IPS_SELF);
	$HeizungsID=$Par_ID;
	$FensterID = @IPS_GetVariableIDByName("Fenster geöffnet", $Par_ID);
	$SollTempID = 42616;
	echo"
SolltempId=$SollTempID";
	//
	//	$IstTempID=35116;
	$IstTempID = IPS_GetVariableIDByName("Temperatur", $Par_ID);
	$IstTempID = (int)$IstTempID;
	echo"
IstTempId=$IstTempID";
	$HighchartID = IPS_GetVariableIDByName("Highchart", $Par_ID);
	$Script_Senden = $IPS_SELF;
	//
	//
	$scriptname=IPS_GetName($IPS_SELF);
	echo "
Script '$scriptname' gestartet";
	//
	$Heizungsname=IPS_GetName($HeizungsID);
	echo "
Heizungsname=$Heizungsname";
	echo "
HeizungsID=$Par_ID, FensterID=$FensterID, SolltempId=$SollTempID, IstTempID=$IstTempID, HighchartID=$HighchartID";	//
	// => ab V1.0004, damit kann der Script auch von anderen Scripten aufgerufen werden und bereits mit CfgDaten vorkonfiguriert werden
	Global $CfgDaten; //$CfgDaten = array();

	// Überschriften
	$CfgDaten["Title"]= $HeizungsID;
	$CfgDaten["SubTitle"]= ""; 						// "" = Automatisch über Zeitraum
	// => ab V1.0006, möglichkeit der Definition des automatisch erzeugten Subtitels
	$CfgDaten["SubTitleFormat"]= ""; 				// z.B. "Zeitraum: %StartTime% - %EndTime% (wird auch als Default herangezogen wenn nichts konfiguriert wurde)
	$CfgDaten["SubTitleDateTimeFormat"]= ""; 		// z.B.: "(D) d.m.Y H:i" (wird auch als Default herangezogen wenn nichts konfiguriert wurde)

	// IPS Variablen ID´s
	//$CfgDaten["ArchiveHandlerId"]= 55645 /*[Objekt #55645 existiert nicht]*/; 	// Archive Handler
	// => ab V1.0005, damit kann braucht der ArciveHandler nicht mehr belegt werden
	// => ab V1.0006, unnötig, wird in Highcharts direkt ausgelesen
	//$CfgDaten["ArchiveHandlerId"] = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}');
	//$CfgDaten["ArchiveHandlerId"] = $CfgDaten["ArchiveHandlerId"][0];

	$CfgDaten["ContentVarableId"]=(int)$HighchartID;  // ID der String Variable in welche die Daten geschrieben werden (-1 oder überhaupt nicht angeben wenn die Content Variable das übergordnete Element ist)
	$CfgDaten["HighChartScriptId"]= 58265 /*[Highcharts\Highcharts_v_1006]*/;  				// ID des Highcharts Scripts

	// => ab V1.0006, nur notwendig wenn Highcharts in einem WFCPopup angezeigt werden soll ($CfgDaten["RunMode"]= "popup")
	$CfgDaten["WebFrontConfigId"]= 49982 /*[WebFront Configurator]*/;
	$CfgDaten["WFCPopupTitle"]= "Ich bin der Text, welcher als Überschrift im Popup gezeigt wird";

	// Zeitraum welcher dargestellt werden soll
	$CfgDaten["StartTime"] = mktime(0,0,0, date("m", time()), date("d",time())-1, date("Y",time())); // ab heute 00:00 Uhr
	$CfgDaten["EndTime"] = mktime(23,59,59, date("m", time()), date("d",time()), date("Y",time())); // ab heute 23:59 Uhr, oder //$CfgDaten["EndTime"] = time();   // = bis jetzt

	// => ab V1.0003 neu ab V1.0006 neuer Parameter "popup"
	$CfgDaten["RunMode"]= "script"; 	// file, script oder popup

	// => ab V1.0003
	// Serienübergreifende Einstellung für das Laden von Werten
	$CfgDaten["AggregatedValues"]["HourValues"] = 0;      // ist der Zeitraum größer als X Tage werden Stundenwerte geladen
	$CfgDaten["AggregatedValues"]["DayValues"] = 140;       // ist der Zeitraum größer als X Tage werden Tageswerte geladen
	$CfgDaten["AggregatedValues"]["NoLoggedValues"] = 600; // ist der Zeitraum größer als X Tage werden keine Boolean Werte mehr geladen, diese werden zuvor immer als Einzelwerte geladen
	$CfgDaten["AggregatedValues"]["MixedMode"] = false;     // alle Zeitraumbedingungen werden kombiniert

	// Die Parameter für die einzelnen Chart Serien (Achtung! unbedingt auf Groß-Kleinschreibung achten)
	// Name: Name der Kurve (Anzeige in Legende und Tooltip)
	// Unit: NULL = Einheit wird aus Suffix des eingestellten Profils übernommen
	//       "string" = string wird als Einheit eingetragen
	//       array(0=>'String für 0',1=>'String für 1', usw.) = Ist der Wert 0 wird 'Strung für 0' im Tooltip angezeigt, usw
	// ReplaceValues: false = Werte werden wie geloggt übernommen
	//			array(0=>0.2,1=>10, usw.) = der Wert 0 wird in 0.2 geändert, der Wert 1 wird in 10 geändert
	//       das macht für die Darstellung von Boolean Werte Sinn, oder für Drehgriffkontakte (Werte 0,1,2) Sinn
	// Param: Einstellungen der Kurve (hier können werden exakt Einstellungen aus Higcharts.com eingegeben) hier ein paar Beispiele
	//    type: Art der Kurve: Sinn machen [area, areaspline, line, spline, pie], noch nicht sinnvoll dargestellt werden [scatter, bar, column]
	//    step: true oder false - jeder Werte bildet eine Stufe (sinnvoll für Heizungsteller, oder Sollwertvorgaben)
	//    yAxis: Nummer welche Y-Achse verwendet werden soll (ab 0)
	//    shadow: true oder false - Darstellung mit oder ohne Schatten
	//    lineWidth: Linienstärke
	//    alles weitere bitte aus der Higcharts-Referenz entnehmen -> http://www.highcharts.com/ref/
	// 	und so könnte für eine Achse seperate Einstellungen für die AggregattedValues getroffen werden

	// => ab V1.0005 gültig für Pies
	// AggType: [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year] .. wie der Werte gelesen werden soll
	// AggNameFormat: entspricht dem PHP-date("xxx") Format, welches das Format der Pie Namen festlegt, wenn keine Eingabe werden Default Werte genommen

	// => ab V1.0005 ebenfalls gültig für Zählervariablen
	// AggType: [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year] .. wie der Werte gelesen werden soll

	// => ab V1.0006 sind folgenden Konfigurationsdaten neu
	// Offset: in Minuten (z.B. 12 Minuten = 12*60)
	// StartTime und EndTime: wird für die entsprechende Serie eine Anfangs- und/oder Endzeitpunkt festgelegt wird dieser verwendet. Ansonsten wird
	//    der Zeitpunkt der Zeitpunkt aus den $CfgDaten genommen
	// ScaleFactor: Skalierungsfaktor mit welchem der ausgelesene Werte multipliziert wird
	// RoundValue: Anzahl der Nachkommastellen z.B.: "RoundValue" => 2
	//	AggValue: über AggValue kann Min/Max oder Avg vorgewählt werden (Default bei keiner Angabe ist Avg)
	// Data: hier kann ein Array an eigenen Datenpunkten übergeben werden. (z.B.: array("TimeStamp"=>time(), "Value"=>13.3))
	//    In diesem Fall werden für diese Serie keine Daten aus der Variable gelesenen.

	//$AggregatedValuesForSeries["HourValues"] = 3;
	//$AggregatedValuesForSeries["DayValues"] = 2;
	//$AggregatedValuesForSeries["DayValues"] = 2;
	//$AggregatedValuesForSeries["MixedMode"] = true;
	//,"AggregatedValues"=>$AggregatedValuesForSeries

	$CfgDaten["Series"][] = array("Id"=>$IstTempID, "Name" =>"Wohnzimmertemperatur",	"Unit"=>"°C", "ReplaceValues"=>false,
		"Param" =>"type:'spline', step:false, yAxis: 0, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 3}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
	$CfgDaten["Series"][] = array("Id"=>$SollTempID, "Name" =>"Wohnzimmer Solltemperatur",	"Unit"=>"°C", "ReplaceValues"=>false,"RoundValue"=>2,
		"Param" =>"type:'line', step:true, yAxis: 0, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 3}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 0}}}");
	$CfgDaten["Series"][] = array("Id"=>$FensterID, "Name" =>"ArbZr-Fenster",	"Unit"=>"Open/Close", "ReplaceValues"=>false,
		"Param" =>"type:'column', step:true, yAxis: 0, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 3}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
	$CfgDaten["Series"][] = array("Id"=>32896, "Name" =>"Wohnzimmerfenster",	"Unit"=>"Open/Close", "ReplaceValues"=>false,
		"Param" =>"type:'column', step:true, yAxis: 0, shadow: true,lineWidth:1 , states: {hover:{lineWidth: 3}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
/*
	// => ab V1.0006
	// Beispiel für Übergabe eigene Daten
	$DataForSerie[] = array("TimeStamp"=>time()- 13*60, "Value"=>13.3);
	$DataForSerie[] = array("TimeStamp"=>time()- 12*60, "Value"=>11.3);
	$DataForSerie[] = array("TimeStamp"=>time()- 11*60, "Value"=>12.3);

	$CfgDaten["Series"][] = array("Id"=>123, "Name" =>"Manueller Werte", "Unit"=>"°C",		 "ReplaceValues"=>false,
	   "Data" => $DataForSerie,
		"Param" =>"type:'spline', step:false, yAxis: 0, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
*/

/*
	// => ab V1.0004, sind auch Pie-Charts möglich. Hierbei wird je Pie eine Serie definiert (Wichtig hierbei -> ID´s, Namen, Units als Array definieren)
	//Beispiel für ein PieChart
	// hier werden für die VariableId=23980 für den definierten Zeitraum abhängig von AggType die Werte eingelesen
	$CfgDaten["Series"][] = array( "Id"=>23960, "AggType"=>3,	"Unit"=>array("°C"), "ReplaceValues"=>false,
		"Param" =>"type:'pie', center: [150, 320], size: 200, showInLegend: false, shadow: true,lineWidth: 1 , dataLabels: {enabled: true}");

	//Beispiel für Übergabe von externen Werten in Bezug auf Pies.....
	// hier wird für jeder Id des Arrays der aktuelle Wert eingelesen
	$CfgDaten["Series"][] = array( "Value"=>array(12,256,24.5,122), "Name" =>array("Wert1","Wert2", "Wert3", "Wert4"),	"Unit"=>array("A","B"), "ReplaceValues"=>false,
		"Param" =>"type:'pie', center: [100, 80], size: 200, showInLegend: true, shadow: true,lineWidth: 1 , dataLabels: {enabled: false}");
	$CfgDaten["Series"][] = array("Id"=>array(23960 /*[Objekt #23960 existiert nicht]*/,13641,10674 /*[Objekt #10674 existiert nicht]*/), "Name" =>array("Aussentemperatur","Luftfeuchte", "IST"),	"Unit"=>array("°C","%","°F"), "ReplaceValues"=>false,
		"Param" =>"type:'pie', center: [300, 180], size: 100, showInLegend: true, shadow: true,lineWidth: 1 , dataLabels: {enabled: false}");
*/

/*
	//Beispiel für Series.Parameter "RoundValue" und "ScaleFactor"
	$CfgDaten["Series"][] = array("Id"=>23960, "Name" =>"Aussentemperatur 2",	"Unit"=>"°C oder °F", "ReplaceValues"=>false,
		"RoundValue" => 1,
		"ScaleFactor" => 1.5,
		"Param" =>"type:'spline', step:false, yAxis: 0, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
*/
/*
	// => ab V1.0006
	// Beispiel für Eingabe Anfangs-Endzeitpunkt je Serie
	// Beipsiel für Offset - Darstellung Monat und Vormonat in einem Chart
	$CfgDaten["StartTime"] = mktime(0,0,0, date("m", time()), 1, date("Y",time()));
	$CfgDaten["EndTime"] = mktime(23,59,59, date("m", time())+1, date("d",time())-1, date("Y",time()));
	$offset =  mktime(0,0,0, date("m", time())-1, 1, date("Y",time()))-mktime(0,0,0, date("m", time()), 1, date("Y",time()));

	$CfgDaten["Series"][] = array("Id"=>10674, "Name" =>"Temp aktueller Monat","Unit"=>NULL,		 "ReplaceValues"=>false,
		"StartTime" => mktime(0,0,0, date("m", time()), 1, date("Y",time())),
		"EndTime" => mktime(23,59,59, date("m", time())+1, date("d",time())-1, date("Y",time())),
		"Param" =>"type:'spline', step:false, yAxis: 0, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
	$CfgDaten["Series"][] = array("Id"=>10674, "Name" =>"Temp Vormonat","Unit"=>NULL,		 "ReplaceValues"=>false,
		"StartTime" => mktime(0,0,0, date("m", time())-1, 1, date("Y",time())),
		"EndTime" => mktime(23,59,59, date("m", time()), 0, date("Y",time())) ,
		"Offset" => - $offset,
		"Param" =>"type:'spline', step:false, yAxis: 0, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
*/
/*
 	//Beispiel für Series-Parameter "AggValue"
	$CfgDaten["Series"][] = array("Id"=>10674, "Name" =>"IST-Temperatur","Unit"=>NULL,		 "ReplaceValues"=>false,
		"Param" =>"type:'spline',  step:false, yAxis: 0, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
	$CfgDaten["Series"][] = array("Id"=>10674, "Name" =>"IST-Temperatur","Unit"=>NULL,		 "ReplaceValues"=>false,
		"AggValue" => "Max",
		"Param" =>"type:'spline',  step:false, yAxis: 0, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
	$CfgDaten["Series"][] = array("Id"=>10674, "Name" =>"IST-Temperatur","Unit"=>NULL,		 "ReplaceValues"=>false,
		"AggValue" => "Min",
		"Param" =>"type:'spline',  step:false, yAxis: 0, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
*/
/*
	// Beispiel für Definition eigenem Start- und Endzeitpunkt in Serie
	$CfgDaten["Series"][] = array("Id"=>10674, "Name" =>"IST-Temperatur","Unit"=>NULL,		 "ReplaceValues"=>false,
		"Param" =>"type:'spline',  step:false, yAxis: 0, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
	$CfgDaten["Series"][] = array("Id"=>10674, "Name" =>"IST-Temperatur","Unit"=>NULL,		 "ReplaceValues"=>false,
		"StartTime" => mktime(0,0,0, date("m", time())-2, date("d",time()), date("Y",time())),
		"EndTime" => mktime(0,0,0, date("m", time())-1, date("d",time()), date("Y",time())),
		"Param" =>"type:'spline',  step:false, yAxis: 0, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
*/
/*
	$CfgDaten["Series"][] = array("Id"=>23264, "Name" =>"SOLL-Temperatur", "Unit"=>"°C","ReplaceValues"=>false,
		"ScaleFactor" => 1.5,
		"Param" =>"type:'line', step:true, yAxis: 0, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
	$CfgDaten["Series"][] = array("Id"=>13641, "Name" =>"Luftfeuchte","Unit"=>"%",			 "ReplaceValues"=>false,
		"Param" =>"type:'spline', step:false, yAxis: 1, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
	$CfgDaten["Series"][] = array("Id"=>29410, "Name" =>"Tür/Fenster Kontakt","Unit"=>NULL, "ReplaceValues"=>array(0=>0.2,1=>10),
		"Param" =>"type:'area', step: true, yAxis: 1, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, symbol: 'circle', radius: 4, lineWidth: 1}}}");
	$CfgDaten["Series"][] = array("Id"=>44451, "Name" =>"Drehgriffkontakt", "Unit"=>array(0=>'geschlossen',1=>'gekippt',2=>'geöffnet'), "ReplaceValues"=>array(0=>0.2,1=>7,2=>10),
		"Param" =>"type:'area', step:true, yAxis: 1, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
	$CfgDaten["Series"][] = array("Id"=>43639, "Name" =>"Heizungssteller", "Unit"=>"%","ReplaceValues"=>false,
		"Param" =>"type:'line', step:true, yAxis: 1, shadow: true,lineWidth: 1, states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");

	// => ab V1.0005 (Beispiel für einen Zählerwert, welcher als Column dargestellt wird
	$CfgDaten["Series"][] = array("Id"=>29842, "Name" =>"1",	"Unit"=>NULL, "ReplaceValues"=>false,
	"Param" =>"type:'column', step:false, yAxis: 2, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
*/

/*
	// Beispiel: jier werdem alle Hommatic-Temperaturen ausgelesen und in automatisch als Serie hinzugefügt
	foreach(IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}") as $InstanceId)
	{
		$varId = @IPS_GetObjectIDByIdent("TEMPERATURE",$InstanceId);
		$var = @IPS_GetVariable($varId);
		if($var)
		{
			// Float Variable (.... ist schon etwas wage sich auf den VariablenTyp zu verlassen)
        if($var['VariableValue']['ValueType'] == 2 )
        {
				//$V = GetVariableArray($InstanceId, "TEMPERATURE");
				$Name = str_replace("Funk Devices\\", "", IPS_GetLocation($var["VariableID"]));
				$Name = str_replace("\\", "/", $Name );

				$CfgDaten["Series"][] = array("Id"=>$var["VariableID"], "Name" =>$Name,	"Unit"=>"°C", "ReplaceValues"=>false,
					"Param" =>"type:'spline', step:false, yAxis: 0, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
        }
		}
	}
*/


	// => ab V1.0006, x-Achse kann als Higcharts-JS übergeben werden
	// Definition X-Achse ist autom. Time-Format
	$CfgDaten["xAxis"] = "";

	// Definition Y-Achsen
	// Name: Bezeichnung der Achse
	// Unit: Einheit für die Beschriftung die Skalenwerte
	// Min: Achse beginnt bei Min (wenn nichts angegeben wird wird der Min der Achse automatisch eingestellt)
	// Max: Achse geht bis Max (wenn nichts angegeben wird wird der Max der Achse automatisch eingestellt)
	// TickInterval: Skalenwerte alle x (TickInterval)
	// Opposite: Achse wird auf der rechten (true) oder linken Seite (false) des Charts angezeigt (default = false)
	// PlotBands: genaue Definition bitte aus der Highcharts Konfiguration (www.highcharts.com) übernehmen - Beispiel siehe weiter unten
		$CfgDaten["yAxis"][] = array("Name" =>"Temperaturen", "Unit"=>"°C","Opposite"=>false,"TickInterval"=>5);
		$CfgDaten["yAxis"][] = array("Name" =>"Heizungssteller / Luftfeuchte", "Unit"=>"%","Min"=>0, "Max"=>100,"TickInterval"=>25,"Opposite"=>true);
	//oder direkt den String für die Achsen übergeben
	// $CfgDaten["yAxis"][] = "title: { text: '123' }, min:0";

/*
	// Beispiel: Achse mit integrierten Higcharts-PlotBand
	$CfgDaten["yAxis"][] = array("Name" =>"Temperaturen", "Unit"=>"°C", "Opposite"=>false, "TickInterval"=>10, "Min" => -20, "Max" => 50,
											"PlotBands" => "[
                                     { // Eistag
                                        from: -20.0,
                                        to: 0.0,
                                        color: 'rgba(68, 170, 213, 0.1)',
                                        label:
                                        {
                                            text: 'Eistag',
                                            style:
                                            {
                                                color: '#606060'
                                            }
                                        }
                                     },
                                     { // kalter Tag
                                            from: 0.0,
                                            to: 15.0,
                                            color: 'rgba(255, 255, 0, 0.1)',
                                            label:
                                            {
                                                text: 'kalter Tag',
                                                style:
                                                {
                                                    color: '#606060'
                                                }
                                            }
                                     },
                                     { // Sommertag
                                            from: 25.0,
                                            to: 30.0,
                                            color: 'rgba(255, 90, 0, 0.1)',
                                            label:
                                            {
                                                text: 'Sommertag',
                                                style:
                                                {
                                                    color: '#606060'
                                                }
                                            }
                                     },
                                     { // heißer Tag
                                            from: 30.0,
                                            to: 50.0,
                                            color: 'rgba(255, 0, 0, 0.1)',
                                            label:
                                            {
                                                text: 'heißer Tag',
                                                style:
                                                {
                                                    color: '#606060'
                                                }
                                            }
                                     },
                                    ]"

	);
*/


	// => ab V1.0002
	// HighchartConfig String
	$CfgDaten["HighChartCfg"] = false;  // false = default String wird verwendet

	// Beispiel für ein von extern übergebener CfgString. Dies entspricht exakt dem Highcrats ConfigString aus der Highcharts.com/ref
	// zusätzlich können bzw. teilweise müssen folgenden Platzhalter verwendet werden.
	// %title.text% = $CfgDaten["Title"]
	// %subtitle.text% = CfgDaten["SubTitle"], oder bei "" der automatisch erzeugte Zeitraum
	// %yAxis% = die genierten y-Achsen welche durch $CfgDaten["yAxis"] konfiguriert wurden
	// %tooltip% = der generiert Tooltip
	// %xAxis.min% und %xAxis.may% = der durch $CfgDaten["StartTime"] und $CfgDaten["EndTime"] festgelegte Zeitraum
	// %data% = die aus der Datenbank gelesenen Daten, ohne diesen Platzhalter läuft gar nichts
	/*	$CfgDaten["HighChartCfg"]="
			chart: {
				renderTo: 'container'
			},
			title: {
				text: '%title.text%',
				x: -20
			},
			subtitle: {
				text: '%subtitle.text%',
				x: -20
			},
			xAxis: [{
				type: 'datetime',
				 dateTimeLabelFormats: { second: '%H:%M:%S',
					minute: '%H:%M',
					hour: '%H:%M',
					day: '%e. %b',
					week: '%e. %b',
					month: '%b \'%y',
					year: '%Y'

				 }
			}],
			yAxis: [	%yAxis% ],
			tooltip: { %tooltip% },
			series: [ %data% ]
		});";
  */

	// Alle 	$CfgDaten["HighChart"] Parameter werden an das IP_Template übergeben
	// Highcharts-Themes
//	$CfgDaten["HighChart"]["Theme"]="grid.js";   // von Highcharts mitgeliefert: dark-green.js, dark-blue.js, gray.js, grid.js
	$CfgDaten["HighChart"]["Theme"]="ips.js";   // IPS-Theme muss per Hand in in Themes kopiert werden....

	// Abmessungen des erzeugten Charts
	$CfgDaten["HighChart"]["Width"] = 0; 	// in px,  0 = 100%
	$CfgDaten["HighChart"]["Height"] = 600; 	// in px

	// und jetzt los ......
	$s=IPS_GetScript($CfgDaten["HighChartScriptId"]);      // Id des Highcharts-Scripts
	include($s['ScriptFile']);

  	// => ab V1.0003
  	// hier werden die CfgDaten geprüft und bei Bedarf vervollständigt
	$CfgDaten = CheckCfgDaten($CfgDaten);

	// => ab V1.0003 neu, ab V1.0006 Erweiterung Parameter "popup"
	if (isset($CfgDaten["RunMode"])
		&& ($CfgDaten["RunMode"] == "script" || $CfgDaten["RunMode"] == "popup"))
	{
		// Variante1: Übergabe der ScriptId. Daten werden beim Aufruf der PHP Seite erzeugt und direkt übergeben. Dadurch kann eine autom. Aktualisierung der Anzeige erfolgen
		if ($IPS_SENDER != "WebInterface")
		{
			WriteContentWithScriptId ($CfgDaten, $IPS_SELF);     	// und jetzt noch die ContentTextbox
			return;                                               // Ende, weil durch die Zuweisung des Script sowieso nochmals aufgerufen wird
		}

		$sConfig = CreateConfigString($CfgDaten);             	// erzeugen und zurückgeben des Config Strings
	}
	else
	{
		//Variante2: Übergabe des Textfiles. Daten werden in tmp-File gespeichert. Eine automatische Aktualisierung beim Anzeigen der Content-Textbox erfolgt nicht
		$sConfig = CreateConfigString($CfgDaten);             // erzeugen und zurückgeben des Config Strings

		$tmpFilename = CreateConfigFile($sConfig, $IPS_SELF);            // und ab damit ins tmp-Files
		if ($IPS_SENDER != "WebInterface")
		{
			WriteContentWithFilename ($CfgDaten, $tmpFilename);        // und jetzt noch die ContentTextbox
		}
	}



?>