Hallo zusammen,
ich würde gerne meine aktuelle Version vom einsammeln spezifischer Geräte zeigen und mich gerne mit euch darüber unterhalten und Anmerkungen sammeln.
Meine generelle Idee ist wie man mit Instanzen im IPS Baum strukturiert umgeht und oder auch sinnvoll anlegt um diese so schnell wie möglich wieder zu finden, im code zu ermitteln bzw. auch beim Arbeiten im IPS Baum.
Ich zeige mal hier mein Einstiegssscript … und dann können wir uns darüber unterhalten …
<?
include(IPS_GetScriptFile(19730 /*[Scripte\HET\Geräte spezifisch ermitteln\STK\STK State select State]*/));
$Homematic = "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}";
$ZWave = "{101352E1-88C7-4F16-998B-E20D50779AF6}";
$sGuidString[] = $Homematic;
$sGuidString[] = $ZWave;
// PrintLog Ausgabe
$xPrintLog = TRUE;
// Zustandsvariabel die abgerufen werden sollen ...
$arSelectVarState[] = "Status";
$arSelectVarState[] = "Zustand";
// Funktionsaufruf
$arVarList = FN_HM_GET_STK_STATE("\\EG WZ\\STK\\MUSIK\\", $arSelectVarState, $xPrintLog, TRUE, $sGuidString);
// PrintLog Ausgabe
if ($xPrintLog)
print_r($arVarList);
?>
ein weiteres Script und es sind dann noch weitere inkludierte Scripts darin … aber das wäre mal so das erste Gerüst …
<?
/*
# Beschreibung:
# ----------------------------------------------------------------------------
#
#
# Datum : Version :
# ----------------------------------------------------------------------------------------------
# 04.02.2018 V.1.0.0
# - Ursprung erstellt
#
*/
// Funktions Script inkludieren (einbinden)
include(IPS_GetScriptFile(32354 /*[Scripte\HET\000_MyCodeArchive\FUNCTIONS\FN_CreateActionsScript]*/));
include(IPS_GetScriptFile(30235 /*[Scripte\HET\Geräte spezifisch ermitteln\FN_GetHmProductDevice_V100]*/));
include(IPS_GetScriptFile(55706 /*[Scripte\HET\000_MyCodeArchive\FUNCTIONS\FN_GetProfileName]*/));
include(IPS_GetScriptFile(49292 /*[Scripte\HET\000_MyCodeArchive\FUNCTIONS\FN_CreateVariableByIdent]*/));
function FN_HM_GET_STK_STATE($sSuchPath, $arSelectVarState, $xPrintLog, $xCreateVars, $arGuidString)
{
// Schlagworte um entsprechend die Aktoren etc. zu finden
$sSuchPath = $sSuchPath; // Suchen im Location Path, darunter wrd die Zuordnung gesucht. Bei Pfadangaben müssen Sonderzeichen doppelt angegeben werden
$xPrintLog = $xPrintLog;
// VARIABEL
$iCntHW = 0;
$iCntEIN = 0;
$iCntAus = 0;
// Suchliste, manche gleichartige Geräte haben unterschiedliche Variabelnamen für die gleiche Aktion
$arSuchObjectName = $arSelectVarState;
$arSTKEin = [];
$arSTKAus = [];
// Funktionsaufruf
$arHWList = FN_GetHmProductDevice($arGuidString, $sSuchPath, $arSuchObjectName, $xPrintLog);
// Funktionsrückgabewert ausgeben
if ($xPrintLog)
{
print_r("Hardwareliste :
");
print_r($arHWList);
print_r("
");
}
// HARDWARE LISTE ABARBEITEN
foreach ($arHWList as $InstanzID)
{
$iCntHW = $iCntHW + 1; // Anzahl HW inkrement
$InstObject = $InstanzID; // Instant Objekt aus Array in lokale VAR Objektvariabel ablegen
// PÜRFE OB DAS OBJECT CHILDS HAT
if ($InstObject['HasChildren'] == 1)
{
// CHILD ABRUFEN
$arChildOfObject = IPS_GetChildrenIDs($InstObject['ObjectID']);
// CHILDS DURCHLAUFEN
foreach($arChildOfObject as $ChildObject)
{
// VARIABEL VOM CHILD OBJEKT ABRUFEN
$variable = IPS_GetVariable($ChildObject);
// Variabel Profil abrufen
switch(FN_GetProfileName($variable))
{
// VARIABEL PROFIL AUSWAHL
case "~Switch": // Variabel Profil
if (GetValue($variable['VariableID']) == 1)
{
$iCntEIN = $iCntEIN + 1;
$arSTKEin [] = $InstanzID['ObjectName'];
}
elseif (GetValue($variable['VariableID']) == 0)
{
$iCntAus = $iCntAus + 1;
$arSTKAus [] = $InstanzID['ObjectName'];
}
default:
// nicht das passende Profil entdeckt ...
//
} // ENDSWITCH switch(FN_GetProfileName($variable))
} // ENDFOR foreach($arChildOfObject as $ChildObject)
} // ENDIF ($InstObject['HasChildren'] == 1)
} // ENDFOR ($arHWList as $InstanzID)
// Systemvariabel anlegen
/*
0 Legt eine Variable vom Typ Boolean an
1 Legt eine Variable vom Typ Integer an
2 Legt eine Variable vom Typ Float an
3 Legt eine Variable vom Typ String an
*/
if ($xCreateVars)
{
SetValue(FN_CreateVariableByIdent($_IPS['SELF'], "ZAEHLER1", "Anzahl STK ein", "", 1), $iCntEIN);
SetValue(FN_CreateVariableByIdent($_IPS['SELF'], "ZAEHLER2", "Anzahl STK aus", "", 1), $iCntAus);
}
// PRINT LOG
if ($xPrintLog)
{
print_r("
");
print_r("Anzahl Hardware STK : " . $iCntHW . " | Ein : " . $iCntEIN . " | Aus : " . $iCntAus);
print_r("
");
if ($iCntEIN > 0)
{
print_r("STK Ein ArrayList : ");
print_r($arSTKEin);
print_r("
");
}
if ($iCntAus > 0)
{
print_r("STK AUS ArrayList : ");
print_r($arSTKAus);
print_r("
");
}
}
// Rückgabewerte Index 1 = Hardwareliste, 2 = Status der Aktoren ...
$arVarRet = array
(
'HW List' => $arHWList,
'STK EIN' => $arSTKEin,
'STK AUS' => $arSTKAus,
);
//return $arVarList;
return $arVarRet;
}
?>
Gruß
MacToolz