Q&A Highcharts V2.0

hallo gemeinde,
erstmal vielen dank für die entwicklung und das zur verfügung stellen des scriptes.
die highcharts machen sich wirklich gut im webfront.
für meinen fall habe ich mir eine passende config gebastelt und erfolgreich installiert. trotzdem bekomme ich über dem chart folgende warnmeldung:

Warning: Invalid argument supplied for foreach() in C:\IP-Symcon\scripts\48948.ips.php on line 1125

das angegebene script ist das Highcharts_V2.02.ips.php!

hier noch ein screenshot:

weiß jemand, wie ich das beheben kann? besten dank für eure hilfe.
gruß, sven

Hallo,

Ja, die Werte überschneiden sich, sind halt mind. mal Temperatur und Luftfeuchte , aber auch Soll-Temperatur und Stellwert der Ventilantriebe.
Ich habe schon mehere Graphen gesehen, das es mit halbtransparenten Farben geht ( wie in dem verlinkten Beispiel ), aber ich bekomme es nicht hin, bei mir ist die vordere Farbe 100% denkend und alles dahinter eben nicht mehr zu sehen.
Siehe mein Beispiel, wenn ich den Graphen als Area wählen ist die rote Kurve nicht mehr sichtbar.

Ich muss mal hier im Forum suchen, da waren auch entsprechende Graphen, werde mal den jenigen anschreiben, wie er es gemacht hat.

Hallo Tuxtom007,
mit

$CfgDaten['plotOptions']['series']['fillOpacity'] = 0.8;

kannst Du die Deckung der Area-Farben festlegen. Standard ist lt Options Reference 0.75.

Und wie gesagt, die Farben mischen sich bei Überlagerungen. D.h. wenn Du viele Areas hast die sich überlappen, bekommst Du irgend wann schwarz.
Und der IPS Hintergrund ist fast schwarz. Dadurch werden die Farben, wenn sie transparent gemacht werden, dunkler.

Und

die Reihen mit den höchsten Werten in Deinen Series ganz nach unten und die mit den niedrigsten ganz nach oben in der Config schreiben

ist blödsinn. Genau umgekehrt. In der Config steht bei mir die Feuchte-Serie über der Temp-Serie. Sieht man auch in der Legende.

Du kannst auch noch zwischen Serie Color und Line Color unterscheiden.

Hier mal das Script zum Screenshot.

<?php

    // IPS Variablen ID´s
   $CfgDaten['ContentVarableId']= 25843  /*[Test\Test_HC\Test2\Test HC 2]*/ ; // 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']= 37577 /*[HighCharts\Highcharts_V2.02.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)
    //$CfgDaten['StartTime'] = mktime(0,0,0, date("m", time()), date("d",time())-6, 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

     // Zeitraum via Selector im WF nach: http://www.ip-symcon.de/forum/f53/highcharts-multigraph-17625/index3.html#post126538
     $ZeitRaum = GetValue(41985 /*[HighCharts\HC_Zeitraum\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(19044 /*[HighCharts\HC_Zeitraum\HC_EndPunkt]*/ );
    $CfgDaten["EndTime"] = time() + 60 * 60 * 24 * $ZeitRaum * $EndPunkt;
    $CfgDaten["StartTime"] = $CfgDaten["EndTime"] - 60 * 60 * 24 * $ZeitRaum;


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

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

    // **************************************************************************************
    // *** 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'] = "'xy'";            //default: $CfgDaten['chart']['zoomType'] = "'xy'";

    // **************************************************************************************
    // *** credits *** siehe http://www.highcharts.com/ref/#credits // wha funktioniert nicht (oder chacheproblem?)
    // **************************************************************************************
      $CfgDaten['credits']['enabled'] = true;
        $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'] = "Test Area Transparent";

    // **************************************************************************************
    // *** 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
    // $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)
    $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'] = true;
        $CfgDaten['tooltip']['formatter'] = ""; // "" = Standard - Highcharts Tooltip

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

    // **************************************************************************************
    // *** plotOptions *** http://api.highcharts.com/highcharts#plotOptions
    // **************************************************************************************
   $CfgDaten['plotOptions']['series']['fillOpacity'] = 0.2    ;

    // **************************************************************************************
    // *** series *** http://www.highcharts.com/ref/#series
    // **************************************************************************************
    $serie = array();
    $serie['name'] = "Luftfeuchte";
    $serie['Id'] = 20466 /*[Wetter\InternetWetter\WetterMeteo24_geParstEinzel\Luftfeuchtigkeit]*/  ;
    $serie['Unit'] = "%";
    $serie['color']= '#2E9AFE'; //blau
    $serie['lineColor'] = '#00FF00'; // grün
    $serie['ReplaceValues'] = false;
    $serie['RoundValue'] = 0;
    $serie['type'] = "area";
    $serie['yAxis'] = 0;
    $serie['marker']['enabled'] = false;
    $serie['shadow'] = true;
    $serie['lineWidth'] = 1;
    $serie['states']['hover']['lineWidth'] = 2;
    $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;

    $serie = array();
    $serie['name'] = "Aussentemperatur";
    $serie['Id'] = 36560 /*[Wetter\InternetWetter\Wetter24\Wetter 24\Temperatur]*/ ;
    $serie['Unit'] = "°C";
    $serie['color']= '#FF0000'; //rot
    $serie['lineColor'] = '#FFFF00'; // gelb
    $serie['ReplaceValues'] = false;
    $serie['RoundValue'] = 0;
    $serie['type'] = "area";
    $serie['yAxis'] = 0;
    $serie['marker']['enabled'] = false;
    $serie['shadow'] = true;
    $serie['lineWidth'] = 1;
    $serie['states']['hover']['lineWidth'] = 2;
    $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']="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

    // **************************************************************************************
    // *** xAxis *** http://www.highcharts.com/ref/#xAxis
    // **************************************************************************************
        $CfgDaten['xAxis']['tickInterval'] = 1*24*3600*1000; // 1Tag x 24 Std. x 3600 sek x 1000ms

// -------------------------------------------------------------------------------------------------------------------------------------
    // 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
        }
    }

?>


Zwischenablage-1.png

Hallo axelp,

zu

  1. wenn Du verstehst was RS meint kannst Du evtl mit der Antwort #12 auf meine Frage #11 was anfangen. Ich hab versucht das nachzuvollziehen und auch halbwegs verstanden. Bezieht sich halt nur auf einen Tag. Für ein Jahr müsstest Du das vermtl noch in eine Schleife packen und aus dem count so was wie ein average machen.
  2. schau mal ob in der Options Reference unter groupPadding, grouping oder pointPadding nicht was für Dich dabei ist.
  3. ungeprüft: ist series.start/end3 und offset3 nicht irgend wo doppelt gemoppelt? Wo gibts denn die Optionen in in der Reference?

Hallo Wolfgang,

Danke dir - geht !
Hab den ersten Graphen umgestellt, wird um einiges übersichtlicher.
Mit der Farbmischung ist mir egal, werden er nicht mehr als 3 bis 4 Graphen, das sollte halbwegs gut gehen, werden mal ein paar Farbkombis probieren.

Viele Grüsse

Thomas

Moin, Fehler lag in $serie[‚AggType‘] = 0, mit $serie[‚AggType‘] = 1 klappt alles wie gewünscht. Ich dödel! Sorry

Hi,

habe mal wieder meine SpareTime genutzt, um meine Grafiken aufzuhübschen.
Ich nähere mich langsam aber sicher meinem Zielbild, vor allem dank der Hilfe und den Scripts von Raketenschnecke hier im Forum :).

Im Moment hänge ich an der Formatierung der X-Achse.

Ich habe eine Grafik, die mir die letzten 7 Tage meine Stromverbräuche, pro Tag aggregiert, als Column anzeigt.
Die X-Achse lasse ich derzeit dynamisch generieren, d.h. bei meiner normalen 16:9 Bildschirmauflösung über die gesamte Breite sieht so aus:

Mich stört aber die Uhrzeit, sodass ich gerne die X-Achse fest definieren würde, damit sie nur das Datum zeigt. Ungefähr so, als würde ich das Fenster verkleinern:

Probiert habe ich das mit dem tickIntervall:

$CfgDaten['xAxis']['tickInterval'] = 5;

Was aber regelmäßig zu Timeouts im Browser führt.

Aber auch die Variante

$CfgDaten['xAxis'][] = array("tickInterval"=>5);

führt zu nichts.

Mit den tickIntervall-Werten habe ich verschiedene Werte versucht.

Was mich auch wundert ist, dass im Kommentar nur lineColor und plotBands angegeben ist.
LineColor funktioniert wunderbar, ich will ja aber nicht die Farbe ändern :rolleyes:.

Hat jemand einen Tipp für mich?

Mic

Update:

Mit minTickIntervall, kann ich es lösen:

$CfgDaten['xAxis']['minTickInterval'] = 100000000;

Da ich eine Zeitachse habe gehe ich davon aus, dass das Unix Timecodes sind.
Somit war ich erst versucht solch ein Konstrukt zu machen:

mktime(0,0,0,2,0,0)-mktime(0,0,0,1,0,0)

Damit kommen ich aber nicht auf den notwendigen Wert.

Update 2:

Und nachdem ich herausgefunden habe, dass es Timecodes sind geht auch das:

$CfgDaten['xAxis']['tickInterval'] = 100000000;

Hallo, ich versuche verzweifelt meinen Stromverbrauch in column darzustellen:

irgendwie stellt der mir die falschen Daten dar :
In der Tagesvariable steht ein viel höherer wert. Was mach ich denn da falsch ?

 <?
 // ---->  hier muss EURE HighChartScriptId eingebenen werden
    $CfgDaten['HighChartScriptId']= 50157 /*[Program\Highcharts\Highcharts_V2.02]*/ ;                  // ID des Highcharts Scripts

      // Überschriften
    $CfgDaten['title']['text']= "Energieverbrauch";
    $CfgDaten['subtitle']['text']= "Haus komplett";     // "" = Automatisch über Zeitraum
    $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)

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

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

    // Achse
    $CfgDaten["yAxis"][0]['title']['text'] = "Komplett";♥
    $CfgDaten["yAxis"][0]['Unit'] = "kWh";
    $CfgDaten["yAxis"][0]['opposite'] = false;
    
  

   // ---->  hier mussen in folge natürlich EURE Variablen IDs eingebenen werden
     // Column
    $serie = array();
    $serie['Id'] = 19098 /*[Keller\Stromzähler Haus\Tag]*/  ;
    $serie['name'] = "Energieverbrauch";
    $serie['Unit'] = "kWh";
    $serie['AggType'] = 1;  // Tageswerte
    $serie['ReplaceValues'] = false;
    $serie['RoundValue'] = 2;
    $serie['type'] = "column";
    $serie['yAxis'] = 0;
//    $serie['shadow'] = False;
    $CfgDaten["Series"][] = $serie;






   // ---->  hier muss die ScriptId des "leeren Cfg-Scripts" eingetragen werden
    $id = 10463 /*[Program\Highcharts\Testscenarios\Testscenarios\leeres]*/ ;
    $s = IPS_GetScript($id);      // Id des Highcharts-Config-Scripts
    include($s['ScriptFile']);
    ?>

Script ist direkt vor Screenshot ausgeführt worden …

Wenn ich den AggType ändere zeigt er mir aber immer nur einen Tag an, dann stimmt aber der Wert

Hallo zusammen,
habe mir die Highcharts installiert. Kann ich im Config-Script auch direkt ein Startdatum eingeben? habe es mal hiermit versucht:

$serie['StartTime'] = mktime(0,0,0,12,10,2012);

Das funktioniert jedoch nicht. Der Bildschirm bleibt leer.

Grüße, Jürgen

hallo immergut,
versuchs mal mit

$CfgDaten['StartTime'] = mktime...
$CfgDaten['EndTime']   = mktime...

Hallo muckel,
wenn ich das richtig sehe hast du in Deiner Variablen schon Tageswerte. Kommentier in den Series die Zeile

$serie['AggType']

mal aus.

Jo, hat sich erledigt, es war ein Fehler in der Datenbank, geht jetzt wunderbar.

Hallo DerStandart,
kannst Du bitte mal das Script Posten das Du mit dem Post #259 als erledigt betrachtest? Habe auch so ein Problem mit der Darstellung von MySQL Daten. Hab schon ein Script mit dems funktioniert. Mit einem 2. das ich genau so aufgebaut habe wie das erste funktionierts nicht. Siehe Post #410. Sind im Gegensatz zu Deinem aber nur 350 Datensätze. Hoffe in Deinem Script den nötigen Hinweis auf meinen Fehler zu finden. Oder siehts Dus mittlerweile auf Anhieb?
Danke und

Hallo,

mir dauert das Laden der Diagramme mittlerweile zu lange, da ich sicherlich auch recht viel Werte in meinem Diagramm habe.
Nur moechte ich nicht mehrere Dias haben, sondern lieber einzelne Werte bei Bedarf einblenden.

nun zu meiner Frage:

Ist es moeglich festzulegen, dass mein Diagramm beim Laden erst mal leer ist oder nur einen Wert anzeigt? Das wuerde doch die Ladezeit verkuerzen oder werden die Werte trotzdem im Hintergrund geladen und ich habe gar nichts davon?

Baue in dein Array der entsprechenden Graphen mal das mit ein

 $serie['visible']            = false;

Ist anschließend im Graphen deaktiviert und Du kannst es hinzuschalten.

Klasse!!!
Ich hab immer ueberall nach „show“ und soetwas gesucht… man man.

Vielen Dank fuer die schnelle Hilfe!

Hab es gefunden. Mit Highstock geht es nicht.

hallo,

steht ja schon im Titel, wie bekomme ich eine Legende in das Chart ?

Ich habe versucht

 $serie['showInLegend'] = true;

einzufügen, aber da wird mir nichts angezeigt.

Gehört da noch mehr zu ?

Hallo Gemeinde

Pro Tag schreibe ich den Stromverbrauch des Lichts in eine Variable. Diese wird in die Db geloggt.
Diese Werte lasse ich mir mit Highcharts anzeigen. Das ist wirklich eine tolle sache. Funktioniert auch supper.
Nun bin ich auf die Idee gekommen mehrere Jahre in einem Jahr darzustellen.
Die Jahre sollten alle überlagert dargestellt werden.
Nur was trage ich denn bei Start und ende ein? oder geht das etwa ganz anders?


$CfgDaten["StartTime"] = mktime(0,0,0,1,1, 2011); // ab 1.1.2011
$CfgDaten["EndTime"] = mktime(0,0,0, 1, 1, 2014);

$serie = array();
	$serie['name'] = "2012";
	$serie['Id'] = 51904 /*[WF Archos\.Summen\Jahr 2012\Licht\Gesamtsumme 2012]*/;
	$serie['Unit'] = "kWh";
	$serie['ReplaceValues'] =false;
	$serie['type'] = "spline";
	$serie['step'] = true;
	$serie['yAxis'] = 0;
	$serie['index'] = 0;
	$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'] = 2;
	$serie['StartTime'] = mktime(0,0,0,1,1,2012);
              $serie['EndTime'] = mktime(0,0,0,1,1,2013);
	$CfgDaten['series'][] = $serie;

Das hier zeigt

Die Originaldaten wollte ich eigentlich nicht anfassen oder bearbeiten.
Kann jemand so nett sein und mir auf die Sprünge helfen.

Weihnachtliche Grüsse
tschewie

licht_jahre.JPG

Hi Tschewie, Schau mal im anderen Highcharts-Thread (nicht Q&A), da steht ein Beispiel dazu drin.