Timer in 3.1 werden nicht deaktiviert @parsey

Hallo paresy,

ich hatte zweimal ein Bug Report geschrieben, aber anscheinend hat das Problem keiner sonst, ich kann mir aber nicht vorstellen wie das an meinem System liegen kann.
Windows 7, VMware, System nur für IPS

unter 3.0 funktioniert das deaktivieren des Timers im Script problemlos, in 3.1 nicht mehr.

Das ist mein Script:

<?


if($_IPS['SENDER'] == "TimerEvent")
{
IPS_SetScriptTimer($_IPS['SELF'], 0);
}
else
{
IPS_SetScriptTimer($_IPS['SELF'], 15);
}

echo "ja";



?>

Irgendwann deaktiviert sich der Timer. Beim ersten Versuch nach dem vierten Mal, beim zweiten läuft er grad nach 30mal immernoch. Der Timer wird grau hinterlegt nach der ersten Ausführung nur es steht dann immernoch eine Zeit in der Zukunft dahinter. Irgendwann steht dann nie dort und dann ist er wirklich aus.
Was kann ich tun?

Sebastian

Das ist das Ergebnis:

Bildschirmfoto 2014-02-07 um 18.15.27.pngBildschirmfoto 2014-02-07 um 18.15.38.png
Bildschirmfoto 2014-02-07 um 18.15.48.png

Das ist echt seltsam. Geht ohne Probleme bei mir.

  1. Mal Script gelöscht, neues Probescript mit nur diesem Inhalt angelegt?
  2. Hast Du noch ein Notbook oder anderen PC, mal IPS 1:1 kopieren und dort probieren.

Hab’s sogar auf einem nackten win7 System ausprobiert. Allerdings auch Virtual machine. Genauso.
Das script ist neu. Mir ist aufgefallen dass meine sosumi Abfragen nicht mehr deaktiviert wurden. Deshalb der Test.

Sebastian

Gesendet von meinem iPad mit Tapatalk

Läuft bei mir auch ohne Probleme

Neuigkeiten:

Habe auf einem Notebook unter win xp ips ganz neu installiert. Script läuft und Timer werden deaktiviert. Alles korrekt.

Danach habe ich meinen 3.0 Ordner rüberkopiert und auf dem Notebook auf 3.1 gebracht. Auch hier funktioniert alles korrekt.

Aber unter Windows 7 prof gehts eben weiterhin nicht und zwar mit genau dem gleichen IP-Symcon Ordner.

Edit 16:48
Es liegt am Timing. Wenn man ein
IPS_Sleep(0)
einbaut, dann funktionierts perfekt.

Habe mit IPS_Sleep(500) angefangen und mich bis 0 runtergearbeitet.

<?


if($_IPS['SENDER'] == "TimerEvent")
{
IPS_Sleep(0);
IPS_SetScriptTimer($_IPS['SELF'], 0);
}
else
{
IPS_SetScriptTimer($_IPS['SELF'], 15);
}

echo "ja";



?>

Sebastian

Hab’s auch gerade mal probiert, beim ersten Mal hat es tatsächlich drei bis vier Durchgänge gebraucht bis der Timer „ruhig“ war. Danach lief es ohne Probleme (auch ohne sleep). Auch mit der gleichen Vorgehensweise in einem neuen Skript schaffe ich es aber nicht nochmal das nachzustellen. Irgendwie komisch das Ganze.

Gruß
Bruno

Habe das gleiche Problem wie Buzz2912 auf einer virtuellen Maschine mit Windows 8, auf der nur IP-Symcon läuft.
Die Ausführungshäufigkeit des Scripts schwankt zwischen 1 (korrekt) und 20.
Der Sleep-Befehl erfordert bei mir mindestens 5 ms und ist nur ein workaround für ein Problem, das möglichst schnell behoben werden sollte.
Meiner Vermutung nach, löst der Timer zunächst das Systemereignis aus, welches unter anderem die nächste Ausführungszeit setzt. (Hier gibt es ja durchaus Änderungen zur Vorgängerversion!).
Danach sollte das Benutzerscript starten, welches diesem Timerereignis zugeordnet ist. Offensichtlich ist aber das Systemereignis noch nicht fertig mit dem Setzen der Zeit und überschreibt schließlich ein zu schnell erfolgtes Zurücksetzen aus dem Userscript.

Hallo Buzz2912,

Du bist mein Held! Ich habe seit der 3.1 Beta ein nerviges Problem mit meinen WebCams. Mein Bugreport ist leider bis jetzt ungehört geblieben. Nachdem ich Dein Beispiel Script gesehen habe, hat es Klick gemacht.

Ich bekomme ab und zu Meldungen auf dem Webfront, dass ein Prozess nicht auf die Media Datei zugreifen kann.
Und die teilweise falsche deaktivierung des Timers ist auch hierfür die Ursache.

Ich lade jede Sekunde von meinen IP Cams ein Bild, füge das aktuelle Datum ins JPG ein und speichere sie im Media Verzeichnis um im Webfront ein „pseudo Motion-JPG“ anzuzeigen. Da das Laden der Bilder teilweise länger als eine Sekunde dauert, deaktiviere ich am Anfang des Scriptes den Timer und setze in anschließend wieder auf 1 Sekunde.

Da die Deaktivierung des Timers teilweise nicht funktioniert, laufen dann zwei Instanzen des Scriptes und versuchen gleichzeitig die Medien Datei zu überschreiben. Dies kann natürlich nicht gut gehen!

Hier mein Script:


<?

$url = "http://10.10.44.19/enu/camera640x480.jpg";
$saveto = "c:\IP-Symcon\media\webcam_sprechanlage.jpg";

// IPS_Sleep(0) an dieser Stelle löst das Problem !!!
IPS_SetScriptTimer($_IPS['SELF'], 0);
@LoadJPG($url, $saveto);
IPS_SetScriptTimer($_IPS['SELF'], 1);

function LoadJPG($url, $saveto) {
	$img = @imagecreatefromjpeg($url);
	if(!$img) {
	   $img = ImageCreate(640, 480);
	   $colorblack = ImageColorAllocate($img, 0, 0, 0);
	   $colorwhite = ImageColorAllocate($img, 255, 255, 255);
	   ImageFilledRectangle($img, 0, 0, 640, 480, $colorblack);
	   ImageString($img, 2, 20, 3, "Connection Error! ".date('d.m.y H:i:s'), $colorwhite);
	} else {
		$colorblack = ImageColorAllocate($img, 0, 0, 0);
	   $colorwhite = ImageColorAllocate($img, 255, 255, 255);
	   imagefilledrectangle($img, 0, 0, 110, 20, $colorblack);
		imagestring($img, 2, 3, 3, date('d.m.y H:i:s'), $colorwhite);
	}
   @imagejpeg($img, $saveto);
}
?>

@Paresy: Ich nutze einen physikalischen Windows 8.1 PC.

Neue Beta zum Timer Problem online. Kann erst morgen testen.

erster Test positiv. In meinem Testscript wird der Timer sofort deaktiviert. Danke!