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"]= "Kostenübersicht"; // Verbrauch $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"]= -1; // ID der Content-Variable $CfgDaten["HighChartScriptId"]= 52592 /*[System\Highcharts\Highcharts_V1.0005.ips.php]*/; // ID des Highcharts Scripts // 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 $ZeitRaum = GetValue(48796 /*[System\Highcharts\HC_Zeitraum]*/); // AggType: [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year] .. wie der Werte gelesen werden soll Switch ($ZeitRaum) { Case 0: Case 1: $AggType = 0; Break; Case 7: Case 30: $AggType = 1; Break; Case 365: Case 90: Case 180: $AggType = 3; Break; Default: $AggType = 0; }; If ($ZeitRaum == 0) {$ZeitRaum = (8/24);}; $EndPunkt = GetValue(14844 /*[System\Highcharts\HC_Zeitraum\HC_EndPunkt]*/); $CfgDaten["EndTime"] = time() + 60 * 60 * 24 * $ZeitRaum * $EndPunkt; $CfgDaten["StartTime"] = $CfgDaten["EndTime"] - 60 * 60 * 24 * $ZeitRaum; // => 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"] = true; // 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}"); // => ab V1.0005 (Beispiel für einen Zählerwert, welcher als Column adargestellt wird $CfgDaten["Series"][] = array("Id"=>57389, "Name" =>"Wasser", "Unit"=>"EUR", "AggType"=>$AggType, "ReplaceValues"=>false,"ScaleFactor"=>$WasserPreis,"RoundValues"=>2, "Param" =>"type:'column', 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"=>38752, "Name" =>"Strom", "Unit"=>"EUR", "AggType"=>$AggType, "ReplaceValues"=>false, "RoundValues"=>2,"ScaleFactor"=>$StromPreis, "Param" =>"type:'column', step:false, yAxis: 0, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}"); // round($verbrauch * $GasZustandszahl * $GasBrennwert,2) $CfgDaten["Series"][] = array("Id"=>50735, "Name" =>"Gas", "Unit"=>"EUR", "AggType"=>$AggType, "ReplaceValues"=>false, "ScaleFactor"=>9.718723 * $GasPreis,"RoundValues"=>2, "Param" =>"type:'column', step:false, yAxis: 0, shadow: true,lineWidth: 1 , states: {hover:{lineWidth: 2}}, marker: { enabled: false, states: { hover: { enabled: true, radius: 4}}}"); // Aki Start PieDaten $idCatCircles = 34705 /*[System\Plugwise\Verbrauchskosten\Gesamt]*/; $Werte = array(); $Namen = array(); $Gesamtverbrauch = 0; $arrLauf = 0; foreach(IPS_GetChildrenIDs($idCatCircles) as $item){ $id_info = IPS_GetObject($item); If (($id_info["ObjectType"]) == 1) { $Verbrauch = 0; for($i = 0; $i < sizeof($id_info["ChildrenIDs"]); ++$i) { $id_link = IPS_GetObject($id_info["ChildrenIDs"][$i]); if (($id_link["ObjectType"]) == 6){ // $Verbrauch = $Verbrauch + GetValue(IPS_GetLink($id_info["ChildrenIDs"][$i])["LinkChildID"]); $Verbrauch = $Verbrauch + round(GetCounterDelta((IPS_GetLink($id_info["ChildrenIDs"][$i])["LinkChildID"]),$CfgDaten["StartTime"],$CfgDaten["EndTime"]) * $StromPreis,2); } } // $Werte[IPS_Getname($item)] = $Verbrauch; $Namen[$arrLauf] = IPS_Getname($item); $Werte[$arrLauf] = $Verbrauch; $Gesamtverbrauch = $Gesamtverbrauch + $Verbrauch; $arrLauf = $arrLauf +1; } } // $Werte["Sonstiges (Licht, Sauna)"] = round((GetCounterDelta($StromVar, $CfgDaten["StartTime"], $CfgDaten["EndTime"]) * $StromPreis) - $Gesamtverbrauch,2); $Namen[$arrLauf] = "Sonstiges (Licht, Sauna)"; $Werte[$arrLauf] = round((GetCounterDelta($StromVar, $CfgDaten["StartTime"], $CfgDaten["EndTime"]) * $StromPreis) - $Gesamtverbrauch,2); // Aki Ende PieDaten $CfgDaten["Series"][] = array( "Value"=>$Werte, "Name" =>$Namen, "Unit"=>"EUR", "ReplaceValues"=>false, "Param" =>"type:'pie', center: [100, 80], size: 150, showInLegend: true, shadow: true,lineWidth: 1 , dataLabels: {enabled: false}"); /* //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" =>"Kosten", "Unit"=>"EUR","Opposite"=>false); //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"]="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"] = 450; // 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 } } ?>