+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 11
  1. #1
    Registriert seit
    Jan 2013
    Ort
    Altötting
    Beiträge
    173

    Question kein Boolean-Chart mit Highcharts unter IPS 4.0

    Hallo Community,

    seit dem Umstieg auf IPS 4.0 kann ich keine Boolean-Charts mehr mit Highcharts anzeigen lassen.
    Highcharts mit Float-Variablen funktionieren.

    Hier das Config-Skript:
    PHP-Code:
    <?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']= 35070 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\WP]*/;  // 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']= 35456 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\Highcharts_V202a.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())-1, 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
        //$CfgDaten['StartTime'] = time()-60*60*8*1*1; // 1Jahr: 60s*60min*24h*365d
        //$CfgDaten['EndTime'] = time(); // jetzt

          
    $ZeitRaum GetValue(36582 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\HC_Zeitraum]*/);
           
    // AggType: [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year] .. wie der Werte gelesen werden soll
          
    Switch ($ZeitRaum) {
              Case 
    0:
              Case 
    2:
              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 = (1/24);};
          If (
    $ZeitRaum == 1) {$ZeitRaum = (8/24);};
          If (
    $ZeitRaum == 2) {$ZeitRaum = (24/24);};
         
    $EndPunkt GetValue(14041 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\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'] = 25689 /*[WebFront]*/;
            
    $CfgDaten['WFCPopupTitle'] = "Ich bin der Text, welcher als Ueberschrift 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;
        
    // 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'] = "Waermepumpe";

        
    // **************************************************************************************
        // *** 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;
        // $CfgDaten['tooltip']['formatter'] = Null; // IPS erstellt selbständig einen Tooltip
        // $CfgDaten['tooltip']['formatter'] = ""; // Standard - Highcharts Tooltip

        // **************************************************************************************
        // *** 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'] = "Sole-Temperatur";
        //    $CfgDaten['yAxis'][0]['Unit'] = "°C";
        //    $CfgDaten['yAxis'][0]['opposite'] = false;
        //$CfgDaten['yAxis'][0]['tickInterval'] = 2.5;
        //$CfgDaten['yAxis'][0]['min'] = 0;
        //    $CfgDaten['yAxis'][0]['max'] = 10;

        
    $CfgDaten['yAxis'][0]['title']['text'] = "Betrieb";
        
    $CfgDaten['yAxis'][0]['Unit'] = " ";
        
    $CfgDaten['yAxis'][0]['opposite'] = true;
        
    $CfgDaten['yAxis'][0]['tickInterval'] = 0.2;
        
    $CfgDaten['yAxis'][0]['min'] = 0;
        
    $CfgDaten['yAxis'][0]['max'] = 1;

        
    //    $CfgDaten['yAxis'][1]['title']['text'] = "Heizungssteller / Luftfeuchte";
        //    $CfgDaten['yAxis'][1]['Unit'] = "%";
        //    $CfgDaten['yAxis'][1]['opposite'] = true;

        //    $CfgDaten['yAxis'][2]['title']['text'] = "Drehgriffkontakte / Türkontakte";
        //    $CfgDaten['yAxis'][2]['labels']['formatter'] = "@function() { if (this.value == 0.5) return 'geschlossen'; if (this.value == 1) return 'gekippt';if (this.value == 2) return 'geöffnet' }@";
        //    $CfgDaten['yAxis'][2]['allowDecimals'] = true;
        //    $CfgDaten['yAxis'][2]['showFirstLabel '] = false;
        //    $CfgDaten['yAxis'][2]['showLastLabel '] = false;
        //    $CfgDaten['yAxis'][2]['opposite'] = true;
        //    $CfgDaten['yAxis'][2]['labels']['rotation'] = 90;

        //    $CfgDaten['yAxis'][3]['title']['text'] = "Columns";
        //    $CfgDaten['yAxis'][3]['Unit'] = "kWh";

        // **************************************************************************************
        // *** 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.

        // $serie = array();
        // $serie['name'] = 'Pie';
        // $serie['type'] = 'pie';
        // $serie['data'][] = array('name'=>'Aussentemperatur', 'Id' => 15936, 'Unit'=>"°C");
        // $serie['data'][] = array('name'=>'Luftfeuchte', 'Id' => 17593, 'Unit'=>"%");
        // $serie['allowPointSelect'] = true;
        // $serie['cursor'] = 'pointer';
        // $serie['center'] = array(300,100);
        // $serie['size'] = 100;
        // $serie['dataLabels']['enabled'] = true;
        // $CfgDaten['series'][] = $serie;



        //    $serie = array();
        //    $serie['name'] = "T_Sole_RL";
        //    $serie['Id'] = 54883 /*[Geräte\Heizung\Sole\T_Sole_VL_corr]*/ ;
        //    $serie['Unit'] = "°C";
        //    $serie['ReplaceValues'] = false;
        //    $serie['RoundValue'] = 2;
        //    $serie['type'] = "line";
            //$serie['step'] = "left";
        //    $serie['yAxis'] = 0;
        //$serie['AggType'] = 0;
        //    $serie['marker']['enabled'] = false;
        //    $serie['shadow'] = true;    //
        //    $serie['lineWidth'] = 2;
        //    $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;
        //$serie['AggValue'] ='Min';
        //    $CfgDaten['series'][] = $serie;

        //    $serie = array();
        //    $serie['name'] = "T_Sole_VL";
        //    $serie['Id'] =   43552/*[Geräte\Temperatursensoren\DS18B20 (10)\T_Sole_RL]*/;
        //    $serie['Unit'] = "°C";
        //    $serie['ReplaceValues'] = false;
        //    $serie['RoundValue'] = 2;
        //    $serie['type'] = "line";
            //$serie['step'] = "left";
        //    $serie['yAxis'] = 0;
        //$serie['AggType'] = 0;
        //    $serie['marker']['enabled'] = false;
        //    $serie['shadow'] = true;
        //    $serie['lineWidth'] = 2;
        //    $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;
        //$serie['AggValue'] ='Min';
        //    $CfgDaten['series'][] = $serie;


        //        $serie = array();
        //        $serie['name'] = "WP-Betrieb";
        //        $serie['Id'] = 37925 /*[Geräte\Heizung\Betrieb_WP]*/;
        //        $serie['Unit'] = array(0=>'AUS', 1=>'AN');
              //$serie['ReplaceValues'] = false;
        //        $serie['ReplaceValues'] = array(0=>0.01, 1=>0.99);
        //        $serie['type'] = "line";
        //        $serie['step'] = "left";
        //        $serie['yAxis'] = 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'] = 1;
        //        $CfgDaten['series'][] = $serie;


            
    $serie = array();
            
    $serie['name'] = "Heizung";
            
    $serie['Id'] = 46597 /*[Geräte\Heizung\Betrieb_WP_HZ]*/;
            
    $serie['Unit'] = array(0=>'AUS'1=>'AN');
              
    //$serie['ReplaceValues'] = false;
            
    $serie['ReplaceValues'] = array(0=>0.011=>0.99);
            
    $serie['type'] = "line";
            
    $serie['step'] = "left";
            
    $serie['yAxis'] = 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'] = 1;
            
    $CfgDaten['series'][] = $serie;

            
    $serie = array();
            
    $serie['name'] = "Warmwasser";
            
    $serie['Id'] = 14285 /*[Geräte\Heizung\Betrieb_WP_WW]*/;
            
    $serie['Unit'] = array(0=>'AUS'1=>'AN');
              
    //$serie['ReplaceValues'] = false;
            
    $serie['ReplaceValues'] = array(0=>0.011=>0.99);
            
    $serie['type'] = "line";
            
    $serie['step'] = "left";
            
    $serie['yAxis'] = 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'] = 1;
            
    $CfgDaten['series'][] = $serie;

        
    // $serie = array();
        // $serie['name'] = "Luftfeuchte";
        // $serie['Id'] = 17593 /*[Geräte\Feuchtesensoren\Temperatur & Feuchtesensor Aussen (317, RH)\relFeuchte_Aussen]*/;
        // $serie['Unit'] = "%";
        // $serie['ReplaceValues'] = false;
        // $serie['type'] = "spline";
        // $serie['step'] = false;
        // $serie['yAxis'] = 1;
        // $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;
        // $CfgDaten['series'][] = $serie;

        //    $serie = array();
        //    $serie['name'] = "Drehgriffkontakt";
        //    $serie['Id'] = 44451 /*[Objekt #44451 existiert nicht]*/;
        //    $serie['Unit'] = array(0=>'geschlossen', 1=>'gekippt', 2=>'geöffnet');
        //    $serie['ReplaceValues'] = array(0=>0.5, 1=>1, 2=>2);
        //    $serie['type'] = "line";
        //    $serie['step'] = true;
        //    $serie['yAxis'] = 2;
        //    $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;
        //    $CfgDaten['series'][] = $serie;

        //    $serie = array();
        //    $serie['name'] = "Column";
        //    $serie['Id'] = 29842 /*[Objekt #29842 existiert nicht]*/;
        //    $serie['Unit'] = "kWh";
        //    $serie['ReplaceValues'] =false;
        //    $serie['type'] = "column";
        //    $serie['step'] = false;
        //    $serie['yAxis'] = 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;//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
            
    }
        }



    ?>
    Wenn ich folgenden Abschnitt entferne (Boolean):
    PHP-Code:
    $serie = array();
            
    $serie['name'] = "Heizung";
            
    $serie['Id'] = 46597 /*[Geräte\Heizung\Betrieb_WP_HZ]*/;
            
    $serie['Unit'] = array(0=>'AUS'1=>'AN');
              
    //$serie['ReplaceValues'] = false;
            
    $serie['ReplaceValues'] = array(0=>0.011=>0.99);
            
    $serie['type'] = "line";
            
    $serie['step'] = "left";
            
    $serie['yAxis'] = 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'] = 1;
            
    $CfgDaten['series'][] = $serie;

            
    $serie = array();
            
    $serie['name'] = "Warmwasser";
            
    $serie['Id'] = 14285 /*[Geräte\Heizung\Betrieb_WP_WW]*/;
            
    $serie['Unit'] = array(0=>'AUS'1=>'AN');
              
    //$serie['ReplaceValues'] = false;
            
    $serie['ReplaceValues'] = array(0=>0.011=>0.99);
            
    $serie['type'] = "line";
            
    $serie['step'] = "left";
            
    $serie['yAxis'] = 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'] = 1;
            
    $CfgDaten['series'][] = $serie
    und damit ersetzte (Float):
    PHP-Code:
     $serie = array();
        
    $serie['name'] = "Photovoltaik";
        
    $serie['Id'] = 15702 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_PV_02min]*/;//26970;
        
    $serie['Unit'] = "Watt";
        
    $serie['ReplaceValues'] = false;
        
    $serie['RoundValue'] = 1;
        
    $serie['type'] = "line";    //"column";
        
    $serie['yAxis'] = 0;
        
    $serie['marker']['enabled'] = false;
        
    $serie['shadow'] = true;
        
    $serie['lineWidth'] = 2;
        
    $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
    Dann funktioniert das Skript (mit Float-Variablen).

    Wie schaffe ich es, das Skript mit den Boolean-Variablen zum Laufen zu bekommen?

    Vielen Dank für Eure Hilfe

    Grüße
    Wickie

    PS: Betriebssystem Ubuntu 14.04

  2. #2
    Registriert seit
    Jan 2013
    Ort
    Altötting
    Beiträge
    173

    Standard hat keiner eine Lösung?

    Hallo Community,

    hat keiner eine Idee, wieso keine Boolean-Variablen mehr angezeigt werden?

  3. #3
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    21,824

    Gibt es denn Fehlermeldungen?

    paresy

  4. #4
    Registriert seit
    Jan 2013
    Ort
    Altötting
    Beiträge
    173

    Hallo Paresy,

    nein, es gibt keine Fehlermeldung.

    Wenn ich beim Skript eine Float-Variable angebe, dann wird ein Graph erzeugt:
    PHP-Code:
    $serie['Id'] = 45285//14285 /*[Geräte\Heizung\Betrieb_WP_WW]*/; 
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS_04.png 
Hits:	106 
Größe:	27.7 KB 
ID:	34717
    Wird im identischen Skript eine Boolean-Variable daragestellt, dann erscheint der Graph nicht (hier keine Wertänderung im besagten Zeitraum):
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS_01_Tag.png 
Hits:	121 
Größe:	12.6 KB 
ID:	34718
    Ändere ich den Zeitraum (--> Woche: Änderung der Variable im besagten Zeitraum), dann wird auch kein Graph angezeigt, es ändert sich jedoch die Skalierung der y-Achse:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS_01_Woche.png 
Hits:	144 
Größe:	13.9 KB 
ID:	34719
    Hier das Skript (ConfigHighcharts_V202a.ips):
    PHP-Code:
    <?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
        //echo "\n",'Eigenverbauch  ' , $EV, "\n";

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

        // IPS Variablen IDŽs
        
    $CfgDaten['ContentVarableId']= 35070 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\WP]*/;  // 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']= 35456 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\Highcharts_V202a.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())-1, 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
        //$CfgDaten['StartTime'] = time()-60*60*8*1*1; // 1Jahr: 60s*60min*24h*365d
        //$CfgDaten['EndTime'] = time(); // jetzt

          
    $ZeitRaum GetValue(36582 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\HC_Zeitraum]*/);
           
    // AggType: [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year] .. wie der Werte gelesen werden soll
          
    Switch ($ZeitRaum) {
              Case 
    0:
              Case 
    2:
              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 = (1/24);};
          If (
    $ZeitRaum == 1) {$ZeitRaum = (8/24);};
          If (
    $ZeitRaum == 2) {$ZeitRaum = (24/24);};
         
    $EndPunkt GetValue(14041 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\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'] = 25689 /*[WebFront]*/;
            
    $CfgDaten['WFCPopupTitle'] = "Ich bin der Text, welcher als Ueberschrift 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;
        
    // 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'] = "Waermepumpe";

        
    // **************************************************************************************
        // *** 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;
        // $CfgDaten['tooltip']['formatter'] = Null; // IPS erstellt selbständig einen Tooltip
        // $CfgDaten['tooltip']['formatter'] = ""; // Standard - Highcharts Tooltip

        // **************************************************************************************
        // *** 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'] = "Sole-Temperatur";
        //    $CfgDaten['yAxis'][0]['Unit'] = "°C";
        //    $CfgDaten['yAxis'][0]['opposite'] = false;
        //$CfgDaten['yAxis'][0]['tickInterval'] = 2.5;
        //$CfgDaten['yAxis'][0]['min'] = 0;
        //    $CfgDaten['yAxis'][0]['max'] = 10;

    ////////////////////////////////////////////////////////////////////////////////
        
    $CfgDaten['yAxis'][0]['title']['text'] = "Betrieb";
        
    $CfgDaten['yAxis'][0]['Unit'] = " ";
        
    $CfgDaten['yAxis'][0]['opposite'] = true;
        
    //$CfgDaten['yAxis'][0]['tickInterval'] = 0.2;
        //$CfgDaten['yAxis'][0]['min'] = 0;
        //$CfgDaten['yAxis'][0]['max'] = 1;
    ////////////////////////////////////////////////////////////////////////////////


        //    $CfgDaten['yAxis'][1]['title']['text'] = "Heizungssteller / Luftfeuchte";
        //    $CfgDaten['yAxis'][1]['Unit'] = "%";
        //    $CfgDaten['yAxis'][1]['opposite'] = true;

        //    $CfgDaten['yAxis'][2]['title']['text'] = "Drehgriffkontakte / Türkontakte";
        //    $CfgDaten['yAxis'][2]['labels']['formatter'] = "@function() { if (this.value == 0.5) return 'geschlossen'; if (this.value == 1) return 'gekippt';if (this.value == 2) return 'geöffnet' }@";
        //    $CfgDaten['yAxis'][2]['allowDecimals'] = true;
        //    $CfgDaten['yAxis'][2]['showFirstLabel '] = false;
        //    $CfgDaten['yAxis'][2]['showLastLabel '] = false;
        //    $CfgDaten['yAxis'][2]['opposite'] = true;
        //    $CfgDaten['yAxis'][2]['labels']['rotation'] = 90;

        //    $CfgDaten['yAxis'][3]['title']['text'] = "Columns";
        //    $CfgDaten['yAxis'][3]['Unit'] = "kWh";

        // **************************************************************************************
        // *** 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.

        // $serie = array();
        // $serie['name'] = 'Pie';
        // $serie['type'] = 'pie';
        // $serie['data'][] = array('name'=>'Aussentemperatur', 'Id' => 15936, 'Unit'=>"°C");
        // $serie['data'][] = array('name'=>'Luftfeuchte', 'Id' => 17593, 'Unit'=>"%");
        // $serie['allowPointSelect'] = true;
        // $serie['cursor'] = 'pointer';
        // $serie['center'] = array(300,100);
        // $serie['size'] = 100;
        // $serie['dataLabels']['enabled'] = true;
        // $CfgDaten['series'][] = $serie;



        //    $serie = array();
        //    $serie['name'] = "T_Sole_RL";
        //    $serie['Id'] = 54883 /*[Geräte\Heizung\Sole\T_Sole_VL_corr]*/ ;
        //    $serie['Unit'] = "°C";
        //    $serie['ReplaceValues'] = false;
        //    $serie['RoundValue'] = 2;
        //    $serie['type'] = "line";
            //$serie['step'] = "left";
        //    $serie['yAxis'] = 0;
        //$serie['AggType'] = 0;
        //    $serie['marker']['enabled'] = false;
        //    $serie['shadow'] = true;    //
        //    $serie['lineWidth'] = 2;
        //    $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;
        //$serie['AggValue'] ='Min';
        //    $CfgDaten['series'][] = $serie;

        //    $serie = array();
        //    $serie['name'] = "T_Sole_VL";
        //    $serie['Id'] =   43552/*[Geräte\Temperatursensoren\DS18B20 (10)\T_Sole_RL]*/;
        //    $serie['Unit'] = "°C";
        //    $serie['ReplaceValues'] = false;
        //    $serie['RoundValue'] = 2;
        //    $serie['type'] = "line";
            //$serie['step'] = "left";
        //    $serie['yAxis'] = 0;
        //$serie['AggType'] = 0;
        //    $serie['marker']['enabled'] = false;
        //    $serie['shadow'] = true;
        //    $serie['lineWidth'] = 2;
        //    $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;
        //$serie['AggValue'] ='Min';
        //    $CfgDaten['series'][] = $serie;


        //        $serie = array();
        //        $serie['name'] = "WP-Betrieb";
        //        $serie['Id'] = 37925 /*[Geräte\Heizung\Betrieb_WP]*/;
        //        $serie['Unit'] = array(0=>'AUS', 1=>'AN');
              //$serie['ReplaceValues'] = false;
        //        $serie['ReplaceValues'] = array(0=>0.01, 1=>0.99);
        //        $serie['type'] = "line";
        //        $serie['step'] = "left";
        //        $serie['yAxis'] = 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'] = 1;
        //        $CfgDaten['series'][] = $serie;

    ////////////////////////////////////////////////////////////////////////////////

               
    $serie = array();
            
    $serie['name'] = "Warmwasser";
            
    $serie['Id'] = 14285//14285 /*[Geräte\Heizung\Betrieb_WP_WW]*/;
            //$serie['Unit'] = array(0=>'AUS', 1=>'AN');
              
    $serie['ReplaceValues'] = false;
            
    //$serie['ReplaceValues'] = array(0=>0.01, 1=>0.99);
            
    $serie['type'] = "line";
            
    $serie['step'] = "left";
            
    $serie['yAxis'] = 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'] = 1;
            
    $CfgDaten['series'][] = $serie;
    ////////////////////////////////////////////////////////////////////////////////
        // $serie = array();
        // $serie['name'] = "Luftfeuchte";
        // $serie['Id'] = 17593 /*[Geräte\Feuchtesensoren\Temperatur & Feuchtesensor Aussen (317, RH)\relFeuchte_Aussen]*/;
        // $serie['Unit'] = "%";
        // $serie['ReplaceValues'] = false;
        // $serie['type'] = "spline";
        // $serie['step'] = false;
        // $serie['yAxis'] = 1;
        // $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;
        // $CfgDaten['series'][] = $serie;

        //    $serie = array();
        //    $serie['name'] = "Drehgriffkontakt";
        //    $serie['Id'] = 44451 /*[Objekt #44451 existiert nicht]*/;
        //    $serie['Unit'] = array(0=>'geschlossen', 1=>'gekippt', 2=>'geöffnet');
        //    $serie['ReplaceValues'] = array(0=>0.5, 1=>1, 2=>2);
        //    $serie['type'] = "line";
        //    $serie['step'] = true;
        //    $serie['yAxis'] = 2;
        //    $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;
        //    $CfgDaten['series'][] = $serie;

        //    $serie = array();
        //    $serie['name'] = "Column";
        //    $serie['Id'] = 29842 /*[Objekt #29842 existiert nicht]*/;
        //    $serie['Unit'] = "kWh";
        //    $serie['ReplaceValues'] =false;
        //    $serie['type'] = "column";
        //    $serie['step'] = false;
        //    $serie['yAxis'] = 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;//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
            
    }
        }

    ?>
    hier das entspechende Highcharts-Skript (Highcharts_V202a.ips):
    PHP-Code:
    <?
        $version 
    "2.02"$versionDate "20.05.2012";
        
    //ToDo:
        //FEATURE: Plotbands. Timestamp in From und To
        //Fehlerquelle: AggType ist "Größer" als der angezeigte Zeitraum
        // vielleicht alles als cfg direkt json_encoden und nicht jedes Teil einzeln

        //--------------------------------------------------------------------------------------------------------------------------------
        // Für die Darstellung der Graphen wird das HTML5/JS Framework "Highcharts" der Fa. Highslide Software verwendet (www.highcharts.com)
        // Alle Rechte dieses Frameworks liegen bei Highslide Software.
        // 'Highcharts' kann unter folgenden Bedinungen kostenlos eingesetzt werden:
        //     Namensnennung ? Sie müssen den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen.
        //     Keine kommerzielle Nutzung ? Dieses Werk bzw. dieser Inhalt darf nicht für kommerzielle Zwecke verwendet werden.
        // Download: wwww.highcharts.com/download/ ... und die Dateien einfach in das Webfront (Es sollte ein V 2.2 oder höher verwendet werden.
        // Demos: http://www.highcharts.com/demo/
        // API: http://www.highcharts.com/ref/
        //--------------------------------------------------------------------------------------------------------------------------------
        // Changelog:
        //    --- V2.00 ---------------------------------------------------------------------------------------------------------------------
        //    04/2012         KHC    REFACT   Umfangreiches Überarbeiten der Highchart-Script Funktionen.
        // bis                            Integration der meisten Original-Highcharts-Options als PHP-Array (siehe http://www.highcharts.com/ref)
        // 05/2012                    Highcharts-Options "lang" aus IPS_Template.php in Highcharts-Script verschoben
        //    --- V2.01 ---------------------------------------------------------------------------------------------------------------------
        // 07.05.2012  KHC   NEU      Test mit Integration Highstock. Neuer Parameter ['Ips']['ChartType'] = 'Highcharts' oder 'Highstock'
        // 07.05.2012  KHC   NEU      IPS_Template.php auf jquery 1.7.2 geändert
        // 07.05.2012  KHC   FIX      krsort durch array_reverse getauscht, da krsort Probleme beim json_encode macht
        // 08.05.2012  KHC   REFACT   intern noch mehr auf Arrays umgestellt und etwas umstrukturiert
        // 09.05.2012  KHC   NEU      über 'CreateConfigFileByPathAndFilename($stringForCfgFile, $path, $filename)' kann eine Tmp_datei mit bel. Namen geschrieben werden
        // 10.05.2012  KHC   FIX      Fehler beim Auswerten der AggregatedValues behoben (ReadDataFromDBAndCreateDataArray)
        // 12.05.2012  KHC   FIX      Tooltip für "ReplaceValues" korrigiert
        // 12.05.2012  KHC   CHANGE   Start- und Endzeitpunkt der X-Achse wurde automatisch um 5 Minuten korrigiert -> dies wurde entfernt
        // 12.05.2012  KHC   NEU      mit ['xAxis']['min']=false und ['xAxis']['min']=false kann festeglegt werden dass Min oder Max nicht autom. festgelegt werden
        //    --- V2.02 ---------------------------------------------------------------------------------------------------------------------
        // 13.05.2012  KHC   FIX      RunType=file: Wenn Highstock vorgewählt wurde wurde das tmp File nicht in die Highstock-Verzeichnis geschrieben
        // 16.05.2012  KHC   NEU      Integration Highstock: ['Navigator'], ['rangeSelector'] und ['scrollbar']
        // 18.05.2012  KHC   FIX      Integration Highstock: Zusätzliche series.type 'candlestick' und 'ohlc' erlauben
        // 19.05.2012  KHC   NEU      Neue Parameter ['Ips']['Dashboard'] für die Darstellung im Dashboard

        //--------------------------------------------------------------------------------------------------------------------------------

        // ------------------------------------------------------------------------
        // WriteContentWithFilename
        //    Mit dieser Funktion wird der Content-String geschrieben.
        //    IN: $cfg = ..
        //    IN: $tmpFilename = Der Dateiname welche die Config Daten enthält
        // ------------------------------------------------------------------------
        
    function WriteContentWithFilename($cfg$tmpFilename)
        {
            
    DebugModuleName($cfg,"WriteContentWithFilename");

            if (
    $tmpFilename != "")
            {
                
    SetValue($cfg['ContentVarableId'],
                            
    GetContentVariableString ($cfg"CfgFile"$tmpFilename));
            }
            else
                
    SetValue($cfg['ContentVarableId'], 'Falsche Parameter beim Funktionsaufruf "WriteContentTextbox"');
        }

        
    // ------------------------------------------------------------------------
        // WriteContentWithScriptId
        //    Mit dieser Funktion wird der Content-String geschrieben.
        //    IN: $cfg = ..
        //    IN: $scriptId = Die Script Id welche den ConfigString enthält.
        // ------------------------------------------------------------------------
        
    function WriteContentWithScriptId($cfg$scriptId)
        {
            
    DebugModuleName($cfg,"WriteContentWithScriptId");

            if (
    $cfg['RunMode'] == "popup")
            {
                
    WFC_SendPopup($cfg['WebFrontConfigId'],
                            
    $cfg['WFCPopupTitle'] ,
                            
    GetContentVariableString ($cfg"ScriptId"$scriptId));
            }
            else
            {
                
    SetValue($cfg['ContentVarableId'],
                    
    GetContentVariableString ($cfg"ScriptId"$scriptId));
            }
        }

        function 
    GetContentVariableString($cfg$callBy$callIdent)
        {
            
    $chartType $cfg['Ips']['ChartType'];
            
    $height $cfg['HighChart']['Height'] + 16;

            if (isset(
    $cfg['Ips']['Dashboard']['Ip']) && isset($cfg['Ips']['Dashboard']['Port']))
            {
                
    $s "http://" $cfg['Ips']['Dashboard']['Ip'] . ":" $cfg['Ips']['Dashboard']['Port'] .
                    
    "/user/$chartType/IPS_Template.php?$callBy="    $callIdent " " .
                    
    "width='100%' height='"$height ."' frameborder='1' scrolling='no'";
            }
            else
            {
                
    $s "<iframe src='./user/$chartType/IPS_Template.php?$callBy="    $callIdent "' " .
                    
    "width='100%' height='"$height ."' frameborder='0' scrolling='no'></iframe>";
            }
            return 
    $s;
            echo 
    "Highchartes Zeile 100, s: "$s"\n";
        }

    //echo $z[$i]["ohnePV"], "\n";
        // ------------------------------------------------------------------------
        // CreateConfigFile
        //    Erzeugt das tmp-Highcharts Config-File mit der $id als Dateinamen
        //    IN: $stringForCfgFile = String welcher in das File geschrieben wird
        // ------------------------------------------------------------------------
        
    function CreateConfigFile($stringForCfgFile$id$charttype 'Highcharts')
        {
            
    $path "webfront\user\\" $charttype;
            
    $filename $charttype "Cfg$id.tmp";

            return 
    CreateConfigFileByPathAndFilename($stringForCfgFile$path$filename);
        }

        
    // ------------------------------------------------------------------------
        // CreateConfigFileByPathAndFilename
        //    Erzeugt das tmp-Highcharts Config-File
        //    IN: $stringForCfgFile = String welcher in das File geschrieben wird
        //          $path, $filename = Pfad un Name des Tmp-Files welches erzeugt werden soll
        // ------------------------------------------------------------------------
        
    function CreateConfigFileByPathAndFilename($stringForCfgFile$path$filename)
        {
            
    // Standard-Dateiname .....
            
    $tmpFilename IPS_GetKernelDir() . $path "\\" $filename;

            
    // schreiben der Config Daten
            
    $handle fopen($tmpFilename,"w");
            
    fwrite($handle$stringForCfgFile);
            
    fclose($handle);

            return 
    $tmpFilename;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfgDaten
        //    Aufruf bei jedem Cfg-Start
        //    IN: $cfg = ..
        //    OUT: korrigierte cfg
        // ------------------------------------------------------------------------
         
    function CheckCfgDaten($cfg)
        {
          
    DebugModuleName($cfg,"CheckCfgDaten");

            global 
    $IPS_SELF$IPS_SENDER;

            
    // Debugging
            
    IfNotIssetSetValue($cfg['Ips']['Debug']['Modules'],             false);
            
    IfNotIssetSetValue($cfg['Ips']['Debug']['ShowJSON'],             false);
            
    IfNotIssetSetValue($cfg['Ips']['Debug']['ShowJSON_Data'],     false);
            
    IfNotIssetSetValue($cfg['Ips']['Debug']['ShowCfg'],             false);

            
    // ChartType
            
    IfNotIssetSetValue($cfg['Ips']['ChartType'], 'Highcharts');

           if (
    $cfg['Ips']['ChartType'] != 'Highcharts' && $cfg['Ips']['ChartType'] != 'Highstock')
               die (
    "Abbruch! Es sind nur 'Highcharts' oder 'Highstock' als ChartType zulässig");

            
    // über WebInterface kommt der Aufruf wenn die Content-Variable aktualisiert wird
            
    if ($IPS_SENDER != "WebInterface" && $cfg['RunMode'] != "popup")
                
    $cfg Check_ContentVariable($cfg$IPS_SELF);

           return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CreateConfigString
        //    Erzeugt den für Higcharts benötigten Config String und gibt diesen als String zurück
        //    IN: $cfg = ..
        //    OUT: der erzeugte Config String
        // ------------------------------------------------------------------------
        
    function CreateConfigString($cfg)
        {
          
    DebugModuleName($cfg,"CreateConfigString");

            
    $cfg CompatibilityCheck($cfg);
          
    $cfg CheckCfg($cfg);

            
    $cfgString GetHighChartsCfgFile($cfg);

            
    // Zusätzliche Config in Highchart Config hinzufügen
            
    $cfgString ReadAdditionalConfigData($cfg) . "\n|||\n" .  $cfgString;

            
    // Language Options aus IPS_Template.php hierher verschoben
            
    $cfgString .=  "\n|||\n"GetHighChartsLangOptions($cfg);;

            return 
    $cfgString;
        }

        function 
    CompatibilityCheck($cfg)
        {
            
    DebugModuleName($cfg,"CompatibilityCheck");

            
    // Series
            
    if (isset($cfg['Series']) && isset($cfg['series']))
                die (
    "Abbruch - Es düfen nicht gleichzeitig 'Series' und 'series' definiert werden.");
            if (isset(
    $cfg['Series']) && !isset($cfg['series']))
                
    $cfg['series'] = $cfg['Series'];
            unset (
    $cfg['Series']);

            
    // Title
            
    if (isset($cfg['Title']) && !isset($cfg['title']['text']))
                
    $cfg['title']['text'] = $cfg['Title'];
            unset (
    $cfg['Title']);

            
    // SubTitle
            
    if (isset($cfg['SubTitle']) && !isset($cfg['subtitle']['text']))
                
    $cfg['subtitle']['text'] = $cfg['SubTitle'];
            unset (
    $cfg['SubTitle']);

            
    // SubTitleDateTimeFormat
            
    if (isset($cfg['SubTitleDateTimeFormat']) && !isset($cfg['subtitle']['Ips']['DateTimeFormat']))
                
    $cfg['subtitle']['Ips']['DateTimeFormat'] = $cfg['SubTitleDateTimeFormat'];
            unset (
    $cfg['SubTitleDateTimeFormat']);

            
    // yAxis
            
    if (isset($cfg['yAxis']))
            {
                
    $axisArr = array();
                foreach (
    $cfg['yAxis'] as $Axis)
                {
                    
    $cfgAxis $Axis;

                    
    // Name
                    
    if (isset($Axis['Name']) && !isset($cfgAxis['title']['text']))
                        
    $cfgAxis['title']['text'] = $Axis['Name'];
                    unset (
    $cfgAxis['Name']);

                    
    // TickInterval
                    
    if (isset($Axis['TickInterval']) && !isset($cfgAxis['tickinterval']))
                            
    $cfgAxis['tickinterval'] = $Axis['TickInterval'];
                    unset (
    $cfgAxis['TickInterval']);

                    
    // Opposite
                    
    if (isset($Axis['Opposite']) && !isset($cfgAxis['opposite']))
                            
    $cfgAxis['opposite'] = $Axis['Opposite'];
                    unset (
    $cfgAxis['Opposite']);

                  
    $axisArr[] = $cfgAxis;
                }
              
    $cfg['yAxis'] = $axisArr;
            }
              return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfg
        //    Prüft daKonfiguration und korrigiert und Vervollständigtdiese zum Teil
        //    IN: $cfg = ..
        //    OUT: der erzeugte Config String
        // ------------------------------------------------------------------------
        
    function CheckCfg($cfg)
        {
            
    DebugModuleName($cfg,"CheckCfg");

            
    $cfg CheckCfg_Common($cfg);
            
    $cfg CheckCfg_AreaHighChart($cfg);
            
    $cfg CheckCfg_AggregatedValues($cfg);
              
    $cfg CheckCfg_StartEndTime($cfg);
              
    $cfg CheckCfg_Series($cfg);

              return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfg_Common
        //    wenn RunMode=Popup, prüfen der dazugehörigen Daten wie WebfrontConfigId, usw.
        //        und wenn RunMode=Popup, prüfen der dazugehörigen Daten wie WebfrontConfigId, usw.
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function CheckCfg_Common($cfg)
         {
          
    DebugModuleName($cfg,"CheckCfg_Common");

            if (!isset(
    $cfg['series']))
                die (
    "Abbruch - Es wurden keine Serien definiert.");

            
    // Id des ArchiveHandler auslesen
            
    if (!isset($cfg['ArchiveHandlerId']) || $cfg['ArchiveHandlerId'] == -1)
            {
              
    $instances IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}');
                
    $cfg['ArchiveHandlerId'] = $instances[0];
            }
            
    // Prüfen des ArchiveHandlers
            
    $instance = @IPS_GetInstance($cfg['ArchiveHandlerId']);
            if (
    $instance['ModuleInfo']['ModuleID'] != "{43192F0B-135B-4CE7-A0A7-1475603F3060}")
                die (
    "Abbruch - 'ArchiveHandlerId' (".$cfg['ArchiveHandlerId'].") ist keine Instance eines ArchiveHandler.");

            if (
    $cfg['RunMode'] == "popup")
            {
                
    // keine Webfront Id
                
    if (!isset($cfg['WebFrontConfigId']))
                    die (
    "Abbruch - Konfiguration von 'WebFrontConfigId' fehlt.");

                
    // prüfen ob die übergebene Id ein WebFront ist
                
    $instance = @IPS_GetInstance($cfg['WebFrontConfigId']);
                if (
    $instance['ModuleInfo']['ModuleID'] != "{3565B1F2-8F7B-4311-A4B6-1BF1D868F39E}")
                    die (
    "Abbruch - 'WebFrontConfigId' ist keine WebFrontId");

                
    IfNotIssetSetValue($cfg['WFCPopupTitle'], "");
            }

           return 
    $cfg;
        }


        
    // ------------------------------------------------------------------------
        // Check_ContentVariable
        //    prüfen ob Angaben der Content Variable stimmen oder ob es das übergeordnete Element ist
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function Check_ContentVariable($cfg$scriptId)
        {
           
    DebugModuleName($cfg,"Check_ContentVariable");

            
    // wenn keine Id übergeben wurde wird das übergeordnete Objekt als Content verwendet
            
    if (!isset($cfg['ContentVarableId']) || $cfg['ContentVarableId'] <= 0)
                
    $cfg['ContentVarableId'] = IPS_GetParent($scriptId);
          
    $variable = @IPS_GetVariable($cfg['ContentVarableId']);
            if (
    $variable == false)
               die (
    "Abbruch - Content-Variable nicht gefunden.");

        
    //    if ($variable['VariableValue']['ValueType'] != 3)
          //     die ("Abbruch - Content-Variable ist keine STRING-Variable.");

               
    if (isset($variable['VariableValue']['ValueType']) && ($variable['VariableValue']['ValueType'] != 3))//////
       
    die ("Abbruch - Content-Variable ist keine STRING-Variable.");//////

    if (isset($variable['VariableType']) && ($variable['VariableType'] != 3))//////
       
    die ("Abbruch - Content-Variable ist keine STRING-Variable.");   //////

           
    if ($variable['VariableCustomProfile'] != "~HTMLBox")
               die (
    "Abbruch - Content-Variable muss als Profil '~HTMLBox' verwenden.");

            return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfg_AreaHighChart
        //
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function CheckCfg_AreaHighChart($cfg)
         {
           
    DebugModuleName($cfg,"CheckCfg_AreaHighChart");

            
    IfNotIssetSetValue($cfg['HighChart']['Theme'], "");
            
    IfNotIssetSetValue($cfg['HighChart']['Width'], 0);
            
    IfNotIssetSetValue($cfg['HighChart']['Height'], 400);

             return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfg_StartEndTime
        //    Start- und Endzeit des gesamten Charts errechnen, und an jede Serie übergeben
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function CheckCfg_StartEndTime($cfg)
        {
            
    DebugModuleName($cfg,"CheckCfg_StartEndTime");

            
    $cfg['Ips']['ChartStartTime'] = $cfg['StartTime'];
            
    $cfg['Ips']['ChartEndTime'] = $cfg['EndTime'];

            
    $offsetExistsAtSerie false;
            
    $Count count($cfg['series']);

            for (
    $i 0$i $Count$i++)
            {
                
    $Serie $cfg['series'][$i];

                
    // wenn für die Serie keine Start oder Endzeit übergeben würde wird der Standardwert genommen
                
    IfNotIssetSetValue($Serie['StartTime'], $cfg['StartTime']);
                
    IfNotIssetSetValue($Serie['EndTime'], $cfg['EndTime']);

                if (
    $Serie['StartTime'] < $cfg['Ips']['ChartStartTime'])
                    
    $cfg['Ips']['ChartStartTime'] = $Serie['StartTime'];
                if (
    $Serie['EndTime'] > $cfg['Ips']['ChartEndTime'])
                    
    $cfg['Ips']['ChartEndTime'] = $Serie['EndTime'];

                
    $Serie['Ips']['EndTimeString'] = date("/r"$Serie['EndTime']);
                
    $Serie['Ips']['StartTimeString']= date("/r"$Serie['StartTime']);

                
    $cfg['series'][$i] = $Serie;

                if (isset(
    $Serie['Offset']) && $Serie['Offset'] != 0)
                    
    $offsetExistsAtSerie =true;
            }

            
    // wenn ein Offset definiert wurde gilt nur der global eingestellte Start und Endzeitpunkt
            
    if ($offsetExistsAtSerie true)
          {
             
    $cfg['Ips']['ChartStartTime'] = $cfg['StartTime'];
                
    $cfg['Ips']['ChartEndTime'] = $cfg['EndTime'];
          }

            return 
    $cfg;

        }

        
    // ------------------------------------------------------------------------
        // CheckCfg_Series
        //    prüfen der Serien
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function CheckCfg_Series($cfg)
         {
            
    DebugModuleName($cfg,"CheckCfg_Series");

            
    $Id_AH $cfg['ArchiveHandlerId'];

            
    $series = array();
            foreach (
    $cfg['series'] as $Serie)
            {
                
    $VariableId = @$Serie['Id'];

                
    // hier wird nur geprüft ob Wert von Eingabe passen könnte (wenn vorhanden)
                
    if  (isset($Serie['AggType']) && ($Serie['AggType']<|| $Serie['AggType']>4) )
                    die (
    "Abbruch - 'AggType' hat keinen korrekten Wert");

                
    $Serie['Ips']['IsCounter'] = $VariableId && (@AC_GetAggregationType($Id_AH$VariableId) == 1);

                
    // über AggValue kann Min/Max oder Avg vorgewählt werden (zum Lesen der AggregValues)
                
    IfNotIssetSetValue($Serie['AggValue'], "Avg");

                if (
    $Serie['AggValue'] != "Avg"
                    
    && $Serie['AggValue'] != "Min"
                    
    && $Serie['AggValue'] != "Max")
                       die (
    "Abbruch - 'AggValue' hat keinen gültigen Wert");

                
    // Offset für Darstellung von z.B. Monate und Vormonat in einem Chart
                
    IfNotIssetSetValue($Serie['Offset'], 0);

                
    IfNotIssetSetValue($Serie['ReplaceValues'], false);

                
    // Name (Kompatibilität aus V1.x)
                
    if (isset($Serie['Name']) && !isset($Serie['name']))
                    
    $Serie['name'] = $Serie['Name'];
                unset(
    $Serie['Name']);

                
    IfNotIssetSetValue($Serie['name'], "");

                
    // type & Parameter
                
    if (isset($Serie['type']) && isset($Serie['Param']))
                    die (
    "Abbruch - Definition von 'Param' und 'type' in Serie gleichzeitig nicht möglich.");
                if (!isset(
    $Serie['type']) && !isset($Serie['Param']))
                    die (
    "Abbruch - Serie muss Definition von 'Param' oder 'type' enthalten.");

                
    // Mögliche Charttypen
                
    $allowedSeriesTypes = array();
                if (
    $cfg['Ips']['ChartType'] == 'Highcharts')
                    
    $allowedSeriesTypes = array('area','areaspline','bar','column','line','pie','scatter','spline');
                else if (
    $cfg['Ips']['ChartType'] == 'Highstock')
                    
    $allowedSeriesTypes = array('area','areaspline','bar','column','line','pie','scatter','spline','ohlc','candlestick');

                if (!isset(
    $Serie['type']) && isset($Serie['Param']))
                {
                    
    // type aus Param übernehmen
                    
    foreach($allowedSeriesTypes as $item)
                    {
                        if (
    strrpos($Serie['Param'],"'$item'") > 0)
                           
    $Serie['Ips']['Type'] = $item;
                    }
                }
                else
                {
                    if (!
    in_array($Serie['type'], $allowedSeriesTypes))
                        die (
    "Abbruch - Serien-Type (" $Serie['type'] .  ") nicht erkennbar.");
                    else
                        
    $Serie['Ips']['Type'] = $Serie['type'];
                }
                if (!isset(
    $Serie['Ips']['Type']))
                    die (
    "Abbruch - Serien-Type nicht erkennbar.");

                
    // data
                
    if (isset($Serie['Data']) && isset($Serie['data']))
                    die (
    "Abbruch - Definition von 'Data' und 'data' in ein und derselben Serie nicht mölglich.");
                if (!isset(
    $Serie['data']) && isset($Serie['Data']))
             {
                   
    $Serie['data'] = $Serie['Data'];
                   unset(
    $Serie['Data']);
                }

                
    // diverse Prüfungen bei PIE-Charts
                
    if ($Serie['Ips']['Type'] == 'pie')
                {
                if (isset(
    $Serie['Id']))
                {
                        if (!isset(
    $Serie['AggType']))
                            die (
    "Abbruch - Wird ein Pie über Id definiert muss auch AggType parametriert werden");

                        
    // wenn nichts angegeben wird 'AggNameFormat: automatisch abhängig vom 'AggType' berechnet
                        
    if (!isset($Serie['AggNameFormat']))
                        {
                            if (
    $Serie['AggType'] == 0)   //0=Hour
                                
    $Serie['AggNameFormat'] = "d.m.Y H:i";
                            else if (
    $Serie['AggType'] == 1//1=Day
                                
    $Serie['AggNameFormat'] = "d.m.Y";
                            else if (
    $Serie['AggType'] == 2//2=Week
                                
    $Serie['AggNameFormat'] = "\K\WW Y";
                            else if (
    $Serie['AggType'] == 3//3=Month
                                
    $Serie['AggNameFormat'] = "M Y";
                            else if (
    $Serie['AggType'] == 4//4=Year
                                
    $Serie['AggNameFormat'] = "Y";
                        }
                }
                else if (isset(
    $Serie['data']))
                {
                   foreach(
    $Serie['data'] as $data)
                   {
                      if (isset(
    $data['Id']) && isset($data['y']))
                          die (
    "Abbruch - Pie['data']: Id und y sind als gleichzeitige Parameter nicht möglich.");
                      
    //if (!isset($data['Id']) && !isset($data['y']))
                         //     die ("Abbruch - Pie['data']: Id oder y muss definiert sein");
                         // kann man so nicht prüfen
                   
    }
                }
                else
                    {
                        die (
    "Abbruch - Pie kann nie Daten besitzen. Es muss entweder über 'Id' oder über 'data' definiert werden.");
                    }

                }

                
    // geänderte Werte wieder zurückschreiben
                
    $series[] = $Serie;
            }
            
    // geänderte Werte wieder zurückschreiben

            
    $cfg['series'] = $series;
             return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfg_AggregatedValues
        //    prüfen der AggregatedValues und Übernahme dieser in die Serien
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
         
    function CheckCfg_AggregatedValues($cfg)
         {
            
    DebugModuleName($cfg,"CheckCfg_AggregatedValues");

            if (!isset(
    $cfg['AggregatedValues']))
                
    $cfg['AggregatedValues'] = array();

            
    // Default - wenn nichts vorbelegt
            
    IfNotIssetSetValue($cfg['AggregatedValues']['MixedMode'], false);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['HourValues'], -1);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['DayValues'], -1);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['WeekValues'], -1);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['MonthValues'], -1);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['YearValues'], -1);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['NoLoggedValues'], 100);

            
    $series = array();
            foreach (
    $cfg['series'] as $Serie)
            {

                
    // prüfen ob für die Serie Einstellungen für AggregatedValues vorhanden sind,
                // wenn nicht Übernahme aus cfg
                
    if (isset($Serie['AggregatedValues']))
                {
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['MixedMode'], $cfg['AggregatedValues']['MixedMode']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['HourValues'], $cfg['AggregatedValues']['HourValues']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['DayValues'], $cfg['AggregatedValues']['DayValues']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['WeekValues'], $cfg['AggregatedValues']['WeekValues']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['MonthValues'], $cfg['AggregatedValues']['MonthValues']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['YearValues'], $cfg['AggregatedValues']['YearValues']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['NoLoggedValues'], $cfg['AggregatedValues']['NoLoggedValues']);
                }
                else    
    // nein -> Daten aus übergeordneter cfg übernehmen
                    
    $Serie['AggregatedValues'] = $cfg['AggregatedValues'];

                 
    // Umrechnen der Tage in Sekunden ... für direktes addieren zum Timestamp
                
    $MinPerTag 24*60*60;

                if (
    $Serie['AggregatedValues']['HourValues'] != -1)
                    
    $Serie['AggregatedValues']['HourValues'] *= $MinPerTag;
                if (
    $Serie['AggregatedValues']['DayValues'] != -1)
                    
    $Serie['AggregatedValues']['DayValues'] *= $MinPerTag;
                if (
    $Serie['AggregatedValues']['WeekValues'] != -1)
                    
    $Serie['AggregatedValues']['WeekValues'] *= $MinPerTag;
                if (
    $Serie['AggregatedValues']['MonthValues'] != -1)
                    
    $Serie['AggregatedValues']['MonthValues'] *= $MinPerTag;
                if (
    $Serie['AggregatedValues']['YearValues'] != -1)
                    
    $Serie['AggregatedValues']['YearValues'] *= $MinPerTag;
                if (
    $Serie['AggregatedValues']['NoLoggedValues'] != -1)
                    
    $Serie['AggregatedValues']['NoLoggedValues'] *= $MinPerTag;

                
    // geänderte Werte wieder zurückschreiben
                
    $series[] = $Serie;
            }
            
    // geänderte Werte wieder zurückschreiben
            
    $cfg['series'] = $series;

            
    // die sind jetzt nicht mehr nötig.....
            
    unset($cfg['AggregatedValues']);

            return 
    $cfg;
        }



        
    // ------------------------------------------------------------------------
        // ReadAdditionalConfigData
        //    zusätzliche Daten für File (hat jetzt aber nichts mit den eigentlichen Highchart Config String zu tun
        //    IN: $cfg
        //    OUT: der String welcher dann in das IPS_Template geschrieben wird.
        // ------------------------------------------------------------------------
        
    function ReadAdditionalConfigData($cfg)
        {
            
    DebugModuleName($cfg,"ReadAdditionalConfigData");

            
    // z.B.: Breite und Höhe für Container
            // Breite und Höhe anpassen für HTML Ausgabe
            
    $s['Theme'] = $cfg['HighChart']['Theme'];
            if (
    $cfg['HighChart']['Width'] == 0)
                
    $s['Width'] = "100%";
            else
                
    $s['Width'] = $cfg['HighChart']['Width']. "px";

            
    $s['Height'] = $cfg['HighChart']['Height']. "px";

            return 
    trim(print_r($strue), "Array\n()") ;
        }

    // ***************************************************************************************************************************

        // ------------------------------------------------------------------------
        // GetHighChartsCfgFile
        //    Falls nicht konfiguriert, wird dies als Default String genommen
        //    OUT: natürlich den String ....
        // ------------------------------------------------------------------------
        
    function GetHighChartsCfgFile($cfg)
        {
            
    DebugModuleName($cfg,"GetHighChartsCfgFile");

            
    $cfgArr['chart'] = CreateArrayForChart($cfg);

            if (isset(
    $cfg['colors']))
                
    $cfgArr['colors'] = $cfg['colors'];

            
    $cfgArr['credits'] = CreateArrayForCredits($cfg);

            if (isset(
    $cfg['global']))
                
    $cfgArr['global'] = $cfg['global'];

            if (isset(
    $cfg['labels']))
                
    $cfgArr['labels'] = $cfg['labels'];

            
    // $cfg['lang'])) werden seperat behandelt

            
    if (isset($cfg['legend']))
                
    $cfgArr['legend'] = $cfg['legend'];

            if (isset(
    $cfg['loading']))
                
    $cfgArr['loading'] = $cfg['loading'];

            if (isset(
    $cfg['plotOptions']))
                
    $cfgArr['plotOptions'] = $cfg['plotOptions'];

            
    $cfgArr['exporting'] = CreateArrayForExporting($cfg);

            if (isset(
    $cfg['symbols']))
                
    $cfgArr['symbols'] = $cfg['symbols'];

            
    $cfgArr['title'] = CreateArrayForTitle($cfg);
            
    $cfgArr['subtitle'] = CreateArrayForSubTitle($cfg);

            
    $cfgArr['tooltip'] = CreateArrayForTooltip($cfg);

            
    $cfgArr['xAxis'] = CreateArrayForXAxis($cfg);
            
    $cfgArr['yAxis'] = CreateArrayForYAxis($cfg);

            if (
    $cfg['Ips']['ChartType'] == 'Highstock')
            {
                if (isset(
    $cfg['navigator']))
                    
    $cfgArr['navigator'] = $cfg['navigator'];
                if (isset(
    $cfg['rangeSelector']))
                    
    $cfgArr['rangeSelector'] = $cfg['rangeSelector'];
                if (isset(
    $cfg['scrollbar']))
                    
    $cfgArr['scrollbar'] = $cfg['scrollbar'];
            }


            if (
    $cfg['Ips']['Debug']['ShowJSON'])
                
    DebugString(my_json_encode($cfgArr));

            
    $cfgArr['series'] = CreateArrayForSeries($cfg) ;

            if (
    $cfg['Ips']['Debug']['ShowJSON_Data'])
                
    DebugString(my_json_encode($cfgArr));

            
    // Array in JSON wandeln
            
    $s my_json_encode($cfgArr);

            
    // ersetzten des 'Param'-Parameters (Altlast aus V1.x)
            
    $s str_replace(",Param@@@:",",",$s);
            
    $s trim($s"{");
            
    $s .= ");";

            return 
    $s;
        }

        
    // ------------------------------------------------------------------------
        // GetHighChartsLangOptions
        //
        //    IN: $cfg
        //    OUT: JSON Options String für den Bereich 'lang'
        // ------------------------------------------------------------------------
        
    function GetHighChartsLangOptions($cfg)
        {
            
    DebugModuleName($cfg,"GetHighChartsLangOptions");

            
    // Default
            
    IfNotIssetSetValue($cfg['lang']['decimalPoint'], ",");
            
    IfNotIssetSetValue($cfg['lang']['thousandsSep'], ".");

            
    IfNotIssetSetValue($cfg['lang']['months'], ['Januar''Februar''März''April''Mai''Juni''Juli''August''September''Oktober''November''Dezember']);
            
    IfNotIssetSetValue($cfg['lang']['shortMonths'], ['Jan''Feb''Mär''Apr''Mai''Jun''Jul''Aug''Sep''Okt''Nov''Dez']);
            
    IfNotIssetSetValue($cfg['lang']['weekdays'], ['Sonntag''Montag''Dienstag''Mittwoch''Donnerstag''Freitag''Samstag']);

            
    $s "lang:" my_json_encode($cfg['lang']);

            return 
    $s;
        }


        
    // ------------------------------------------------------------------------
        // CreateArrayForSeries
        //
        //    IN: $cfg
        //    OUT: der String welcher dann in das IPS_Template geschrieben wird.
        // ------------------------------------------------------------------------
        
    function CreateArrayForSeries($cfg)
        {
            
    DebugModuleName($cfg,"CreateArrayForSeries");

            
    // Daten für einzelne Serien erzeugen
            
    $dataArr = array();
            foreach (
    $cfg['series'] as $Serie)
            {
                if (
    $Serie['Ips']['Type'] == 'pie')
                {
                    
    $Serie['data'] = CreateDataArrayForPie($cfg$Serie);
                }
                else
                {
                
    // Daten wurden von extern übergeben
                    
    if (isset($Serie['data']))
                    {
                        if (
    is_array($Serie['data']))
                            
    $Serie['data'] = CreateDataArrayFromExternalData($Serie['data'], $Serie);
                        else
                            
    $Serie['data'] = $Serie['data'];

                    }
                    
    // Daten werden aus DB gelesen
                    
    else
                        
    $Serie['data'] = ReadDataFromDBAndCreateDataArray($cfg$Serie);
                }

                
    // ... aus Serie umkopieren
                
    $serieArr $Serie;

                
    // nicht für JSON benötigte Parameter löschen
                
    unset($serieArr['Param']);
                unset(
    $serieArr['AggregatedValues']);
                unset(
    $serieArr['Unit']);
                unset(
    $serieArr['StartTime']);
                unset(
    $serieArr['EndTime']);
                unset(
    $serieArr['ReplaceValues']);
                unset(
    $serieArr['Ips']);
                unset(
    $serieArr['Offset']);
                unset(
    $serieArr['AggValue']);
                unset(
    $serieArr['AggType']);
                unset(
    $serieArr['AggNameFormat']);
                unset(
    $serieArr['ScaleFactor']);
                unset(
    $serieArr['RoundValue']);

                
    // ersetzten des 'Param'-Parameters (Altlast aus V1.x)
                
    if (isset($Serie['Param']))
                    
    $serieArr['Param@@@'] = "@" $Serie['Param'] . "@";

                
    $dataArr[] = $serieArr;
            }

            return 
    $dataArr;
        }

        
    // ------------------------------------------------------------------------
        // PopulateDate
        //
        //    IN: $dt
        //             $serie
        //    OUT: Date-Value für Data-String
        // ------------------------------------------------------------------------
        
    function PopulateDate($dt$serie)
        {
            if (
    $dt $serie['StartTime'])
                
    $dt $serie['StartTime'] ;

            
    // z.B.: Date.UTC(2011,4,27,19,42,19),23.4
            
    return  CreateDateUTC($dt $serie['Offset']);
        }

        
    // ------------------------------------------------------------------------
        // PopulateValue
        //
        //    IN: $val
        //             $serie
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function PopulateValue($val$serie)
        {
            
    // Werte ersetzten (sinnvoll für Boolean, oder Integer - z.B.: Tür/Fenster-Kontakt oder Drehgriffkontakt)
            
    if ($serie['ReplaceValues'] != false)
            {
                if (isset(
    $serie['ReplaceValues'][$val]))
                    
    $val $serie['ReplaceValues'][$val];
            }

            
    // Skalieren von Loggingdaten
            
    if (isset($serie['ScaleFactor']))
                
    $val $val $serie['ScaleFactor'];

            
    // Rounden von Nachkommastellen
            
    if (isset($serie['RoundValue']))
                
    $val round($val$serie['RoundValue']);


            return 
    $val;
        }

        
    // ------------------------------------------------------------------------
        // CreateDataArrayForPie
        //    Liest die aktuellen Werte aus den übergebenen Variablen und erzeugt die Daten für das PIE
        //    IN: $cfg, $Serie
        //    OUT: der Data String
        // ------------------------------------------------------------------------
        
    function CreateDataArrayForPie($cfg$serie)
        {
            
    DebugModuleName($cfg,"CreateDataArrayForPie");

            if (isset(
    $serie['Id']))
            {
                  return 
    ReadPieDataById($cfg$serie);
            }
            else if (isset(
    $serie['data']))
            {
                
    $result = array();
                foreach(
    $serie['data'] as $item)
                {
                   if (isset(
    $item['Id']))
                   {
                       
    $currentValue ReadCurrentValue($item['Id']);
                       
    $item['y'] = PopulateValue($currentValue['Value'], $serie) ;
                   }
                   
    $result[] = $item;
                }
                return 
    $result;
            }
            else
            {
               Die (
    "Abbruch - Pie-Definition nicht korrekt");
            }
            return 
    $Data;
        }

        
    // ------------------------------------------------------------------------
        // ReadPieDataById
        //    liest die Aggregated-Werte einer einer Vriablen aus und erzeugt das entsprechende Array
        //    IN: $cfg, $serie
        //    OUT: Config Array
        // ------------------------------------------------------------------------
        
    function ReadPieDataById($cfg$serie)
        {
            
    $id_AH $cfg['ArchiveHandlerId'];

            
    $tempData = @AC_GetAggregatedValues($id_AH$serie['Id'], $serie['AggType'], $serie['StartTime'], $serie['EndTime'], 0);
            
    $tempData array_reverse($tempData);

            
    $result = array();
            foreach (
    $tempData as $ValueItem)
           {
                
    $item['name'] = ReplaceToGermanDate(date($serie['AggNameFormat'], $ValueItem['TimeStamp']));
                
    $item['y'] = PopulateValue($ValueItem[$serie['AggValue']], $serie);
                
    $result[] = $item;
           }
           unset (
    $tempData);

           return 
    $result;
        }

        
    // ------------------------------------------------------------------------
        // CalculateStartAndEndTimeForAggreagtedValues
        //       Liest den Start- und Endzeitpunkt des angefragten Bereiches
        //    IN: $Serie, $search : "" für alle Werte, "Hour", "Day", usw
        //    OUT: Array(StartTime,EndTime)
        // ------------------------------------------------------------------------
        
    function CalculateStartAndEndTimeForAggreagtedValues($Serie$search ="")
        {
            
    $start = -1;        $ende = -1;
            
    $trap false;
            
    $sum 0;

            if (
    $search == "")
            {
               
    $search =="Values";
               
    $start 0;
               
    $trap true;
            }
            foreach(
    $Serie['AggregatedValues'] as $key => $value)
            {
                if (
    strrpos ($key"Values") != false)
                {
                    if (
    $value 0)
                        
    $sum += $value;

                    if (
    strrpos ($key$search) !== false)
                    {
                        
    $trap true;
                        if (
    $value == -1)
                           return 
    false;
                    }

                    if (!
    $trap)
                       continue;

                   if (
    $value 0)
                       continue;

                    if (
    $start == -1)
                    {
                        
    $start =  $sum;
                       continue;
                    }

                    if (
    $start != -&& $ende ==-1)
                    {
                        
    $ende =  $sum;
                        break;
                    }
                }
            }

            
    $result false;
            if (
    $start != -1)
            {
             
    $result["EndTime"] = $Serie["EndTime"] - $start;
                if (
    $ende == -1)
                  
    $result["StartTime"] = $Serie["StartTime"];
                else
                    
    $result["StartTime"] = $Serie["EndTime"] - $ende;

                if (
    $result["StartTime"] < $Serie["StartTime"])
                     
    $result["StartTime"] = $Serie["StartTime"];

                 if (
    $result["StartTime"] == $Serie["EndTime"])
                     
    $result false;
            }

            return 
    $result;
        }

        
    // ------------------------------------------------------------------------
        // ReadDataFromDBAndCreateDataArray
        //    Liest die Series-Daten aus der DB und schreibt sie in den DataString
        //    IN: $cfg, $Serie
        //    OUT: der Data String
        // ------------------------------------------------------------------------
        
    function ReadDataFromDBAndCreateDataArray($cfg$Serie)
        {
            
    DebugModuleName($cfg,"ReadDataFromDBAndCreateDataArray");

            if (!isset(
    $Serie['Id']))
               return 
    "";

            
    // errechne die Zeitspanne
            
    if ($Serie['EndTime'] > time())
                
    $Diff time() - $Serie['StartTime'];
            else
                
    $Diff $Serie['EndTime'] - $Serie['StartTime'];



            
    $Id_AH $cfg['ArchiveHandlerId'];
            
    $dataArray = array();
            
    $VariableId = (int)$Serie['Id'];
            
    $Agg = -1;
            
    $ReadCurrentValue true;

            
    // wenn ReplaceValues definiert wurden werden nur geloggte und keine Aggregated Werte gelesen
            
    if ($Serie['ReplaceValues'] != false)
            {
                if (
    $Diff $Serie['AggregatedValues']['NoLoggedValues'])
                {
                    
    $Serie['StartTime'] = $Serie['EndTime'] - $Serie['AggregatedValues']['NoLoggedValues'];
                }

                
    // Einzelwerte lesen
               
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId, -$Serie["StartTime"], $Serie["EndTime"], "Value"$Serie);
            }
            else if (
    $Serie['AggregatedValues']['MixedMode'])    // im MixedMode werden anfangs alle Werte, dann die Stunden- und zuletzt Tageswerte ausgelesen
            
    {
                
    // zuerst Einzelwerte
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie"");
                if (
    $result != false)
                {
                    if (
    $Serie['Ips']['IsCounter'])                         // wenn Zähler dann immer Agg.Values
                        
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId0$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);
                    else
                      
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId, -$result["StartTime"], $result["EndTime"], "Value"$Serie);
                }

                
    // -> Stundenwerte
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie,"Hour");
                if (
    $result != false)
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId0$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);

                
    // -> Tageswerte
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie,"Day");
                if (
    $result != false)
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId1$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);

                
    // -> Wochenwerten
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie,"Week");
                if (
    $result != false)
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId2$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);

                
    // -> Monatswerte
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie,"Month");
                if (
    $result != false)
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId3$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);

                
    // -> Jahreswerte
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie,"Year");
                if (
    $result != false)
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId4$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);
            }
            else
            {
                
    $Agg = -1;    // ->  AC_GetLoggedValues

             
    if  (isset($Serie['AggType']))   // wenn 'AggType' definiert wurde, wird dies vorrangig bearbeitet
             
    {
                 
    $Agg $Serie['AggType'];
             }
                elseif (
    $Serie['AggregatedValues']['YearValues']!= -&& $Diff $Serie['AggregatedValues']['YearValues'])
                    
    $Agg 4;    //  -> AC_GetAggregatedValues [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]
                
    elseif ($Serie['AggregatedValues']['MonthValues']!= -&& $Diff $Serie['AggregatedValues']['MonthValues'])
                    
    $Agg 3;    //  -> AC_GetAggregatedValues [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]
                
    elseif ($Serie['AggregatedValues']['WeekValues']!= -&& $Diff $Serie['AggregatedValues']['WeekValues'])
                    
    $Agg 2;    //  -> AC_GetAggregatedValues [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]
                
    elseif ($Serie['AggregatedValues']['DayValues']!= -&& $Diff $Serie['AggregatedValues']['DayValues'])
                    
    $Agg 1;    //  -> AC_GetAggregatedValues [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]
                
    else if ($Serie['AggregatedValues']['HourValues']!= -&& $Diff $Serie['AggregatedValues']['HourValues'])
                    
    $Agg 0;    //  -> AC_GetAggregatedValues [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]

                // es wurde noch nichts definiert und es handelt sich um einen Zähler --> Tageswerte
             
    if ($Agg == -&& $Serie['Ips']['IsCounter'])
                 
    $Agg 0;

                if (
    $Agg == -1)
                {
                    
    // Zeitraum ist zu groß -> nur bis max. Zeitraum einlesen
                    
    if ($Diff $Serie['AggregatedValues']['NoLoggedValues'])
                        
    $Serie['StartTime'] = $Serie['EndTime'] - $Serie['AggregatedValues']['NoLoggedValues'];

                    
    // Alle Werte
                   
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId, -$Serie["StartTime"], $Serie["EndTime"], "Value"$Serie);
                }
                else
                {
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId$Agg$Serie["StartTime"], $Serie["EndTime"], $Serie['AggValue'], $Serie);
                    
    $ReadCurrentValue false;
                }
            }

            
    // sortieren, so , dass der aktuellste Wert zuletzt kommt
            
    $dataArray array_reverse($dataArray);

            
    // aktuellen Wert der Variable noch in Array aufnehmen
            
    if ($ReadCurrentValue
                
    && $Serie['EndTime'] >= time()                // nicht wenn Endzeitpunkt vor NOW ist
                
    && !$Serie['Ips']['IsCounter'])                // nicht bei Zählervariablen
                
    {
                    
    $curValue ReadCurrentValue($VariableId);
                    
    $dataArray[] = CreateDataItem($curValue['TimeStamp'], $curValue['Value'], $Serie);
                }


            return 
    $dataArray ;
        }

        
    // ------------------------------------------------------------------------
        // ReadCurrentValue
        //    IN: $VariableId
        //    OUT: Aktueller Wert
        // ------------------------------------------------------------------------
        
    function ReadCurrentValue($variableId)
        {
            
    $currentVal['Value']= GetValue($variableId);
            
    $currentVal['TimeStamp'] = time();

            return 
    $currentVal;
        }

        
    // ------------------------------------------------------------------------
        // ReadAndAddToLoggedData
        //    IN: siehe Parameter
        //    OUT: Vervollständigte Logged Data
        // ------------------------------------------------------------------------
        
    function ReadAndAddToLoggedData($loggedData$id_AH$variableId$aggType$startTime$endTime$aggValueName$serie)
        {
            
    $cfg['Ips']['Debug']['Modules'] = true;

            if (
    $aggType >= 0)
                
    $tempData = @AC_GetAggregatedValues($id_AH$variableId$aggType$startTime$endTime0);
            else
                
    $tempData = @AC_GetLoggedValuesCompatibility($id_AH$variableId$startTime$endTime);

           foreach (
    $tempData as $item)
           {
                
    $loggedData[] = CreateDataItem($item['TimeStamp'], $item[$aggValueName], $serie);
           }

           unset (
    $tempData);

            return 
    $loggedData;
        }

        function 
    CreateDataItem($dt$val$serie)
        {
            
    // Wert anpassen (Round, Scale)
            
    $val PopulateValue($val$serie);

            
    // z.B.: Date.UTC(2011,4,27,19,42,19),23.4
            
    $dtUTC PopulateDate($dt$serie);

            return array(
    "@$dtUTC@"$val);
        }

        
    // ------------------------------------------------------------------------
        // CreateDataArrayFromExternalData
        //    Umwandeln der externen Daten in ein Daten Array
        //    IN: $arr = Aus IPS-Datenbank ausgelesenen Daten (LoggedData)
        //        $Serie = Config Daten der aktuellen Serie
        //    OUT: Highcharts ConfigString für Series-Data
        // ------------------------------------------------------------------------
        
    function CreateDataArrayFromExternalData($arr$Serie)
        {
            
    $result = array();
            foreach(
    $Serie['data'] as $item)
            {
                if (
    is_array($item))
                {
                   if (isset(
    $item['TimeStamp']) && !isset($item['x']))
                   {
                       
    $item['x'] = "@" PopulateDate($item['TimeStamp'], $Serie) . "@";
                       unset(
    $item['TimeStamp']);
                   }
                   if (isset(
    $item['Value']) && !isset($item['y']))
                   {
                       
    $item['y'] = $item['Value'];
                       unset(
    $item['Value']);
                   }
                   if (isset(
    $item['y']))
                        
    $item['y'] = PopulateValue($item['y'], $Serie);

                   
    $result[] = $item;
               }
                else
                    
    $result[] = $item;
            }

            return 
    $result;
        }

        
    // ------------------------------------------------------------------------
        // CreateTooltipFormatter
        //    Auslesen von immer wieder benötigten Werten aus der Variable
        //    IN: $cfg = Alle Config Daten
        //    OUT: Highcharts ConfigString für Tooltip-Formatter (Interaktive Anzeige des Wertes)
        // ------------------------------------------------------------------------
        
    function CreateTooltipFormatter($cfg)
        {
            
    DebugModuleName($cfg,"CreateTooltipFormatter");

            
    //ToDo: da sollten wir etwas lesbarer arbeiten
            
    $s "";
            
    $offset ="";

            foreach (
    $cfg['series'] as $Serie )
            {
                if (
    $Serie['Ips']['Type'] == 'pie')
                {
                    if (isset(
    $Serie['data']))
                    {
                        
    $s .= "[";
                        foreach(
    $Serie['data'] as $data)
                        {
                            
    $unit = @$Serie['Unit'];
                            if (isset(
    $data['Unit']))
                                
    $unit $data['Unit'];

                            
    $s .= "this.y +' " $unit "',";
                        }
                        
    $s trim($s,",");
                        
    $s .= "][this.point.x],";
                    }
                    else
                    {
                        
    $unit = @$Serie['Unit'];
                        
    $s .= "[this.y + ' " $unit "'],";
                    }
                    
    $offset .= "0,";  // pies haben nie einen Offset
                
    }
                else
                {
                   
    // hier wird das VariableCustomProfile aus IPS übernommen
                   
    if (!isset($Serie['Unit']))
                    {
                        
    // hole das Variablen Profil
                        
    $IPSProfil = @GetIPSVariableProfile($Serie['Id']);
                        if (
    $IPSProfil != false)
                        {
                            if (
    array_key_exists("Associations",$IPSProfil) && count($IPSProfil['Associations'])>0)
                            {
                                
    $Arr = array();
                                foreach(
    $IPSProfil['Associations'] as $Item)
                                {
                                   
    $Arr[$Item['Value']] = $Item['Name'];
                                }

                                if (!
    is_array($Serie['ReplaceValues']))         // erzeuge Tooltips vollständig aus VariablenProfil
                                    
    $s .= CreateTooltipSubValues($Arrarray_keys($Arr));
                                else                                                          
    // oder nehme ReplaceValues zur Hilfe
                                    
    $s .= CreateTooltipSubValues($Arr$Serie['ReplaceValues']);
                            }
                            else
                            {
                                
    // Suffix als Einheit übernehmen
                                
    $Serie['Unit'] = trim($IPSProfil['Suffix'], " ");
                                
    $s .= "[this.y + ' "$Serie['Unit']."'],";
                            }
                        }
                        else  
    // falls VariablenId nicht existiert
                        
    {
                            
    $s .= "[this.y ],";
                        }
                    }
                    
    // es wurden Unit und ReplaceValues übergeben
                    
    else if (is_array($Serie['Unit']) && is_array($Serie['ReplaceValues']))
                    {
                        
    $s .= CreateTooltipSubValues($Serie['Unit'],$Serie['ReplaceValues']);
                    }
                    else        
    // Einheit aus übergebenem Parmeter Unit
                    
    {
                      
    $s .= "[this.y + ' "$Serie['Unit']."'],";
                  }
                    
    $offset .= $Serie['Offset'] . ",";
              }

            }

            
    $s trim($s "," );
            
    $offset trim($offset "," );

            
    //*1000 da JS in [ms] angebgeben wird un php in [s]
    /*        $TooltipString="function() {
                                    var serieIndex = this.series.index;

                                    if (this.series.type == 'pie')
                                    {
                                   var pointIndex = this.point.x;
                                          var unit = [".$s. "][serieIndex][pointIndex];

                                          if (!unit)
                                          unit = [".$s. "][serieIndex][0];

                                        return '<b>' + this.point.name +': </b> '+ unit +'<br/>= ' + this.percentage.toFixed(1) + ' %';
                                      }
                                    else
                               {
                                   var pointIndex = 0;
                                          var unit = [".$s. "][serieIndex][pointIndex];
                                        var offset = [".$offset. "][serieIndex] * 1000;

                                        var offsetInfo ='';
                                        if (offset != 0)
                                            offsetInfo = '<br/>(Achtung Zeitwert hat einen Offset)';
                                        else
                                            offsetInfo ='';

                                        return '<b>' + this.series.name + ': </b> '+ unit + '<br/>'
                                            + Highcharts.dateFormat('%A %d.%m.%Y %H:%M', this.x - offset)
                                            + offsetInfo;


                                    }
                            } ";
    */
            
    $TooltipString="function() {
                                    var serieIndex = this.series.index;
                                    var unit = ["
    .$s"][serieIndex];
                                    var offset = ["
    .$offset"][serieIndex] * 1000;
                                    var offsetInfo ='';

                                    if (offset != 0)
                                        offsetInfo = '<br/>(Achtung Zeitwert hat einen Offset)';
                                    else
                                        offsetInfo ='';

                                    if (this.series.type == 'pie')
                                    {
                                        return '<b>' + this.point.name +': </b> '+ unit +'<br/>= ' + this.percentage.toFixed(1) + ' %';
                                      }
                                    else
                               {
                                        return '<b>' + this.series.name + ': </b> '+ unit + '<br/>'
                                            + Highcharts.dateFormat('%A %d.%m.%Y %H:%M', this.x - offset)
                                            + offsetInfo;
                                    }
                            } "
    ;



            return 
    $TooltipString;
        }

        
    // ------------------------------------------------------------------------
        // CreateTooltipSubValues
        //    Erzeugt den Tooltip für Unter-Elemente
        //    IN: shownTooltipArr = Array der Werte (Synonyme) welche im Tooltip angezeigt werden sollen
        //        chartValueArr = Array der Werte welche im Chart eingetragen werden
        //    OUT: Tooltip String
        // ------------------------------------------------------------------------
        
    function CreateTooltipSubValues($shownTooltipArr$chartValueArr)
        {
            
    $s="{";
            
    $Count count($shownTooltipArr);
            for (
    $i 0$i $Count $i++)
            {
                if (isset(
    $chartValueArr[$i]) && isset($shownTooltipArr[$i]))
                   
    $s .= $chartValueArr[$i] .": '" $shownTooltipArr[$i] ."'," ;
            }
            
    $s trim($s",") . "}";

            return 
    $s ."[this.y],";
        }

        
    // ------------------------------------------------------------------------
        // GetIPSVariableProfile
        //    Liest das Variablen Profil der übergeben Variable aus
        //    Versucht zuerst das eigene und wenn nicht verfügbar das Standar Profil auszulesen
        //    IN: variableId = Id der Variablen
        //    OUT: Variablen Profil
        // ------------------------------------------------------------------------
        
    function GetIPSVariableProfile($variableId)
        {
            
    $var = @IPS_GetVariable($variableId);
            if (
    $var == false// Variabel existiert nicht
               
    return false;

            
    $profilName $var['VariableCustomProfile'];     // "Eigenes Profil"

            
    if ($profilName == false)                         // "Standard" Profil
                
    $profilName $var['VariableProfile'];

            if (
    $profilName != false)
                return 
    IPS_GetVariableProfile($profilName);  // und jetzt die dazugehörigen Daten laden
            
    else
                return 
    false;
        }



        
    // ------------------------------------------------------------------------
        // CreateArrayForChart
        //
        //    IN: $cfg
        //    OUT: Config Array für den Bereich 'chart'
        // ------------------------------------------------------------------------
        
    function CreateArrayForChart($cfg)
        {
            if (!isset(
    $cfg['chart']))
                
    $cfg['chart'] = array();

            
    //Default
            
    IfNotIssetSetValue($cfg['chart']['renderTo'], "container");
            
    IfNotIssetSetValue($cfg['chart']['zoomType'], "xy");

            return 
    $cfg['chart'];
        }

        
    // ------------------------------------------------------------------------
        // CreateArrayForCredits
        //
        //    IN: $cfg
        //    OUT: Config Array für den Bereich 'credits'
        // ------------------------------------------------------------------------
        
    function CreateArrayForCredits($cfg)
        {
            if (!isset(
    $cfg['credits']))
                
    $cfg['credits'] = array();

            
    //Default
            
    IfNotIssetSetValue($cfg['credits']['enabled'], false);

            return 
    $cfg['credits'];
        }

        
    // ------------------------------------------------------------------------
        // CreateArrayForTitle
        //
        //    IN: $cfg
        //    OUT: Config Array für den Bereich 'title'
        // ------------------------------------------------------------------------
        
    function CreateArrayForTitle($cfg)
        {
            if (!isset(
    $cfg['title']))
                
    $cfg['title'] = array();

            return 
    $cfg['title'];
        }

        
    // ------------------------------------------------------------------------
        // CreateArrayForExporting
        //
        //    IN: $cfg
        //    OUT: Config Array für den Bereich 'exporting'
        // ------------------------------------------------------------------------
        
    function CreateArrayForExporting($cfg)
        {
            if (!isset(
    $cfg['exporting']))
                
    $cfg['exporting'] = array();

            
    //Default
            
    IfNotIssetSetValue($cfg['exporting']['buttons']['printButton']['enabled'], false);

            return 
    $cfg['exporting'];
        }

        
    // ------------------------------------------------------------------------
        // CreateArrayForTooltip
        //
        //    IN: $cfg
        //    OUT: Config Array für den Bereich 'tooltip'
        // ------------------------------------------------------------------------
        
    function CreateArrayForTooltip($cfg)
        {
            if (!isset(
    $cfg['tooltip']))
                
    $cfg['tooltip'] = array();

            
    //Default
            // wenn not isset -> autom. erzeugen durch IPS
            
    if (!isset($cfg['tooltip']['formatter']))
               
    $cfg['tooltip']['formatter'] = "@" CreateTooltipFormatter($cfg) . "@";
            
    // wenn "" -> default by highcharts
            
    else if ($cfg['tooltip']['formatter'] == "")
            {
               
    // do nothing
            
    }

            return 
    $cfg['tooltip'];
        }

        
    // ------------------------------------------------------------------------
        // CreateArrayForSubTitle
        //
        //    IN: $cfg
        //    OUT: Config Array für den Bereich subtitle
        // ------------------------------------------------------------------------
        
    function CreateArrayForSubTitle($cfg)
        {
            if (!isset(
    $cfg['subtitle']))
                
    $cfg['subtitle'] = array();

            
    //Default
            
    IfNotIssetSetValue($cfg['subtitle']['text'], "Zeitraum: %STARTTIME% - %ENDTIME%");
            
    IfNotIssetSetValue($cfg['subtitle']['Ips']['DateTimeFormat'], "(D) d.m.Y H:i");

            
    $s $cfg['subtitle']['text'];
            
    $s str_ireplace("%STARTTIME%"date($cfg['subtitle']['Ips']['DateTimeFormat'], $cfg['Ips']['ChartStartTime']), $s);
            
    $s str_ireplace("%ENDTIME%"date($cfg['subtitle']['Ips']['DateTimeFormat'], $cfg['Ips']['ChartEndTime']), $s);
            
    $cfg['subtitle']['text'] = ReplaceToGermanDate($s);

            unset(
    $cfg['subtitle']['Ips']);

            return 
    $cfg['subtitle'];
        }
        
    // ------------------------------------------------------------------------
        // CreateArrayForXAxis
        //    Erzeugen das ArrX-Achsen Strings für Highchart-Config
        //    IN: $cfg
        //       es besteht die Möglichkeit den Achsen String bereits im Highchart Format zu hinterlegen
        //       oder die folgenden Parameter als Array einzustellen: Name, Min, Max, TickInterval, Opposite, Unit
        //    OUT: Highcharts String für die Achsen
        // ------------------------------------------------------------------------
        
    function CreateArrayForXAxis($cfg)
        {
            if (!isset(
    $cfg['xAxis']))
                
    $cfg['xAxis'] = array();

            
    //Default
            
    IfNotIssetSetValue($cfg['xAxis']['type'], "datetime");
            
    IfNotIssetSetValue($cfg['xAxis']['dateTimeLabelFormats']['second'], "%H:%M:%S");
            
    IfNotIssetSetValue($cfg['xAxis']['dateTimeLabelFormats']['minute'], "%H:%M");
            
    IfNotIssetSetValue($cfg['xAxis']['dateTimeLabelFormats']['hour'], "%H:%M");
            
    IfNotIssetSetValue($cfg['xAxis']['dateTimeLabelFormats']['day'], "%e. %b");
            
    IfNotIssetSetValue($cfg['xAxis']['dateTimeLabelFormats']['week'], "%e. %b");
            
    IfNotIssetSetValue($cfg['xAxis']['dateTimeLabelFormats']['month'], "%b %y");
            
    IfNotIssetSetValue($cfg['xAxis']['dateTimeLabelFormats']['year'], "%Y");

            
    IfNotIssetSetValue($cfg['xAxis']['allowDecimals'], false);

            if (isset(
    $cfg['xAxis']['min']) && $cfg['xAxis']['min'] == false)
                unset(
    $cfg['xAxis']['min']);
            else
                
    IfNotIssetSetValue($cfg['xAxis']['min'], "@" CreateDateUTC($cfg['Ips']['ChartStartTime']) ."@");

            if (isset(
    $cfg['xAxis']['max']) && $cfg['xAxis']['max'] == false)
                unset(
    $cfg['xAxis']['max']);
            else
                
    IfNotIssetSetValue($cfg['xAxis']['max'], "@" CreateDateUTC($cfg['Ips']['ChartEndTime'])."@");



            return 
    $cfg['xAxis'];
        }

        
    // ------------------------------------------------------------------------
        // CreateArrayForYAxis
        //    Erzeugen der Y-Achsen Strings für Highchart-Config
        //    IN: $cfg
        //       es besteht die Möglichkeit den Achsen String bereits im Highchart Format zu hinterlegen
        //       oder die folgenden Parameter als Array einzustellen: Name, Min, Max, TickInterval, Opposite, Unit
        //    OUT: Highcharts String für die Achsen
        // ------------------------------------------------------------------------
        
    function CreateArrayForYAxis($cfg)
        {
            if (!isset(
    $cfg['yAxis']))
                return 
    null;

            
    $result = array();

            foreach (
    $cfg['yAxis'] as $Axis )
            {
                
    // erst mal alles kopieren
                
    $cfgAxis $Axis;

                if (!isset(
    $cfgAxis['labels']['formatter']) && isset($Axis['Unit']))
                    
    $cfgAxis['labels']['formatter'] ="@function() { return this.value +' "$Axis['Unit']."'; }@";

              
    $result[] = $cfgAxis;
            }

            return 
    $result;
        }

        
    // ------------------------------------------------------------------------
        // CreateDateUTC
        //    Erzeugen des DateTime Strings für Highchart-Config
        //    IN: $timeStamp = Zeitstempel
        //    OUT: Highcharts DateTime-Format als UTC String ... Date.UTC(1970, 9, 27, )
        //       Achtung! Javascript Monat beginnt bei 0 = Januar
        // ------------------------------------------------------------------------
        
    function CreateDateUTC($timeStamp)
        {
            
    $monthForJS = ((int)date("m"$timeStamp))-;    // Monat -1 (PHP->JS)
            
    return "Date.UTC(" date("Y,"$timeStamp) .$monthForJSdate(",j,H,i,s"$timeStamp) .")";
        }

        
    // ------------------------------------------------------------------------
        // ReplaceToGermanDate
        //    Falls nicht konfiguriert, wird dies als Default String genommen
        //    IN: String mit englischen Wochentagen, bzw. Monaten
        //    OUT: der String übersetzt ins Deutsche
        // ------------------------------------------------------------------------
        
    function ReplaceToGermanDate($value)
        {
                
    $trans = array(
                    
    'Monday'    => 'Montag',
                    
    'Tuesday'   => 'Dienstag',
                    
    'Wednesday' => 'Mittwoch',
                    
    'Thursday'  => 'Donnerstag',
                    
    'Friday'    => 'Freitag',
                    
    'Saturday'  => 'Samstag',
                    
    'Sunday'    => 'Sonntag',
                    
    'Mon'       => 'Mo',
                    
    'Tue'       => 'Di',
                    
    'Wed'       => 'Mi',
                    
    'Thu'       => 'Do',
                    
    'Fri'       => 'Fr',
                    
    'Sat'       => 'Sa',
                    
    'Sun'       => 'So',
                    
    'January'   => 'Januar',
                    
    'February'  => 'Februar',
                    
    'March'     => 'März',
                    
    'May'       => 'Mai',
                    
    'June'      => 'Juni',
                    
    'July'      => 'Juli',
                    
    'October'   => 'Oktober',
                    
    'December'  => 'Dezember',
                    
    'Mar'          => 'Mär',
                    
    'May'       => 'Mai',
                    
    'Oct'        => 'Okt',
                    
    'Dec'           => 'Dez',
            );
            return  
    strtr($value$trans);
        }


        
    // ------------------------------------------------------------------------
        // my_json_encode
        //
        //    IN: PHP-Array
        //    OUT: JSON String
        // ------------------------------------------------------------------------
        
    function my_json_encode($cfgArr)
        {
            
    array_walk_recursive($cfgArr"CheckArrayItems");

            
    $s json_encode($cfgArr);

            
    // alle " entfernen
            
    $s str_replace('"''',$s);

            
    // Zeilenumbruch, Tabs, etc entfernen ... bin mir nicht so sicher ob das so gut ist
            
    $s RemoveUnsupportedStrings($s);

            return 
    $s;
        }

        
    // ------------------------------------------------------------------------
        // CheckArrayItems
        //
        //    IN: Array-Item
        //    OUT:
        // ------------------------------------------------------------------------
        
    function CheckArrayItems(&$item)
        {
            if (
    is_string($item))
            {
                if (
    $item == "@" || $item == "@@" )
                {
                    
    $item "'" $item "'";
                }
                else if ((
    substr($item,0,1) == "@" && substr($item,-1) == "@"))
                {
                    
    $item trim($item"@");
                }
    /*            else if ((substr($item,0,1) == "$" && substr($item,-1) == "$"))
                {

                    $item = trim($item, "$");
                }*/
                
    else
                {
                    
    $item "'" trim($item"'") . "'";
                }
                
    $item utf8_encode($item);

            }
        }

        
    // ------------------------------------------------------------------------
        // RemoveUnsupportedStrings
        //    Versuchen Sonderzeichen wie Zeilenumbrüche, Tabs, etc. aus dem übergebenen String zu entfernen
        //    IN: $str
        //    OUT: $str
        // ------------------------------------------------------------------------
        
    function RemoveUnsupportedStrings($str)
        {

            
    $str str_replace("\\t","",$str);
            
    $str str_replace("\\n","",$str);
            
    $str str_replace("\\r","",$str);
            
    $str str_ireplace("\\\u00","\\u00",$str);  // da muss man nochmals checken
            
    $str str_replace("\\\\","",$str);

            return 
    $str;
        }

        
    // ------------------------------------------------------------------------
        // IfNotIssetSetValue
        //    pfüft ob isset($item), wenn nicht wird $value in &$item geschrieben
        //    IN: &$item, $value
        //    OUT: &$item
        // ------------------------------------------------------------------------
        
    function IfNotIssetSetValue(&$item$value )
        {
            if (!isset(
    $item)
                || (
    is_string($item) && $item == ""))   // zusätzliche Abfrage in 2.01
            
    {
                
    $item $value;
                return 
    false;
            }

            return 
    true;
        }

        
    // ------------------------------------------------------------------------
        // getmicrotime
        //
        //    IN:
        //    OUT:
        // ------------------------------------------------------------------------
        
    function getmicrotime($short false)
        {
           list(
    $usec,$sec)=explode(" "microtime());

            if (
    $short )
              return (float)
    $usec + (float)substr($sec,-1);
            else
               return (float)
    $usec + (float)$sec;
        }

        
    // ------------------------------------------------------------------------
        // DebugString
        //
        //    IN:
        //    OUT:
        // ------------------------------------------------------------------------
        
    function DebugString($str)
        {
           
    $s RemoveUnsupportedStrings($str);
           echo 
    $s;
        }

        
    // ------------------------------------------------------------------------
        // DebugModuleName
        //
        //    IN:
        //    OUT:
        // ------------------------------------------------------------------------
        
    function DebugModuleName($cfg$name)
        {
            if (isset(
    $cfg['Ips']['Debug']['Modules']) && $cfg['Ips']['Debug']['Modules'])
            {
                global 
    $IPS_SENDER$version$versionDate;

               
    IPS_LogMessage($IPS_SENDER ." - " .getmicrotime(true) , "Highcharts $version ($versionDate) - $name");
             }
        }


        function 
    AC_GetLoggedValuesCompatibility($instanceID$variableID$startTime$endTime$limit) {
        
    $values AC_GetLoggedValues($instanceID$variableID$startTime$endTime$limit );
        if((
    sizeof($values) == 0) || (end($values)['TimeStamp'] > $startTime)) {
            
    $previousRow AC_GetLoggedValues($instanceID$variableID0$startTime 1);
            
    $values array_merge($values$previousRow);
        }
        return 
    $values;
    }

    ?>
    hier das ips.js:
    PHP-Code:
    /**
     * IPS theme for Highcharts JS
     * @author sanman
     */

    Highcharts.theme = {
        
    colors: ["#DDDF0D""#7798BF""#55BF3B""#DF5353""#aaeeee""#ff0066""#eeaaee"
            
    "#55BF3B""#DF5353""#7798BF""#aaeeee"],
        
    chart: {
            
    backgroundColor'transparent',
            
    borderWidth0,
            
    borderRadius0,
            
    plotBackgroundColornull,
            
    plotShadowfalse,
            
    plotBorderWidth0
        
    },
        
    title: {
            
    style: { 
                
    color'#FFF',
                
    font'16px Arial, sans-serif'
            
    }
        },
        
    subtitle: {
            
    style: { 
                
    color'#DDD',
                
    font'12px Arial, sans-serif'
            
    }
        },
        
    xAxis: {
            
    gridLineWidth0,
            
    lineColor'#999',
            
    tickColor'#999',
            
    labels: {
                
    style: {
                    
    color'#999',
                    
    fontWeight'bold'
                
    }
            },
            
    title: {
                
    style: {
                    
    color'#AAA',
                    
    font'bold 12px Arial, sans-serif'
                
    }                
            }
        },
        
    yAxis: {
            
    alternateGridColornull,
            
    minorTickIntervalnull,
            
    gridLineColor'rgba(255, 255, 255, .1)',
            
    lineWidth0,
            
    tickWidth0,
            
    labels: {
                
    style: {
                    
    color'#999',
                    
    fontWeight'bold'
                
    }
            },
            
    title: {
                
    style: {
                    
    color'#AAA',
                    
    font'bold 12px Arial, sans-serif'
                
    }                
            }
        },
        
    legend: {
            
    itemStyle: {
                
    color'#CCC'
            
    },
            
    itemHoverStyle: {
                
    color'#FFF'
            
    },
            
    itemHiddenStyle: {
                
    color'#333'
            
    }
        },
        
    labels: {
            
    style: {
                
    color'#CCC'
            
    }
        },
        
    tooltip: {
            
    backgroundColor: {
                
    linearGradient: [00050],
                
    stops: [
                    [
    0'rgba(96, 96, 96, .8)'],
                    [
    1'rgba(16, 16, 16, .8)']
                ]
            },
            
    borderWidth0,
            
    style: {
                
    color'#FFF'
            
    }
        },
        
        
        
    plotOptions: {
            
    line: {
                
    dataLabels: {
                    
    color'#CCC'
                
    },
                
    marker: {
                    
    lineColor'#333'
                
    }
            },
            
    spline: {
                
    marker: {
                    
    lineColor'#333'
                
    }
            },
            
    scatter: {
                
    marker: {
                    
    lineColor'#333'
                
    }
            }
        },
        
        
    toolbar: {
            
    itemStyle: {
                
    color'#CCC'
            
    }
        },
        
        
    navigation: {
            
    buttonOptions: {
                
    backgroundColor: {
                    
    linearGradient: [00020],
                    
    stops: [
                        [
    0.4'#606060'],
                        [
    0.6'#333333']
                    ]
                },
                
    borderColor'#000000',
                
    symbolStroke'#C0C0C0',
                
    hoverSymbolStroke'#FFFFFF'
            
    }
        },
        
        
    exporting: {
            
    buttons: {
                
    exportButton: {
                    
    symbolFill'#55BE3B'
                
    },
                
    printButton: {
                    
    symbolFill'#7797BE'
                
    }
            }
        },    
        
        
    // special colors for some of the demo examples
        
    legendBackgroundColor'rgba(48, 48, 48, 0.8)',
        
    legendBackgroundColorSolid'rgb(70, 70, 70)',
        
    dataLabelsColor'#444',
        
    textColor'#E0E0E0',
        
    maskColor'rgba(255,255,255,0.3)'
    };

    // Apply the theme
    var highchartsOptions Highcharts.setOptions(Highcharts.theme); 
    und das IPS_Template.php:
    PHP-Code:
    <?php 
        
    // ab IPS-Highcharts Script V2.0000         
        // 07.05.2012     geändert auf jquery/1.7.2
        
        
    if (!isset($_GET['CfgFile'])) 
          { 
           
    $CfgFile false
          } 
       else 
          { 
           
    $CfgFile $_GET['CfgFile']; 
          } 

       if (!isset(
    $_GET['ScriptId'])) 
          { 
           
    $iScriptId false
          } 
       else 
          { 
           
    $iScriptId = (int)$_GET['ScriptId']; 
          } 

        
        
    // ScriptId wurde übergeben -> aktuelle Daten werden geholt
        
    if ($iScriptId != false)
        {
            
    $ConfigScript=IPS_GetScript($iScriptId);      // Id des Config Scripts
        
            
    include_once(IPS_GetKernelDir() . "scripts/" .$ConfigScript['ScriptFile']);
            global 
    $sConfig;
            
    //$sConfig = IPS_RunScriptWait($iScriptId);
            
    $s utf8_encode($sConfig);    
            
        }
        
    // Filename würde übergeben -> Daten aus Datei lesen
        
    else if ($CfgFile != false)
        {
            
    // prüfen ob übergeben Datei existiert
            
    if (!file_exists($CfgFile))
            {
                echo 
    "Datei '$CfgFile' nicht vorhanden!!!";
                return;
            }

            
    // file vorhanden -> einlesen
            
    $handle fopen($CfgFile,"r");
            
    $s ="";
            while (!
    feof($handle))
            {
                
    $s .= fgets($handle);
            }
            
    fclose($handle);
            
    $s utf8_encode($s);    
        }
        else
        {
            echo 
    "Achtung! Fehlerhafte Parameter CfgFile bzw ScriptId";
            return;
        }
        
        
    // Bereiche splitten -> erster Teil sind diverse Config Infos, zweiter Teik sind die Daten für Highcharts
        
    $s explode("|||" $s);
        
        if (
    count($s) >= 2)
        {
            
    $TempString trim($s[0],"\n ");
            
    $JavaScriptConfigForHighchart $s[1];    
            
            
    $LangOptions="lang: {}";
            if (
    count($s) > 2)
                
    $LangOptions trim($s[2],"\n ");
            
            
    // aus den Daten ein schönes Array machen
            
    $TempStringArr explode("\n"$TempString);
            foreach(
    $TempStringArr as $Item)
            {
                
    $KeyValue explode("=>"$Item);
                
    $AdditionalConfigData[trim($KeyValue[0]," []")] = trim($KeyValue[1]," ");
            }
            
            
    // Verzeichnis + Theme
            
    if ($AdditionalConfigData['Theme'] != '')
                
    $AdditionalConfigData['Theme']= 'js/themes/' $AdditionalConfigData['Theme'];

            
    //$AdditionalConfigData["Height"]="1200px";
            //$AdditionalConfigData["Width"]="600px";

                
        
    }
    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            <title>Highcharts</title>
            
            <!-- 1. Add these JavaScript inclusions in the head of your page -->
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
            <!-- wenn lokal vorhanden .... <script type="text/javascript" src="jquery/1.7.2/jquery.js"></script> -->
            <script type="text/javascript" src="js/highcharts.js"></script>
            
            <!-- 1a) add a theme file -->
            <script type="text/javascript" src="<?php echo $AdditionalConfigData['Theme'?>"></script>
                
            <!-- 1b) the exporting module -->
            <script type="text/javascript" src="js/modules/exporting.js"></script>
            
            <!-- 2. Add the JavaScript to initialize the chart on document ready -->
            
            <script type="text/javascript">

            var chart;
                Highcharts.setOptions({<?php echo $LangOptions?>});
                    
                $(document).ready(function() {
                    chart = new Highcharts.Chart({<?php echo $JavaScriptConfigForHighchart?>});

            </script>
        </head>
            
        <body>
        
            <!-- 3. Add the container -->
            <div id="container" style="width: <?php echo $AdditionalConfigData['Width'?>; height: <?php echo $AdditionalConfigData['Height'?>; margin: 0 auto"></div>
        </body>
    </html>
    hier die Boolean-Variable im Standard-IPS-Chart:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS_03.png 
Hits:	144 
Größe:	91.0 KB 
ID:	34720

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS_02.png 
Hits:	89 
Größe:	37.8 KB 
ID:	34721

    Viele Grüße
    Wickie

  5. #5
    Registriert seit
    Dec 2008
    Beiträge
    225

    Hab dasselbe Problem...

  6. #6
    Registriert seit
    Jan 2013
    Ort
    Altötting
    Beiträge
    173

    Hallo in die Runde,

    das erste Problem konnte ich eingrenzen:
    der Befehl
    PHP-Code:
    $serie['Unit'] = array(0=>'AUS'1=>'AN'); 
    führt zu folgender Fehlermeldung im Highcharts.ips Skript:
    HTML-Code:
    Notice: Array to string conversion in /var/lib/symcon/scripts/35456.ips.php on line 1268
    nach Auskommentieren der entsprechenden Zeile
    PHP-Code:
    //$s .= "[this.y + ' ". $Serie['Unit']."'],"; 
    und
    PHP-Code:
    $s .= "test"// Fehler mti IPS 4.0 
    macht das Skript schon mal weiter...
    Wie lautet die Zeile richtig? Bzw. wo steckt der Fehler?

    Bis zu folgendem Befehl:
    PHP-Code:
    $serie['ReplaceValues'] = array(0=>0.011=>0.99); 
    dann erscheint kein Graph mehr. Kommentiere ich die betreffende Zeile aus, dann erscheint der Graph:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	loeschbar_01.png 
Hits:	90 
Größe:	39.9 KB 
ID:	35403
    Ich möchte ihn jedoch nicht als "Sägezahn", sonder als 0 & 1.
    Kann mir jemand weiterhelfen?

    Anbei das entsprechende Config-Skript:
    PHP-Code:
    <?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']= 35070 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\WP]*/;  // 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']= 35456 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\Highcharts_V202a.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())-1, 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
        //$CfgDaten['StartTime'] = time()-60*60*8*1*1; // 1Jahr: 60s*60min*24h*365d
        //$CfgDaten['EndTime'] = time(); // jetzt

          
    $ZeitRaum GetValue(36582 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\HC_Zeitraum]*/);
           
    // AggType: [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year] .. wie der Werte gelesen werden soll
          
    Switch ($ZeitRaum) {
              Case 
    0:
              Case 
    2:
              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 = (1/24);};
          If (
    $ZeitRaum == 1) {$ZeitRaum = (8/24);};
          If (
    $ZeitRaum == 2) {$ZeitRaum = (24/24);};
         
    $EndPunkt GetValue(14041 /*[Geräte\Highcharts\HC_V202a\Technik\Wärmepumpe\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'] = 25689 /*[WebFront]*/;
            
    $CfgDaten['WFCPopupTitle'] = "Ich bin der Text, welcher als Ueberschrift 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;
        
    // 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'] = "Strom";

        
    // **************************************************************************************
        // *** 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;
        // $CfgDaten['tooltip']['formatter'] = Null; // IPS erstellt selbständig einen Tooltip
        // $CfgDaten['tooltip']['formatter'] = ""; // Standard - Highcharts Tooltip

        // **************************************************************************************
        // *** 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'] = "Betrieb";
        
    $CfgDaten['yAxis'][0]['Unit'] = " ";
        
    $CfgDaten['yAxis'][0]['opposite'] = true;
        
    $CfgDaten['yAxis'][0]['tickInterval'] = 0.2;
        
    $CfgDaten['yAxis'][0]['min'] = 0;
        
    $CfgDaten['yAxis'][0]['max'] = 1;

        
    //    $CfgDaten['yAxis'][1]['title']['text'] = "Heizungssteller / Luftfeuchte";
        //    $CfgDaten['yAxis'][1]['Unit'] = "%";
        //    $CfgDaten['yAxis'][1]['opposite'] = true;

        //    $CfgDaten['yAxis'][2]['title']['text'] = "Drehgriffkontakte / Türkontakte";
        //    $CfgDaten['yAxis'][2]['labels']['formatter'] = "@function() { if (this.value == 0.5) return 'geschlossen'; if (this.value == 1) return 'gekippt';if (this.value == 2) return 'geöffnet' }@";
        //    $CfgDaten['yAxis'][2]['allowDecimals'] = true;
        //    $CfgDaten['yAxis'][2]['showFirstLabel '] = false;
        //    $CfgDaten['yAxis'][2]['showLastLabel '] = false;
        //    $CfgDaten['yAxis'][2]['opposite'] = true;
        //    $CfgDaten['yAxis'][2]['labels']['rotation'] = 90;

        //    $CfgDaten['yAxis'][3]['title']['text'] = "Columns";
        //    $CfgDaten['yAxis'][3]['Unit'] = "kWh";

        // **************************************************************************************
        // *** 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.

        // $serie = array();
        // $serie['name'] = 'Pie';
        // $serie['type'] = 'pie';
        // $serie['data'][] = array('name'=>'Aussentemperatur', 'Id' => 15936, 'Unit'=>"°C");
        // $serie['data'][] = array('name'=>'Luftfeuchte', 'Id' => 17593, 'Unit'=>"%");
        // $serie['allowPointSelect'] = true;
        // $serie['cursor'] = 'pointer';
        // $serie['center'] = array(300,100);
        // $serie['size'] = 100;
        // $serie['dataLabels']['enabled'] = true;
        // $CfgDaten['series'][] = $serie;

        
    $serie = array();
        
    $serie['name'] = "Warmwasser";
        
    $serie['Id'] = 14285 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_PV_02min]*/;//26970;
        //$serie['Unit'] = "Watt";
        
    $serie['Unit'] = array(0=>'AUS'1=>'AN');
        
    $serie['ReplaceValues'] = false;
        
    //$serie['ReplaceValues'] = array(0=>0.01, 1=>0.99);  // org
        
    $serie['RoundValue'] = 1;
        
    $serie['type'] = "line";    //"column";
        
    $serie['yAxis'] = 0;
        
    $serie['marker']['enabled'] = false;
        
    $serie['shadow'] = true;
        
    $serie['lineWidth'] = 2;
        
    $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['step'] = "left";
     
        

        
    $serie = array();
        
    $serie['name'] = "Heizung";
        
    $serie['Id'] = 46597 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_02min]*/;
        
    $serie['Unit'] = "Watt";
        
    $serie['ReplaceValues'] = false;
        
    $serie['RoundValue'] = 1;
        
    $serie['type'] = "spline";
        
    $serie['yAxis'] = 0;
        
    $serie['marker']['enabled'] = false;
        
    $serie['shadow'] = true;
        
    $serie['lineWidth'] = 2;
        
    $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'] = "Luftfeuchte";
        // $serie['Id'] = 17593 /*[Geräte\Feuchtesensoren\Temperatur & Feuchtesensor Aussen (317, RH)\relFeuchte_Aussen]*/;
        // $serie['Unit'] = "%";
        // $serie['ReplaceValues'] = false;
        // $serie['type'] = "spline";
        // $serie['step'] = false;
        // $serie['yAxis'] = 1;
        // $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;
        // $CfgDaten['series'][] = $serie;

        //    $serie = array();
        //    $serie['name'] = "Drehgriffkontakt";
        //    $serie['Id'] = 44451 /*[Objekt #44451 existiert nicht]*/;
        //    $serie['Unit'] = array(0=>'geschlossen', 1=>'gekippt', 2=>'geöffnet');
        //    $serie['ReplaceValues'] = array(0=>0.5, 1=>1, 2=>2);
        //    $serie['type'] = "line";
        //    $serie['step'] = true;
        //    $serie['yAxis'] = 2;
        //    $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;
        //    $CfgDaten['series'][] = $serie;

        //    $serie = array();
        //    $serie['name'] = "Column";
        //    $serie['Id'] = 29842 /*[Objekt #29842 existiert nicht]*/;
        //    $serie['Unit'] = "kWh";
        //    $serie['ReplaceValues'] =false;
        //    $serie['type'] = "column";
        //    $serie['step'] = false;
        //    $serie['yAxis'] = 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'] = 450;         // 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
            
    }
        }



    ?>
    und das Highchart-Skript:
    PHP-Code:
    <?
        $version 
    "2.02"$versionDate "20.05.2012";
        
    //ToDo:
        //FEATURE: Plotbands. Timestamp in From und To
        //Fehlerquelle: AggType ist "Größer" als der angezeigte Zeitraum
        // vielleicht alles als cfg direkt json_encoden und nicht jedes Teil einzeln

        //--------------------------------------------------------------------------------------------------------------------------------
        // Für die Darstellung der Graphen wird das HTML5/JS Framework "Highcharts" der Fa. Highslide Software verwendet (www.highcharts.com)
        // Alle Rechte dieses Frameworks liegen bei Highslide Software.
        // 'Highcharts' kann unter folgenden Bedinungen kostenlos eingesetzt werden:
        //     Namensnennung ? Sie müssen den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen.
        //     Keine kommerzielle Nutzung ? Dieses Werk bzw. dieser Inhalt darf nicht für kommerzielle Zwecke verwendet werden.
        // Download: wwww.highcharts.com/download/ ... und die Dateien einfach in das Webfront (Es sollte ein V 2.2 oder höher verwendet werden.
        // Demos: http://www.highcharts.com/demo/
        // API: http://www.highcharts.com/ref/
        //--------------------------------------------------------------------------------------------------------------------------------
        // Changelog:
        //    --- V2.00 ---------------------------------------------------------------------------------------------------------------------
        //    04/2012         KHC    REFACT   Umfangreiches Überarbeiten der Highchart-Script Funktionen.
        // bis                            Integration der meisten Original-Highcharts-Options als PHP-Array (siehe http://www.highcharts.com/ref)
        // 05/2012                    Highcharts-Options "lang" aus IPS_Template.php in Highcharts-Script verschoben
        //    --- V2.01 ---------------------------------------------------------------------------------------------------------------------
        // 07.05.2012  KHC   NEU      Test mit Integration Highstock. Neuer Parameter ['Ips']['ChartType'] = 'Highcharts' oder 'Highstock'
        // 07.05.2012  KHC   NEU      IPS_Template.php auf jquery 1.7.2 geändert
        // 07.05.2012  KHC   FIX      krsort durch array_reverse getauscht, da krsort Probleme beim json_encode macht
        // 08.05.2012  KHC   REFACT   intern noch mehr auf Arrays umgestellt und etwas umstrukturiert
        // 09.05.2012  KHC   NEU      über 'CreateConfigFileByPathAndFilename($stringForCfgFile, $path, $filename)' kann eine Tmp_datei mit bel. Namen geschrieben werden
        // 10.05.2012  KHC   FIX      Fehler beim Auswerten der AggregatedValues behoben (ReadDataFromDBAndCreateDataArray)
        // 12.05.2012  KHC   FIX      Tooltip für "ReplaceValues" korrigiert
        // 12.05.2012  KHC   CHANGE   Start- und Endzeitpunkt der X-Achse wurde automatisch um 5 Minuten korrigiert -> dies wurde entfernt
        // 12.05.2012  KHC   NEU      mit ['xAxis']['min']=false und ['xAxis']['min']=false kann festeglegt werden dass Min oder Max nicht autom. festgelegt werden
        //    --- V2.02 ---------------------------------------------------------------------------------------------------------------------
        // 13.05.2012  KHC   FIX      RunType=file: Wenn Highstock vorgewählt wurde wurde das tmp File nicht in die Highstock-Verzeichnis geschrieben
        // 16.05.2012  KHC   NEU      Integration Highstock: ['Navigator'], ['rangeSelector'] und ['scrollbar']
        // 18.05.2012  KHC   FIX      Integration Highstock: Zusätzliche series.type 'candlestick' und 'ohlc' erlauben
        // 19.05.2012  KHC   NEU      Neue Parameter ['Ips']['Dashboard'] für die Darstellung im Dashboard

        //--------------------------------------------------------------------------------------------------------------------------------

        // ------------------------------------------------------------------------
        // WriteContentWithFilename
        //    Mit dieser Funktion wird der Content-String geschrieben.
        //    IN: $cfg = ..
        //    IN: $tmpFilename = Der Dateiname welche die Config Daten enthält
        // ------------------------------------------------------------------------
        
    function WriteContentWithFilename($cfg$tmpFilename)
        {
            
    DebugModuleName($cfg,"WriteContentWithFilename");

            if (
    $tmpFilename != "")
            {
                
    SetValue($cfg['ContentVarableId'],
                            
    GetContentVariableString ($cfg"CfgFile"$tmpFilename));
            }
            else
                
    SetValue($cfg['ContentVarableId'], 'Falsche Parameter beim Funktionsaufruf "WriteContentTextbox"');
        }

        
    // ------------------------------------------------------------------------
        // WriteContentWithScriptId
        //    Mit dieser Funktion wird der Content-String geschrieben.
        //    IN: $cfg = ..
        //    IN: $scriptId = Die Script Id welche den ConfigString enthält.
        // ------------------------------------------------------------------------
        
    function WriteContentWithScriptId($cfg$scriptId)
        {
            
    DebugModuleName($cfg,"WriteContentWithScriptId");

            if (
    $cfg['RunMode'] == "popup")
            {
                
    WFC_SendPopup($cfg['WebFrontConfigId'],
                            
    $cfg['WFCPopupTitle'] ,
                            
    GetContentVariableString ($cfg"ScriptId"$scriptId));
            }
            else
            {
                
    SetValue($cfg['ContentVarableId'],
                    
    GetContentVariableString ($cfg"ScriptId"$scriptId));
            }
        }

        function 
    GetContentVariableString($cfg$callBy$callIdent)
        {
            
    $chartType $cfg['Ips']['ChartType'];
            
    $height $cfg['HighChart']['Height'] + 16;

            if (isset(
    $cfg['Ips']['Dashboard']['Ip']) && isset($cfg['Ips']['Dashboard']['Port']))
            {
                
    $s "http://" $cfg['Ips']['Dashboard']['Ip'] . ":" $cfg['Ips']['Dashboard']['Port'] .
                    
    "/user/$chartType/IPS_Template.php?$callBy="    $callIdent " " .
                    
    "width='100%' height='"$height ."' frameborder='1' scrolling='no'";
            }
            else
            {
                
    $s "<iframe src='./user/$chartType/IPS_Template.php?$callBy="    $callIdent "' " .
                    
    "width='100%' height='"$height ."' frameborder='0' scrolling='no'></iframe>";
            }
            return 
    $s;
            echo 
    "Highchartes Zeile 100, s: "$s"\n";
        }

    //echo $z[$i]["ohnePV"], "\n";
        // ------------------------------------------------------------------------
        // CreateConfigFile
        //    Erzeugt das tmp-Highcharts Config-File mit der $id als Dateinamen
        //    IN: $stringForCfgFile = String welcher in das File geschrieben wird
        // ------------------------------------------------------------------------
        
    function CreateConfigFile($stringForCfgFile$id$charttype 'Highcharts')
        {
            
    $path "webfront\user\\" $charttype;
            
    $filename $charttype "Cfg$id.tmp";

            return 
    CreateConfigFileByPathAndFilename($stringForCfgFile$path$filename);
        }

        
    // ------------------------------------------------------------------------
        // CreateConfigFileByPathAndFilename
        //    Erzeugt das tmp-Highcharts Config-File
        //    IN: $stringForCfgFile = String welcher in das File geschrieben wird
        //          $path, $filename = Pfad un Name des Tmp-Files welches erzeugt werden soll
        // ------------------------------------------------------------------------
        
    function CreateConfigFileByPathAndFilename($stringForCfgFile$path$filename)
        {
            
    // Standard-Dateiname .....
            
    $tmpFilename IPS_GetKernelDir() . $path "\\" $filename;

            
    // schreiben der Config Daten
            
    $handle fopen($tmpFilename,"w");
            
    fwrite($handle$stringForCfgFile);
            
    fclose($handle);

            return 
    $tmpFilename;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfgDaten
        //    Aufruf bei jedem Cfg-Start
        //    IN: $cfg = ..
        //    OUT: korrigierte cfg
        // ------------------------------------------------------------------------
         
    function CheckCfgDaten($cfg)
        {
          
    DebugModuleName($cfg,"CheckCfgDaten");

            global 
    $IPS_SELF$IPS_SENDER;

            
    // Debugging
            
    IfNotIssetSetValue($cfg['Ips']['Debug']['Modules'],             false);
            
    IfNotIssetSetValue($cfg['Ips']['Debug']['ShowJSON'],             false);
            
    IfNotIssetSetValue($cfg['Ips']['Debug']['ShowJSON_Data'],     false);
            
    IfNotIssetSetValue($cfg['Ips']['Debug']['ShowCfg'],             false);

            
    // ChartType
            
    IfNotIssetSetValue($cfg['Ips']['ChartType'], 'Highcharts');

           if (
    $cfg['Ips']['ChartType'] != 'Highcharts' && $cfg['Ips']['ChartType'] != 'Highstock')
               die (
    "Abbruch! Es sind nur 'Highcharts' oder 'Highstock' als ChartType zulässig");

            
    // über WebInterface kommt der Aufruf wenn die Content-Variable aktualisiert wird
            
    if ($IPS_SENDER != "WebInterface" && $cfg['RunMode'] != "popup")
                
    $cfg Check_ContentVariable($cfg$IPS_SELF);

           return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CreateConfigString
        //    Erzeugt den für Higcharts benötigten Config String und gibt diesen als String zurück
        //    IN: $cfg = ..
        //    OUT: der erzeugte Config String
        // ------------------------------------------------------------------------
        
    function CreateConfigString($cfg)
        {
          
    DebugModuleName($cfg,"CreateConfigString");

            
    $cfg CompatibilityCheck($cfg);
          
    $cfg CheckCfg($cfg);

            
    $cfgString GetHighChartsCfgFile($cfg);

            
    // Zusätzliche Config in Highchart Config hinzufügen
            
    $cfgString ReadAdditionalConfigData($cfg) . "\n|||\n" .  $cfgString;

            
    // Language Options aus IPS_Template.php hierher verschoben
            
    $cfgString .=  "\n|||\n"GetHighChartsLangOptions($cfg);;

            return 
    $cfgString;
        }

        function 
    CompatibilityCheck($cfg)
        {
            
    DebugModuleName($cfg,"CompatibilityCheck");

            
    // Series
            
    if (isset($cfg['Series']) && isset($cfg['series']))
                die (
    "Abbruch - Es düfen nicht gleichzeitig 'Series' und 'series' definiert werden.");
            if (isset(
    $cfg['Series']) && !isset($cfg['series']))
                
    $cfg['series'] = $cfg['Series'];
            unset (
    $cfg['Series']);

            
    // Title
            
    if (isset($cfg['Title']) && !isset($cfg['title']['text']))
                
    $cfg['title']['text'] = $cfg['Title'];
            unset (
    $cfg['Title']);

            
    // SubTitle
            
    if (isset($cfg['SubTitle']) && !isset($cfg['subtitle']['text']))
                
    $cfg['subtitle']['text'] = $cfg['SubTitle'];
            unset (
    $cfg['SubTitle']);

            
    // SubTitleDateTimeFormat
            
    if (isset($cfg['SubTitleDateTimeFormat']) && !isset($cfg['subtitle']['Ips']['DateTimeFormat']))
                
    $cfg['subtitle']['Ips']['DateTimeFormat'] = $cfg['SubTitleDateTimeFormat'];
            unset (
    $cfg['SubTitleDateTimeFormat']);

            
    // yAxis
            
    if (isset($cfg['yAxis']))
            {
                
    $axisArr = array();
                foreach (
    $cfg['yAxis'] as $Axis)
                {
                    
    $cfgAxis $Axis;

                    
    // Name
                    
    if (isset($Axis['Name']) && !isset($cfgAxis['title']['text']))
                        
    $cfgAxis['title']['text'] = $Axis['Name'];
                    unset (
    $cfgAxis['Name']);

                    
    // TickInterval
                    
    if (isset($Axis['TickInterval']) && !isset($cfgAxis['tickinterval']))
                            
    $cfgAxis['tickinterval'] = $Axis['TickInterval'];
                    unset (
    $cfgAxis['TickInterval']);

                    
    // Opposite
                    
    if (isset($Axis['Opposite']) && !isset($cfgAxis['opposite']))
                            
    $cfgAxis['opposite'] = $Axis['Opposite'];
                    unset (
    $cfgAxis['Opposite']);

                  
    $axisArr[] = $cfgAxis;
                }
              
    $cfg['yAxis'] = $axisArr;
            }
              return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfg
        //    Prüft daKonfiguration und korrigiert und Vervollständigtdiese zum Teil
        //    IN: $cfg = ..
        //    OUT: der erzeugte Config String
        // ------------------------------------------------------------------------
        
    function CheckCfg($cfg)
        {
            
    DebugModuleName($cfg,"CheckCfg");

            
    $cfg CheckCfg_Common($cfg);
            
    $cfg CheckCfg_AreaHighChart($cfg);
            
    $cfg CheckCfg_AggregatedValues($cfg);
              
    $cfg CheckCfg_StartEndTime($cfg);
              
    $cfg CheckCfg_Series($cfg);

              return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfg_Common
        //    wenn RunMode=Popup, prüfen der dazugehörigen Daten wie WebfrontConfigId, usw.
        //        und wenn RunMode=Popup, prüfen der dazugehörigen Daten wie WebfrontConfigId, usw.
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function CheckCfg_Common($cfg)
         {
          
    DebugModuleName($cfg,"CheckCfg_Common");

            if (!isset(
    $cfg['series']))
                die (
    "Abbruch - Es wurden keine Serien definiert.");

            
    // Id des ArchiveHandler auslesen
            
    if (!isset($cfg['ArchiveHandlerId']) || $cfg['ArchiveHandlerId'] == -1)
            {
              
    $instances IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}');
                
    $cfg['ArchiveHandlerId'] = $instances[0];
            }
            
    // Prüfen des ArchiveHandlers
            
    $instance = @IPS_GetInstance($cfg['ArchiveHandlerId']);
            if (
    $instance['ModuleInfo']['ModuleID'] != "{43192F0B-135B-4CE7-A0A7-1475603F3060}")
                die (
    "Abbruch - 'ArchiveHandlerId' (".$cfg['ArchiveHandlerId'].") ist keine Instance eines ArchiveHandler.");

            if (
    $cfg['RunMode'] == "popup")
            {
                
    // keine Webfront Id
                
    if (!isset($cfg['WebFrontConfigId']))
                    die (
    "Abbruch - Konfiguration von 'WebFrontConfigId' fehlt.");

                
    // prüfen ob die übergebene Id ein WebFront ist
                
    $instance = @IPS_GetInstance($cfg['WebFrontConfigId']);
                if (
    $instance['ModuleInfo']['ModuleID'] != "{3565B1F2-8F7B-4311-A4B6-1BF1D868F39E}")
                    die (
    "Abbruch - 'WebFrontConfigId' ist keine WebFrontId");

                
    IfNotIssetSetValue($cfg['WFCPopupTitle'], "");
            }

           return 
    $cfg;
        }


        
    // ------------------------------------------------------------------------
        // Check_ContentVariable
        //    prüfen ob Angaben der Content Variable stimmen oder ob es das übergeordnete Element ist
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function Check_ContentVariable($cfg$scriptId)
        {
           
    DebugModuleName($cfg,"Check_ContentVariable");

            
    // wenn keine Id übergeben wurde wird das übergeordnete Objekt als Content verwendet
            
    if (!isset($cfg['ContentVarableId']) || $cfg['ContentVarableId'] <= 0)
                
    $cfg['ContentVarableId'] = IPS_GetParent($scriptId);
          
    $variable = @IPS_GetVariable($cfg['ContentVarableId']);
            if (
    $variable == false)
               die (
    "Abbruch - Content-Variable nicht gefunden.");

        
    //    if ($variable['VariableValue']['ValueType'] != 3)
          //     die ("Abbruch - Content-Variable ist keine STRING-Variable.");

               
    if (isset($variable['VariableValue']['ValueType']) && ($variable['VariableValue']['ValueType'] != 3))//////
       
    die ("Abbruch - Content-Variable ist keine STRING-Variable.");//////

    if (isset($variable['VariableType']) && ($variable['VariableType'] != 3))//////
       
    die ("Abbruch - Content-Variable ist keine STRING-Variable.");   //////

           
    if ($variable['VariableCustomProfile'] != "~HTMLBox")
               die (
    "Abbruch - Content-Variable muss als Profil '~HTMLBox' verwenden.");

            return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfg_AreaHighChart
        //
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function CheckCfg_AreaHighChart($cfg)
         {
           
    DebugModuleName($cfg,"CheckCfg_AreaHighChart");

            
    IfNotIssetSetValue($cfg['HighChart']['Theme'], "");
            
    IfNotIssetSetValue($cfg['HighChart']['Width'], 0);
            
    IfNotIssetSetValue($cfg['HighChart']['Height'], 400);

             return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfg_StartEndTime
        //    Start- und Endzeit des gesamten Charts errechnen, und an jede Serie übergeben
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function CheckCfg_StartEndTime($cfg)
        {
            
    DebugModuleName($cfg,"CheckCfg_StartEndTime");

            
    $cfg['Ips']['ChartStartTime'] = $cfg['StartTime'];
            
    $cfg['Ips']['ChartEndTime'] = $cfg['EndTime'];

            
    $offsetExistsAtSerie false;
            
    $Count count($cfg['series']);

            for (
    $i 0$i $Count$i++)
            {
                
    $Serie $cfg['series'][$i];

                
    // wenn für die Serie keine Start oder Endzeit übergeben würde wird der Standardwert genommen
                
    IfNotIssetSetValue($Serie['StartTime'], $cfg['StartTime']);
                
    IfNotIssetSetValue($Serie['EndTime'], $cfg['EndTime']);

                if (
    $Serie['StartTime'] < $cfg['Ips']['ChartStartTime'])
                    
    $cfg['Ips']['ChartStartTime'] = $Serie['StartTime'];
                if (
    $Serie['EndTime'] > $cfg['Ips']['ChartEndTime'])
                    
    $cfg['Ips']['ChartEndTime'] = $Serie['EndTime'];

                
    $Serie['Ips']['EndTimeString'] = date("/r"$Serie['EndTime']);
                
    $Serie['Ips']['StartTimeString']= date("/r"$Serie['StartTime']);

                
    $cfg['series'][$i] = $Serie;

                if (isset(
    $Serie['Offset']) && $Serie['Offset'] != 0)
                    
    $offsetExistsAtSerie =true;
            }

            
    // wenn ein Offset definiert wurde gilt nur der global eingestellte Start und Endzeitpunkt
            
    if ($offsetExistsAtSerie true)
          {
             
    $cfg['Ips']['ChartStartTime'] = $cfg['StartTime'];
                
    $cfg['Ips']['ChartEndTime'] = $cfg['EndTime'];
          }

            return 
    $cfg;

        }

        
    // ------------------------------------------------------------------------
        // CheckCfg_Series
        //    prüfen der Serien
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function CheckCfg_Series($cfg)
         {
            
    DebugModuleName($cfg,"CheckCfg_Series");

            
    $Id_AH $cfg['ArchiveHandlerId'];

            
    $series = array();
            foreach (
    $cfg['series'] as $Serie)
            {
                
    $VariableId = @$Serie['Id'];

                
    // hier wird nur geprüft ob Wert von Eingabe passen könnte (wenn vorhanden)
                
    if  (isset($Serie['AggType']) && ($Serie['AggType']<|| $Serie['AggType']>4) )
                    die (
    "Abbruch - 'AggType' hat keinen korrekten Wert");

                
    $Serie['Ips']['IsCounter'] = $VariableId && (@AC_GetAggregationType($Id_AH$VariableId) == 1);

                
    // über AggValue kann Min/Max oder Avg vorgewählt werden (zum Lesen der AggregValues)
                
    IfNotIssetSetValue($Serie['AggValue'], "Avg");

                if (
    $Serie['AggValue'] != "Avg"
                    
    && $Serie['AggValue'] != "Min"
                    
    && $Serie['AggValue'] != "Max")
                       die (
    "Abbruch - 'AggValue' hat keinen gültigen Wert");

                
    // Offset für Darstellung von z.B. Monate und Vormonat in einem Chart
                
    IfNotIssetSetValue($Serie['Offset'], 0);

                
    IfNotIssetSetValue($Serie['ReplaceValues'], false);

                
    // Name (Kompatibilität aus V1.x)
                
    if (isset($Serie['Name']) && !isset($Serie['name']))
                    
    $Serie['name'] = $Serie['Name'];
                unset(
    $Serie['Name']);

                
    IfNotIssetSetValue($Serie['name'], "");

                
    // type & Parameter
                
    if (isset($Serie['type']) && isset($Serie['Param']))
                    die (
    "Abbruch - Definition von 'Param' und 'type' in Serie gleichzeitig nicht möglich.");
                if (!isset(
    $Serie['type']) && !isset($Serie['Param']))
                    die (
    "Abbruch - Serie muss Definition von 'Param' oder 'type' enthalten.");

                
    // Mögliche Charttypen
                
    $allowedSeriesTypes = array();
                if (
    $cfg['Ips']['ChartType'] == 'Highcharts')
                    
    $allowedSeriesTypes = array('area','areaspline','bar','column','line','pie','scatter','spline');
                else if (
    $cfg['Ips']['ChartType'] == 'Highstock')
                    
    $allowedSeriesTypes = array('area','areaspline','bar','column','line','pie','scatter','spline','ohlc','candlestick');

                if (!isset(
    $Serie['type']) && isset($Serie['Param']))
                {
                    
    // type aus Param übernehmen
                    
    foreach($allowedSeriesTypes as $item)
                    {
                        if (
    strrpos($Serie['Param'],"'$item'") > 0)
                           
    $Serie['Ips']['Type'] = $item;
                    }
                }
                else
                {
                    if (!
    in_array($Serie['type'], $allowedSeriesTypes))
                        die (
    "Abbruch - Serien-Type (" $Serie['type'] .  ") nicht erkennbar.");
                    else
                        
    $Serie['Ips']['Type'] = $Serie['type'];
                }
                if (!isset(
    $Serie['Ips']['Type']))
                    die (
    "Abbruch - Serien-Type nicht erkennbar.");

                
    // data
                
    if (isset($Serie['Data']) && isset($Serie['data']))
                    die (
    "Abbruch - Definition von 'Data' und 'data' in ein und derselben Serie nicht mölglich.");
                if (!isset(
    $Serie['data']) && isset($Serie['Data']))
             {
                   
    $Serie['data'] = $Serie['Data'];
                   unset(
    $Serie['Data']);
                }

                
    // diverse Prüfungen bei PIE-Charts
                
    if ($Serie['Ips']['Type'] == 'pie')
                {
                if (isset(
    $Serie['Id']))
                {
                        if (!isset(
    $Serie['AggType']))
                            die (
    "Abbruch - Wird ein Pie über Id definiert muss auch AggType parametriert werden");

                        
    // wenn nichts angegeben wird 'AggNameFormat: automatisch abhängig vom 'AggType' berechnet
                        
    if (!isset($Serie['AggNameFormat']))
                        {
                            if (
    $Serie['AggType'] == 0)   //0=Hour
                                
    $Serie['AggNameFormat'] = "d.m.Y H:i";
                            else if (
    $Serie['AggType'] == 1//1=Day
                                
    $Serie['AggNameFormat'] = "d.m.Y";
                            else if (
    $Serie['AggType'] == 2//2=Week
                                
    $Serie['AggNameFormat'] = "\K\WW Y";
                            else if (
    $Serie['AggType'] == 3//3=Month
                                
    $Serie['AggNameFormat'] = "M Y";
                            else if (
    $Serie['AggType'] == 4//4=Year
                                
    $Serie['AggNameFormat'] = "Y";
                        }
                }
                else if (isset(
    $Serie['data']))
                {
                   foreach(
    $Serie['data'] as $data)
                   {
                      if (isset(
    $data['Id']) && isset($data['y']))
                          die (
    "Abbruch - Pie['data']: Id und y sind als gleichzeitige Parameter nicht möglich.");
                      
    //if (!isset($data['Id']) && !isset($data['y']))
                         //     die ("Abbruch - Pie['data']: Id oder y muss definiert sein");
                         // kann man so nicht prüfen
                   
    }
                }
                else
                    {
                        die (
    "Abbruch - Pie kann nie Daten besitzen. Es muss entweder über 'Id' oder über 'data' definiert werden.");
                    }

                }

                
    // geänderte Werte wieder zurückschreiben
                
    $series[] = $Serie;
            }
            
    // geänderte Werte wieder zurückschreiben

            
    $cfg['series'] = $series;
             return 
    $cfg;
        }

        
    // ------------------------------------------------------------------------
        // CheckCfg_AggregatedValues
        //    prüfen der AggregatedValues und Übernahme dieser in die Serien
        //    IN: $cfg
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
         
    function CheckCfg_AggregatedValues($cfg)
         {
            
    DebugModuleName($cfg,"CheckCfg_AggregatedValues");

            if (!isset(
    $cfg['AggregatedValues']))
                
    $cfg['AggregatedValues'] = array();

            
    // Default - wenn nichts vorbelegt
            
    IfNotIssetSetValue($cfg['AggregatedValues']['MixedMode'], false);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['HourValues'], -1);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['DayValues'], -1);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['WeekValues'], -1);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['MonthValues'], -1);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['YearValues'], -1);
            
    IfNotIssetSetValue($cfg['AggregatedValues']['NoLoggedValues'], 100);

            
    $series = array();
            foreach (
    $cfg['series'] as $Serie)
            {

                
    // prüfen ob für die Serie Einstellungen für AggregatedValues vorhanden sind,
                // wenn nicht Übernahme aus cfg
                
    if (isset($Serie['AggregatedValues']))
                {
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['MixedMode'], $cfg['AggregatedValues']['MixedMode']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['HourValues'], $cfg['AggregatedValues']['HourValues']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['DayValues'], $cfg['AggregatedValues']['DayValues']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['WeekValues'], $cfg['AggregatedValues']['WeekValues']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['MonthValues'], $cfg['AggregatedValues']['MonthValues']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['YearValues'], $cfg['AggregatedValues']['YearValues']);
                    
    IfNotIssetSetValue($Serie['AggregatedValues']['NoLoggedValues'], $cfg['AggregatedValues']['NoLoggedValues']);
                }
                else    
    // nein -> Daten aus übergeordneter cfg übernehmen
                    
    $Serie['AggregatedValues'] = $cfg['AggregatedValues'];

                 
    // Umrechnen der Tage in Sekunden ... für direktes addieren zum Timestamp
                
    $MinPerTag 24*60*60;

                if (
    $Serie['AggregatedValues']['HourValues'] != -1)
                    
    $Serie['AggregatedValues']['HourValues'] *= $MinPerTag;
                if (
    $Serie['AggregatedValues']['DayValues'] != -1)
                    
    $Serie['AggregatedValues']['DayValues'] *= $MinPerTag;
                if (
    $Serie['AggregatedValues']['WeekValues'] != -1)
                    
    $Serie['AggregatedValues']['WeekValues'] *= $MinPerTag;
                if (
    $Serie['AggregatedValues']['MonthValues'] != -1)
                    
    $Serie['AggregatedValues']['MonthValues'] *= $MinPerTag;
                if (
    $Serie['AggregatedValues']['YearValues'] != -1)
                    
    $Serie['AggregatedValues']['YearValues'] *= $MinPerTag;
                if (
    $Serie['AggregatedValues']['NoLoggedValues'] != -1)
                    
    $Serie['AggregatedValues']['NoLoggedValues'] *= $MinPerTag;

                
    // geänderte Werte wieder zurückschreiben
                
    $series[] = $Serie;
            }
            
    // geänderte Werte wieder zurückschreiben
            
    $cfg['series'] = $series;

            
    // die sind jetzt nicht mehr nötig.....
            
    unset($cfg['AggregatedValues']);

            return 
    $cfg;
        }



        
    // ------------------------------------------------------------------------
        // ReadAdditionalConfigData
        //    zusätzliche Daten für File (hat jetzt aber nichts mit den eigentlichen Highchart Config String zu tun
        //    IN: $cfg
        //    OUT: der String welcher dann in das IPS_Template geschrieben wird.
        // ------------------------------------------------------------------------
        
    function ReadAdditionalConfigData($cfg)
        {
            
    DebugModuleName($cfg,"ReadAdditionalConfigData");

            
    // z.B.: Breite und Höhe für Container
            // Breite und Höhe anpassen für HTML Ausgabe
            
    $s['Theme'] = $cfg['HighChart']['Theme'];
            if (
    $cfg['HighChart']['Width'] == 0)
                
    $s['Width'] = "100%";
            else
                
    $s['Width'] = $cfg['HighChart']['Width']. "px";

            
    $s['Height'] = $cfg['HighChart']['Height']. "px";

            return 
    trim(print_r($strue), "Array\n()") ;
        }

    // ***************************************************************************************************************************

        // ------------------------------------------------------------------------
        // GetHighChartsCfgFile
        //    Falls nicht konfiguriert, wird dies als Default String genommen
        //    OUT: natürlich den String ....
        // ------------------------------------------------------------------------
        
    function GetHighChartsCfgFile($cfg)
        {
            
    DebugModuleName($cfg,"GetHighChartsCfgFile");

            
    $cfgArr['chart'] = CreateArrayForChart($cfg);

            if (isset(
    $cfg['colors']))
                
    $cfgArr['colors'] = $cfg['colors'];

            
    $cfgArr['credits'] = CreateArrayForCredits($cfg);

            if (isset(
    $cfg['global']))
                
    $cfgArr['global'] = $cfg['global'];

            if (isset(
    $cfg['labels']))
                
    $cfgArr['labels'] = $cfg['labels'];

            
    // $cfg['lang'])) werden seperat behandelt

            
    if (isset($cfg['legend']))
                
    $cfgArr['legend'] = $cfg['legend'];

            if (isset(
    $cfg['loading']))
                
    $cfgArr['loading'] = $cfg['loading'];

            if (isset(
    $cfg['plotOptions']))
                
    $cfgArr['plotOptions'] = $cfg['plotOptions'];

            
    $cfgArr['exporting'] = CreateArrayForExporting($cfg);

            if (isset(
    $cfg['symbols']))
                
    $cfgArr['symbols'] = $cfg['symbols'];

            
    $cfgArr['title'] = CreateArrayForTitle($cfg);
            
    $cfgArr['subtitle'] = CreateArrayForSubTitle($cfg);

            
    $cfgArr['tooltip'] = CreateArrayForTooltip($cfg);

            
    $cfgArr['xAxis'] = CreateArrayForXAxis($cfg);
            
    $cfgArr['yAxis'] = CreateArrayForYAxis($cfg);

            if (
    $cfg['Ips']['ChartType'] == 'Highstock')
            {
                if (isset(
    $cfg['navigator']))
                    
    $cfgArr['navigator'] = $cfg['navigator'];
                if (isset(
    $cfg['rangeSelector']))
                    
    $cfgArr['rangeSelector'] = $cfg['rangeSelector'];
                if (isset(
    $cfg['scrollbar']))
                    
    $cfgArr['scrollbar'] = $cfg['scrollbar'];
            }


            if (
    $cfg['Ips']['Debug']['ShowJSON'])
                
    DebugString(my_json_encode($cfgArr));

            
    $cfgArr['series'] = CreateArrayForSeries($cfg) ;

            if (
    $cfg['Ips']['Debug']['ShowJSON_Data'])
                
    DebugString(my_json_encode($cfgArr));

            
    // Array in JSON wandeln
            
    $s my_json_encode($cfgArr);

            
    // ersetzten des 'Param'-Parameters (Altlast aus V1.x)
            
    $s str_replace(",Param@@@:",",",$s);
            
    $s trim($s"{");
            
    $s .= ");";

            return 
    $s;
        }

        
    // ------------------------------------------------------------------------
        // GetHighChartsLangOptions
        //
        //    IN: $cfg
        //    OUT: JSON Options String für den Bereich 'lang'
        // ------------------------------------------------------------------------
        
    function GetHighChartsLangOptions($cfg)
        {
            
    DebugModuleName($cfg,"GetHighChartsLangOptions");

            
    // Default
            
    IfNotIssetSetValue($cfg['lang']['decimalPoint'], ",");
            
    IfNotIssetSetValue($cfg['lang']['thousandsSep'], ".");

            
    IfNotIssetSetValue($cfg['lang']['months'], ['Januar''Februar''März''April''Mai''Juni''Juli''August''September''Oktober''November''Dezember']);
            
    IfNotIssetSetValue($cfg['lang']['shortMonths'], ['Jan''Feb''Mär''Apr''Mai''Jun''Jul''Aug''Sep''Okt''Nov''Dez']);
            
    IfNotIssetSetValue($cfg['lang']['weekdays'], ['Sonntag''Montag''Dienstag''Mittwoch''Donnerstag''Freitag''Samstag']);

            
    $s "lang:" my_json_encode($cfg['lang']);

            return 
    $s;
        }


        
    // ------------------------------------------------------------------------
        // CreateArrayForSeries
        //
        //    IN: $cfg
        //    OUT: der String welcher dann in das IPS_Template geschrieben wird.
        // ------------------------------------------------------------------------
        
    function CreateArrayForSeries($cfg)
        {
            
    DebugModuleName($cfg,"CreateArrayForSeries");

            
    // Daten für einzelne Serien erzeugen
            
    $dataArr = array();
            foreach (
    $cfg['series'] as $Serie)
            {
                if (
    $Serie['Ips']['Type'] == 'pie')
                {
                    
    $Serie['data'] = CreateDataArrayForPie($cfg$Serie);
                }
                else
                {
                
    // Daten wurden von extern übergeben
                    
    if (isset($Serie['data']))
                    {
                        if (
    is_array($Serie['data']))
                            
    $Serie['data'] = CreateDataArrayFromExternalData($Serie['data'], $Serie);
                        else
                            
    $Serie['data'] = $Serie['data'];

                    }
                    
    // Daten werden aus DB gelesen
                    
    else
                        
    $Serie['data'] = ReadDataFromDBAndCreateDataArray($cfg$Serie);
                }

                
    // ... aus Serie umkopieren
                
    $serieArr $Serie;

                
    // nicht für JSON benötigte Parameter löschen
                
    unset($serieArr['Param']);
                unset(
    $serieArr['AggregatedValues']);
                unset(
    $serieArr['Unit']);
                unset(
    $serieArr['StartTime']);
                unset(
    $serieArr['EndTime']);
                unset(
    $serieArr['ReplaceValues']);
                unset(
    $serieArr['Ips']);
                unset(
    $serieArr['Offset']);
                unset(
    $serieArr['AggValue']);
                unset(
    $serieArr['AggType']);
                unset(
    $serieArr['AggNameFormat']);
                unset(
    $serieArr['ScaleFactor']);
                unset(
    $serieArr['RoundValue']);

                
    // ersetzten des 'Param'-Parameters (Altlast aus V1.x)
                
    if (isset($Serie['Param']))
                    
    $serieArr['Param@@@'] = "@" $Serie['Param'] . "@";

                
    $dataArr[] = $serieArr;
            }

            return 
    $dataArr;
        }

        
    // ------------------------------------------------------------------------
        // PopulateDate
        //
        //    IN: $dt
        //             $serie
        //    OUT: Date-Value für Data-String
        // ------------------------------------------------------------------------
        
    function PopulateDate($dt$serie)
        {
            if (
    $dt $serie['StartTime'])
                
    $dt $serie['StartTime'] ;

            
    // z.B.: Date.UTC(2011,4,27,19,42,19),23.4
            
    return  CreateDateUTC($dt $serie['Offset']);
        }

        
    // ------------------------------------------------------------------------
        // PopulateValue
        //
        //    IN: $val
        //             $serie
        //    OUT: korrigiertes $cfg
        // ------------------------------------------------------------------------
        
    function PopulateValue($val$serie)
        {
            
    // Werte ersetzten (sinnvoll für Boolean, oder Integer - z.B.: Tür/Fenster-Kontakt oder Drehgriffkontakt)
            
    if ($serie['ReplaceValues'] != false)
            {
                if (isset(
    $serie['ReplaceValues'][$val]))
                    
    $val $serie['ReplaceValues'][$val];
            }

            
    // Skalieren von Loggingdaten
            
    if (isset($serie['ScaleFactor']))
                
    $val $val $serie['ScaleFactor'];

            
    // Rounden von Nachkommastellen
            
    if (isset($serie['RoundValue']))
                
    $val round($val$serie['RoundValue']);


            return 
    $val;
        }

        
    // ------------------------------------------------------------------------
        // CreateDataArrayForPie
        //    Liest die aktuellen Werte aus den übergebenen Variablen und erzeugt die Daten für das PIE
        //    IN: $cfg, $Serie
        //    OUT: der Data String
        // ------------------------------------------------------------------------
        
    function CreateDataArrayForPie($cfg$serie)
        {
            
    DebugModuleName($cfg,"CreateDataArrayForPie");

            if (isset(
    $serie['Id']))
            {
                  return 
    ReadPieDataById($cfg$serie);
            }
            else if (isset(
    $serie['data']))
            {
                
    $result = array();
                foreach(
    $serie['data'] as $item)
                {
                   if (isset(
    $item['Id']))
                   {
                       
    $currentValue ReadCurrentValue($item['Id']);
                       
    $item['y'] = PopulateValue($currentValue['Value'], $serie) ;
                   }
                   
    $result[] = $item;
                }
                return 
    $result;
            }
            else
            {
               Die (
    "Abbruch - Pie-Definition nicht korrekt");
            }
            return 
    $Data;
        }

        
    // ------------------------------------------------------------------------
        // ReadPieDataById
        //    liest die Aggregated-Werte einer einer Vriablen aus und erzeugt das entsprechende Array
        //    IN: $cfg, $serie
        //    OUT: Config Array
        // ------------------------------------------------------------------------
        
    function ReadPieDataById($cfg$serie)
        {
            
    $id_AH $cfg['ArchiveHandlerId'];

            
    $tempData = @AC_GetAggregatedValues($id_AH$serie['Id'], $serie['AggType'], $serie['StartTime'], $serie['EndTime'], 0);
            
    $tempData array_reverse($tempData);

            
    $result = array();
            foreach (
    $tempData as $ValueItem)
           {
                
    $item['name'] = ReplaceToGermanDate(date($serie['AggNameFormat'], $ValueItem['TimeStamp']));
                
    $item['y'] = PopulateValue($ValueItem[$serie['AggValue']], $serie);
                
    $result[] = $item;
           }
           unset (
    $tempData);

           return 
    $result;
        }

        
    // ------------------------------------------------------------------------
        // CalculateStartAndEndTimeForAggreagtedValues
        //       Liest den Start- und Endzeitpunkt des angefragten Bereiches
        //    IN: $Serie, $search : "" für alle Werte, "Hour", "Day", usw
        //    OUT: Array(StartTime,EndTime)
        // ------------------------------------------------------------------------
        
    function CalculateStartAndEndTimeForAggreagtedValues($Serie$search ="")
        {
            
    $start = -1;        $ende = -1;
            
    $trap false;
            
    $sum 0;

            if (
    $search == "")
            {
               
    $search =="Values";
               
    $start 0;
               
    $trap true;
            }
            foreach(
    $Serie['AggregatedValues'] as $key => $value)
            {
                if (
    strrpos ($key"Values") != false)
                {
                    if (
    $value 0)
                        
    $sum += $value;

                    if (
    strrpos ($key$search) !== false)
                    {
                        
    $trap true;
                        if (
    $value == -1)
                           return 
    false;
                    }

                    if (!
    $trap)
                       continue;

                   if (
    $value 0)
                       continue;

                    if (
    $start == -1)
                    {
                        
    $start =  $sum;
                       continue;
                    }

                    if (
    $start != -&& $ende ==-1)
                    {
                        
    $ende =  $sum;
                        break;
                    }
                }
            }

            
    $result false;
            if (
    $start != -1)
            {
             
    $result["EndTime"] = $Serie["EndTime"] - $start;
                if (
    $ende == -1)
                  
    $result["StartTime"] = $Serie["StartTime"];
                else
                    
    $result["StartTime"] = $Serie["EndTime"] - $ende;

                if (
    $result["StartTime"] < $Serie["StartTime"])
                     
    $result["StartTime"] = $Serie["StartTime"];

                 if (
    $result["StartTime"] == $Serie["EndTime"])
                     
    $result false;
            }

            return 
    $result;
        }

        
    // ------------------------------------------------------------------------
        // ReadDataFromDBAndCreateDataArray
        //    Liest die Series-Daten aus der DB und schreibt sie in den DataString
        //    IN: $cfg, $Serie
        //    OUT: der Data String
        // ------------------------------------------------------------------------
        
    function ReadDataFromDBAndCreateDataArray($cfg$Serie)
        {
            
    DebugModuleName($cfg,"ReadDataFromDBAndCreateDataArray");

            if (!isset(
    $Serie['Id']))
               return 
    "";

            
    // errechne die Zeitspanne
            
    if ($Serie['EndTime'] > time())
                
    $Diff time() - $Serie['StartTime'];
            else
                
    $Diff $Serie['EndTime'] - $Serie['StartTime'];



            
    $Id_AH $cfg['ArchiveHandlerId'];
            
    $dataArray = array();
            
    $VariableId = (int)$Serie['Id'];
            
    $Agg = -1;
            
    $ReadCurrentValue true;

            
    // wenn ReplaceValues definiert wurden werden nur geloggte und keine Aggregated Werte gelesen
            
    if ($Serie['ReplaceValues'] != false)
            {
                if (
    $Diff $Serie['AggregatedValues']['NoLoggedValues'])
                {
                    
    $Serie['StartTime'] = $Serie['EndTime'] - $Serie['AggregatedValues']['NoLoggedValues'];
                }

                
    // Einzelwerte lesen
               
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId, -$Serie["StartTime"], $Serie["EndTime"], "Value"$Serie);
            }
            else if (
    $Serie['AggregatedValues']['MixedMode'])    // im MixedMode werden anfangs alle Werte, dann die Stunden- und zuletzt Tageswerte ausgelesen
            
    {
                
    // zuerst Einzelwerte
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie"");
                if (
    $result != false)
                {
                    if (
    $Serie['Ips']['IsCounter'])                         // wenn Zähler dann immer Agg.Values
                        
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId0$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);
                    else
                      
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId, -$result["StartTime"], $result["EndTime"], "Value"$Serie);
                }

                
    // -> Stundenwerte
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie,"Hour");
                if (
    $result != false)
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId0$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);

                
    // -> Tageswerte
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie,"Day");
                if (
    $result != false)
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId1$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);

                
    // -> Wochenwerten
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie,"Week");
                if (
    $result != false)
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId2$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);

                
    // -> Monatswerte
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie,"Month");
                if (
    $result != false)
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId3$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);

                
    // -> Jahreswerte
                
    $result CalculateStartAndEndTimeForAggreagtedValues($Serie,"Year");
                if (
    $result != false)
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId4$result["StartTime"], $result["EndTime"], $Serie['AggValue'], $Serie);
            }
            else
            {
                
    $Agg = -1;    // ->  AC_GetLoggedValues

             
    if  (isset($Serie['AggType']))   // wenn 'AggType' definiert wurde, wird dies vorrangig bearbeitet
             
    {
                 
    $Agg $Serie['AggType'];
             }
                elseif (
    $Serie['AggregatedValues']['YearValues']!= -&& $Diff $Serie['AggregatedValues']['YearValues'])
                    
    $Agg 4;    //  -> AC_GetAggregatedValues [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]
                
    elseif ($Serie['AggregatedValues']['MonthValues']!= -&& $Diff $Serie['AggregatedValues']['MonthValues'])
                    
    $Agg 3;    //  -> AC_GetAggregatedValues [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]
                
    elseif ($Serie['AggregatedValues']['WeekValues']!= -&& $Diff $Serie['AggregatedValues']['WeekValues'])
                    
    $Agg 2;    //  -> AC_GetAggregatedValues [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]
                
    elseif ($Serie['AggregatedValues']['DayValues']!= -&& $Diff $Serie['AggregatedValues']['DayValues'])
                    
    $Agg 1;    //  -> AC_GetAggregatedValues [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]
                
    else if ($Serie['AggregatedValues']['HourValues']!= -&& $Diff $Serie['AggregatedValues']['HourValues'])
                    
    $Agg 0;    //  -> AC_GetAggregatedValues [0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]

                // es wurde noch nichts definiert und es handelt sich um einen Zähler --> Tageswerte
             
    if ($Agg == -&& $Serie['Ips']['IsCounter'])
                 
    $Agg 0;

                if (
    $Agg == -1)
                {
                    
    // Zeitraum ist zu groß -> nur bis max. Zeitraum einlesen
                    
    if ($Diff $Serie['AggregatedValues']['NoLoggedValues'])
                        
    $Serie['StartTime'] = $Serie['EndTime'] - $Serie['AggregatedValues']['NoLoggedValues'];

                    
    // Alle Werte
                   
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId, -$Serie["StartTime"], $Serie["EndTime"], "Value"$Serie);
                }
                else
                {
                    
    $dataArray ReadAndAddToLoggedData($dataArray$Id_AH$VariableId$Agg$Serie["StartTime"], $Serie["EndTime"], $Serie['AggValue'], $Serie);
                    
    $ReadCurrentValue false