Scriptengine Result for event 12345

Hallo an Alle,

in meinen Meldungen tauchen permanent die Results… auf.

Welcher Code löst das aus und wie kann ich es ausschalten?

VG Dirk

Der Code in dem Ereignis 12345. Einfach schauen, dass dieser Code keine Ausgaben macht.

paresy

Macht er nicht. …sonst würde ich nicht fragen.


include(IPS_GetScriptIDByName("include_Mathematik",58036 /*[Scripts\Allgemein]*/ ).".ips.php");
$CalcHelligkeit = "CalcHelligkeit";
if (IPS_SemaphoreEnter($CalcHelligkeit,300)) {
	$Offset = 77;
	$ID_Helligkeit = 15936 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\Helligkeit]*/ ;
	$ID_Sensor = 23925 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\VALUE]*/ ;
	$ID_Schwelle_SonnenscheinErkennung = 49824 /*[Systeminstanzen\Variablen\Beschattung\Einstellungen für automatische Beschattung\Schwelle für Sonnenscheinerkennung (lx)]*/ ;
	$ID_SonnenscheindauerSekunden = 39629 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\SonnenscheindauerSekunden]*/ ;
	$ID_SonnenscheindauerMinuten = 44733 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\Sonnenscheindauer]*/ ;
	$ID_SonnenscheindauerStatistik = 38002 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\Sonnenscheindauer Statistisch]*/ ;
	$ID_Beschattung_SonneScheint = 18614 /*[Systeminstanzen\Variablen\Beschattung\Einstellungen für automatische Beschattung\Beschattung_Sonne_scheint]*/ ;
	$ID_Schwelle_SonnenscheinErkennung = 49824 /*[Systeminstanzen\Variablen\Beschattung\Einstellungen für automatische Beschattung\Schwelle für Sonnenscheinerkennung (lx)]*/;
	$ID_ArchivHandler = 46855 /*[Archive Handler]*/;
	$ID_AVG_Helligkeit = 40954 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\Durchschnittliche Helligkeit]*/ ;
	/*--------------------------------------*
	 |   Werte des alten Messwertes holen   |
	 *--------------------------------------*/

	$ObjectInfoOld = IPS_GetVariable($ID_Helligkeit);
	$HelligkeitOld = getvalueinteger($ID_Helligkeit);
	$ZeitpunktLetzterMesswert = $ObjectInfoOld['VariableUpdated'];

	// Neue Helligkeit berechnen
	$VoltProLux = 0.01;
	$Value = (int)($_IPS['VALUE'] - $Offset);
	if ($Value < 0) $Value = 0;
	$Value = ( $Value / $VoltProLux);
	// Neue Helligkeit eintragen
	setvalueinteger($ID_Helligkeit, $Value);

	/*--------------------------------------*
	 |   Werte des neuen Messwertes holen   |
	 *--------------------------------------*/
	$ObjectInfoNew = IPS_GetVariable($ID_Helligkeit);
	$HelligkeitNew = getvalueinteger($ID_Helligkeit);
	$ZeitpunktNeusterMesswert = $ObjectInfoNew['VariableUpdated'];


	/*--------------------------------------*
	 |   Zeitdauer der Sonneneinstrahlung	 |
	 |					  ermitteln		  			 |
	 *--------------------------------------*/
	 $SchwelleHelligkeit = getvalueinteger($ID_Schwelle_SonnenscheinErkennung);
	 $Zeitdifferenz = $ZeitpunktNeusterMesswert - $ZeitpunktLetzterMesswert; //Zeitdifferenz beider Messwerte in s (Sekunden)
	 $Sonnenscheindauer = getvalueinteger($ID_SonnenscheindauerSekunden); // Sonnenscheindauer in m (Minuten)
	 if ( ($HelligkeitOld >= $SchwelleHelligkeit) && ($HelligkeitNew >= $SchwelleHelligkeit) ){
	   $Sonnenscheindauer += (int) ($Zeitdifferenz);
	 } else if(($HelligkeitOld >= $SchwelleHelligkeit) || ($HelligkeitNew >= $SchwelleHelligkeit)){
		if ($HelligkeitOld > $HelligkeitNew){
			$Sonnenscheindauer += (int)  ((($SchwelleHelligkeit - $HelligkeitOld)	* $Zeitdifferenz)
				/($HelligkeitNew - $HelligkeitOld));
		} else {
			$Sonnenscheindauer += (int)  ( (($HelligkeitNew - $SchwelleHelligkeit)* $Zeitdifferenz)
				/($HelligkeitNew-$HelligkeitOld));
		}
	 }

	if (date("d", $ZeitpunktNeusterMesswert) <> date("d",$ZeitpunktLetzterMesswert)) {
		setvalueinteger($ID_SonnenscheindauerStatistik, getvalueinteger($ID_SonnenscheindauerMinuten));
	   $Sonnenscheindauer = 0;
	}

	//print_r ( date("d", $ZeitpunktNeusterMesswert));
	//print_r ( date("d", $ZeitpunktLetzterMesswert));
	setvalueinteger($ID_SonnenscheindauerSekunden,$Sonnenscheindauer);
	setvalueinteger($ID_SonnenscheindauerMinuten,(int)($Sonnenscheindauer/60));

 	//Durchschnittliche Helligkeit der letzten x Minuten berechnen
	
	$now = time();
	$Start = time()- 300;
	$End = time();
	$dat = AC_GetLoggedValues($ID_ArchivHandler, $ID_Helligkeit , $Start , $End, 0);
	foreach ($dat as $d) {
		$data[] = $d['Value'];
	}
	
	if (isset($data)) {
		$AVG_Helligkeit = getMittelwert($data);
	} else {
	   $AVG_Helligkeit = 0;
	}
	setvalueinteger($ID_AVG_Helligkeit, $AVG_Helligkeit);
	//Status Sonne scheint für beschattung setzen
	setvalueboolean($ID_Beschattung_SonneScheint,($AVG_Helligkeit >= getvalueInteger($ID_Schwelle_SonnenscheinErkennung)));
	IPS_SemaphoreLeave($CalcHelligkeit);
}
?>

@paresy
Ich hab noch einen Hinweis…

Wenn ich die includes entferne kommt die Meldung nicht mehr. Die Includes machen aber auch keine Ausgaben.


<?
 //Diese Funktion berechnet die Standardabweichung
function getStandardabweichung(&$werte) {
     $mittelwert = (array_sum($werte) / count($werte));
     $delta = 0;
     foreach ($werte as $wert)
         $delta = $delta + pow(($mittelwert - $wert), 2);

     return (round(sqrt($delta / count($werte)), 3));
}

function getMittelwert($werte) {
	  if ((count($werte) > 0) and isset($werte))
     		return (round((array_sum($werte) / count($werte)), 3));
	  else
	   return 0;
}


function getVarianz($werte) {
	$mittelwert = (array_sum($werte) / count($werte));
	$delta = 0;
	foreach ($werte as $wert)
		$delta = $delta + pow(($mittelwert - $wert), 2);

	return(round($delta / count($werte), 3));
}

function getMedian($werte) {
  sort($werte);
  if (count($werte) % 2)
      return ($werte[(count($werte) + 1) / 2]);
  return (round(($werte[count($werte) / 2] +
      $werte[((count($werte) / 2) + 1)]) / 2, 2));
}

?>






spezialschalter.PNG

Dirk, hast du noch etwas gefunden?

Ich habe das gleiche Verhalten mit einem anderen Script, es gibt aus meiner Sicht keine Ausgaben, aber die Meldung der ScriptEngine kommt jedes mal und müllt das Log zu.

Ich habe kein include, aber leider etwas objektorientiertes, erkenne dort aber keinerlei Ausgaben.

Habt ihr evtl. nach dem ?> (also ganz am Ende) noch Leerzeichen oder Zeilen?

paresy

Michael :confused:, nein, natürlich nicht :stuck_out_tongue:

Script

Kann es bei mir sein, das „system“ etwas ausgibt, was eigentlich verarbeitet wird und in der jeweiligen Variablen landen soll.

Update:
Bei mir ist es system (PI), mit IPS_Execute gibt es die Ausgabe nicht.

Dirk, was hast du für eine Ausgabe?

Ich mache keine Ausgabe. Das Script ist oben im Post.

Wenn das Skript in Post #3 eine 1:1 Kopie ist dann entferne am Schluß mal das Leerzeichen hinter dem „?>“.

Alle Leerzeichen am Ende auch aus den Include Scripts entfernt. …jetzt sind die Meldungen weg.

Danke!!!

Mittlerweile ein echter Klassiker… :slight_smile:

:d:d:d:d:d:d:d:d

Hi,
ich kann den Klassiker noch etwas erweitern. Wenn man vor dem ersten <? ein Leerzeichen hat bekommt man auch die netten Meldungen:-)

Ralf

Gerade das ruft irgendwie danach, es automatisch lösen, anstatt die Nutzer rumsuchen zu lassen

Das wäre sehr schlecht.
Es kann ja durchaus gewollt sein, das hier z.b. HTML ausgegeben wird und das Script über Webhook aufgerufen wird.
Michael

Mittlerweile ist der Schließen-Tag im initialen Skript ja deswegen auch gar nicht mehr drin. Damit sollte der Fehler auch hoffentlich deutlich seltener auftauchen.