also dieses Scriptchen das ich mir für meinen FS20 PIR ausgedacht (naja okay teils dem Forum entwedet ) habe scheint nach einer Weile IPS zu hängen (reagiert nicht mehr auf Funk). Beendet man IPS und startet neu ist wieder ne weile gut. Nun die Preisfrage, wieso ist das so?
Script:
$statusvar = "BEWEG_1"; // Die wird abgefragt / Reseted
$scriptname = "Beweg1"; // Wie heisst das script (timer setzung)
$dauer = 120; // Wennn an erkannt wird wielange bleibts so ?
$bewegung = GetValueBoolean($statusvar);
if($IPS_SENDER == "Variable") {
if ($bewegung)
{
echo "Melder an";
// FS20_SwitchDuration (65510, True, 120);
// IPS_SetScriptTimer ($scriptname ,0);
IPS_SetScriptTimer ($scriptname, $dauer);
}
} else {
echo "Melder aus";
IPS_SetScriptTimer ($scriptname ,0);
SetValueBoolean($statusvar, false);
$msg = "Achtung! Keiner mehr im Raumm (2 min keine Bewegung registriert)!";
$msg = str_replace (" ","%20", $msg);
//$fd = fopen("http://192.168.1.4/control/message?popup=$msg","r");
//fclose($fd);
}
Wenn dieses script of onupdate Beweg1 getriggert wird ist irgentwann sense …
Wieso GGGsss ich glaube das könnte stimmen … ist ja on Update …
gyabano: wie findet man das im Log (in welchem nehme mal an debugger) am besten ? Einfach nur gucken ob sich die aufrufe wiederholen? Ich meine das könnte teilw. lästig werden Wenn schon viel sachen so vor sich hinlaufen …
das siehst du sofort, wenn sich ein Befehl im Millisekndentakt wiederholt, und aus dieser Schleife nicht mehr rauskommt, sprich sich selbst immer wieder selbst triggert.
Fredje hat es schon angedeutet: Wenn du in einem Skript eine Variable mit TRUE oder FALSE beeinflussen kannst, und das Skript auch daraufhin triggerst, findest du dich eben in einer Endlosschleife wieder.
Der Fragt ja als erstes ob Trigger Varibale war wenn nicht (timer) wird ja auf false gesetzt das ist ja die ausschlatung … aber genau da is der pferdefuss, es wird im else zweig nicht nochmal geprüft ob $bewegung true ist und daher in der Tat endlosschleife, ne zusätzliche
if ($bewegung)
im else zweig der
if($IPS_SENDER == „Variable“)
scheint das Problem gelöst zu haben.
$statusvar = "BEWEG_1"; // Die wird abgefragt / Reseted
$scriptname = "Beweg1"; // Wie heisst das script (timer setzung)
$dauer = 120; // Wennn an erkannt wird wielange bleibts so ?
$bewegung = GetValueBoolean($statusvar);
if($IPS_SENDER == "Variable") {
if ($bewegung)
{
echo "Melder an";
// FS20_SwitchDuration (65510, True, 120);
// IPS_SetScriptTimer ($scriptname ,0);
IPS_SetScriptTimer ($scriptname, $dauer);
}
} else if ($bewegung) {
echo "Melder aus";
IPS_SetScriptTimer ($scriptname ,0);
SetValueBoolean($statusvar, false);
$msg = "Achtung! Keiner mehr im Raumm (2 min keine Bewegung registriert)!";
$msg = str_replace (" ","%20", $msg);
//$fd = fopen("http://192.168.1.4/control/message?popup=$msg","r");
//fclose($fd);
} else { // hier dann beim 2ten unvermeidlichen Aufruf nichts tun
}