IPS 4.0 und Highcharts V2.02 Fehler: Content-Variable ist keine STRING-Variable

Hallo,

ich bin gerade auf IPS 4.0 umgestiegen und bekomme regelmässig folgende Fehlermeldungen angezeigt:

03.03.2016 08:50:00 | ScriptEngine | Result for Event 39675
<br />
<b>Warning</b>: Illegal string offset ‚ValueType‘ in <b>C:\IP-Symcon\scripts\Highcharts_V2.02.ips.php</b> on line <b>326</b><br />
Abbruch - Content-Variable ist keine STRING-Variable.

Zeile 326:
$CfgDaten = CheckCfgDaten($CfgDaten);

Was hat sich da geändert und wie kann ich es lösen?

Vielen Dank!

Andreas

Der Satz in der Migration betrifft dich gerade:

Kleinere Änderung bei IPS_GetVariable (VariableType anstatt VariableValue.ValueType

paresy

Nachdem ich die Highcharts Skripte (wie vermutlich viele Andere auch hier im Forum) nur kopiert habe, gibt es für IPS4 schon funktionsfähige Highcharts Skripte?

Ein IPS_GetVariable finde ich im Skript nicht, nur ein:

$s=IPS_GetScript($CfgDaten[„HighChartScriptId“]); // Id des Highcharts-Scripts

welches sich vom Code in IPS4.0 auch verändert haben soll.
Wie müsste die Zeile konkret lauten damit es wieder funktioniert?

Schau mal in die o.g. Datei in die entsprechende Zeile. Und dann schau dir mal die Zeile von der Migration an. Dort wirst du vermutlich sowas ändern müssen…

$[‚VariableValue‘][‚ValueType‘] zu [‚VariableType‘]

paresy

Hi mr_command!

Die von dir genannte Zeile muss nicht verändert werden! Aber irgendwo anders muss etwas im Skript angepasst werden, was kann ich dir mangels Skript nicht sagen :slight_smile:

Hier siehst du die Änderungen zur IPS 4.0:
IPS_GetScript — IP-Symcon :: Automatisierungssoftware

Grüße,
Chris

$[‚VariableValue‘][‚ValueType‘]
kann ich eben leider nicht finden.

Anbei der komplette Code:


 <?
 // bei der Konfiguration unbedingt auf die Groß/Kleinschreibung achten
$actID     = 27889 /*[Haus global\Highcharts Graphen\Bewegungen im Außenbereich\Bewegungen\Startzeit jetzt minus]*/;
$rangeID = 41508 /*[Haus global\Highcharts Graphen\Bewegungen im Außenbereich\Bewegungen\Plotzeitraum]*/;
$aggID     = 35923 /*[Haus global\Highcharts Graphen\Bewegungen im Außenbereich\Bewegungen\Aggregation]*/;
if($_IPS['SENDER'] == "WebFront")
{
   SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
 if((GetValue($rangeID) == 0) && (GetValue($actID) == 0)) {
    SetValue($aggID, 1);
 }
}
$act   = GetValue($actID);
$range  = GetValue($rangeID);
$agg   = GetValue($aggID);
switch($agg) {
 case 1:
    $agg_temp = 1;
 break;
 case 2:
    $agg_temp = 7;
 break;
 case 3:
    $agg_temp = 31;
 break;
}
$ts = $act * $agg_temp;
$te = ($agg_temp * $range) + $ts;


 IPS_SetHidden($_IPS['SELF'], true);
 Global $CfgDaten; // damit kann der Script auch von anderen Scripten aufgerufen werden und bereits mit CfgDaten vorkonfiguriert werden
 // IPS Variablen ID´s
 $CfgDaten["ContentVarableId"]  = -1;  // ID der String Variable in welche die Daten geschrieben werden (-1 oder überhaupt nicht angeben wenn die Content Variable das übergordnete Element ist)
 $CfgDaten["HighChartScriptId"] = 41157 /*[Haus global\Highcharts 2.02\Highcharts_V2.02]*/;      // ID des Highcharts Scripts
 // Highcharts oder Highstock (default = Highcharts
// $CfgDaten['Ips']['ChartType'] = 'Highstock';
 $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())-$te, date("Y",time())); // ab heute 00:00 Uhr
// $CfgDaten["EndTime"] = mktime(23,59,59,  date("m", time()), date("d",time())-$ts, date("Y",time())); // ab heute 23:59 Uhr, oder //$CfgDaten["EndTime"] = time();   // = bis jetzt
 $CfgDaten["EndTime"] = time();  // ab heute 23:59 Uhr, oder //$CfgDaten["EndTime"] = time();   // = bis jetzt




 // damit wird die Art des Aufrufes festgelegt
 $CfgDaten["RunMode"] = "file";  // file, script oder popup
 if ($CfgDaten["RunMode"] == "popup")
 {
  $CfgDaten["WebFrontConfigId"] = 43291 /*[PC]*/;
  $CfgDaten["WFCPopupTitle"]   = "Ich bin der Text, welcher als Überschrift im Popup gezeigt wird";
 }
 // => ab V1.0003, neu
 // => ab V1.0007 zusäztlich WeekValues, MonthValues, YearValues (-1 wenn keine entsprechenden Werte eingelesen werden sollen)
 // 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"]   = 14;       // ist der Zeitraum größer als X Tage werden Tageswerte geladen
 $CfgDaten["AggregatedValues"]["WeekValues"]   = 30;      // ist der Zeitraum größer als X Tage werden Wochenwerte geladen
 $CfgDaten["AggregatedValues"]["MonthValues"]  = 40;      // 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"]   = true;
 // => ab V1.0007, Änderung der 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 404 - This page was not found, please contact us if this url has been working earlier.
 // *** title *** siehe 404 - This page was not found, please contact us if this url has been working earlier.
 //$CfgDaten['title']['text'] = "Bewegungsaktivitäten im Außenbereich";
 // *** subtitle *** siehe 404 - This page was not found, please contact us if this url has been working earlier.
 //$CfgDaten['subtitle']['text'] = "Zeitraum: %STARTTIME% - %ENDTIME%";  // "" = Automatisch über Zeitraum
 //$CfgDaten['subtitle']['Ips']['DateTimeFormat'] = "(D) d.m.Y H:i";    // z.B.: "(D) d.m.Y H:i" (wird auch als Default herangezogen wenn nichts konfiguriert wurde)




 // Datendefinition
 $serie['Id'] = 42109 /*[Haus global\Bewegungen außen\Bewegung Kamera Tor\Bewegung am Tor]*/;
 $serie['type'] = "line";
 $serie['Name'] = "TOR";
 $serie['AggType'] = 0;
 $serie['Unit'] = array(false=>'deaktiv', true=>'aktiv');
 $serie['zIndex'] = 10;
 $serie['color'] = "#AA2AFF";
 $serie['step'] = true;
$serie['ReplaceValues']          = array(false=>0, true=>0.4);
// $serie['ReplaceValues']          = array(false=>2.4, true=>2.8);
 $serie['yAxis'] = 0;
 $serie['visible'] = true;
 $serie['shadow'] = true;
 $serie['lineWidth'] = 2;
 $serie['states']['hover']['lineWidth'] = 2;
 $serie['marker']['enabled'] = false;
 $serie['marker']['states']['hover']['enabled'] = true;
 $serie['marker']['states']['hover']['symbol'] = 'circle';
 $serie['marker']['states']['hover']['radius'] = 4;
 $serie['marker']['states']['hover']['lineWidth'] = 1;
 $CfgDaten["Series"][] = $serie;
 // Datendefinition
 $serie['Id'] = 25734 /*[Haus global\Bewegungen außen\Bewegung Kamera Balkon\Bewegung auf dem Balkon]*/;
 $serie['type'] = "line";
 $serie['Name'] = "BALKON";
 $serie['AggType'] = 0;
 $serie['Unit'] = array(false=>'deaktiv', true=>'aktiv');
 $serie['zIndex'] = 10;
 $serie['color'] = "#2AAAFF";
 $serie['step'] = true;
 $serie['ReplaceValues']          = array(false=>0.6, true=>1);
 $serie['yAxis'] = 0;
 $serie['visible'] = true;
 $serie['shadow'] = true;
 $serie['lineWidth'] = 2;
 $serie['states']['hover']['lineWidth'] = 2;
 $serie['marker']['enabled'] = false;
 $serie['marker']['states']['hover']['enabled'] = true;
 $serie['marker']['states']['hover']['symbol'] = 'circle';
 $serie['marker']['states']['hover']['radius'] = 4;
 $serie['marker']['states']['hover']['lineWidth'] = 1;
 $CfgDaten["Series"][] = $serie;
 // Datendefinition
 $serie['Id'] = 12260 /*[Haus global\Bewegungen außen\Bewegungsmelder hinterm Haus\MOTION]*/;
 $serie['type'] = "line";
 $serie['Name'] = "HINTER DEM HAUS";
 $serie['AggType'] = 0;
 $serie['Unit'] = array(false=>'deaktiv', true=>'aktiv');
 $serie['zIndex'] = 10;
 $serie['color'] = "#FF00D4";
 $serie['step'] = true;
 $serie['ReplaceValues']          = array(false=>1.2, true=>1.6);
 $serie['yAxis'] = 0;
 $serie['visible'] = true;
 $serie['shadow'] = true;
 $serie['lineWidth'] = 2;
 $serie['states']['hover']['lineWidth'] = 2;
 $serie['marker']['enabled'] = false;
 $serie['marker']['states']['hover']['enabled'] = true;
 $serie['marker']['states']['hover']['symbol'] = 'circle';
 $serie['marker']['states']['hover']['radius'] = 4;
 $serie['marker']['states']['hover']['lineWidth'] = 1;
 $CfgDaten["Series"][] = $serie;


 // Datendefinition
 $serie['Id'] = 18741 /*[Haus global\Bewegungen außen\Bewegungsmelder beim Wechselrichter\MOTION]*/;
 $serie['type'] = "line";
 $serie['Name'] = "WECHSELRICHTER";
 $serie['AggType'] = 0;
 $serie['Unit'] = array(false=>'deaktiv', true=>'aktiv');
 $serie['zIndex'] = 10;
 $serie['color'] = "#FFFF7F";
 $serie['step'] = true;
 $serie['ReplaceValues']          = array(false=>1.8, true=>2.2);
 $serie['yAxis'] = 0;
 $serie['visible'] = true;
 $serie['shadow'] = true;
 $serie['lineWidth'] = 2;
 $serie['states']['hover']['lineWidth'] = 2;
 $serie['marker']['enabled'] = false;
 $serie['marker']['states']['hover']['enabled'] = true;
 $serie['marker']['states']['hover']['symbol'] = 'circle';
 $serie['marker']['states']['hover']['radius'] = 4;
 $serie['marker']['states']['hover']['lineWidth'] = 1;
 $CfgDaten["Series"][] = $serie;
 // Datendefinition
 $serie['Id'] = 29148 /*[Haus global\Bewegungen außen\Bewegungsmelder beim Schuppen\MOTION]*/;
 $serie['type'] = "line";
 $serie['Name'] = "SCHUPPEN";
 $serie['AggType'] = 0;
 $serie['Unit'] = array(false=>'deaktiv', true=>'aktiv');
 $serie['zIndex'] = 10;
 $serie['color'] = "#D4AAFF";
 $serie['step'] = true;
 $serie['ReplaceValues']          = array(false=>2.4, true=>2.8);
 $serie['yAxis'] = 0;
 $serie['visible'] = true;
 $serie['shadow'] = true;
 $serie['lineWidth'] = 2;
 $serie['states']['hover']['lineWidth'] = 2;
 $serie['marker']['enabled'] = false;
 $serie['marker']['states']['hover']['enabled'] = true;
 $serie['marker']['states']['hover']['symbol'] = 'circle';
 $serie['marker']['states']['hover']['radius'] = 4;
 $serie['marker']['states']['hover']['lineWidth'] = 1;
 $CfgDaten["Series"][] = $serie;
 // Datendefinition
 $serie['Id'] = 30617 /*[Haus global\Bewegungen außen\Bewegung Kamera Haustür\Bewegung an der Haustür]*/;
 $serie['type'] = "line";
 $serie['Name'] = "HAUSTÜR BLUEIRIS";
 $serie['AggType'] = 0;
 $serie['Unit'] = array(false=>'deaktiv', true=>'aktiv');
 $serie['zIndex'] = 10;
 $serie['color'] = "#7FAAAA";
 $serie['step'] = true;
 $serie['ReplaceValues']          = array(false=>3.0, true=>3.4);
 $serie['yAxis'] = 0;
 $serie['visible'] = true;
 $serie['shadow'] = true;
 $serie['lineWidth'] = 2;
 $serie['states']['hover']['lineWidth'] = 2;
 $serie['marker']['enabled'] = false;
 $serie['marker']['states']['hover']['enabled'] = true;
 $serie['marker']['states']['hover']['symbol'] = 'circle';
 $serie['marker']['states']['hover']['radius'] = 4;
 $serie['marker']['states']['hover']['lineWidth'] = 1;
 $CfgDaten["Series"][] = $serie;
  // Datendefinition
 $serie['Id'] = 30664 /*[Haus global\Anwesenheit\Alarmanlage de/aktivieren\Alarmanlagen Status]*/;
 $serie['type'] = "line";
 $serie['Name'] = "ALARMANLAGE";
 $serie['AggType'] = 0;
 $serie['Unit'] = array(false=>'deaktiv', true=>'aktiv');
 $serie['zIndex'] = 10;
 $serie['color'] = "#7FFFAA";
 $serie['step'] = true;
 $serie['ReplaceValues']          = array(false=>3.6, true=>4.0);
 $serie['yAxis'] = 0;
 $serie['visible'] = true;
 $serie['shadow'] = true;
 $serie['lineWidth'] = 2;
 $serie['states']['hover']['lineWidth'] = 2;
 $serie['marker']['enabled'] = false;
 $serie['marker']['states']['hover']['enabled'] = true;
 $serie['marker']['states']['hover']['symbol'] = 'circle';
 $serie['marker']['states']['hover']['radius'] = 4;
 $serie['marker']['states']['hover']['lineWidth'] = 1;
 $CfgDaten["Series"][] = $serie;
 


 // --------------------------------------------------------------------------
 // y-Achsen-Definition
 // --------------------------------------------------------------------------


 $CfgDaten["yAxis"][0]['title']['text'] = "";
 $CfgDaten["yAxis"][0]['Unit'] = "";
 $CfgDaten["yAxis"][0]['opposite'] = false;
 $CfgDaten["yAxis"][0]['tickInterval'] = 0.2;
 $CfgDaten["yAxis"][0]['min'] = 0;
 $CfgDaten["yAxis"][0]['max'] = 4.0;
 $CfgDaten["yAxis"][0]['title']['style']['color'] = "#FFFFFF";
 $CfgDaten["yAxis"][0]['labels']['style']['color'] = "#FFFFFF";
 $CfgDaten["yAxis"][0]['labels']['staggerLines'] = 2;
 $CfgDaten['yAxis'][0]['labels']['formatter'] = "@function() { 


if (this.value == 0) return ''; if (this.value == 0.4) return '';
                 if (this.value == 0.6) return ''; if (this.value == 1.0) return '';
                      if (this.value == 1.2) return ''; if (this.value == 1.6) return '';
                      if (this.value == 1.8) return ''; if (this.value == 2.2) return '';
                      if (this.value == 2.4) return ''; if (this.value == 2.8) return '';
                      if (this.value == 3.0) return ''; if (this.value == 3.4) return '';
                      if (this.value == 3.6) return ''; if (this.value == 4.0) return '';
                      
                     }@";
  // PlotBands generieren
 for($sensor=0; $sensor < count($CfgDaten['Series']); $sensor++) {
  $pb['zIndex'] = NULL;
  $pb['from']          = $CfgDaten["Series"][$sensor]['ReplaceValues'][0];
  $pb['to']           = $CfgDaten["Series"][$sensor]['ReplaceValues'][1];
  $pb['color']          = 'rgba(96, 96, 96, 0.3)';
  $pb['label']['text']       =  $CfgDaten["Series"][$sensor]['Name'];
  $pb['label']['verticalAlign']    = 'center';
  $pb['label']['align']       = 'left';
  $pb['label']['x']        = 5;
  $pb['label']['y']        = 15;
  $pb['label']['style']['color']    = $CfgDaten["Series"][$sensor]['color'];
  $CfgDaten["yAxis"][0]['plotBands'][] = $pb;
 }


 // Highcharts-Theme
 $CfgDaten['HighChart']['Theme']="ips_andi.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'] = 500;  // in px
 // weitere Optionen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 // Chart-Config "Credits"
 $CfgDaten['credits']['enabled']        = true;
 $CfgDaten['credits']['href']         = "";
 $CfgDaten['credits']['text']         = "";
 $CfgDaten['credits']['position']['align']    = "right";
 $CfgDaten['credits']['position']['x']      = -10;
 $CfgDaten['credits']['position']['verticalAlign']  = "top";
 $CfgDaten['credits']['position']['y']      = 15;
 // *** exporting *** 404 - This page was not found, please contact us if this url has been working earlier.
 $CfgDaten['exporting']['enabled']       = false;
 $CfgDaten['navigation']['enabled']       = false;
 // Chart-Optionen "Tooltip"
   $CfgDaten['tooltip']['useHTML']        = true;
   $CfgDaten['tooltip']['shared']        = true;
   $CfgDaten['tooltip']['crosshairs'][]      = array('width' =>1,'color' =>'grey','dashStyle'=>'dashdot' );
 $CfgDaten['tooltip']['crosshairs'][]      = array('width' =>1,'color' =>'grey','dashStyle'=>'dashdot' );


 $CfgDaten['tooltip']['formatter']       = "@function() {
                        var s = '<b>' + Highcharts.dateFormat('%d.%m.%Y, %H:%M', this.x) +'</b><br/>';
                                   $.each(this.points, function(i, point) {
                         if (point.y == 0) unit = 'aus'; if (point.y == 0.4) unit = 'ein';
                         if (point.y == 0.6) unit = 'aus'; if (point.y == 1.0) unit = 'ein';
                         if (point.y == 1.2) unit = 'aus'; if (point.y == 1.6) unit = 'ein';
                         if (point.y == 1.8) unit = 'aus'; if (point.y == 2.2) unit = 'ein';
                         if (point.y == 2.4) unit = 'aus'; if (point.y == 2.8) unit = 'ein';
                         if (point.y == 3.0) unit = 'aus'; if (point.y == 3.4) unit = 'ein';
                         if (point.y == 3.6) unit = 'aus'; if (point.y == 4.0) unit = 'ein';
                         if (point.y == 4.2) unit = 'aus'; if (point.y == 4.6) unit = 'ein';
                         if (point.y == 4.8) unit = 'aus'; if (point.y == 5.2) unit = 'ein';
                         if (point.y == 5.4) unit = 'aus'; if (point.y == 5.8) unit = 'ein';
                                       var step = {}[this.series.name];
                                       s += '<br/>' + '<span style=color:' + point.series.color + '>' + point.series.name +': </span><b>' + unit + '</b>';
                                   });
                                   return s;
                               }
                   @";


   $CfgDaten['legend']['enabled']   = false;
   $CfgDaten['legend']['borderRadius']  = 0;
   $CfgDaten['legend']['borderColor']  = "#1b2b3b";
   $CfgDaten['legend']['shadow']    = true;
   $CfgDaten['chart']['zoomType']   = "x";
   $CfgDaten['chart']['animation']   = false;


 // -------------------------------------------------------------------------------------------------------------------------------------
 // und jetzt los ......
 $s=IPS_GetScript($CfgDaten["HighChartScriptId"]);      // Id des Highcharts-Scripts
 include($s['ScriptFile']);
   // => ab V1.0003
   // hier werden die CfgDaten geprüft und bei Bedarf vervollständigt
 $CfgDaten = CheckCfgDaten($CfgDaten);
 // => ab V1.0003 neu, ab V1.0006 Erweiterung Parameter "popup"
 if (isset($CfgDaten["RunMode"])
  && ($CfgDaten["RunMode"] == "script" || $CfgDaten["RunMode"] == "popup"))
 {
  // Variante1: Übergabe der ScriptId. Daten werden beim Aufruf der PHP Seite erzeugt und direkt übergeben. Dadurch kann eine autom. Aktualisierung der Anzeige erfolgen
  if ($IPS_SENDER != "WebInterface")
  {
   WriteContentWithScriptId ($CfgDaten, $IPS_SELF);      // und jetzt noch die ContentTextbox
   return;                                               // Ende, weil durch die Zuweisung des Script sowieso nochmals aufgerufen wird
  }
  $sConfig = CreateConfigString($CfgDaten);              // erzeugen und zurückgeben des Config Strings
 }
 else
 {
  //Variante2: Übergabe des Textfiles. Daten werden in tmp-File gespeichert. Eine automatische Aktualisierung beim Anzeigen der Content-Textbox erfolgt nicht
  $sConfig = CreateConfigString($CfgDaten);             // erzeugen und zurückgeben des Config Strings
  $tmpFilename = CreateConfigFile($sConfig, $IPS_SELF);            // und ab damit ins tmp-Files
  if ($IPS_SENDER != "WebInterface")
  {
   WriteContentWithFilename ($CfgDaten, $tmpFilename);        // und jetzt noch die ContentTextbox
  }
 }


?>

Danke!

Super gut!! Genau das ist die Anpassung, die es brauchte.
Zu finden im Highcharts-Script (bei mir V3.00) unter Zeile 457:

if ($variable['VariableValue']['ValueType'] != 3)

ändern in

if ($variable['VariableType'] != 3)

Und genau das finde ich leider in meinen Skript oben nicht.
Hat keiner eine Idee was ich dort ändern muss?

Du suchst noch immer im falschen Script. Nimm mal Script 41157 :wink:
Michael

Wo er recht hat, da hat er recht! :wink: