Sorgen mit Erkennen einer Dummy-Instanz

Hallo,

In einem Script möchte ich eine angegebene Objekt-ID auf den Modul-Typ „Dummy Module“ überprüfen. Dazu folgende Zeilen:

<?

$dummy_id = 38925 /*[Wohnzimmer\Rolladen\dummytestfenster]*/ ;
echo ("Wert der Variablen dummy: ".$dummy_id)."
";
$inst = IPS_GetInstance($dummy_id);
print_r($inst); // zu Debugzwecken

if ($inst['ChildrenIDs']['ModuleInfo']['ModuleID'] != "{485D0419-BE97-4548-AA9C-C083EB82E61E}")
{
echo "Die ID ".$dummy_id." ist kein Dummy-Modul!";
}
else
{
echo "Alles gut! Dummy-Modul!";
}

?>

Als Fehler bekommen dies:

Wert der Variablen dummy: 38925
Array
(
    [ChildrenIDs] => Array
        (
        )

    [InstanceID] => 38925
    [InstanceStatus] => 102
    [LastChange] => 0
    [ModuleInfo] => Array
        (
            [ModuleID] => {485D0419-BE97-4548-AA9C-C083EB82E61E}
            [ModuleName] => Dummy Module
            [ModuleType] => 3
        )

    [NeedParent] => 
    [ParentID] => 0
)

Notice:  Undefined index: ModuleInfo in [Scripte\Musterscripte\Rolläden
fgn] on line 8
Die ID 38925 ist kein Dummy-Modul!

Was mache ich falsch? Die key in den Arrays sind doch lt. print_r richtig angesetzt, oder?

So wäre es korrekt.


$inst['ModuleInfo']['ModuleID']

paresy

PS: Übrigens ist dein Ansatz über die ModuleID zu gehen sehr gut. Namen sind nur Schall und Rauch :slight_smile:

Wow, danke für das unerwartete Lob:)

Wollte soeben wieder eine Frage fragen, da habe ich den Grund gesehen. Ich hatte die beiden Klammern unter dem Wort ChildrenIDs nicht wahrgenommen. Somit ist ja dies ein leerer Array und kein weiter verschachteltes. Also muss diese Ebene ja auch beim IF wegfallen. Und schon sieht die Ausgabe auch wesentlich freundlicher aus:

Wert der Variablen dummy: 38925
Array
(
[ChildrenIDs] => Array
(
)

[InstanceID] =&gt; 38925
[InstanceStatus] =&gt; 102
[LastChange] =&gt; 0
[ModuleInfo] =&gt; Array
    (
        [ModuleID] =&gt; {485D0419-BE97-4548-AA9C-C083EB82E61E}
        [ModuleName] =&gt; Dummy Module
        [ModuleType] =&gt; 3
    )

[NeedParent] =&gt; 
[ParentID] =&gt; 0

)
Alles gut! Dummy-Modul!

Habe die Sache etwas erweitern wollen. Möchte eine Objekt-ID zu Beginn festlegen. Dann auswerten, ob es ein Dummy Modul ist.

Aber $dummy_id ist nur im ersten IF gesetzt und scheint in dessen ELSE-Zweig verloren zu gehen. Füge ich Zeile 7 zusätzlich in Zeile 20 ein, funktioniert es. Was kann das sein?

<?

// Einrichtescript für Variablen und Scripte für die Rolladen unter den Räumen bzw. Links unter Webfront

// Id des Dummy-Moduls, unter dem die Variablen im Objektbaum angelegt werden sollen

$dummy_id = 38925 /*[Wohnzimmer\Rolladen\dummytestfenster]*/;
$dummy_id2 = $dummy_id;
// Id im WF, unter der der Link zum Dummy-Modul für das WF angelegt werden soll
$webfront_id = 43274 /*[Webfront\Räume\Wohnzimmer\Rolläden\Rolläden]*/ ;

// -----------------------------------------------------------------------------------------------------------------------------------------------
echo "Vor 1.IF: ".$dummy_id."
";
if ($dummy_id = 0 or $webfront_id = 0)
	{
	echo "Script wird nicht ausgeführt - es fehlen die korrekten Einträge für die Objekte, unter denen alles erstellt werde soll!";
	}
else
	{

	echo "Vor 2.IF: ".$dummy_id."
";
	$i = IPS_GetInstance($dummy_id);
	print_r($i); // zu Debugzwecken

	if ($i['ModuleInfo']['ModuleID'] != "{485D0419-BE97-4548-AA9C-C083EB82E61E}")
		{
		echo "Die ID ".$dummy_id." ist kein Dummy-Modul! Weitere Ausführung nicht möglich!";
		}
	else
		{
		echo "alles gut und nun geht es los";
		}

}

?>

Hatte die Idee von Geltungsbereichen, aber hier wir (Scope von Variablen (Geltungsbereich, PHP, Beispiele) wird IF davon ausgeschlossen.

if ($dummy_id == 0 or $webfront_id == 0) 

Wieso kann das Leben so einfach sein?:confused: Danke, Rainer.