IPS View Ereignis - ToggleImage unter Windows werden nicht angezeigt

Hallo,

analog zu dem Thema IPS View Ereignis - ToggleImage unter Android werden nicht angezeigt https://www.symcon.de/forum/threads/30640-IPS-View-Ereignis-ToggleImage-unter-Android-werden-nicht-angezeigt - habe ich jetzt bei dem aktuellen Windows und IOS Client exakt das beschriebene Problem. Der Clou bei der Geschichte ist, dass wenn ich die Variable direkt in IP Symcon ändere dies im Client angezeigt wird. Startet das Skript und schaltet die Variable so passiert das nicht :mad: Dies gilt auch für IOS.

Die Tasten bestehen aus einem Toggle Image und einem überlagerten transparenten Image Button. Zwei Sachen sind mir dabei aufgefallen. Zum einen habe ich solche Kombinationen schon länger im Einsatz und diese funktionieren. Beim Kopieren einer Gruppe dieser Tasten oder auch nur einer einzelnen Taste von View zu View fehlten plötzlich die Bezüge zu den Toggle Bildern, Die Aus Bilder waren vorhanden während die Ein Bilder wieder neu zugewiesen werden mussten.

Die Skripte werden normal ausgeführt und schalten auch die Variablen, deren Status angezeigt werden müsste.

Gruß
Hans

Das verlinkte Problem mit dem ToggleImage betrifft Widgets bzw. die Fernsteuerung. Hab das gerade nochmals unter Windows getestet - funktioniert 1A :confused:

Hallo Andreas,

danke für die Antwort die jedoch leider auf das Problem nicht eingeht :smiley:

Da der Vorgang jedoch reproduzierbar ist hier nochmals die Darstellung und das Verhalten in IPSView.

  1. Erstellung eines Toggle Images mit einer Variablen und Zuweisung der Statusbilder.

  1. Erstellung eines Image Button und Zuweisung des türkisfarbenen Rahmens, den ich im Beispiel jetzt daneben gelegt habe.

  1. Vereinfachtes Testskript.
<?
SetValueBoolean(38204 /*[Zeit-Aktion Scripte\Aktionen\Var Hans-Schlafen]*/, true);
sleep(10);
SetValueBoolean(38204 /*[Zeit-Aktion Scripte\Aktionen\Var Hans-Schlafen]*/, false);
?>
  1. Verhalten in IPSView:

a.) Startet man das Skript über den Image Button erfolgt keinerlei Reaktion im Windows Client. Die Variable wird in der Konsole aber zunächst auf true und danach wieder auf false gesetzt. Starte ich das Programm statt mit einem Image Button mittels eines Button (Text), so funktioniert der Bildwechsel ebenfalls nicht.

Aufgefallen ist mir dabei, dass im Client zur Laufzeit des Skriptes im Fensterrahmen „Keine Rückmeldung“ angezeigt wird. Dann kann ja auch kein Bildwechsel erfolgen oder?

b.) Startet man das Skript über die IPS Konsole so wird die Änderung im Windows Client angezeigt, d. h. es erfolgt der Bildwechsel so wie es sein soll.

c.) Ändere ich die Variable manuell in der IPS Konsole ändert sich das Statusbild entsprechend.

Dieses Verhalten kann ich unter Win 7 x64 problemlos reproduzieren :slight_smile:

Gruß
Hans

Während der Ausführung einer Aktion im Client erfolgt kein Update der GUI. Wenn Du das Sleep+Ausschalten in ein separates Skript packst, funktioniert es. Noch Resourcenschonender wäre die Verwendung eines Scripttimers.

Hallo Andreas,

danke für den Hinweis :slight_smile:

Unter Android hat es übrigens funktioniert :smiley:

Gruß
Hans

Hallo Andreas,

ich möchte nochmals auf dieses ältere Thema zurückkommen.

Ich habe deinem Rat folgend die Änderung der Variablen nun ausgelagert in ein eigenes Script, welches mit IPS_RunScriptEx aufgerufen wird. Das Verhalten ist jedoch identisch. Während im IOS Client und im Android Client die Variablenänderung sofort auch zur Änderung des Images im Client führt, ist dies beim Windows 10 Client nicht der Fall :mad: Hier ändert sich die Variable erst dann, wenn das Hauptscript durchgelaufen ist. Dies kann ich insofern sehr schön reproduzieren, indem ich einfach ein sleep(10) in das Hauptscript einfüge. Je nach Länge des Schlafens erfolgt auch verzögert das Umschalten der Anzeige im Windows Client. Die Variable wird selbst aber sofort umgeschaltet.

Der Unterschied zwischen den IOS und Android Clients ist nur der, dass auf dem Windows 10 Client auch IPS selbst ausgeführt wird.

Ausserdem gilt nach wie vor, dass wenn ich das Script unter IOS starte und der Win 10 Client auch eingeschaltet ist, dass dann auch dort der Wechsel des Images sofort dargestellt wird.

Gruß
Hans

Poste doch mal Deine Skripts und die Info welches Skript vom Client gestartet wird. Der Workaround mit dem 2. Skript sollte auf jeden Fall funktionieren!

Hallo Andreas,

ich habe hier ein kleines Beispiel gemacht, mit welchem ich das Verhalten in meinen Umgebungen problemlos reproduzieren kann :wink:

Dieses Script wird über einen Image Button oder einen Button gestartet. Als Sender ist WebFront und als Variable im Beispiel Essen-Wohnen hinterlegt. Anstelle der eigentlichen Befehle habe ich nun einfach einen sleep Befehl gelegt, um das Verhalten zu zeigen.

// Setzen der Variablen so dass man sieht welcher Raumwechsel gestartet wurde.
IPS_RunScriptEx(58072 /*[Zeit-Scripte\Aktionen\Raumwechsel Variablenaenderung]*/, Array("Raumwechsel" => $_IPS['VARIABLE']));
sleep(10);

Dies ist das aufgerufene Script, welches die Variable setzt.

/*Dieses Script dient lediglich dazu, dass nach dem Starten der Raumwechselscripte
die Variable unter Windows gewechselt wird.*/

switch ($_IPS['Raumwechsel']) {
   case "Essen-Wohnen":
      SetValueBoolean(31863 /*[Zeit-Scripte\Aktionen\Raumwechsel Essen-Wohnen]*/, true);
	break;
   case "Essen-Schlafen":
      SetValueBoolean(11791 /*[Zeit-Scripte\Aktionen\Raumwechsel Essen-Schlafen]*/, true);
	break;
}

Was passiert nun bei der Ausgangslage, dass die Variable im Beispiel Essen-Wohnen auf false steht.

IOS-Android: Mit Betätigung des transparenten Image Buttons - im Hintergrund liegt das Toggle Image mit der Variablen - oder des Buttons wird der Wechsel des Toggle Images sofort am Client angezeigt.

Win 10: Die Anzeige des geänderten Toggle Images wird erst NACH Ausführung des Startscriptes - hier 10s durch den sleep simuliert - im Client angezeigt. Verlängert man den sleep z. B. auf 20 s dann wird die Änderung erst nach 20 s angezeigt. Dies gilt für meine beiden IPS Umgebungen (Produktiv- und Testumgebung je Win 10 Pro x64 V1703).

Gag am Rande: schalte ich den Win Client an und betätige den Image Button oder den Button unter IOS oder Android, so erfolgt die Anzeige sowohl auf dem aktiven Client als auch unter dem Win 10 Client sofort :mad:

Gruß
Hans

nimm das 10 Sek Sleep doch raus, das macht doch im 1. Skript gar keinen Sinn und blockiert derzeit unter Windows den Refresh!

Wie bereits beschrieben - als Workaround musst Du den Code mit dem Sleep in ein eigenes Skript auslagern. Das das auch mit einem Sleep unter Windows direkt im aufgerufenen Skript funktioniert, hab ich für die 3.3 auf meiner Liste stehen :wink:

Hallo Andreas,

du hast möglicherweise den Sinn des sleep-Befehls missverstanden. Er soll quasi nur einen Platzhalter für die im realen Script ablaufenden Prozesse darstellen :slight_smile: Die Laufzeit des Originalscriptes beträgt bedingt durch die Trägheit einiger Komponenten ca. 10 s. Diese Befehle sollte der sleep-Befehl ersetzen.

Aber die Lösung ist im Grunde ganz einfach. Ich habe in IPSView das 10 s lang laufende Originalscript aufgerufen und bekomme deshalb im Windows Client erst die Rückmeldung, wenn das Script abgearbeitet worden ist, obowhl der Befehl zum Umschalten der Variablen ausgelagert ist. Ich muss also in IPSView das Script zum Umschalten der Variablen aufrufen und dieses ruft dann das Originalscript mit IPS_RunScriptEx auf und übergibt dabei die Art des Raumwechsels.

Das Problem ist bei mir nur deshalb hochgekommen, weil mir zum einen aufgefallen war, dass sich die Clients unterschiedlich verhalten und weil das Originalscript etwas länger läuft :wink:

Gruß
Hans

Konnte das Problem mittlerweile genauer lokalisieren und hab den Fix nun doch in der Version 3.2 gemacht :slight_smile: