IPS verabschieded sich ....

Hi,

also dieses Scriptchen das ich mir für meinen FS20 PIR ausgedacht (naja okay teils dem Forum entwedet :slight_smile: ) 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 …

Anti

Hast du mal Logfile gekuckt? Vielleicht eine Endlosschleife ?

mfG Franz

Ednlosschleife= beim false case…


SetValueBoolean($statusvar, false); 

Hierduch wird das script neu getriggert und setzt


SetValueBoolean($statusvar, false); 

wieder
usw.

–edit–

NEE SORRY FALSCH
–ende edit–

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 :wink: Wenn schon viel sachen so vor sich hinlaufen …

Anti
bei dem es sicher noch geht.

Hallo,

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.

mfG Franz

Neeh Keine schleiffe sondern 2x durchlauf bei false

Bei True :


$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); 
  } 
}

und danach jede 120s bis unendlich… !! Dein script hat keine selbst-ausschaltung in sich.!!

Bei true → false


$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) 
  { 
  } 
}

Jetzt bei ‚Execute‘ und False


$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") { 
} 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); 

} 

Wo direkt danach:


$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)  //DAEBEN AUF FALSE GESETZT
  {   } 
} 

also keine schleife aber dein script ist nicht komplett

Ähm nöö :wink:

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 
}