Q&A Highcharts V2.0

Hi,

hier die Screenshots und die Scripts:

Altes Script


<?php

	// => ab V1.0004, damit kann der Script auch von anderen Scripten aufgerufen werden und bereits mit CfgDaten vorkonfiguriert werden
	Global $CfgDaten; //$CfgDaten = array();

	$year = date('Y', time());

	// Überschriften
	$CfgDaten["Title"]= "Gasverbrauch";
	$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"]= 52176 /*[Highcharts\Gasverbrauch (Bar)\Gasverbrauch (Bar)]*/;  // ID der Content-Variable
	$CfgDaten["HighChartScriptId"]= 14879 /*[Highcharts\Highcharts Skript V1.0005]*/;  				// ID des Highcharts Scripts

	// Zeitraum welcher dargestellt werden soll
	 $CfgDaten["StartTime"] = mktime(0,0,0,1,1,2012); // 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"]= "file"; 	//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( "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}");


	// => ab V1.0005 (Beispiel für einen Zählerwert, welcher als Column adargestellt wird
//	$CfgDaten["Series"][] = array("Id"=>23204, "Name" =>"1",	"Unit"=>NULL, "AggType"=>3, "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}}}");

	 $CfgDaten["Series"][] = array("Id"=>18201, "Name" =>"Stromverbrauch", "Unit"=>NULL, "ReplaceValues"=>false, "AggType"=>3,
   "Param" =>"type:'column', color: '#FFFF00', 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}}}");

/*
	//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" =>"Gasverbrauch", "Unit"=>"[m³]", "Min"=>0, "Opposite"=>false,"TickInterval"=>10);
	//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


    // 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: 100 // Balkenbreite
                },
            },
            title: {
                text: '%title.text% ".$year."',
                //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: 0 // 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: { %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";   // 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
		}
	}



?>

Hier das neue Script


<?php
	// bei der Konfiguration unbedingt auf die Groß/Kleinschreibung achten
	// es wurde versucht folgende Namensgebeung in der Konfiguration zu verwenden
	// Parameter mit kleinen Anfangsbuchstaben = Parameter welche von Highcharts übnernommen wurden. Siehe dazu: http://www.highcharts.com/ref/
	// Parameter mit großen Anfangsbuchstaben = für das IPS-Highcharts-Script eingeführte Parameter

	Global $CfgDaten; // damit kann der Script auch von anderen Scripten aufgerufen werden und bereits mit CfgDaten vorkonfiguriert werden

	// IPS Variablen ID´s
	$CfgDaten['ContentVarableId']= -1;  // 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']= 58397 /*[Highcharts\Highcharts Skript V2.0]*/;  				// ID des Highcharts Scripts

	// Zeitraum welcher dargestellt werden soll (kann durch die Zeitvorgaben in den Serien verändert werden)
	$CfgDaten['StartTime'] = mktime(0,0,0, 1,1,2012); // 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

	// damit wird die Art des Aufrufes festgelegt
	$CfgDaten['RunMode'] = "script"; 	// file, script oder popup

	if ($CfgDaten['RunMode'] == "popup")
	{
		$CfgDaten['WebFrontConfigId'] = 46970 /*[WebFront Configurator]*/;
		$CfgDaten['WFCPopupTitle'] = "Ich bin der Text, welcher als Überschrift im Popup gezeigt wird";
	}

	// Serienübergreifende Einstellung für das Laden von Werten
	#$CfgDaten['AggregatedValues']['HourValues'] = -1;      // ist der Zeitraum größer als X Tage werden Stundenwerte geladen
	#$CfgDaten['AggregatedValues']['DayValues'] = 1;       // ist der Zeitraum größer als X Tage werden Tageswerte geladen
	#$CfgDaten['AggregatedValues']['WeekValues'] = 7;      // ist der Zeitraum größer als X Tage werden Wochenwerte geladen
	$CfgDaten['AggregatedValues']['MonthValues'] = 30;      // ist der Zeitraum größer als X Tage werden Monatswerte geladen
	#$CfgDaten['AggregatedValues']['YearValues'] = -1;      	// ist der Zeitraum größer als X Tage werden Jahreswerte geladen
	#$CfgDaten['AggregatedValues']['NoLoggedValues'] = 1000; 	// 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
	$CfgDaten['AggregatedValues']['MixedMode'] = false;
	// Systematik funktioniert jetzt additiv. D.h. die angegebenen Werte gehen ab dem letzten Wert
	//
	//            -5 Tage           -3 Tage    					EndTime
	// |           |              	|            				 |
	// |           |DayValue = 2     |HourValues = 3          |
	// |Tageswerte |Stundenwerte     |jeder geloggte Wert     |

	// **************************************************************************************
	// *** Highcharts Options ***
	// **************************************************************************************
	// Ab hier werden die Bereiche des Highchart-Objektes parametriert.
	// Dieser Bereich wurde (soweit möglich) identisch der Originalstruktur gehalten.
	// Informationen über die Parametrierung findet man unter http://www.highcharts.com/ref/

	// **************************************************************************************
	// *** chart *** http://www.highcharts.com/ref/#chart
	// **************************************************************************************
	// $CfgDaten['chart']['zoomType'] = "'x'";			//default: $CfgDaten['chart']['zoomType'] = "'xy'";

	// **************************************************************************************
	// *** credits *** siehe http://www.highcharts.com/ref/#credits
	// **************************************************************************************
	// $CfgDaten['credits']['text'] = "used by IPS";
	// $CfgDaten['credits']['href'] = "http://www.ip-symcon.de/forum/f53/highcharts-multigraph-v1-0-a-17625/#post120721";

	// **************************************************************************************
	// *** title *** siehe http://www.highcharts.com/ref/#title
	// **************************************************************************************
	// $CfgDaten['title']['text'] = "Chart-Überschrift";  // Überchrift des gesamten Charts
	//		-> veraltet: 'Title' -> verwende ['title']['text']

	$CfgDaten['title']['text'] = "Chart-Überschrift";

	// **************************************************************************************
	// *** subtitle *** siehe http://www.highcharts.com/ref/#subtitle
	// **************************************************************************************
	// $CfgDaten['subtitle']['text'] = "Zeitraum: %STARTTIME% - %ENDTIME%" // Sub-Überschrift. Wenn nichts angegeben wird wird dieser String als Default verwendet
	//		-> veraltet: 'SubTitle' -> verwende ['subtitle']['text']
	// $CfgDaten['subtitle']['Ips']['DateTimeFormat'] = "(D) d.m.Y H:i"	// z.B.: "(D) d.m.Y H:i" (wird auch als Default herangezogen wenn nichts konfiguriert wurde)
	//		-> veraltet: 'SubTitleDateTimeFormat' -> verwende ['subtitle']['Ips']['DateTimeFormat']
	//    -> entfallen: 'SubTitleFormat' ->unnötiger Paramter, wird jetzt in ['subtitle']['text'] angegeben

	$CfgDaten['subtitle']['text'] = "Zeitraum: %STARTTIME% - %ENDTIME%";
	$CfgDaten['subtitle']['Ips']['DateTimeFormat'] = "(D) d.m.Y H:i";

	// **************************************************************************************
	// *** tooltip *** http://www.highcharts.com/ref/#tooltip
	// **************************************************************************************
	//$CfgDaten['tooltip']['enabled'] = false;

	// **************************************************************************************
	// *** exporting *** http://www.highcharts.com/ref/#exporting
	// **************************************************************************************
	//$CfgDaten['exporting']['enabled'] = true;

	// **************************************************************************************
	// *** lang *** http://www.highcharts.com/ref/#lang
	// **************************************************************************************
	//$CfgDaten['lang']['resetZoom'] = "Zoom zurücksetzten";

	// **************************************************************************************
	// *** legend *** http://www.highcharts.com/ref/#legend
	// **************************************************************************************
	//$CfgDaten['legend']['backgroundColor'] = '#FCFFC5';

	// **************************************************************************************
	// *** xAxis *** http://www.highcharts.com/ref/#xAxis
	// **************************************************************************************
	//$CfgDaten['xAxis']['lineColor'] = '#FF0000';
	//$CfgDaten['xAxis']['plotBands'][] = array("color"=>'#FCFFC5',"from"=> "@Date.UTC(2012, 3, 29)@","to"=> "@Date.UTC(2012, 3, 30)@");

	// **************************************************************************************
	// *** yAxis *** http://www.highcharts.com/ref/#yAxis
	// **************************************************************************************
	// $CfgDaten['yAxis'][0]['title']['text'] = "Temperaturen"; // Bezeichnung der Achse
	//		-> veraltet: 'Name' und 'TitleText' -> verwende ['title']['text']
	// $CfgDaten['yAxis'][0]['Unit'] = "°C";	// Einheit für die Beschriftung die Skalenwerte
	//	$CfgDaten['yAxis'][0]['min'] = 0; // Achse beginnt bei Min (wenn nichts angegeben wird wird der Min der Achse automatisch eingestellt)
	//	$CfgDaten['yAxis'][0]['max'] = 40; // Achse geht bis Max (wenn nichts angegeben wird wird der Max der Achse automatisch eingestellt)
	//		-> veraltet: 'Min' und 'Max'
	//	$CfgDaten['yAxis'][0]['opposite'] = false; // Achse wird auf der rechten (true) oder linken Seite (false) des Charts angezeigt (default = false)
	//		-> veraltet: 'Opposite'
	//	$CfgDaten['yAxis'][0]['tickInterval'] = 5; // Skalenwerte alle x (TickInterval)
	//		-> veraltet: 'TickInterval'
	//    -> entfallen: 'PlotBands' -> verwende ['yAxis'][0]['plotBands'],  (siehe Beispiel 'cfg - drehgriff und tf-kontakt')
	//    -> entfallen: 'YAxisColor' -> verwende ['yAxis'][0]['title']['style']
	//    -> entfallen: 'TitleStyle'-> verwende ['yAxis'][0]['title']['style']

	$CfgDaten['yAxis'][0]['title']['text'] = "Gasverbrauch Test";
	$CfgDaten['yAxis'][0]['Unit'] = "m³";
	$CfgDaten['yAxis'][0]['opposite'] = false;
	$CfgDaten['yAxis'][0]['tickInterval'] = 10;
	$CfgDaten['yAxis'][0]['min'] = 0;
	#$CfgDaten['yAxis'][0]['max'] = 40;



	// **************************************************************************************
	// *** series *** http://www.highcharts.com/ref/#series
	// **************************************************************************************
	// $CfgDaten['name'] = "Temperatur; // Name der Kurve (Anzeige in Legende und Tooltip)
	//		-> veraltet: 'Name' -> verwende ['name']
	// $CfgDaten['Unit'] = "°C"; // Anzeige in automatisch erzeugtem Tooltip
	// 	wenn $CfgDaten['Unit'] = NULL; // oder Unit wird gar nicht definiert, wird versucht die Einheit aus dem Variablenprofil automatisch auszulesen
	// $CfgDaten['ReplaceValues'] = false; // Werte werden wie geloggt übernommen
	// $CfgDaten['ReplaceValues'] = array(0=>0.2,1=>10) // 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)
	// $CfgDaten['type'] = 'spline'; // Festlegung des Kuventypes (area, areaspline, line, spline, pie, Column)
	// $CfgDaten['yAxis'] = 0; // Nummer welche Y-Achse verwendet werden soll (ab 0)
	// 	-> veraltet: 'Param' -> verwende die Highcharts Parameter - sollte eigentlich noch so funktionieren wie in IPS-Highcharts V1.x
	// $CfgDaten['AggType'] = 0 // Festlegung wie die Werte gelesen werden soll (0=Hour, 1=Day, 2=Week, 3=Month, 4=Year), hat Vorrang gegenüber den Einstellungen in AggregatedValues
	//    wird kein AggType definiert werden alle gelogten Werte angezeigt
	// $CfgDaten['AggNameFormat'] = "d.m.Y H:i"; // (gilt nur bei den Pies, wenn eine Id verwendet wird), entspricht dem PHP-date("xxx") Format, welches das Format der Pie Namen festlegt, wenn keine Eingabe werden Default Werte genommen
	// $CfgDaten['Offset'] = 24*60*60; hiermit können Kurven unterschiedlicher Zeiträume in einem Chart dargestellt. Angabe ist in Minuten
	//	$CfgDaten['StartTime'] = mktime(0,0,0,1,1,2012); 	// wird für die entsprechende Serie eine Anfangs- und/oder Endzeitpunkt festgelegt wird dieser verwendet. Ansonsten wird
	// CfgDaten['EndTime'] = mktime(0,0,0,2,1,2012);  		// der Zeitpunkt der Zeitpunkt aus den $CfgDaten genommen
	// CfgDaten['ScaleFactor'] = 10; // Skalierungsfaktor mit welchem der ausgelesene Werte multipliziert wird
	// CfgDaten['RoundValue'] = 1; // Anzahl der Nachkommastellen
	//	CfgDaten['AggValue'] ='Min' // über AggValue kann Min/Max oder Avg vorgewählt werden (Default bei keiner Angabe ist Avg)
	//		ist sinnvoll wenn nicht Einzelwerte sondern Stundenwerte, Tageswerte, usw. ausgelesen werden
	// CfgDaten['data'] = array('TimeStamp'=> time(),'Value'=12) // hier kann ein Array an eigenen Datenpunkten übergeben werden. In diesem Fall werden für diese Serie keine Daten aus der Variable gelesenen.



	$serie = array();
	$serie['name'] = "Gasverbrauch";
	$serie['Id'] = 18201 /*[Aktuelle Verbräuche\Gasverbrauch [m³]]*/;
	$serie['Unit'] = "m³";
	$serie['ReplaceValues'] =false;
	$serie['type'] = "column";
	$serie['step'] = false;
	$serie['yAxis'] = 0;
	$serie['AggType'] = 3;
	$serie['shadow'] = true;
	$serie['states']['hover']['lineWidth'] = 2;
	$serie['marker']['enabled'] = false;
	$serie['marker']['states']['hover']['enabled'] = true;
	$serie['marker']['states']['hover']['symbol'] = 'circle';
	$serie['marker']['states']['hover']['radius'] = 4;
	$serie['marker']['states']['hover']['lineWidth'] = 1;
	$CfgDaten['series'][] = $serie;


	// Highcharts-Theme
	//	$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']);

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

	// abhängig von der Art des Aufrufs -> json String für Highcharts erzeugen
	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
		}
	}



?>

Screenshots sind im Anhang und dort ist zu sehen das bei einem die Skalierung der X Achse in Monaten ist und bei dem anderen in Tagen.

Hallo @DeejayT,

da scheint Highcharts etwas anderes zu reagieren.

Damit funktioniert es, ist aber nicht optimal…

	$CfgDaten['xAxis']['tickInterval'] = 30 * 24 * 3600 * 1000;

Hi KHC,

ich ab mir grad noch ein „Problem“ ausgedacht: ich würde gern periodische Charts erzeugen und diese in ein Verzeichnis-Archiv packen (Ordner-Struktur: \Jahr\Monat.tmp)
Hast du villeicht schon die Möglichkeit vorgesehen, einen Speicherort für das tmp-File über das Config-File mitzugeben?
Sonst müsste ich mir was properitäres bauen…ungern;)

Hallo Raketenschnecke,

wenn ich dich richtig verstanden habe willst Du verschiedenen Tmp-Files erzeugen und dann in einer Content-String Variable anzeigen.

Damit ist gemeint dass du unabhängig von der Anzeige tmp-Files mit frei definierbaren Namen und auch Directory erzeugen kannst und in der Content-variable dann nur mehr diesen Dateinamen inkl. Verzeichnis geben müsstest und diese somit den Inhalt der zuvor erzeugten Variable anzeigt.

Ist aktuell nicht vorgesehen, wäre aber technisch kein großes Problem.

Grüße KHC

bis auf das Anzeigen in der String-Variable: ja;) Ist für die Webseite gedacht (Wobei das WFE mit darunter liegender „Schaltvariable/für jede Periode ein Button“ auch nicht abwegig ist).
einen dynamischen Speicherort-String erzeugen könnte ich noch, aber wo sinnvoll ins HC-Script einbauen?

Was wäre denn mit einer Zeitauswahl?

Hi Axel,
ich kenne Deine Lösung (nutze die auch), aber ich hab hier was Anderes vor :wink:

Hallo,

ich versuch gerade dieses Script zu installieren http://www.ip-symcon.de/forum/f53/highcharts-multigraph-17625/#post160933, Temperaturvergleich, aber leider bekomme ich mangels Verständnis nicht hin.

Ich erhalte immer fogende Fehlermeldung:
Fatal error: Out of memory (allocated 95682560) (tried to allocate 28672 bytes) in [Allgemein\Grafiken\Wetter\Temperaturen Vergleich\Vergleich Vorjahr] on line 82 wobei sich „on Line 82“ immer ändert, also immer 'ne andere Zeile.

Woran könnte das liegen?

dann hast Du ne Endlosschleife eingebaut. Poste mal dein Config-Script

Ich hab’s befürchtet. :o

Hier das Script:

<?
	// bei der Konfiguration unbedingt auf die Groß/Kleinschreibung achten
	// es wurde versucht folgende Namensgebeung in der Konfiguration zu verwenden
	// Parameter mit kleinen Anfangsbuchstaben = Parameter welche von Highcharts übnernommen wurden. Siehe dazu: http://www.highcharts.com/ref/
	// Parameter mit großen Anfangsbuchstaben = für das IPS-Highcharts-Script eingeführte Parameter

	Global $CfgDaten; // damit kann der Script auch von anderen Scripten aufgerufen werden und bereits mit CfgDaten vorkonfiguriert werden

	// IPS Variablen ID´s
	$CfgDaten['ContentVarableId']= 51158 /*[Allgemein\Grafiken\Wetter\Temperaturen Vergleich\Vergleich Vorjahr]*/;  // 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']= 53702 /*[Allgemein\Grafiken\Wetter\Temperaturen Vergleich\Vergleich Vorjahr]*/;  				// ID des Highcharts Scripts

    // Überschriften
    $CfgDaten['title']['text']= "Offset - Unterschiedliche Zeiträume in einem Chart";
    $CfgDaten['subtitle']['text']= "Temperaturen: %STARTTIME% + Vormonat + Vorjahr";
    $CfgDaten['subtitle']['Ips']['DateTimeFormat']= "M Y";                 // z.B.: "(D) d.m.Y H:i" (wird auch als Default herangezogen wenn nichts konfiguriert wurde)

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

    // damit wird die Art des Aufrufes festgelegt
    $CfgDaten['RunMode'] = "script";     // file, script oder popup

    // Tooltip anpassen
    $CfgDaten['tooltip']['shared']=true;
    $CfgDaten['tooltip']['crosshairs']=true;
    $CfgDaten['tooltip']['formatter']="";
    $CfgDaten['tooltip']['useHTML ']=true;
    $CfgDaten['tooltip']['valueSuffix ']= " °C";


    // y-Achse
    $CfgDaten["yAxis"][0]['title']['text'] = "Temperaturen2";
    $CfgDaten["yAxis"][0]['Unit'] = "°C";
    $CfgDaten["yAxis"][0]['opposite'] = true;
    $CfgDaten["yAxis"][0]['tickInterval'] = 5;
    $CfgDaten["yAxis"][0]['min'] = - 10;
    $CfgDaten["yAxis"][0]['max'] = 50;

    $pb['from'] = -10.0;
    $pb['to'] = 0.0;
    $pb['color'] = 'rgba(68, 170, 213, 0.1)';
    $pb['label']['text'] = 'Eistag';
    $pb['label']['style']['color'] = '#606060';
    $CfgDaten["yAxis"][0]['plotBands'][] = $pb;

    $pb['from'] = 0;
    $pb['to'] = 15;
    $pb['color'] = 'rgba(255, 255, 0, 0.1)';
    $pb['label']['text'] = 'kalter Tag';
    $pb['label']['style']['color'] = '#606060';
    $CfgDaten["yAxis"][0]['plotBands'][]= $pb;

    $pb['from'] = 25;
    $pb['to'] = 30;
    $pb['color'] = 'rgba(255, 90, 0, 0.1)';
    $pb['label']['text'] = 'Sommertag';
    $pb['label']['style']['color'] = '#606060';
    $CfgDaten["yAxis"][0]['plotBands'][]= $pb;

    $pb['from'] = 30;
    $pb['to'] = 50;
    $pb['color'] = 'rgba(255, 0, 0, 0.1)';
    $pb['label']['text'] = 'heißer Tag';
    $pb['label']['style']['color'] = '#606060';
    $CfgDaten["yAxis"][0]['plotBands'][]= $pb;



    // akt Monat
    $tStart1 = mktime(0,0,0, date("m", time()), 1, date("Y",time()));
    $tEnd1 = mktime(23,59,59, date("m", time())+ 1, 0, date("Y",time()));
    $offset1 =  0;

    //Vormonat
    $tStart2 = mktime(0,0,0, date("m", time())-1, 1, date("Y",time()));
    $tEnd2 = mktime(23,59,59, date("m", time())+1-1, 0, date("Y",time()));
    $offset2 =  -($tStart2 - $tStart1);

    //Vorjahr
    $tStart3 = mktime(0,0,0, date("m", time()), 1, date("Y",time())-1);
    $tEnd3 = mktime(23,59,59, date("m", time())+1, 0, date("Y",time())-1);
    $offset3 = -($tStart3 - $tStart1);

    // Zeitraum welcher dargestellt werden soll
    $CfgDaten["StartTime"] = $tStart1;
    $CfgDaten["EndTime"] = $tEnd1;

    // Serie - akt. Monat
    $serie = array();
    $serie['Id'] = 55811 /*[Serial Port\FS10 Aussensensor Temperatur/Feuchtigkeit\Temp. Aussen]*/;
    $serie['name'] = "Aktueller Monat";
    $serie['Unit'] = NULL;  // Einheit automatisch aus Variablenprofil
    $serie['AggType'] = 0;  // Stundenwerte
    $serie['ReplaceValues'] = false;
    $serie['RoundValue'] = 2;
    $serie['type'] = 'spline';
    $serie['step'] = false;
    $serie['yAxis'] = 0;
    $serie['shadow'] = true;
    $serie['lineWidth'] = 2;
    $serie['states']['hover']['lineWidth'] = 2;
    $serie['marker']['enabled'] = false;
    $serie['marker']['states']['hover']['enabled'] = true;
    $serie['marker']['states']['hover']['symbol'] = 'circle';
    $serie['marker']['states']['hover']['radius'] = 4;
    $serie['marker']['states']['hover']['lineWidth'] = 1;
    $serie['StartTime'] = $tStart1;
    $serie['EndTime'] = $tEnd1;
    $serie['Offset'] = $offset1;
    $CfgDaten['series'][] = $serie;

    // Serie - Vormonat
    $serie = array();
    $serie['Id'] = 55811 /*[Serial Port\FS10 Aussensensor Temperatur/Feuchtigkeit\Temp. Aussen]*/;
    $serie['name'] = "Vormonat";
    $serie['Unit'] = NULL;  // Einheit automatisch aus Variablenprofil
    $serie['AggType'] = 0;  // Stundenwerte
    $serie['ReplaceValues'] = false;
    $serie['RoundValue'] = 2;
    $serie['type'] = 'spline';
    $serie['step'] = false;
    $serie['yAxis'] = 0;
    $serie['shadow'] = true;
    $serie['lineWidth'] = 2;
    $serie['dashStyle '] = 'Dot';
    $serie['states']['hover']['lineWidth'] = 2;
    $serie['marker']['enabled'] = false;
    $serie['marker']['states']['hover']['enabled'] = true;
    $serie['marker']['states']['hover']['symbol'] = 'circle';
    $serie['marker']['states']['hover']['radius'] = 4;
    $serie['marker']['states']['hover']['lineWidth'] = 1;
    $serie['StartTime'] = $tStart2;
    $serie['EndTime'] = $tEnd2;
    $serie['Offset'] = $offset2;
    $CfgDaten['series'][] = $serie;

    // Serie - Vorjahr
    $serie = array();
    $serie['Id'] = 55811 /*[Serial Port\FS10 Aussensensor Temperatur/Feuchtigkeit\Temp. Aussen]*/;
    $serie['name'] = "Vorjahr";
    $serie['Unit'] = NULL;  // Einheit automatisch aus Variablenprofil
    $serie['AggType'] = 0;  // Stundenwerte
    $serie['ReplaceValues'] = false;
    $serie['RoundValue'] = 2;
    $serie['type'] = 'spline';
    $serie['step'] = false;
    $serie['yAxis'] = 0;
    $serie['shadow'] = true;
    $serie['lineWidth'] = 2;
    $serie['dashStyle '] = 'ShortDot';
    $serie['states']['hover']['lineWidth'] = 2;
    $serie['marker']['enabled'] = false;
    $serie['marker']['states']['hover']['enabled'] = true;
    $serie['marker']['states']['hover']['symbol'] = 'circle';
    $serie['marker']['states']['hover']['radius'] = 4;
    $serie['marker']['states']['hover']['lineWidth'] = 1;
    $serie['StartTime'] = $tStart3;
    $serie['EndTime'] = $tEnd3;
    $serie['Offset'] = $offset3;
    $CfgDaten['series'][] = $serie;


    $id = 53702 /*[Allgemein\Grafiken\Wetter\Temperaturen Vergleich\Vergleich Vorjahr]*/;
    $s = IPS_GetScript($id);      // Id des Highcharts-Config-Scripts
    include($s['ScriptFile']);


	// Highcharts-Theme
	//	$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']);

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

	// abhängig von der Art des Aufrufs -> json String für Highcharts erzeugen
	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
		}
	}



?>

ich versuche, Deinm Script mal bei mir laufen zu lassen, richtig konsitent scheint das aber nicht zu sein (Ab Zeile 165, 2x include($s[‚ScriptFile‘]) ?!):


$id = 53702 /*[Allgemein\Grafiken\Wetter\Temperaturen Vergleich\Vergleich Vorjahr]*/;
    $s = IPS_GetScript($id);      // Id des Highcharts-Config-Scripts
    include($s['ScriptFile']);


    // Highcharts-Theme
    //    $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']);

wenn ich in Deinem Script das (ab Z 165) auskommentiere:



//$id = 53702 /*[Objekt #53702 existiert nicht]*/;
    //$s = IPS_GetScript($id);      // Id des Highcharts-Config-Scripts
    //include($s['ScriptFile']);

(dessen Sinn erschließt sich mir nicht und kollidiert mit darunter stehenden Var-Deklarationen)
und ich alle Deine Quelldaten-Variablen gegen eine meiner austausche, kommt das dabei raus (ok, Helligkeit statt Temprartur einzusetzen war nicht gerade optimal, dafür aber ohne Fehlermeldung):

Danke Raketenschnecke,

aber wenn ich das auskommentiere erhalte ich immer noch „out of memory“

dann geh mal auf deinen IPS-Server und schau dir mal die RAM-Auslastung vom IPS-Task an. Würde mich nicht wundern, wenn die deutlich jenseits der 200MB ist. Starte mal das IPS neu.

so langsam müsste dein IPS wieder hochgefahren sein?! :smiley:

Danke, danke :slight_smile:

jetzt geht es.

Nun kann ich mich ja an Deine Farbverwaltung die Du auf Deiner Webseite erklärt hast trauen.
Aber da ich schon gesehen habe das ich in den Beispiel Scripten nichts mit „color“ finde, denke ich das ich dann schon wieder Hilfe brauche :o

ts ts ts, sowas…

Parameter für Color-Einstellung für die Serie hier (Beispiel aus meiner Farbverwaltung)


$serie['color'] 												= $Farb_Array['Niederschlagsmenge'];

y_Achse:


   $CfgDaten["yAxis"][$Ai]['labels']['style']['color']= $Farb_Array['Luftdruck'];
   $CfgDaten["yAxis"][$Ai]['title']['style']['color']	= $CfgDaten["yAxis"][$Ai]['labels']['style']['color'];

einfach Fragen :wink:

ok mach ich, was ist $Ai die variable habe ich nicht?

ups, sorry, da hab ich gepennt:

$Ai hab nur ich drin, das erleichtert mir das Handling der Achsen: wenn ich einen Achsen-Parameter-Block hin und her-Kopiere, ändere ich nur die $Ai, damit ändert sich der gesamte Array-Index der nachfolgenden Parameter (und ich barauch sie nicht alle einzeln ändern.
Beispiel:

OK,

dann lösche ich das erstmal raus, ist für mich ja Augenscheinlich auch so schon genug herausforderung :wink: