IPS_SetEventScript

Hi,

ich komme mit der neuen Funktion IPS_SetEventScript nicht klar.
Bisher (V2.0) habe ich mit „IPS_SetEventScript($eid, $IPS_SELF);“ bestimmen können, welches Script durch das Event ausgeführt wird. Anschliessend hab ich anhand er Position des auslösenden Timers im Objektbaum den dazugehörenden Aktor ermitteln und schalten können.

Wie ich hier im Forum gelesen habe, kann man die Events scheinbar nur noch unterhalb des auszuführenden Scriptes positionieren, also funktioniert meine bisherige Vorgehensweise nicht mehr.

Eventuell gibt es ja dafür jetzt den php code den ich in die Events mit einbringen kann, wenn ich das richtig verstanden habe.
Kann ich damit z.B. dem auszulösendem Script eine zusätzliche Variable (zielid) übergeben?

Wenn das nicht geht, hat vielleicht Jemand eine Idee wie ich das sonst lösen könnte?

Übrigens befindet sich die benötigte „zielid“ auch im Namen des Timers. Vielleicht kann man damit was anfangen aber ich denke da muss es auch eine elegantere Möglichkeit geben.

Gruß
Smudo

Hi,

mir ist immer noch nichts brauchbares eingefallen zu meinem Problem.

Wie kann ich ermitteln, welcher Timer das Script gestartet hat (13 Timer hängen an dem Script) wenn ich nicht die ID des Timers nehmen kann, da dieser zuvor automatisch erstellt wurde?

Andere Frage, die mein Problem lösen könnte: Komme ich innerhalb des ausgelösten Scriptes an den Namen des Events?

Was ist das übergeordnete Gerät bei „$IPS_TARGET = ID des übergeordneten Gerätes“, übergeordnet ist ein Script und kein Gerät.

Ist es überhaupt richtig, das Events nur noch unterhalb des auszulösenden Scriptes positioniert werden können?

Sorry für die vielleicht ziemlich dummen Fragen aber irgendwie hat mich die Änderung der IPS_SetEventScript Funktion ziemlich aus dem Konzept geworfen und würde wieder gerne hinbekommen.

Ausserdem Wünsche ich erstmal allen FROHE WEIHNACHTEN!!!

Gruß
Smudo

Wie kann ich ermitteln, welcher Timer das Script gestartet hat (13 Timer hängen an dem Script) wenn ich nicht die ID des Timers nehmen kann, da dieser zuvor automatisch erstellt wurde?

$IPS_EVENT sollte Dein Problem lösen.

Aber dann bekomme ich ja die ID und die möchte ich ja nicht dazu benutzen. Es sei denn ich komme über die Event-ID an den Event-Namen. Dann nenne das Event bei der Erstellung so, wie die dazugehörige Aktor-ID, die ich bedienen will.

Poste doch mal Dein V2 Script, vieleicht finden wir eine Lösung.

Kein Problem Thomas, das Script ist eh bereits hier im Forum gepostet. Du findest es hier.

Der Teil der jetzt nicht mehr funktioniert ist dieser:

if($IPS_SENDER == "TimerEvent"){ 
   IPS_SetEventActive($IPS_EVENT, false); 
   $event = IPS_GetObject($IPS_EVENT); 
   $rid = IPS_GetObject($event['ParentID']); 
    LCN_SwitchRelay($rid['ParentID'], false); 
} 

Hier hatte ich anhand der Position des Events im Objektbaum die dazugehörige Jalousie ermittelt und gestoppt.
Übrigens hängen an dem Script alle Jalousien d.h.
13 Ereignis-Events (um die Laufzeit und damit die Position zu berechnen) und
13 Timer-Events (Um die Jalousien auf der gewünschen Position zu stoppen).

Wär schön, wenn dir da noch was einfallen würde. Wenn sonst nichts geht, werde ich die IDs der Events nehmen aber eigentlich sollte das Script alle Variablen und Events automatisch anlegen und benutzen, so das man es auch mal weitergeben kann oder in einem neu angelegten System die Menge an Variablen und Events nicht manuell anlegen muss.
Ich bin mir eigentlich fast sicher, daß es dafür eine einfache Lösung gibt aber da fehlt mir einfach die Routine.

Gruß
Smudo

Da Du die Events ja nicht mehr im Objektbaum so hast wie Du Sie brauchst, wäre das vieleicht eine Lösung:


  	$rid[0] 	= xxxxx; //ID Jalousie
	$event[0] 	= xxxxx; //ID Event

  	$rid[1] 	= xxxxx; //usw.
	$event[1] 	= xxxxx;

	if($IPS_SENDER == "TimerEvent")
	{
   	 IPS_SetEventActive($IPS_EVENT, false);
		$anz = count($rid);
		for($i=0; $i < $anz; $i++)
		{
			if($IPS_EVENT == $event[$i]) LCN_SwitchRelay($rid[$i], false);
		}
	}


Hi,

das wäre ja dann die Lösung über die ID der Events, die ich eigentlich nicht nehmen wollte. Aber wenn das nicht anders geht, muss ich es wohl so machen.
Kommt man nicht über die ID des Events an den Namen des Events?

Trotzdem schon mal vielen Dank für deine Hilfe.

mfg
Smudo

An den Namen kommst Du ganz einfach: IPS_GetName - IP-Symcon :: Automatisierungssoftware.

Hi Horst,
danke für deine Hilfe. Damit sollte ich mein Problem lösen können, in dem ich bei der Eventerstellung dem Timer einfach den Namen der zugehörigen Jalousie gebe und den dann im Script auswerte.

mfg
Smudo