HighCharts - Probleme mit Tooltips und korrekter Darstellung der Meßdaten

… aber auf jeden Fall müsste es doch mit „Labels“ gehen:
Labels.JPG

PS: ich muss nochmal meine Frage zu den Tooltips „aufwärmen“ - habt Ihr die Tooltips bei MouseOver nur beim ersten und letzten Punkt der Kurve oder auch zwischendurch? (bei mir nur vorn und hinten: siehe Bild :mad:)

Tooltipp2.JPG

die Tooltips sollten durchgängig bei jedem Meßwert erscheinen. Bei mir funktioniert das tadellos.

@Raketenschnecke: Ich weiß und bin auch ganz neidisch auf die Charts auf Deiner Webseite (oder die ganze Webseite?!) :slight_smile: … hast Du dafür die Scripts aus dem Thread benutzt?

Hi JoeMue,

Grundlage aller Charts bei mir sind immer die Scripte von KHC. Für einige Sonderfälle hab ich die jedoch angepasst (z.B. um den Sonnenverlauf und aktuellen Sonnenstand einzublenden).
Einige Formatierungen hab ich noch geändert (aber nur minimal) - ansonsten alles KHC-based.

dann versteh’ ich’s nicht!!!

Ich bin der Meinung auch nur minimale Änderungen (z.B. Cursor als CrossHair) gemacht zu haben … und habe nochmal die Original-Scripts (1.005) eingespielt und nur ein Graph: trotzdem Tooltip nur ganz links und ganz rechts!

dann muß dabei was schief gegangen sein.
hast Du beide Scripte (das eigendliche HC-Script und das Config-Script) komplett neu gemacht? - Gaaaanz sicher? :wink:

ich kann heute Abend mal die Stelle mit dem Crosshair posten…vielleicht hilft Dir das.

Jaaaaaaaaaaaaaaaaaaaaa!

Ich versteh Deine Frage … ich mache auch manchmal IT-Support!:wink:

Sowohl das Highcharts(-Start)-Script, als auch das Original Config-Script (und darin eine Cfg-Zeile für mich angepasst) und sogar nochmal das Template.

Was kann denn noch Auswirkungen habe, wenn ich davon ausgehe das nicht alle geloggten Daten (aber Kurve ist OK!) falsch/kaputt sind?

wenn deine geloggten Daten kaputt wären, würdest du zwischendrin keine Meßwerte im Graphen haben - behaupte/vermute ich mal.

hier mal mein Code zur Umstellung auf Crosshair (im HighCharts-Haupt-Script):


$TooltipString	= "formatter: function() {
								if (this.point.name)  // the pie chart
                           var Unit2=this.point.name;
								else
								   var Unit2=this.series.name;

								var unit = {".$s. "}[Unit2];

								 if (this.point.name)  // the pie chart
									return '<b>'+ this.point.name +': </b> '+ unit +'<br/>= ' + this.percentage.toFixed(1) + ' %';
								return '<b>'+ this.series.name + ': </b> '+ unit + '<br/>'+Highcharts.dateFormat('%A %d.%m.%Y %H:%M', this.x);
								},
								crosshairs: [{
							            width: 1,
							            color: 'gray',
							            dashStyle: 'dot',
							        }, {
							            width: 1,
							            color: 'gray',
							            dashStyle: 'dot',
						        }],

							";

Hallo zusammen,

ich habe die Highcharts installiert und bekomme so eine merkwürdige Linie bei allen Variablen angezeigt, die scheinbar den ersten mit dem letzten Wert verbindet.
Dazu bekomme ich auch nur Tooltips für den ersten und letzten Wert angezeigt.
Das scheint ein ähnliches Problem zu sein, wie hier im Forum für Highstock: Highslide Software • View topic - Weird issue with a random line being plotted

Vielleicht ist der erste oder letzte Wert im Chart fehlerhaft, aber ich weiss nicht, wie ich das rausfinden kann.
Hat jemand eine Idee?


<?php

	// => 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"]= "Temperaturen";
	$CfgDaten["SubTitle"]= ""; // "" = Automatisch über Zeitraum

	// 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
	$CfgDaten["ArchiveHandlerId"] = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}');
	$CfgDaten["ArchiveHandlerId"] = $CfgDaten["ArchiveHandlerId"][0];

	$CfgDaten["ContentVarableId"]= 45206 /*[System\Scripte\Highcharts_variable]*/;  				// ID der Content-Variable
	$CfgDaten["HighChartScriptId"]= 37646 /*[System\Scripte\Highcharts_script]*/;  				// ID des Highcharts Scripts

	// Zeitraum welcher dargestellt werden soll
	$CfgDaten["StartTime"] = mktime(0,0,0, date("m", time()), date("d",time()), 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
	$CfgDaten["RunMode"]= "script"; 	//oder script

	// => ab V1.0003
	// Serienübergreifende Einstellung für das Laden von Werten
	$CfgDaten["AggregatedValues"]["HourValues"] = 3;      // ist der Zeitraum größer als X Tage werden Stundenwerte geladen
	$CfgDaten["AggregatedValues"]["DayValues"] = 14;       // ist der Zeitraum größer als X Tage werden Tageswerte geladen
	$CfgDaten["AggregatedValues"]["NoLoggedValues"] = 60; // 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

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

	// => 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)
//	$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}");


//	$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("Aussentemperatur2","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}");

// $CfgDaten["Series"][] = array("Id"=>11917, "Name" =>"Abstellkammer",	"Unit"=>"°C oder °F", "AggType"=>0, "ReplaceValues"=>true,
 //		"Param" =>"type:'line', step:false, yAxis: 0, shadow: false,lineWidth: 1 , states: {hover:{lineWidth: 3}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 2}}}");
// $CfgDaten["Series"][] = array("Id"=>18175, "Name" =>"Flur, unten",	"Unit"=>"°C oder °F",  "ReplaceValues"=>false,
 //		"Param" =>"type:'line', step:true, yAxis: 0, shadow: false,lineWidth: 1 , states: {hover:{lineWidth: 3}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");
 //$CfgDaten["Series"][] = array("Id"=>47788, "Name" =>"Schlafzimmer",	"Unit"=>"°C oder °F", "ReplaceValues"=>false,
 //		"Param" =>"type:'line', step:false, yAxis: 0, shadow: false,lineWidth: 1 , states: {hover:{lineWidth: 3}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");



	$CfgDaten["Series"][] = array("Id"=>11917, "Name" =>"Abstellkammer",	"Unit"=>"°C oder °F", "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"=>18175, "Name" =>"Flur, unten",	"Unit"=>"°C oder °F", "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"=>47788, "Name" =>"Flur, unten",	"Unit"=>"°C oder °F", "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.0005 (Beispiel für einen Zählerwert, welcher als Column adargestellt wird
//	$CfgDaten["Series"][] = array("Id"=>29842, "Name" =>"1",	"Unit"=>NULL, "AggType"=>0, "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}}}");

/*
	//oder
	foreach(IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}") as $InstanceId)
	{
		if(IPS_StatusVariableExists($InstanceId, "TEMPERATURE"))
		{
			$var = IPS_GetStatusVariable($InstanceId, "TEMPERATURE");

			// Float Variable (.... ist schon etwas wage sich auf den VariablenTyp zu verlassen)
        if($var['VariableType'] == 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}}}");
        }
		}
	}
*/
	// Y-Achsen
	$CfgDaten["yAxis"][] = array("Name" =>"Temperaturen", "Unit"=>"°C","Opposite"=>false,"TickInterval"=>2);
	//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"]= 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"]="gray.js";   // von Highcharts mitgeliefert: dark-green.js, dark-blue.js, gray.js, grid.js
//	$CfgDaten["HighChart"]["Theme"]="ips.js";   // von Highcharts mitgeliefert: dark-green.js, dark-blue.js, gray.js, grid.js

	// Abmessungen des erzeugten Charts
	$CfgDaten["HighChart"]["Width"] = 0; 	// in px,  0 = 100%
	$CfgDaten["HighChart"]["Height"] = 300; 	// 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
	if (isset($CfgDaten["RunMode"]) && $CfgDaten["RunMode"] == "script")
	{
		// Variante1: Übergabe der ScriptId. Daten werden beim Aufruf der PHP Seite erzeugt und direakt ü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 Anzigen 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
		}
	}



?>


EDIT:
Problem ist gelöst!!!
Scheinbar müssen die Daten noch einmal soriert werden, dazu muss man in der funktion „krsort“ im Highchartsskript in Zeile 491 die Kommentierung löschen.
Das hat jemand in späteren Posts herausgefunden. Herzlichen DANK dafür!

Hallo h0meboy,

lies mal meine Fragen/Problembeschreibungen hier im Thread … habe genau die gleichen Probleme. Raketenschnecke hat einiges versucht und geantwortet, bisher leider ohne Erfolg.

Das Verbinden des ersten und letzten Punktes habe ich durch

 $CfgDaten["AggregatedValues"]["HourValues"] = 0; 

weggekriegt.

Tooltips werden aber nur für den ersten und letzten Wert angezeigt. Neuinstallation von Highcharts, verschiedene Versionen des Configscriptes und andere Variablen haben nicht verbessert?!
Lass mich wissen, wenn Du eine Lösung findest! Danke!

Hallo,
ich habe v1.0005 zum fliegen gebracht und nun ein kleines Problem mit der Darstellung. Ich finde den Fehler nicht. Vielleicht kann mir jemand von euch auf die Sprünge helfen.
Ich habe zwei Grafiken und beide mit der gleichen codebasis erstellt.
Bei einer Grafik geht die „area“ Anweisung problemlos und bei der anderen Grafik führt die „area“ Anweisung zu einer komischen Trennlinie… Regressionslinie? Es werden immer der Angfangspunkt und der Endpunkt verbunden, jedoch nicht als Gerade.
Ich weis es nicht… Komisch ist, dass ich lediglich die ID’s geändert habe.

Ich nutze „spline“ „areaspline“. Einmal wird diese Linie gezogen und einmal nicht.

Das korrekte Beispiel ist mein erster Grafikentwurf.
Alle Grafiken die ich danach versucht habe zu erstellen sind „kaputt“.

Anbei die Grafiken. Weis einer woran das liegen kann?
Vielen Dank

Grafik mit komischen linien.png

Grafik mit richtiger area anzeige.png

Hallo zusammen,

ich lese mich bereits seit einigen Tagen hier bei euch in das Thema Highcharts ein.

Funktioniert hervorragend!

Wenn da nicht noch ich wär :smiley:

Ich habe ein Chart erstellt und finde leider nicht den Grund, warum es mir, ich nehme mal an, Trendlinien anzeigt.

Könntet Ihr mir hier bitte helfen?

Hier wäre meine config_highcharts:

<?php

    // => 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"]= "Büro Heizwerte";
    $CfgDaten["SubTitle"]= ""; // "" = Automatisch über Zeitraum

    // 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
    $CfgDaten["ArchiveHandlerId"] = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}');
    $CfgDaten["ArchiveHandlerId"] = $CfgDaten["ArchiveHandlerId"][0];

    $CfgDaten["ContentVarableId"]= 36297 /*[Diagramme\Heizwerte Büro\Highcharts]*/;  // ID der Content-Variable
    $CfgDaten["HighChartScriptId"]= 43620 /*[Diagramme\Heizwerte Büro\highcharts]*/;                  // ID des Highcharts Scripts

    // Zeitraum welcher dargestellt werden soll
    $CfgDaten["StartTime"] = mktime(0,0,0, date("m", time()), date("d",time()), 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
    $CfgDaten["RunMode"]= "script";     //oder script

    // => ab V1.0003
    // Serienübergreifende Einstellung für das Laden von Werten
    $CfgDaten["AggregatedValues"]["HourValues"] = 3;      // ist der Zeitraum größer als X Tage werden Stundenwerte geladen
    $CfgDaten["AggregatedValues"]["DayValues"] = 14;       // ist der Zeitraum größer als X Tage werden Tageswerte geladen
    $CfgDaten["AggregatedValues"]["NoLoggedValues"] = 60; // 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
        
    //$AggregatedValuesForSeries["HourValues"] = 3;
    //$AggregatedValuesForSeries["DayValues"] = 2;
    //$AggregatedValuesForSeries["DayValues"] = 2;
    //$AggregatedValuesForSeries["Combined"] = true;
    //,"AggregatedValues"=>$AggregatedValuesForSeries

    // => 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)
    //$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}");


//    $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("Aussentemperatur2","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}");

//    $CfgDaten["Series"][] = array("Id"=>57406, "Name" =>"Aussentemperatur",    "Unit"=>"°C oder °F", "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,
//        "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,
//        "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 adargestellt wird
    $CfgDaten["Series"][] = array("Id"=>57406, "Name" =>"Ventil",    "Unit"=>"%", "AggType"=>0, "ReplaceValues"=>false,
    "Param" =>"type:'line', 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"=>40671, "Name" =>"Ist-Temperatur",    "Unit"=>"°C", "AggType"=>0, "ReplaceValues"=>false,
    "Param" =>"type:'line', 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"=>20518, "Name" =>"Soll-Temperatur",    "Unit"=>"°C", "AggType"=>0, "ReplaceValues"=>false,
    "Param" =>"type:'line', 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"=>55399, "Name" =>"Luftfeuchtigkeit",    "Unit"=>"%", "AggType"=>0, "ReplaceValues"=>false,
    "Param" =>"type:'line', step:false, yAxis: 0, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}");

/*
    //oder
    foreach(IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}") as $InstanceId)
    {
        if(IPS_StatusVariableExists($InstanceId, "TEMPERATURE"))
        {
            $var = IPS_GetStatusVariable($InstanceId, "TEMPERATURE");

            // Float Variable (.... ist schon etwas wage sich auf den VariablenTyp zu verlassen)
        if($var['VariableType'] == 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}}}");
        }
        }
    }
*/
    // Y-Achsen
    $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: 'Heizungssteller / Luftfeuchte' }, min:0";

    // X-Achse ist autom. Time-Format

    // => 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"]="gray.js";   // von Highcharts mitgeliefert: dark-green.js, dark-blue.js, gray.js, grid.js
//    $CfgDaten["HighChart"]["Theme"]="ips.js";   // von Highcharts mitgeliefert: dark-green.js, dark-blue.js, gray.js, grid.js

    // 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
    if (isset($CfgDaten["RunMode"]) && $CfgDaten["RunMode"] == "script")
    {
        // Variante1: Übergabe der ScriptId. Daten werden beim Aufruf der PHP Seite erzeugt und direakt ü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 Anzigen 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
        }
    }



?>

Vielen Dank schonmal.

Gruß

Michael

So, mal sehen.

zum einen würde ich mal als Linientyp ‚spline‘ versuchen.
Zum anderen hast du alle Werte auf der gleichen Y-Achse. Ich schätze mal die Feuchtigkeit verträgt sich nicht mit den Temperaturen auf der y-Achse.

Versuch mal:

 $CfgDaten["Series"][] = array("Id"=>57406, "Name" =>"Ventil",    "Unit"=>"%", "AggType"=>0, "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"=>40671, "Name" =>"Ist-Temperatur",    "Unit"=>"°C", "AggType"=>0, "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"=>20518, "Name" =>"Soll-Temperatur",    "Unit"=>"°C", "AggType"=>0, "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"=>55399, "Name" =>"Luftfeuchtigkeit",    "Unit"=>"%", "AggType"=>0, "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}}}");

Noch als Tipp. Die Tickintervalle der y-Achse müssen zu einander passen.
Hatte da oft Müll angezeigt bekommen. Wenn man aber z.b. ganzzahlige verwendet passt es gut.

Meine Heizungsachsen sehen z.b. so aus:

	// Y-Achsen
	$CfgDaten["yAxis"][] = array("Name" =>"Temperaturen", "Unit"=>"°C","Opposite"=>false,"TickInterval"=>2.5, "Min"=>5, "Max"=>30);
	$CfgDaten["yAxis"][] = array("Name" =>"Luftfeuchte", "Unit"=>"%","Min"=>20, "Max"=>70,"TickInterval"=>5,"Opposite"=>true);
	$CfgDaten["yAxis"][] = array("Name" =>"Stellgröße", "Unit"=>"%","Min"=>0, "Max"=>100,"TickInterval"=>10,"Opposite"=>false);

Auf dem Bild sieht man leider keine Stellgröße. Das liegt aber eher an dem Niedrigenergiehaus. :slight_smile:

Edit: Weil es gerade sehe. Nimm mal den AggType aus den series raus. Bei splines werden die eh automatisch aggregiert.

cu…

@McFly:
Vielen Dank.
Habe deine Tipps so mal übernommen.
Mein Chart sieht nun schon etwas besser aus :smiley:

Leider besteht mein Problem nach wie vor noch mit der Linie.
Ich denke mal, dass ich ein ähnliches Problem habe wie Rangarin.
Da sieht es ähnlich aus.

das sieht mir so aus, als wären die Messdaten nicht in der richtigen Reihenfolge (Timestamp). Ich würde die Messdaten mal im Archivhandler überprüfen sowie einen Dump via HC machen (auf „file“ umstellen und schauen, was im .tmp-File an Daten ankommt)

ich habe nun die Daten im Archivehandler mal überprüft.
Kann hier aber keine „falschen“ Daten erkennen.
das hab ich noch auf die Reihe bekommen.

Aber
[blöde Frage]
leider bin ich bei dem Dump via HC ausgestiegen.
Könntest du mir das evtl. erklären?
[/blöde Frage] :o

Werte.jpg

mir fällt gerade ein möglicher, weiterer Punkt ein: die die Variable, deren daten du darstellen willst -> reaggregiere mal die daten und lass das HC-Script nochmal durchlaufen.

Zu deiner Frage nach dem Dump: schau Dir mal Post #446 an, dort siehst Du im oberen Codefenster den Inhalt der .tmp-Datei die HC erzeugt wenn als Ausgabe „file“ angegeben ist. In der 3. letzten Zeile sind die exportierten Daten der Variable enthalten. Die würde ich mal auf richtige Reihenfolge checken

Am Reaggregieren hats leider nicht gelegen.

Hab jetzt mal nen Dump von der Datei gemacht.
Die Datensätze stellen doch das Datum dar, oder?
Sollte dann nicht drin stehen:

Date.UTC(2012,3,7,usw...)

Stattdessen bekomme ich Datensätze mit der 2 drin.

[Date.UTC(2012,2,7,20,36,56),52],[Date.UTC(2012,2,7,20,06,28),53],[Date.UTC(2012,2,7,17,45,13),52],[Date.UTC(2012,2,7,17,37,40),53],[Date.UTC(2012,2,7,17,35,23),52],[Date.UTC(2012,2,7,17,01,56),53],[Date.UTC(2012,2,7,16,27,05),54],[Date.UTC(2012,2,7,16,24,28),53],[Date.UTC(2012,2,7,16,12,03),54],[Date.UTC(2012,2,7,16,09,03),53],[Date.UTC(2012,2,7,16,06,53),54],[Date.UTC(2012,2,7,16,04,29),53],[Date.UTC(2012,2,7,16,01,50),54],[Date.UTC(2012,2,7,15,46,15),53],[Date.UTC(2012,2,7,15,38,56),54],[Date.UTC(2012,2,7,15,31,36),53],[Date.UTC(2012,2,7,15,29,02),54],[Date.UTC(2012,2,7,15,15,46),53],[Date.UTC(2012,2,7,15,12,49),54],[Date.UTC(2012,2,7,15,05,44),53],[Date.UTC(2012,2,7,15,02,54),54],[Date.UTC(2012,2,7,07,06,34),53],[Date.UTC(2012,2,7,07,03,35),54],[Date.UTC(2012,2,7,03,13,58),53],[Date.UTC(2012,2,7,03,11,16),52],[Date.UTC(2012,2,7,03,08,20),53],[Date.UTC(2012,2,7,01,22,58),52],[Date.UTC(2012,2,7,01,20,03),51],[Date.UTC(2012,2,7,01,17,56),52],[Date.UTC(2012,2,7,00,18,17),51],[Date.UTC(2012,2,7,00,00,00),50],[Date.UTC(2012,2,7,20,48,11),53

Mache oder versteh ich da was falsch?

Das nächste ist, die Daten stehen ja in umgekehrter Reihenfolge, also die neuesten zuerst.
Warum ist die Uhrzeit 20,48,11 ganz am Ende?
Kann es sich hier um mein Problem handeln?

DAS ist das Problem. Aber ich hab im Moment keine Ahnung, was die Ursache ist

Die genaue Ursache habe ich jetzt auch noch nicht rausbekommen, jedoch bereits eingrenzen können:

Es hat mit der Option:
$CfgDaten[„AggregatedValues“][„HourValues“] = 3; zu tun.

Sobald ich einen Zeitraum länger als 3 Tage angebe, zeigt mir das Chart ja die Tageswerte und nicht mehr Stundenwerte an.
Die Tageswerte sind in einwandfreiem Zustand. Hier kann ich also eine falsche Anordnung in IPS ausschließen, oder?

edit: Habe die Lösung bei mir nun gefunden.
Da es bei mir den aktuellsten werte zuletzt anzeigt, habe ich bei der funktion „krsort“ im Highchartsskript in Zeile 491 die Kommentierung gelöscht.
Bei mir zeigt es nun die Graphen richtig an (im Moment zumindest) :smiley: