Symcon Pflege - alle Variablen mit Name XYZ finden

Hallo Zusammen,

ich stand vor der Herausforderung ein neues Variablen-Profil für die Variable UNREACH (Homematic) auszurollen.
Eine manuelle Änderung kam auf Grund der Vielzahl der Devices und der Verschachtelungstiefe nicht in Frage, darauf hin habe ich folgende Funktion verwendet:

/***********************************************************************
$ID: Start-Kategorie in IP-Symcon ab welcher gesucht werden soll. 0 durchsucht die gesamte vorhandene Struktur
$NAME: String welcher den Variablen-Name enthält
************************************************************************/
function FN_GetAllVariablesByName($ID, $NAME)
{
    global $arResultList;
    $InstObj = IPS_GetObject($ID);
    
    if (IPS_HasChildren($ID)) {
        $arVarList[] = IPS_GetChildrenIDs($ID);
        foreach (IPS_GetChildrenIDs($ID) as $VarChildID1) {
            if (IPS_GetName($VarChildID1) == $NAME)
                $arResultList[] = $VarChildID1;
            FN_GetAllVariablesByName($VarChildID1, $NAME);
        }
    }
    return $arResultList;
}

Um nun pauschal allen UNREACH-Variablen in IP-Symcon ein neues Profil zuzuordnen, kann z.B. folgendes Script verwendet werden:

<?
$arResultList;
$arResultList = FN_GetAllVariablesByName(0, "UNREACH");
print_r($arResultList);

foreach ($arResultList as &$value) {
    IPS_SetVariableCustomProfile($value, "DeviceState.OnlineOffline");
}

/***********************************************************************
$ID: Start-Kategorie in IP-Symcon ab welcher gesucht werden soll. 0 durchsucht die gesamte vorhandene Struktur
$NAME: String welcher den Variablen-Name enthält
************************************************************************/
function FN_GetAllVariablesByName($ID, $NAME)
{
    global $arResultList;
    $InstObj = IPS_GetObject($ID);
    
    if (IPS_HasChildren($ID)) {
        $arVarList[] = IPS_GetChildrenIDs($ID);
        foreach (IPS_GetChildrenIDs($ID) as $VarChildID1) {
            if (IPS_GetName($VarChildID1) == $NAME)
                $arResultList[] = $VarChildID1;
            FN_GetAllVariablesByName($VarChildID1, $NAME);
        }
    }
    return $arResultList;
}
?>

Etwas sauberer wäre, sich erst alle HM-Instanzen zu holen und darunter jeweils die Variable anhand des Ident (nicht Namen).