Hallo Kalikola,
bin wohl wieder etwas spät dran …
war gestern zu der Uhrzeit etwas kurz. Hier mal wie ich mir eine Übersichtsseite fürs WF gebastelt hab. Angezeigt wird nur was z.Z gerade wichtig, schlecht oder suboptimal ist.
Also, ich hab fürs WF im Objektbaum eine eigene Kategorie. Dort hab ich eine Kategorie Übersicht, in der sich verschiedene DummyModule befinden in denen ich das logisch (für uns) zusammenfasse was ich sehen möchte. Z.B. Zustand der Alarmanlage, offene Fenster, eingeschaltete Geräte …
Alle Links in den Dummymodulen die OK sind (z.B. Alarmanlage an, Geräte/Lichter aus, Fenster/Türen zu …) werden nicht angezeigt.
im 1. Screenshot die Übericht im WF.
im 2. Screenshot die Kategorie (exemplarisch schaltbare Geräte) und die Links darin die ich im WF darstelle wenn sie nicht ok sind. Um eine weitere Variable zu integireren einfach einen neuen Link in der Kategorie erstellen und das SchaltbareLinksHideIfOff-Script in Punkt 3 ein mal ausführen. Alles andere geht dann automatisch.
im 3. Screenshot die KategorienStruktur in unserer Basis-Kategorienestruktur die durch das SchaltbareLinksHideIfOff-Script automatisch angelegt wird.
Vorteile: flexibel und einfach erweiterbar und wie Du im 1. Screenshot siehst trotz ohne html platzsparend und ohne zusätzliche Variablen.
Hier noch mein Script SchaltbareLinksHideIfOff
<?
// http://www.ip-symcon.de/forum/threads/24577-Alle-Links-einer-Kategorie-auflisten
// Angepasst: Linkvalue abfrage von false auf 0 gesetzt, true und false vertauscht
//$OriginalScript = 17587 /*[WF-Übersicht\Elektrogeräte\SchaltbareLinksHideIfOff]*/ ;
$ScriptID = 17587 /*[WF-Übersicht\Elektrogeräte\SchaltbareLinksHideIfOff]*/;
//$Objects = IPS_GetChildrenIDs(IPS_GetParent($ScriptID)); // Wenn das Script in der selben Katogorie o. Dummy liegt
$Objects = IPS_GetChildrenIDs(37973 /*[WFs\wha\Übersicht\Elektrogeräte die geschaltet werden können]*/ );
foreach ($Objects as $CurrentObjectID) {
$Object = IPS_GetObject($CurrentObjectID);
if ($Object['ObjectType'] == 6){
//Link sichtbar oder unsichtbar machen
$Link = IPS_GetLink($CurrentObjectID);
//$LinkType = IPS_GetObject($Link['ObjectType']);
//print_r($Link);
$LinkValue = GetValue($Link['LinkChildID']);
if ($LinkValue==0){
if ($Object['ObjectIsHidden'] == false){
IPS_SetHidden($CurrentObjectID, true);
}
} else {
if ($Object['ObjectIsHidden'] == true){
IPS_SetHidden($CurrentObjectID, false);
}
}
//Event anlegen falls noch nicht vorhanden
$EventName = "LinkID: ".$CurrentObjectID." ObjectID: ".$Link['LinkChildID'];
$EventID = @IPS_GetEventIDByName($EventName, $ScriptID);
if ($EventID === false){
$EventID = IPS_CreateEvent(0);
IPS_SetName($EventID, $EventName);
IPS_SetEventTrigger($EventID, 1, $Link['LinkChildID']);
IPS_SetParent($EventID, $ScriptID);
IPS_SetEventActive($EventID, true);
}
}
}
?>