Script innerhalb eines Ereignisses liefert in 4.0 Fehlermeldung

Hallo zusammen,

mit dem unten stehenden Script innerhalb eines Ereignisses lese ich den Inhalt einer CSV-Datei aus und weise das Ergebnis Variablen zu.
Das Script hat in Versin 3.4 einwandfrei funktioniert. Jetzt in 4.0 wird unter Meldungen folgendes angezeit:

05.03.2016 10:09:30*| ScriptEngine*| Result for Event 24752
<br />
<b>Parse error</b>: syntax error, unexpected ‚<‘ in <b>-</b> on line <b>1</b><br />
Abort Processing during Fatal-Error: syntax error, unexpected ‚<‘
Error in Script - on Line 1

Wenn ich den Code in einem Script ausführe, erscheint keine Fehlermeldung.


<?php
     $st=file_get_contents("http://192.168.178.190/csv.html");    // web-Seite einlesen
     echo "<br>".$st."<br>";                                                     // Inhalt als String ausgeben
     $sta= explode( ",", $st, 100 );                                            // String in Array wandeln mit Trennzeichen Komma, bis zu 100 Elemente
	  //echo "Elemente im Array: " . count($sta) ."<br>
";
	  //echo "Wert Nr. 9 lautet: " . $sta[9]."<br>
";
	  $Stand_Spuelmaschine = $sta[9]/1000;
     $Stand_Backofen_links = $sta[10]/1000;
	  $Stand_Backofen_rechts = $sta[11]/1000;
     $Stand_Kuehlschrank = $sta[12]/1000;
	  $Stand_Server = $sta[13]/1000;
     $Stand_Insel = $sta[15]/1000;
	  $Stand_Sauna = $sta[16]/1000;
	  $Ist_Spuelmaschine = $sta[18];
     $Ist_Backofen_links = $sta[19];
	  $Ist_Backofen_rechts = $sta[20];
     $Ist_Kuehlschrank = $sta[21];
	  $Ist_Server = $sta[22];
     $Ist_Insel = $sta[24];
	  $Ist_Sauna = $sta[25];
	  $Ist_Gesamt = $Ist_Spuelmaschine + $Ist_Backofen_links + $Ist_Backofen_rechts + $Ist_Kuehlschrank + $Ist_Server + $Ist_Insel + $Ist_Sauna;

	  SetValue (42767 /*[Alle Geräte\Verbräuche\Zählerstand: Spülmaschine]*/, $Stand_Spuelmaschine);
	  SetValue (39920 /*[Alle Geräte\Verbräuche\Zählerstand: Insel]*/, $Stand_Insel);
	  SetValue (41659 /*[Alle Geräte\Verbräuche\Zählerstand: Backofen links]*/, $Stand_Backofen_links);
	  SetValue (36953 /*[Alle Geräte\Verbräuche\Zählerstand: Backofen links]*/, $Stand_Backofen_rechts);
	  SetValue (57668 /*[Alle Geräte\Verbräuche\Zählerstand: Kühlschrank]*/, $Stand_Kuehlschrank);
	  SetValue (54116 /*[Alle Geräte\Verbräuche\Zählerstand: Sauna]*/, $Stand_Sauna);
	  SetValue (57838 /*[Alle Geräte\Verbräuche\aktueller Verbrauch: Kühlschrank]*/, $Ist_Kuehlschrank);
	  SetValue (53621 /*[Alle Geräte\Verbräuche\aktueller Verbrauch: Backofen links]*/, $Ist_Backofen_links);
	  SetValue (56829 /*[Alle Geräte\Verbräuche\aktueller Verbrauch: Backofen links]*/, $Ist_Backofen_rechts);
	  SetValue (15000 /*[Alle Geräte\Verbräuche\Zählerstand: Server]*/, $Stand_Server);
	  SetValue (58856 /*[Alle Geräte\Verbräuche\aktueller Verbrauch: Server]*/, $Ist_Server);
	  SetValue (41596 /*[Alle Geräte\Verbräuche\aktueller Verbrauch: Spülmaschine]*/, $Ist_Spuelmaschine);
	  SetValue (38501 /*[Alle Geräte\Verbräuche\aktueller Verbrauch: Sauna]*/, $Ist_Sauna);
	  SetValue (17398 /*[Alle Geräte\Verbräuche\aktueller Verbrauch: Insel]*/, $Ist_Insel);
	  SetValue (17169 /*[Alle Geräte\Verbräuche\aktueller Verbrauch: Gesamt 1]*/, $Ist_Gesamt);

	  if($Ist_Gesamt > 200)
	     {
		  SetValue (21302 /*[Gewerke\Sicherheit\Stromverbrauch:]*/, True);
		  }
	  else
        {
		  SetValue (21302 /*[Gewerke\Sicherheit\Stromverbrauch:]*/, False);
		  }

?>


Hat jemand eine Erklärung für das Verhalten?

Vielen Dank schon mla und viele Grüße

Moin Justus!

Herzlich Willkommen im IPS Forum :slight_smile:

Hast du zufällig hier davor ein Leerzeichen?

Falsch:
" <?"

Richtig:
„<?“

Grüße,
Chris

Hallo Chris,

nein, kein Leerzeichen. Dubioserweise läuft das ganze als „normales“ Script auch ohne Fehlermeldung und aktualisiert die Variablen. Nur innerhalb eines Ereignisses läuft es nicht.

Ich habe grade mal versucht, das Script nicht direkt im Ereignis auszuführen. Dazu starte ich das Script im Ereignis über IPS_Runscript. Liefert aber die gleiche Fehlermeldung.

Grüße
Justus

Hmmm…

Du könntest es mal mit „@file_get_contents…“ probieren. Oder Alternativ mit „SysGetURLContent“ oder cURL.

Grüße,
Chris

So, läuft wieder. Lasse jetzt das Ereignis über „Aktion“ das Skript starten.

Das scheint aber ein Bug zu sein, wenn sich das Script innerhalb des Ereignisses anders verhält.

Danke für die Tipps.

Das ist in der Tat eine Inkonsistenz. Es wird immer ein <? in der 4.0 hinzugefügt. Die 3.4 überprüft korrekt, ob bereits eins vorhanden ist.
Ist mit dem nächsten Update korrigiert.

paresy