$_IPS['SELF] 'in ausgelagerten Funktionen

Moin,

ich habe ein Script, welche Mails verschicken soll. Dort ist eine Funktion definiert. In dieser wird die ID der Mail-Instanz relativ zum Script gesucht (hier als ParentID).

<?

// Diese Funkton greift auf die Mail-Instanz zu und verschickt Mails
// Übergebene Parameter sind: $mail_adresse, $mail_betreff, $mail_text

function mail_senden ($mail_adresse, $mail_betreff, $mail_text)
	{
	$mail_instanz = IPS_GetParent($_IPS['SELF']);
	if ($mail_adresse == "")
	   {
	   $mail_adresse = "test@domain.de";
	   }
	$erfolg = SMTP_SendMailEx($mail_instanz, $mail_adresse, $mail_betreff, $mail_text);
	return $erfolg;
	}
	
?>

Binde ich diese Script nun in ein anderes per include ein, wird durch mail_senden (…) das Funktionsscript ausgeführt. An der Stelle mit $_IPS[‚SELF‘] steht dann nicht die ID des Funktionsscriptes, sondern die ID des aufrufenden Scriptes. Also wird auch die Mail-Instanz nicht gefunden.

Im Moment behelfe ich mich mit der Quick&Dirty-Variante:

$mail_instanz  = 12345;

Ich habe mir jedoch angewöhnt, allgemein zu scripten, d.h. nicht hartkodiert wie hier. Kann die ID des Funktionsscriptes anders auslesen werden?

Gibt die erste gefundene SMTP ID:


$modul_id  = "{375EAF21-35EF-4BC4-83B3-C780FD8BD88A}";
$modul_arr = IPS_GetInstanceListByModuleID($modul_id);
$id_smtp   = $modul_arr[0];

Ich bin allerdings eher ein Freund von einer Konstanten Datei und diese zu includen und dort die ID´s zu definieren.

ID als Parameter an die aufgerufene Funktion übergeben?

Eben das will er ja nicht.

Habe mir einen weiteren Workaround gebastelt, über eine einzige Include-Datei hatte ich auch schon mal nachgedacht, aber das würde mir vermutlich zu unübersichtlich werden. Nun also erst mal so, was ausreicht:

Alle php-Files, die ich irgendow per include einbinde, habe als Script in IPS angelegt. Mal mit dem automatischen Name, mal mit einem anderen Namen. Den Namen trage ich im aufrufenden Script als Textvariable ein. Dann wird dazu eine ID ermittelt. Diese wird im Funktionsaufruf mit übergeben und in der Funktion ausgewertet. Alles gut.

aufrufendes Script:

<?
// Bei Änderung des Gerätezustandes wird eine E-Mail verschickt

IPS_SetHidden($_IPS['SELF'], true);
$include = "41703.ips.php";
include $include;
$include_id = @IPS_GetScriptIDByFile($include);

if ($_IPS['SENDER'] == "Variable")
	{
	if ($_IPS['VALUE'])
		{
		$zustand = "eingeschaltet";
		}
	else
		{
		$zustand = "ausgeschaltet";
		}
	// bleibt die Adresse leer, wird an die Standard-Adresse verschickt (siehe Include-Script)
	$mail_adresse = "";
	$mail_betreff = "Zustand Receiver";
	$mail_text = "Der Gerätezustand des Receivers hat sich geändert. Das Gerät ist derzeit ".$zustand." .";
	$erfolgreich = mail_senden ($include_id, $mail_adresse, $mail_betreff, $mail_text);
	//echo $erfolgreich;
	}

?>

aufgerufenes Script:

<?

// Diese Funkton greift auf die Mail-Instanz zu und verschickt Mails
// Übergebene Parameter sind: $mail_adresse, $mail_betreff, $mail_text

function mail_senden ($include_id, $mail_adresse, $mail_betreff, $mail_text)
	{
	//$mail_instanz = IPS_GetParent($_IPS['SELF']);
   $mail_instanz = IPS_GetParent($include_id);
	if ($mail_adresse == "")
	   {
	   $mail_adresse = "test@domain.de";
	   }
	$erfolg = SMTP_SendMailEx($mail_instanz, $mail_adresse, $mail_betreff, $mail_text);
	return $erfolg;
	}
	
?>