… und hier noch das Skript
<?
IPSUtils_Include ("IPSLogger.inc.php", "IPSLibrary::app::core::IPSLogger");
# ------------------------------------------------------------- KONFIG ----------------------------------------------------------------------------------
# GENERAL
# ---------------------------------------
include "42765.ips.php";
// AC-Handler definieren
define("AC_HANDLER_ID", IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0]);
$height = 500;
$c_chart1 = '#819FF7';
$c_chart2 = '#58FAAC';
$c_chart3 = '#FE2E2E';
$c_chart4 = '#F78181';
$c_chart5 = 'rgba(255,255,255, 0.9)';
$c_network = '#00BFFF';
$c_light = '#FFFF00';
$c_music = '#00FF00';
$c_energy = '#F78181';
$c_motion = '#FA8258';
# TITEL
# ---------------------------------------
$title = "CPU - Auslastung";
# VARIABLEN
# -------------------------------------------------------------------------------------------------------------------------------------------------------
$name_dev[]= 'IPS-PC'; $y[]= 0; $unit[]= "%"; $color[]= $c_chart3; $type[]= "areaspline"; $z_idx[]= 2; $id_state[]= 47584 /*[Technik\EG\Arbeitszimmer\IPS-PC\System\CpuAvg]*/;
#$name_dev[]= 'NAS-PC'; $y[]= 0; $unit[]= "%"; $color[]= $c_chart5; $type[]= "areaspline"; $z_idx[]= 1; $id_state[]= 15461 /*[Technik\EG\Arbeitszimmer\NAS\Status\CPU-Usage]*/;
# ------------------------------------------------------------- KONFIG ----------------------------------------------------------------------------------
// Zeitraum
$ts = mktime(0,0,0, date("m"), date("d"), date("Y"));
$te = mktime(23,59,59, date("m"), date("d"), date("Y"));
$AggType = 6;
// 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']= 43284 /*[Skripte\Highcharts\Highcharts_V3.00.ips]*/; // ID des Highcharts Scripts
// Highcharts oder Highstock (default = Highcharts
$CfgDaten['Ips']['ChartType'] = 'Highcharts';
// Zeitraum welcher dargestellt werden soll (kann durch die Zeitvorgaben in den Serien verändert werden)
if (!isset($CfgDaten["StartTime"]))
$CfgDaten["StartTime"] = $ts; //mktime(0,0,0, date("m", time()), date("d",time()), date("Y",time())); // ab heute 00:00 Uhr
if (!isset($CfgDaten["EndTime"]))
$CfgDaten["EndTime"] = $te; //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, popup
// wenn Popup dann muss die WebfrontConfigId und der Titele übergeben werden
if ($CfgDaten['RunMode'] == "popup")
{
$CfgDaten['WebFrontConfigId'] = 25342 /*[WebFront]*/;
$CfgDaten['WFCPopupTitle'] = "Ich bin der Text, welcher als Überschrift im Popup gezeigt wird";
}
// Übergabe der IP-Adresse und des Ports für die Darstellung im Dashboard
// Wichtig! Wenn Darstellung in Webfront diese Variablen auskommentieren
//$CfgDaten['Ips']['Dashboard']['Ip'] = "127.0.0.1";
//$CfgDaten['Ips']['Dashboard']['Port'] = "82";
// 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'] = -1; // ist der Zeitraum größer als X Tage werden Wochenwerte geladen
$CfgDaten['AggregatedValues']['MonthValues'] = -1; // 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;
$CfgDaten['title']['text'] = $title;
$CfgDaten['subtitle']['text'] = "Zeitraum: %STARTTIME% - %ENDTIME%";
$CfgDaten['subtitle']['Ips']['DateTimeFormat'] = "(D) d.m.Y H:i";
# AUTOMATISCHES ERZEUGEN DER Y-ACHSE (ReplaceValues) und TOOLTIPS ... je nach Größe des VariablenArrays
# ---------------------------------------------------------------------------------------------------------------------------
$idx = 0;
$cnt = 0;
$format = '';
$tooltip = '';
foreach ($name_dev as $data) {
$var[$idx] = IPS_GetVariable($id_state[$idx]); # Aktuelle Variableneigenschaften holen
$var_type = $var[$idx]['VariableType'];
$prof[$idx] = IPS_GetVariableProfile($var[$idx]['VariableCustomProfile']); # Aktuelle VariablenProfile holen
$prof_asso = $prof[$idx]['Associations'];
$idy = 0;
$RoundedValue = 0;
if ($var_type == 1 or $var_type == 2) { # wenn Datentyp Integer (=1) oder Float (=2) ist dann ...
$data = IPS_Array_to_HCData($RoundedValue, array_reverse(AC_GetAggregatedValues(AC_HANDLER_ID, $id_state[$idx], $AggType, $CfgDaten["StartTime"], $CfgDaten["EndTime"], 10000 /*[Objekt #10000 existiert nicht]*/)));
$a_rpl = NULL;
$tooltip .= "case '$name_dev[$idx]':";
$tooltip .= "s += '<tr><td colspan=\"2\">' + '<span style=\"color:' + point.series.color + '\">' + point.series.name +': </span></td><td align=right style=\"color:' + point.series.color + '\">' + point.y.toFixed(1) + ' $unit[$idx]</td></tr>';";
$tooltip .= "break;";
}
elseif ($var_type == 0) { # wenn Datentyp Bool (=0) ist dann ...
$data = IPS_Array_to_HCData($RoundedValue, array_reverse(AC_GetAggregatedValues(AC_HANDLER_ID, $id_state[$idx], $AggType, $CfgDaten["StartTime"], $CfgDaten["EndTime"], 10000 /*[Objekt #10000 existiert nicht]*/)));
foreach ($prof_asso as $data2) { # Aus allen Assoziation die die aktuelle Variable hat den Name holen und speichern
$a_rpl[$idy] = $cnt; # Array für ReplaceValues zuweisen
$a_unit[$idy] = $data2['Name'];
$unit = $a_unit[$idy];
$value = $cnt;
$idy ++;
$cnt ++;
}
$tooltip .= "case '$name_dev[$idx]':";
$tooltip .= " s += '<tr><td colspan=\"2\">' + '<span style=\"color:' + point.series.color + '\">' + point.series.name +': </span></td><td align=right style=\"color:' + point.series.color + '\">' + unit + '</td></tr>';";
$tooltip .= " break;";
}
# ---------------------------------------------------------------------------------------------------------------------------
// Datendefinition
// ---------------
$serie['Id'] = $id_state[$idx];
$serie['data'] = $data;
$serie['name'] = $name_dev[$idx];
$serie['AggType'] = NULL;
$serie['Unit'] = NULL;
$serie['type'] = $type[$idx];
$serie['zIndex'] = $z_idx[$idx];
$serie['color'] = $color[$idx];
$serie['step'] = true;
$serie['ReplaceValues'] = $a_rpl;
$serie['yAxis'] = $y[$idx];
$serie['visible'] = true;
$serie['shadow'] = true;
$serie['lineWidth'] = 1.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;
$CfgDaten['Series'][] = $serie;
$idx ++;
}
// --------------------------------------------------------------------------
// y-Achsen-Definition
// --------------------------------------------------------------------------
$CfgDaten["yAxis"][0]['title']['text'] = "%";
$CfgDaten['yAxis'][0]['title']['rotation'] = 0;
$CfgDaten["yAxis"][0]['Unit'] = "";
$CfgDaten['yAxis'][0]['labels']['rotation'] = 0;
$CfgDaten["yAxis"][0]['opposite'] = false;
$CfgDaten["yAxis"][0]['tickInterval'] = 5.0;
$CfgDaten["yAxis"][0]['min'] = 0;
$CfgDaten["yAxis"][0]['max'] = 100; #$cnt;
$CfgDaten["yAxis"][0]['title']['style']['color'] = "#FFFFFF";
$CfgDaten["yAxis"][0]['labels']['style']['color'] = 'rgba(255,255,255, 0.8)';
$CfgDaten["yAxis"][0]['labels']['staggerLines'] = 1;
$CfgDaten["yAxis"][0]["gridLineWidth"] = 1.0;
$CfgDaten["yAxis"][0]["gridLineDashStyle"] = "Dash";#"Solid";
$CfgDaten["yAxis"][1]['title']['text'] = "";
$CfgDaten['yAxis'][1]['title']['rotation'] = 0;
$CfgDaten["yAxis"][1]['Unit'] = "";
$CfgDaten['yAxis'][1]['labels']['rotation'] = 0;
$CfgDaten["yAxis"][1]['opposite'] = true;
$CfgDaten["yAxis"][1]['tickInterval'] = 0.5;
$CfgDaten["yAxis"][1]['min'] = 0.0;
$CfgDaten["yAxis"][1]['max'] = 10.0; #$cnt;
$CfgDaten["yAxis"][1]['title']['style']['color'] = "#FFFFFF";
$CfgDaten["yAxis"][1]['labels']['style']['color'] = 'rgba(255,255,255, 0.8)';
$CfgDaten["yAxis"][1]['labels']['staggerLines'] = 1;
$CfgDaten["yAxis"][1]["gridLineWidth"] = 1.0;
$CfgDaten["yAxis"][1]["gridLineDashStyle"] = "Dash";#"Solid";
$CfgDaten['yAxis'][1]['labels']['formatter'] = "@function() { if (this.value == 0) return 'AUS'; if (this.value == 1) return 'EIN';}@";
$CfgDaten['yAxis'][1]['labels']['x'] = 10;
$CfgDaten['yAxis'][1]['labels']['y'] = -5;
// --------------------------------------------------------------------------
// x-Achsen-Definition
// --------------------------------------------------------------------------
$CfgDaten["xAxis"]["gridLineWidth"] = 0.2;
$CfgDaten["xAxis"]["gridLineDashStyle"] = "Solid";
// 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'] = "100%"; // in px, 0 wird auch in 100% konvertiert
$CfgDaten['HighChart']['Height'] = $height; // in px
// weitere Optionen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Chart-Optionen "Tooltip"
$CfgDaten['tooltip']['useHTML'] = true;
$CfgDaten['tooltip']['shared'] = true;
$CfgDaten['tooltip']['crosshairs'][] = array('width' =>1,'color' =>'grey','dashStyle'=>'dashdot' );
$CfgDaten['tooltip']['crosshairs'][] = array('width' =>1,'color' =>'grey','dashStyle'=>'dashdot' );
$CfgDaten['tooltip']['formatter'] =
"@function() {
var s = '<b>' + Highcharts.dateFormat('%d.%m.%Y, %H:%M', this.x) +'</b><br/>';
s += '<table cellspacing=\"0\" cellpadding=\"0\" width=\"120px\" style=\" font-size:12px; color:rgba(255,255,255, 0.9);\">';
s += '<tr><td style=\"width:15px; height:5px;\"> </td><td style=\"width:100px;\"> </td><td style=\"width:80px;\"> </td></tr>';
$.each(this.points, function(i, point) {
if (point.y == '1') unit = 'Ein'; if (point.y == '0') unit = 'Aus';
{}[this.series.name];
switch (point.series.name)
{
$tooltip
}
});
s += '</table>';
return s;
}@";
$CfgDaten['legend']['enabled'] = true;
$CfgDaten['legend']['borderRadius'] = 0;
$CfgDaten['legend']['borderColor'] = "#787878";
$CfgDaten['legend']['shadow'] = false;
$CfgDaten['legend']['margin'] = 20;
$CfgDaten['legend']['itemStyle']['fontSize'] = 16;
$CfgDaten['chart']['zoomType'] = "x";
$CfgDaten['chart']['animation'] = false;
// ab V3.000 sind diese Parameter hinzugekommen
// lokale Skripte oder aus Internet
// ['Ips']['ScriptsHighCharts'] Verzeichnis in welchen sich die Scripte befinden falls man diese lokal hält,
// ['Ips']['ScriptsHighstock'] default = leer, dann werden die Scripte aus dem Internet geholt
// ['Ips']['Scriptsjquery']
// ['Ips']['ScriptsTheme'] das ist das Themes Verzeichnis. Wenn man mit der ips.js arbeitet, sollte man dort alle Highchart Themes hinkopieren und den Pfad antprechend angeben
// ['Ips']['HtmlScript'] default = leer, Script komplett erzeugen, wenn man z.B.: mit Dynamik arbeitet kann man hier Anpassungen machen.
// weitere Optionen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// -------------------------------------------------------------------------------------------------------------------------------------
// und jetzt los ......
$s = IPS_GetScript($CfgDaten['HighChartScriptId']); // Id des Highcharts-Scripts
include($s['ScriptFile']);
// das ist ab V3.000 der neue Aufruf
RunHighcharts($CfgDaten);
?>