Hallo RS,
sorry für meine verwirrenden Posts, hab wohl den Verlauf meine Fortschritte nicht richtig dargestellt und nie richtig meine Ziele formuliert. Hoffe mit diesem Post wirds transparenter. Und ich wollte keinesfalls einen Dialog verhindern/unterbinden.
Also, Stand der Entwicklung ist folgender:
Hab eine MySQL Tabelle folgender Konfiguration:
![mySQL_Info.png](https://community.symcon.de/uploads/default/original/2X/5/514983c522dfa358f8f5101779474103f65307ff.png)
Alle Daten liegen im UnixTimestap vor
![mySQL_data.png](https://community.symcon.de/uploads/default/original/2X/9/92e42531e4d445d5e40f687721f58b2b5b8adb68.png)
Die Daten hole ich direkt im HC-Conifg-Script und übergebe sie als TimeStamp an HC.
DateX ist mein TimeStamp für die X-Achse. Er hat in ‚Human_Date‘ die Werte 01.01.2012 00:00:00 bis 31.12.2012 00:00:00.
Alle anderen Werte enthalten die bezeichnenden Uhrzeiten am entsprchenden Tag.
Wenn ich jetzt die Werte einfach nach HC übergebe bekomme ich fast eine Gerade, da sich ja der Zeitwert täglich um den Tageswert erhöht. Um das zu verhindern, hab ich den UnixTimstamp des Tages vom UnixTimestamp des (hier) Sonnenaufgangs abgezogen, mit dem Ergebnis, dass ich die Daten des Sonneaufgangs nun alle für den selben Tag aber verschiedene Uhrzeiten habe. Diese nach HC übergeben zeigt mir die Kurve in #196.
Ziel:
Nun möchte ich aber sowohl in den Label der Y-Achse als auch in den Tooltipps die Sonnenaufgangszeit im Format hh:mm angezeigt bekommen.
Versuche das Problem zu lösen:
Habe in der HC-Config in der Abteilung Tooltipps folgendes eingetragen:
$CfgDaten['tooltip']['enabled'] = true;
//$CfgDaten['tooltip']['shared'] = true;
//$CfgDaten['tooltip']['useHTML'] = 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() {
return '<b>'+ 'Dämmerungszeiten ' +'</b>'+Highcharts.dateFormat('%a %d.%m.%Y %H:%M.%S', (this.x))
+ '<br/>' + Highcharts.dateFormat('%a %d.%m.%Y %H:%M.%S', (this.y)) + '<br/>' + (this.y) + '<br/>';}@";
Ergebnis:
![Ergebnis_ToolTipp.png](https://community.symcon.de/uploads/default/original/2X/1/199527c3c7c1404833117335fbf9e2ee4774fcf5.png)
Das Datum und die Uhrzeit des Tages (x-Achse) sind richtig. Die Uhrzeit des dargestellten Wertes ist definitiv falsch. Müsste irgend wo bei 8:18 liegen
Die selbe aufgabe steht noch für die labes der Y-Achse an, wobei hier die Funktion des formatters (ohne html) eingeschränkt scheint.
Wenn dann alles funktoniert möchte ich gerne noch weitere „series“ einbauen.
Anbei noch mal die aktuelle Config.
<?php
Global $CfgDaten;
//MySQL Connect Daten
$MySQLConn=mysql_connect($MySQLIP.$MySQLPort, $MySQLAdmin, $MySQLAdminPW);
$db = $IPS_DB;
$SQLTable = $TBL_Wetter_Daemmerung;
$db_selected = mysql_select_db($db, $MySQLConn);
// IPS Variablen ID´s
$CfgDaten['ContentVarableId']= 54396 /*[Wetter\Astronomie\HC\MySQL_SunRiseSet]*/ ;
$CfgDaten['HighChartScriptId']= 37577 /*[HighCharts\Highcharts_V2.02.ips]*/ ;
// Highcharts oder Highstock (default = Highcharts
$CfgDaten['Ips']['ChartType'] = 'Highcharts';
// Zeitraum welcher dargestellt werden soll (kann durch die Zeitvorgaben in den Serien verändert werden)
$CfgDaten['StartTime'] = mktime(0,0,0, 1, 1, 2012);
$CfgDaten['EndTime'] = mktime(23,59,59, 12, 31, 2012);
// damit wird die Art des Aufrufes festgelegt
$CfgDaten['RunMode'] = "script"; // file, script, popup
if ($CfgDaten['RunMode'] == "popup")
{
$CfgDaten['WebFrontConfigId'] = 26841 /*[WFs\wha\Fritzbox\Übersicht\FritzBox_Uebersicht]*/;
$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'] = -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;
**************************************************************************************
// *** 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
$CfgDaten['title']['text'] = "DämmerungsZeiten für Mühlacker";
**************************************************************************************
// *** subtitle *** siehe http://www.highcharts.com/ref/#subtitle
**************************************************************************************
$CfgDaten['subtitle']['text'] = "Zeitraum: %STARTTIME% - %ENDTIME%";
$CfgDaten['subtitle']['Ips']['DateTimeFormat'] = "(D) d.m.Y H:i";
// **************************************************************************************
// *** PlotOptions *** http://www.highcharts.com/ref/#plotoptions
**************************************************************************************
//$CfgDaten['plotOptions']['area']['dataLabels']['enabled'] = true;
//$CfgDaten['plotOptions']['area']['dataLabels']['formatter'] = function() {return (this.y)*100;};
**************************************************************************************
// *** tooltip *** http://www.highcharts.com/ref/#tooltip
// **************************************************************************************
$CfgDaten['tooltip']['enabled'] = true;
//$CfgDaten['tooltip']['shared'] = true;
//$CfgDaten['tooltip']['useHTML'] = 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() {
return '<b>'+ 'Dämmerungszeiten ' +'</b>'+
Highcharts.dateFormat('%a %d.%m.%Y %H:%M.%S', (this.x)) + '<br/>' + Highcharts.dateFormat('%a %d.%m.%Y %H:%M.%S', (this.y)) + '<br/>' + (this.y) + '<br/>';
}@";
//tooltip:formatter:function() {var s = '<b>' + Highcharts.dateFormat('%H:%M', this.x) +'<\/b>';
// **************************************************************************************
// *** 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
// $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)
// $CfgDaten['yAxis'][0]['opposite'] = false; // Achse wird auf der rechten (true) oder linken Seite (false) des Charts angezeigt (default = false)
// $CfgDaten['yAxis'][0]['tickInterval'] = 5; // Skalenwerte alle x (TickInterval)
$CfgDaten['yAxis'][0]['type']='datetime';
$CfgDaten['yAxis'][0]['title']['text'] = "Sonnenauf und Untergang";
$CfgDaten['yAxis'][0]['Unit'] = "";
$CfgDaten['yAxis'][0]['reversed']= true;
//$CfgDaten['yAxis'][0]['opposite'] = false;
//$CfgDaten['yAxis'][0]['labels']['formatter']= "function(){return this.axis}";
//$CfgDaten['yAxis'][0]['dateTimeLabelFormats'] = '%H:%M';
//$CfgDaten['yAxis'][0]['tickInterval'] = 1000000;
//$CfgDaten['yAxis'][0]['min'] = 1325402185;
//$CfgDaten['yAxis'][0]['max'] = 1356938185;
// $CfgDaten['yAxis'][1]['title']['text'] = "Heizungssteller / Luftfeuchte";
// $CfgDaten['yAxis'][1]['Unit'] = "%";
// $CfgDaten['yAxis'][1]['opposite'] = true;
**************************************************************************************
// *** series *** http://www.highcharts.com/ref/#series
**************************************************************************************
// $serie['name'] = "Temperatur; // Name der Kurve (Anzeige in Legende und Tooltip)
// -> veraltet: 'Name' -> verwende [series']['name']
// $serie['Unit'] = "°C"; // Anzeige in automatisch erzeugtem Tooltip
// wenn $serie['Unit'] = NULL; // oder Unit wird gar nicht definiert, wird versucht die Einheit aus dem Variablenprofil automatisch auszulesen
// $serie['ReplaceValues'] = false; // Werte werden wie geloggt übernommen
// $serie['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)
// $serie['type'] = 'spline'; // Festlegung des Kuventypes (area, areaspline, line, spline, pie, Column)
// $serie['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
// $serie['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
// $serie['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
// $serie['Offset'] = 24*60*60; hiermit können Kurven unterschiedlicher Zeiträume in einem Chart dargestellt. Angabe ist in Minuten
// $serie['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
// $serie['EndTime'] = mktime(0,0,0,2,1,2012); // der Zeitpunkt der Zeitpunkt aus den $CfgDaten genommen
// $serie['ScaleFactor'] = 10; // Skalierungsfaktor mit welchem der ausgelesene Werte multipliziert wird
// $serie['RoundValue'] = 1; // Anzahl der Nachkommastellen
// $serie['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
// $serie['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.
$sql_Ergebnis = mysql_query("SELECT DateX, SunRise, SunSet
FROM " . $SQLTable .";")
OR die("'".$sql_Ergebnis."':".mysql_error());
$data = mysql_fetch_array($sql_Ergebnis, MYSQL_ASSOC);
$i = 0;
while($data = mysql_fetch_array($sql_Ergebnis, MYSQL_ASSOC))
{
//echo date("d.m.Y H:m:s",$data['SunRise']-$data['DateX']-3600)."
";
//$DataForSerie[] = array("DateX"=>date("d.m.Y",$data['DateX']), "SunRise"=>date("H:i",$data['SunRise']),"human_Date" => date("d.m.Y H:i:s",$data['DateX']));
//$DataForSerie[] = array("Value"=>date("H:i",$data['SunRise']), "TimeStamp"=>date("d.m.Y H:i:s",$data['DateX']));
//$DataForSerie[] = array("Value"=>date('H:i',$data['SunRise']), "TimeStamp"=>$data['DateX']);
//$DataForSerie[] = array("Value"=>(substr(date("H:i",$data['SunRise']),0,2)*60)+substr(date("H:i",$data['SunRise']),3,2)-60, "TimeStamp"=>$data['DateX']);
$DataForSerie[] = array("Value"=>$data['SunRise']-$data['DateX']-3600, "TimeStamp"=>$data['DateX']);
//$DataForSerie[] = array("Value"=>$data['SunRise'], "TimeStamp"=>date("d.m.Y H:i:s",$data['DateX']));
//$DataForSerie[] = array("Value"=>$data['SunRise'], "TimeStamp"=>$data['DateX']);
//print_r($DataForSerie); //Output Buffer exeeds 1024kb. Operation halted (am 8.3.)
//$DataForSerie2[] = array("Value"=>(substr(date("H:i",$data['SunSet']),0,2)*60)+substr(date("H:i",$data['SunSet']),3,2)-60, "TimeStamp"=>$data['DateX']);
$DataForSerie2[] = array("Value"=>$data['SunSet']-$data['DateX']-3600, "TimeStamp"=>$data['DateX']);
//print_r(array("Sunrise"=>date("d.m.Y H:m:s",$data['SunRise']-$data['DateX']-3600),"TimeStamp"=>date("d.m.Y H:i:s",$data['DateX'])));
}
//print_r($DataForSerie);
$i++;
//print_r($DataForSerie);
//$serie = array();
//$serie = array("Id"=>0, "Data"=>$DataForSerie, "Name" =>"Manueller Werte 1", "Unit"=>"°C", "ReplaceValues"=>false);
$serie['name'] = "Sonnenaufgang";
//$serie['Id'] = 45736 /*[Wetter\Astronomie\SonnenAufUntergang\SonnenAufgang_Int]*/ ;
$serie['Unit'] = "";
$serie['ReplaceValues'] = false;
$serie['RoundValue'] = 0;
$serie['type'] = "spline"; //"areaspline"; //
$serie['yAxis'] = 0;
$serie['marker']['enabled'] = true;
$serie['shadow'] = true;
$serie['lineWidth'] = 1;
$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['data'] = $DataForSerie; //für eigene daten aus MySQL. zeile aus http://www.ip-symcon.de/forum/f52/q-highcharts-v2-0-a-18312/index5.html#post164205
$CfgDaten["Series"][] = $serie;
$serie['name'] = "Sonnenuntergang";
$serie['Unit'] = "";
$serie['ReplaceValues'] = false;
$serie['RoundValue'] = 0;
$serie['type'] = "spline";
$serie['yAxis'] = 0;
$serie['marker']['enabled'] = true;
$serie['shadow'] = true;
$serie['lineWidth'] = 1;
$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['data'] = $DataForSerie2; //für eigene daten aus MySQL. zeile aus http://www.ip-symcon.de/forum/f52/q-highcharts-v2-0-a-18312/index5.html#post164205
$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
}
}
?>
Danke für Deine/Eure Hilfe,