Webfront reload Frage

Hallo zusammen,

inzwischen ist meine IPS Installation (2.2 beta) reichlich gewachsen und so langsam habe ich das Gefühl, etwas mehr zu verstehen auch und gerade wegen des Forum, das immer wieder tolle Anregungen bietet!

Nun zu meiner Frage:

Ich habe ein „Aktuell“ Modul im Webfront angelegt, daß mir alle möglichen aktuellen Hinweise gibt. Das ist zum Beispiel der Kalender und auch alle derzeit eingeschalteten und an IPS angeschlossenen Verbraucher. Wenn diese ausgeschaltet werden, werden sie über IPS_Sethidden ausgeblendet und das Webfront wird über WFC_reload neu geladen. Entsprechend natürlich auch andersherum, wenn der Verbraucher eingeschaltet wird, erscheint er im „Aktuell“ Modul.

So weit so gut.

Nun hat man ja meistens mehrere Module im Webfront angelegt. Zum Beispiel ein Modul mit entsprechenden Kategorien für alle Räume. In den Kategorien sind dann vielleicht 3 Leuchten im Raum angelegt. Jetzt möchte ich über meinen Touch mal eben zack zack z.b. 2 von den 3 Lampen ausschalten zu einem anderen Raum wechseln und auch dort etwas schalten etc.

Allerdings bekommt das „Aktuell“ Modul natürlich mit, daß etwas passiert ist und lädt das gesamte Webfront jedesmal neu, nachdem der erste Schaltvorgang durchgeführt wird und bevor der 2 Schaltvorgang am Touch ausgelöst werden kann. Zwischendurch ist vielleicht noch jemand von einem Bewegungsmelder erfaßt worden und das „Aktuell“ Modul lädt noch einmal… usw. => Das Webfront ist wird somit sehr häufig neu geladen und eine „flüssige“ Bedienung geht nicht wirklich, da der Reload jedesmal ca. 2 Sekunden dauert.

Nun meine eigentliche Frage: Gibt es eine Möglichkeit, den Reload nur dann zu machen, wenn das „Aktuell“ Modul im Webfront aktiv angezeigt wird? Wenn ich von einem anderen Modul zum „Aktuell“ wechsel wird ja ohnehin der aktuelle Zustand dargestellt also wäre der Reload nicht notwendig, wenn ein anderes Modul aktiv ist.

Ich hoffe, es ist klar geworden, was ich meine :wink:

Gibt es einen Befehl oder eine Möglichkeit zu erkennen, welches Modul gerade am Touch aktiv angezeigt wird? Dann könnte man ja den WFC_Reload in Abhängigkeit des angezeigten Moduls durchführen.

Hat jemand eine Idee?

Gruß

Axel

Hallo Axel,

zeig mal dein Script dazu.
Ich nutze das auch, allerdings in Abhänigkeit von der zu schaltenden Variable. Das wird nur neu geladen wenn es nötig ist und nicht wenn was anderes schaltet.

Hallo Rainer,

so sieht das z.B. für eines der Lichter in der Küche aus

 <?
$eid=@GetValue(49396 /*[Küche\Licht Schrank\Status]*/ );
if ($eid == false) {

IPS_SetHidden(44824 /*[.Aktuell\Licht Schrank Küche]*/ , true); //Objekt verstecken
}
else {
IPS_SetHidden(44824 /*[.Aktuell\Licht Schrank Küche]*/ , false); //Objekt anzeigen

}
WFC_Reload(40353 /*[WebFront Configurator]*/);
?>

Und das habe ich für ca. 20-30 IPS Instanzen aktiv.

Damit visualisiert mein „Aktuel“ Modul sozusagen in Echtzeit, was passiert.

Hilft das?

Gruß

Axel

Hallo Axel,

das ist klar, bei jedem Scriptaufruf wird die Seite neu geladen.

Ich versteht jetzt ehrlich gesagt nicht ganz den Sinn und Zweck was Du da versteckst. Schalter, Icons oder was?

Rainer wie machst du das denn? Gibts da ne elegantere Lösung?
Ich denke der Sinn ist, dass man z.B. von eine „Liste“ von Links macht und die auf einer Seite anzeigt. Dann hat man eine Seite nur mit den Geräten die aktuell an sind!

Hallo Rainer,

ich habe eine Seite (Modul), wo nur die aktuell eingeschalteten Verbraucher, geöffneten Fenster etc. angezeigt werden. Wenn sie aus/geschlossen sind, werden sie eben versteckt.

Das geht m.E. nur in quasi-Echtzeit, wenn man den WFC_Reload Befehl verwendet.

Wie Pollibus geschrieben hat, ist die „Aktuell“ Seite nichts anderes als eine Liste von Links.

Nun wäre es eben schön, wenn man den Reload nur dann machen würde, wenn die „Aktuell“ Seite angzeigt wird und eben nicht, wenn ein anderes Modul dargestellt wird.

Gruß

Axel

Hallo Axel,

Echtzeit! Im Webfront werden (fast)alle Zustände direkt nach Änderung angezeigt. Dafür braucht man kein WFC_Reload.
Ausnahme COLOR=BlackIPS_SetHidden. Dafür braucht man dann [/COLOR]WFC_Reload[COLOR=Black].

Ich baue auch nicht den Lichtschalter ein und aus wenn ich ihn brauche. :smiley:

[/COLOR]

Hallo Rainer,

klar wird fast alles in Echtzeit angezeigt.

Nochmal, mir geht es um ein Modul / Seite, wo nur alle eingeschalteten / geöffneten Aktoren angezeigt werden. Sozusagen als Gesamt-Statusübersicht, die würde natürlich ewig lang, wenn ich tatsächlich alle Aktoren darstellen würde. Daher „baue“ ich die nicht aktiven in der Übersicht mit dem IPS_SetHidden tatsächlich virtuell aus.

Natürlich kann ich den Status der einzelnen Aktoren auch in allen anderen Modulen oder Kategorien sehen aber eben nicht als Gesamtübersicht und genau darum geht es mir hier.

Da es mit dem IPS_SetHidden nur nach Reload funtioniert, suche ich einen Weg herum, wenn es ihn den überhaupt geben sollte.

Gruß

Axel

Hallo zusammen,

ich habe mir ein Skript gebastelt in dem ich in einer Kategorie für alle eingeschaltene LCN-Verbraucher ein Link erstelle.

<?
$links = (IPS_GetChildrenIDs(58273 /*[Verbraucher]*/));     // alle Links in 58273 (Kategorie Verbraucher)
//print_r ($links);
foreach($links as $ID)
	{
	   if ($ID != 22799 /*[Verbraucher\eingeschaltene Verbraucher suchen]*/)
	   {
		IPS_DeleteLink ( $ID );
		}
	}


 foreach(IPS_GetInstanceList() as $item){   // alle Unterobjekte
    $M = IPS_GetInstance($item);
   $MInfo = $M['ModuleInfo'];
   //print_r ($MInfo);
    if ($MInfo['ModuleName'] == "LCN Unit") {
       $O = IPS_GetObject($item);
       $Oh = IPS_GetName($O['ParentID']);
       //echo $Oh ."
";
		//print_r(IPS_GetChildrenIDs($item));
      foreach(IPS_GetChildrenIDs($item) as $item_2){
         $name = IPS_GetName($item_2);
         //echo "Name: ".$name."
";
           if ($name == "Status"){
           //print_r(IPS_GetVariable($item_2));
					$Object = IPS_GetObject($item_2);
              if (GetValue($item_2) == true and $Object['ObjectIsHidden'] == 0){
                  $LinkID = IPS_CreateLink();
                  IPS_SetParent($LinkID,58273 /*[Verbraucher]*/);
                  IPS_SetName($LinkID,$Oh.":    ".$O['ObjectName']); //Link benennen
                  IPS_SetLinkChildID($LinkID,$item_2);
                   //echo "ID: " . $item_2 .  " " . $O['ObjectName'] . " " . $Oh . "
<p>";
                }
            }
        }
   }
 }

WFC_Reload(55585 /*[WebFront Configurator]*/);
WFC_SwitchPage(55585 /*[WebFront Configurator]*/, "item2314");

?>

Jetzt suche ich auch noch eine Möglichkeit das Skript beim Aufruf der WF-Seite zu triggern.

Vieleicht hat einer eine Idee?

Gruß
Christian