Hallo,
ich habe mir ein Skript geschrieben, das im IPS Baum nach Referenzen zu einer oder mehreren vorgegebenen ObjektIDs sucht - also nach dem Motto „in welchen Links, Events oder Scripten werden meine Objekte verwendet…“.
Dazu nutzt es die Methoden IPS_GetEvent, IPS_GetLink und IPS_GetScriptContent.
//Beispiele für zu suchende Homematic Instanzen mit Child Objekten
$ids[] = 12004 /*[Hardware\Homematic\Heike\Verschluss\Heike.Verschluss.Fenster:0]*/ ;
$ids[] = 27864 /*[Hardware\Homematic\Heike\Verschluss\Heike.Verschluss.Fenster:1]*/;
$evtList = IPS_GetEventListByType(0);
$linkList = IPS_GetLinkList();
$scriptList = IPS_GetScriptList();
foreach ($ids as $id){
ListReferences($id);
}
function ListReferences($id){
Global $evtList;
Global $linkList;
Global $scriptList;
echo '-----' . $id . ' ('.IPS_GetName($id).') ------'..PHP_EOL;
foreach ($evtList as $evtID){
// echo 'MemUsage (GetEvent): '.memory_get_usage().PHP_EOL;
$evt = IPS_GetEvent($evtID);
if ($evt['TriggerVariableID'] == $id){
echo "Event: $evtID ".IPS_GetLocation($evtID) .PHP_EOL;
}
unset($evt);
}
foreach ($linkList as $linkID){
// echo 'MemUsage (GetLink): '.memory_get_usage().PHP_EOL;
$link = IPS_GetLink($linkID);
if ($link['TargetID'] == $id){
echo "Link: $linkID ".IPS_GetLocation($linkID) .PHP_EOL;
}
unset ($link);
}
foreach ($scriptList as $scriptID){
// echo 'MemUsage (GetScriptContent): '.memory_get_usage().PHP_EOL;
$script = IPS_GetScriptContent($scriptID);
if ((strpos($script, strval($id)) > 0) && ($scriptID != $_IPS['SELF'])){
echo "Script: $scriptID ".IPS_GetLocation($scriptID).PHP_EOL;
}
unset($script);
}
$childrenIds = IPS_GetChildrenIDs($id);
foreach ($childrenIds as $childId){
ListReferences($childId);
}
return;
}
Leider ist aber bei mir nach bereits nach ca. 5 verarbeiteten Objekten Schluss:eek:
-----27864 (Heike.Verschluss.Fenster:1) ------
Script: 29839 Visualization\WebFront\Gewerke\Sensoren\Gebaeudehuelle ueberwachen
-----58476 (Viz_STATE) ------
-----10831 (STATE) ------
-----25343 (LOWBAT) ------
Event: 16987 CCU\Scripts\Hardwareprobleme\Homematic Geräte prüfen\Event 25343
-----20683 (INSTALL_TEST) ------
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 33847 bytes) in [CCU\Scripts\_In Arbeit\Referenzen suchen] on line 40
Kommentiert man die Zeilen mit ‚MemUsage‘ aus, dann sieht man, dass bei jedem Aufruf der drei Methoden mehr Speicher gebraucht wird (zwischen 4 und 10k).
Das sollte meiner Meinung nach nicht sein und einmal überprüft werden.
Viele Grüße
Burkhard