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;
}
?>