Skript beenden?

Hallo zusammen,
habe schon ein bisschen hier gesucht in der Community und von Ferengi-Master (KLICK) die gleiche Frage gefunden. Diese wurde jedoch nicht 100%tig beantwortet und bezog sich noch auf IPS 1.x.

Also…gibt es inzwischen eine andere, einfachere Möglichkeit ein laufendes Skript (Laufzeit ca 16 Minuten) durch ein anderes Skript oder Ereignis zu beenden (zB durch einen Befehl)? Den Hintergrund zu erklären dauert zu lange.
Ich suche hier NICHT nach break; oder return; oder eine Variable dauernd zu prüfen damit das Skript beendet wird!

Ich möchte einfach nur das ein Skript das durch ein Ereignis angetriggert wird ein anderes, laufendes Skript beendet.
Also wenn in den 16 Min etwas passiert dann soll das Skript beendet werden. Das Skript wartet 15 Minuten lang mit einem sleep(x); Befehl.

Gibt es da sowas? Wäre dringend… ;/

Danke!

Lega

Das Skript wartet 15 Minuten lang mit einem sleep(x); Befehl.

Macht das Sinn und funktioniert hier dann auch alles noch normal?

Siehe Bemerkungen zu „sleep“ hierzu: http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/ablaufsteuerung/ips-sleep/

Ja, läuft super. Muss es halt nur zwingend abbrechen können.

Du blockierst damit bis zu geschlagene 16 Minuten einen PHP-Thread in IPS. Und Du musst noch dazu die maximal erlaubte Ausführungszeit für PHP-Skripte nach oben setzen. Wenn es blöd läuft kannst Du damit Dein ganzes System abtöten.

Erkläre uns doch mal was Du da genau erreichen willst. Da gibt es sicher eine elegantere Lösung.

System läuft Stabil seit über nem Jahr mit dem Skript…nur ist mirn Bug aufgefallen den ich damit beheben will…:

Der Zustand der Alarmanlage wird mit Abschließen der Haustür auf „SCHARFGEHEND“ gesetzt. Das Skript wartet nun 15 Minuten bis der Zustand auf „Scharf“ geht, Grund: Die Bewegungsmelder werden in meinem Alarmskript abgefragt und die brauchen bekanntlich ja ein paar Min bis diese wieder auf „Untätig“ gehen.

Wird nun innerhalb der 15 Min die Tür wieder aufgeschlossen läuft das Skript weiter. Ich habe nach den 15 Min zwar eingebaut, das wenn die Tür wieder auf ist das Skript abgebrochen wird, aber wenn ich nun innerhalb der 15 Min wieder abschließe, gibts Alarm weil die Bewegungsmelder noch auf Bewegung stehen…

Beispiel:

  1. Ich schließe ab, Skript startet Timer (15 Min)
  2. Ich komme nach zB. 1 Min wieder rein weil ich was vergessen habe
  3. Alarm wird durch ein anderes Skript auf Unscharf gesetzt [durch aufschließen der Tür] (hier müsste das Skript abgebrochen werden)
  4. Ich gehe nach 10 Min wieder und schließe wieder ab (Also lief der Timer bisher 11 Min)
  5. Nach den 15 Min prüft das Skript ob die Tür abgeschlossen ist, ist ja hier jetzt der Fall, Zustand geht also auf Scharf
  6. Bewegungsmelder brauchen wieder die Zeit, diese geht aber über das scharfgehen hinaus, klinken diese nun auf Untätig, gibt es Alarm, da die Alarmanlage scharf ist. (Bewegungsmelder klinken ja nicht alle gleichzeitig ab - somit ist dann mind. 1 noch auf Bewegung und löst den Alarm aus)

Noch zur Info: Der Timer läuft nur 1 mal und das „Scharfgehend-Skript“ wird nicht doppelt ausgeführt.

Ich müsste also das Scharfgehend-Skript einfach nur abrechen können wenn ich die Tür wieder aufschließe. Ist der Alarm einmal scharf und wird in den 15 Min die Tür nicht mehr geöffnet, ist alles Super.

Hoffe das ist verständlich was ich erreichen will. :rolleyes:

Warum setzt Du nicht einen Skript Timer der das fragliche Skript nach 15 Minuten ausführt. Solltest Du „etwas vergessen“ haben liesse sich dieser Timer wieder löschen bzw. abschalten oder nach erneutem abschliessen wieder auf 15 Minuten setzen.

Wer das Skript dann getriggert hat kannst Du im Skript durch $_IPS[‚SENDER‘] dann entsprechend auswerten.

Solltest Du „etwas vergessen“ haben liesse sich dieser Timer wieder löschen bzw. abschalten oder nach erneutem abschliessen wieder auf 15 Minuten setzen.

Wie kann ich den denn löschen bzw abschalten oder erneut setzen?

Guckst Du Doku.

Damit mauerst Du keinen PHP-Thread ein und hast die urpsprüngliche Problemlösung auch gelöst.

Oder hier … :eek:

Danke.

Du redest doch bestimmt vom dem Befehl oder?

"IPS_SetScriptTimer($ScriptID, 10);"

Sprich, anstatt des Sleep Befehls setze ich „SetScriptTimer“ auf 900 Sekunden (15Min). $ScriptID ist dann das Skript, was den Alarm auf scharf setzt? Wie kann ich diesen Timer dann deaktivieren wenn die Tür wieder auf geht? Sehe dazu irgendwie keinen Befehl…

IPS_SetScriptTimer($ScriptID, 0); 

mit

IPS_SetScriptTimer($ScriptID, 0);  

EDIT: kronos war schneller :slight_smile:

Ach da stehts, hab ich überlesen, sorry. :smiley:

Ich teste das mal und melde mich dann gleich wieder wies aussieht. Danke für eure Hilfe! :rolleyes:

EDIT: Funktioniert prima, endlich, DANKE NOCHMAL!!! :smiley: :loveips: