- Ein Skript erstellen und von unter per Copy&Paste befüttern.
- Alle Variablen, die einen Fensterstatus angeben per Link unterhalb des Skriptes verlinken.
- Skript ausführen.
- Entweder Ereignisse auf alle Status hinzufügen (aufwendig, aber toll), oder Skript alle x Sekunden ausführen (simpel, aber mehr CPU-Verbrauch)
Der Clou ist, dass ihr nichts am Skript ändern müsst, wenn neue Fenster hinzukommen.
<?
$offen = false;
foreach(IPS_GetChildrenIDs($_IPS['SELF']) as $id) {
if(IPS_LinkExists($id)) {
$link = IPS_GetLink($id);
if(IPS_VariableExists($link['TargetID'])) {
$variable = IPS_GetVariable($link['TargetID']);
switch(GetProfileName($variable)) {
case "~Window.Hoppe":
if(GetValue($link['TargetID']) == 0 || GetValue($link['TargetID']) == 2) {
$offen = true;
}
break;
case "~Window.HM":
if(GetValue($link['TargetID']) == 1 || GetValue($link['TargetID']) == 2) {
$offen = true;
}
break;
case "~Window.Reversed":
if(!GetValue($link['TargetID'])) {
$offen = true;
}
break;
default:
if(GetValue($link['TargetID'])) {
$offen = true;
}
break;
}
if($offen) {
break;
}
}
}
}
SetValue(CreateVariableByIdent($_IPS['SELF'], "STATUS", "Fensterstatus", "~Window", 0), $offen);
function GetProfileName($variable) {
if($variable['VariableCustomProfile'] != "")
return $variable['VariableCustomProfile'];
else
return $variable['VariableProfile'];
}
function CreateVariableByIdent($id, $ident, $name, $profile, $type)
{
$vid = @IPS_GetObjectIDByIdent($ident, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetIdent($vid, $ident);
IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
IPS_SetVariableCustomProfile($vid, $profile);
}
return $vid;
}
?>
paresy