Wochenplan Ereignis Aktion und $_IPS["SELF"]

Hallo zusammen,

ich möchte gerne in einem Wochenplan Ereignis unter Aktion das Elternobjekt herausfinden mit:

$parent = IPS_GetParent($_IPS[„SELF“]);

Allerdings ist $_IPS[„SELF“] nicht verfügbar, hat jemand eine Idee?

Ein Skript dem Wochenplan überzuordnen kommt für mich nicht in Frage und das Skript dem Wochenplan unterordnen ist ja leider nicht möglich.

Gruß Basti

P.S: Kompletter Code welcher in die Aktion soll:


$parent = IPS_GetParent($_IPS["SELF"]);
$funcId = @IPS_GetObjectIDByIdent("functions", $parent);

if ($funcId !== false) {
	require_once(IPS_GetScriptFile($funcId));
} else {
   echo "ERROR: Busch-Radio iNet Funktionen nicht gefunden.";
	return;
}

setVolume(2);

Du suchst wohl $_IPS[‚EVENT‘].
Siehe Systemvariablen — IP-Symcon :: Automatisierungssoftware
Abschnitt TimerEvent.

Und warum, wenn man fragen darf ?
Ereignisse sind immer dem Ziel untergeordnet. Und für die Visu gibt es ja Links.
Michael

Danke das versuche ich mal. Ja eigentlich hast du recht, diesmal wollte ich es aber gerne schon ohne Links „schön“ :slight_smile:

Ich habe es jetzt hardcoded versucht, allerdings scheint er mit dem requice_once() nen Problem zu haben, die ID ist richtig.


if (18697 !== false) {
	require_once(IPS_GetScriptFile(18697));
} else {
   echo "ERROR: Busch-Radio iNet Funktionen nicht gefunden.";
	return;
}

setVolume(4);


25.01.2016 22:00:00*| ExecuteThreadID #7*| [Kein(e)] = 
Warning:  require_once(18697.ips.php): failed to open stream: No such file or directory in - on line 2
Fatal error:  require_once(): Failed opening required '18697.ips.php' (include_path='.;C:\php\pear') in - on line 2

//EDIT leider der selbe Fehler:


$parent = IPS_GetParent($_IPS["EVENT"]);
$funcId = @IPS_GetObjectIDByIdent("functions", $parent);
if ($funcId !== false) {
	require_once(IPS_GetScriptFile($funcId));
} else {
   echo "ERROR: Busch-Radio iNet Funktionen nicht gefunden.";
	return;
}

setVolume(4);

Das scheint nen Bug in IPS zu sein. In der Aktion gibt IPS_GetScriptFile() nen falschen Pfad zurück.

SO funktioniert es:


require_once(\\\'scripts\18697.ips.php\\\');

Kann das sein, oder ist das so gewollt? Diese Datei included jetzt wieder ne andere und da müsste ich dann auch mit ner if Abfrage ne Ausahme für Ereignisse machen und da „scripts“ vorne anhängen.

Workaround:


$parent = getParent();
$configId = @IPS_GetObjectIDByIdent("config", $parent);
if ($configId !== false) {
   if ($_IPS["SENDER"] === "TimerEvent" && !isset($_IPS["SELF"]) && isset($_IPS["EVENT"])) {
	   require_once('scripts\\' . $configId . '.ips.php');
	} else {
		require_once(IPS_GetScriptFile($configId));
	}
} else {
   echo "ERROR: Busch-Radio iNet Konfiguration nicht gefunden.";
	return;
}

function getParent() {
   if ($_IPS["SENDER"] === "TimerEvent" && !isset($_IPS["SELF"]) && isset($_IPS["EVENT"])) {
		return IPS_GetParent($_IPS["EVENT"]);
	} else {
		return IPS_GetParent($_IPS["SELF"]);
	}
}

GetScriptFile hat IMHO noch nie den Pfad mit ausgegeben. Bzw. relative ab dem Script-Verzeichnis.
Es sieht eher so aus, als wenn PHP mit einem falschen Arbeitsverzeichnis startet.
Welche IPS-Version?
Michael

Stable 3.4 neuste Version

Soll ich das mal reporten?

Kannst du machen, aber ob der als Backport noch gefixt wird ?
Unter 4.0 gabe es den Fehler imho auch, dort ist er aber schon länger gefixt.
Michael