Ich habe immer wieder in den PHP Informationen einen „roten“ Thread der anscheinend schon seit mehreren Tagen hängt.
Es ist niemals das gleiche Skript darum gehe ich davon aus dass es in Ordnung ist.
IPS kann ich auf dem normalen Weg nicht mehr beenden.
Was bedeutet die rote Farbe?
Wie kann ich den Thread beenden?
Normalerweise werden die Skripts nach 150sec abgebrochen oder? (max_execution_time = 150)
Der Wert steht entweder in der php.ini oder wird manuell im Script eingestellt. Eins Script sollte aber niemals so lange laufen, dann ist eher meist die Logik dahinter falsch. Hast Du evtl. in den rot markierten Threads einen include der das Script zum hängen bringt? Beenden kannst Du das, wenn IPS den Thread nicht selber freigibt, nur durch Neustart des Dienstes. Hier ist Fehlersuche angesagt.
Benutzt du in den Skripte die hängen geblieben sind irgendwelche Funktionen wie z.B. file, file_get_contents oder andere Funktionen die was mit Netzwerk zu tun haben?
<?
RegVar_SendText(57819 /*[Zuhaus\LCN\Register\Register Variable Socket senden]*/,$IPS_VALUE); //nur für Registervariable
SetValueString(58146 /*[Zuhaus\LCN\Register\PCK]*/,$IPS_VALUE); // nur String in eine Variable schreiben
$str = explode('.', $IPS_VALUE); //%M000006.01251 Zählerstring in ein Array schreiben
//print_r ($str);
if ($str[0] == "%M000006") // wenn Modul 6
{
//echo "es hat geklapt";
SetValueInteger(50141 /*[Zuhaus\LCN\Stromzähler\Umdrehungszähler LCN]*/,(int)$str[1]); // Zählerstand in Integer umwandeln und in eine Var schreiben
}
?>
<?
<?
function TextboxListe($ID,$wert,$menge){
//Funktion zur Listenerstellung von Attain (ID , aktuellerWert , Menge der zu berücksichtigenden Werte)
$object = IPS_GetObject($ID);
// echo $object['ObjectInfo'];
$buffer = explode("
",$object['ObjectInfo'],$menge);
array_unshift ($buffer, $wert); // neuen Messwert ins Array eintragen
$buffer = array_slice ( $buffer, 0, $menge ); // alten Wert abschneiden
$string = implode("
",$buffer);
IPS_SetInfo($ID,$string); // im Infobereich der Variablen, das Array ablegen
SetValue($ID,$string); // Variable beschreiben
return ($string);
}
if ($IPS_VARIABLE == 42993 /*[Überwachung\Warnung (aktuell)]*/)
{
$file = IPS_GetKernelDir()."webfront/Warnung.wav";
TTS_GenerateFile(49696 /*[Sonstiges\Text To Speech]*/, $IPS_VALUE, $file, 6);
$ID = 38044 /*[Überwachung\Warnungen]*/;
//echo "Achtung: ".$IPS_VALUE."<embed src =\"Warnung.wav\" hidden=\"true\" autostart=\"true\"></embed>";
WFC_SendPopup(42002 /*[WebFront Configurator]*/,'ACHTUNG','<h1>'.$IPS_VALUE.'</h1><embed name="Musiktitel" src="Warnung.wav" border="2" width="164" height="25" autostart="true" Delay="0" VOLUME="100" loop="false" controls="smallconsole">');
//TTS_Speak(49696 /*[Sonstiges\Text To Speech]*/,$IPS_VALUE,false); // bei Warnung vorlesen
}
if ($IPS_VARIABLE == 31054 /*[Überwachung\Meldung (aktuell)]*/)
{
$ID = 19563 /*[Überwachung\Meldungen]*/;
//TTS_Speak(49696 /*[Sonstiges\Text To Speech]*/,$IPS_VALUE,false);
}
$string = date("d.m. H:i:s"). " - ".$IPS_VALUE;
$menge = 30; // Zeilen
//WFC_SwitchPage(42002 /*[WebFront Configurator]*/,"Warnungen"); // auf Warnungsfenster umschalten
SetValueInteger(29774 /*[Sonstiges\Tab]*/,6);
TextboxListe($ID,$string,$menge);
?>
Das sind jetzt nur 2 Beispiele. Ich muss das mal Beobachten.
Hallo zusammen
Ich wollte das Thema nochmal aufgreifen ich habe auch ein Skript das sich alle paar Tage mal aufhängt vieleicht kann mir da ja Jemand helfen.
<?
if (IPS_SemaphoreEnter("KritischerPunkt", 1000))
{
// ...Kritische Befehle ausführen
RegVar_SetBuffer(43289 /*[Heizung\Heizung]*/,"");
IPS_Sleep(500);
COMPort_SendText(42709 /*[Siemens Heizung]*/, "1800" .chr(13).chr(10));
//Semaphore wieder freigeben!
IPS_SemaphoreLeave("KritischerPunkt");
}
else
{
return; //IPS_ScriptThreadExists(2); // ...Keine ausführung Möglich. Ein anderes Skript nutzt den "KritischenPunkt" für länger als 1 Sekunde, sodass unsere Wartezeit überschritten wird.
}
?>
Ich hatte genau dasselbe „Problem“… es stört mich nicht jedoch hatte ich auch nahezu dauerhaft 60-90 Prozent auf der CPU. Sobald ich jedoch den Haken „letzte Aktion auswerten“ entferne verschwindet auch im PHP Info Log die Alexa einträge. Ich hatte zuvor erstmal mit der aktualisierungsvariable gespielt und diese auf 30 Sekunden gesetzt und mich gewundert, weshalb immer noch im Sekundentakt etwas auftaucht. Wofür ist dieser Schalter? Wahrscheinlich sehe ich dann nicht mehr, welchen Befehl Alexa zuletzt ausgeführt hat oder? Kann man das nicht auch mit einem Zeitzyklus versehen? (der ggf. nicht jede Sekunde beträgt)