Verwendung prüfen

Hat jemand ne gute Idee wie man die Verwendung von einem Script, Variable, Instanz etc. prüfen kann, und zwar über ggf. Links oder als ID in Scripten?

Es passiert mir häufiger das ich Scripte eher austausche als zu verändere, weil es einfach ist, damit mir aber alles mögliche zerschieße… ich will also die Auswirkungen vorher prüfen

Hat wohl keiner das Problem, also hier meine Lösung:

<?
//Startposition
$Kinder     = IPS_GetChildrenIDs(0); ;
// Welches Script soll ausgeführt werden
$SID = GetValueInteger( IPS_GetObjectIDByName("ID",$_IPS['SELF']));
print_r ("Gesucht wird nach ID ".$SID."
");
foreach ($Kinder as $kind) {
    $objekt = IPS_GetObject($kind);
    verarbeiteObject($objekt);

}

function verarbeiteObject($ZObjekt)
{
global  $SID;
    if ($ZObjekt["ObjectType"] == 6) // Wenn Link prüfe auf Existenz
        {
		  if (IPS_ObjectExists(IPS_GetLink($ZObjekt["ObjectID"])["TargetID"])) {
   		// Existiert, alles gut
   		if (IPS_GetLink($ZObjekt["ObjectID"])["TargetID"] == $SID )
			{
// Treffer, gesuchter Link
print_r ("ID:".$ZObjekt["ObjectID"]."#Name:".$ZObjekt["ObjectName"]."#Typ:".$ZObjekt["ObjectType"]."#Parent:".$ZObjekt["ParentID"] . " enthält gesuchte ID 
");
			 }
	 	  }
   	  else {
// Achtung, kaputter Link
//print_r ("ID:".$ZObjekt["ObjectID"]."#Name:".$ZObjekt["ObjectName"]."#Typ:".$ZObjekt["ObjectType"]."#Parent:".$ZObjekt["ParentID"] . " nicht gefunden 
");

		 }
    }
    if ($ZObjekt["ObjectType"] == 5) // Media, damit können wir nix machen
        {
        // nix tun
    }
    if ($ZObjekt["ObjectType"] == 4) // Ereignis, damit können wir nix machen
        {
          if (IPS_GetEvent($ZObjekt["ObjectID"])['TriggerVariableID'] == $SID) {
print_r ("ID:".$ZObjekt["ObjectID"]."#Name:".$ZObjekt["ObjectName"]."#Typ:".$ZObjekt["ObjectType"]."#Parent:".$ZObjekt["ParentID"] . " enthält gesuchte ID 
");

   }
        // nix tun
    }
    if ($ZObjekt["ObjectType"] == 3) // Skript, prüfen ob ID im Script vorkommt
        {
        $Script = IPS_GetScriptContent ($ZObjekt["ObjectID"] );
        if (strpos($Script, strval($SID)) !== false ) {
        
        // Gefunden
print_r ("ID:".$ZObjekt["ObjectID"]."#Name:".$ZObjekt["ObjectName"]."#Typ:".$ZObjekt["ObjectType"]."#Parent:".$ZObjekt["ParentID"] . " enthält gesuchte ID 
");


		  };
       
    }
    if ($ZObjekt["ObjectType"] == 2) // Variable,wenn es Integer ist sicherheitshalber schaun ob die ID da drin steht
        {
        if (strval(GetValue($ZObjekt["ObjectID"])) == strval($SID)) {
print_r ("ID:".$ZObjekt["ObjectID"]."#Name:".$ZObjekt["ObjectName"]."#Typ:".$ZObjekt["ObjectType"]."#Parent:".$ZObjekt["ParentID"] . " enthält gesuchte ID 
");
        }
    }
    if ($ZObjekt["ObjectType"] == 1) // Instanz, damit können wir nix machen
        {
        // nix tun

    }
    if ($ZObjekt["ObjectType"] == 0) // Kategorie,damit können wir nix tun
        {
        // nix tun
    }
    
    // Egal was es war, mal sehen ob noch was drunter hängt
            $UnterKinder = IPS_GetChildrenIDs($ZObjekt["ObjectID"] );
            foreach ($UnterKinder as $ukind) {
                $objekt = IPS_GetObject($ukind);
                verarbeiteObject($objekt);
            }

}
?>


Script anlegen, drunter eine Variable mit Namen „ID“ und dort den Wert eintragen von dem Object dessen Verwendung man prüfen will.
Es liefert dann per print_r, also in den Messages oder im Antwortbereich wenn man das Script offen hat, alle Scripte, Links oder Variablen wo die ID drin steht. Ggf. auch mal nen Treffer zu viel, aber besser als zu wenig :slight_smile:

zusätzlich schmeisst er auch gleich alle Links (egal welches Ziel drin steht) raus die kaputt sind

Abend!

Hab hier noch was zum Thema „Event(s) herausfinden, die auf eine Variable "zeigen/reagieren“:
IP-Symcon - Wie kann ich… 2.0 - Seite 2

Und in Skripten nach einer ID suchen geht ja einfach in der IPS-Console über „In Skripten suchen > In allen Skripten suchen“.

Grüße,
Chris

Hab die Ereignisse integriert, danke.

Das suchen in den Scripten hilf ja nur zum Teil, wollte halt alles in einem erledigen. Vielleicht baue ich sogar noch den ID-Austausch ein?? Mal sehen

Ich würde auch das Eintragen der ID direkt im Skript machen. Also von der ID die man sucht. Extra eine Variable anlegen mit der ID die man suchen will ist doch etwas umständlich :wink:

Austausch…wäre ich vorsichtig :smiley: Wenn dann mit „Test-Mode“ und da dann ausgeben mit echo was genau ersetzt/getauscht werden würde und dann muss man das Skript „scharf“ schalten und dann wird ausgetauscht/ersetzt…

Grüße,
Chris