Moin,
ich stelle gerade sehr viel um und muss ca. 4000 Objekte anfassen/verändern/löschen. Im Prinzip hat mir die Suche in allen Scripten schon geholfen aber es gab zu viele Treffer. Ich habe mir ein kleines Script geschrieben das ab einer ObjectID alle Scripte in allen Kindern und Kindeskindern und … nach einem Text durchsucht und die ID anzeigt.
<?php
$Base = 59791; // BasisID die durchsucht werden soll
check_children($Base);
function check_children($Parent){
$Search = "lhd_Send"; // Suchbegriff unabhängig von Groß-/Kleinschreibung
$Object = IPS_GetObject($Parent);
if ($Object["HasChildren"]){
foreach ($Object["ChildrenIDs"] as $ID){
check_children($ID);
}
}
if ($Object["ObjectType"] == 2){
$Variable = IPS_GetVariable($Object["ObjectID"]);
if ($Variable["VariableType"] == 3){
$String = GetValue($Object["ObjectID"]);
$Pos = stristr($String, $Search, 0);
if ($Pos != false) echo $Parent. PHP_EOL;
}
}
if ($Object["ObjectType"] == 3){
$Script = IPS_GetScriptContent($Object["ObjectID"]);
$Pos = stristr($Script, $Search, 0);
if ($Pos != false) echo $Parent . PHP_EOL;
}
}
?>
Vielleicht kann es ja sonst noch jemand gebrauchen. Lang lebe die Rekursion
Edit: Es war noch ein Denkfehler drin. Zusätzlich werden jetzt auch Stringvariablen nach dem Text durchsucht.
Search enthält die oder im Grenzfall den Namen des Objekts das gesucht wird
Location enthält den Namen des übergeordneten Objekts (Instanz oder Kategorie)
type definiert den Typ des Objekts (Variable oder Instanz etc.)
value enthält den Wert der Variable (z.B. wenn ich nur nach eingeschalteten Lampen suche)
Wenn eines der Suchkriterien nicht benötigt wird einfach die Abfrage bei den AND`s in der funktion auskommentieren