Zeitsteuerung in iPS - Bug?

Hallo zusammen,

ich habe ein Problem mit einer simplen zeitgesteuerten Ein-/Ausschaltfunktion.

Ich nutze folgendes Skript aus der Onlinehilfe als Basis:
„… ein Gerät einschalten und nach z.B. 60 Sekunden wieder aussschalten?“
Wie kann ich…? - IP-Symcon :: Automatisierungssoftware

Das Skript habe ich nach meinen belangen angepasst. Es funktioniert auch mit kurzen Intervallen, z.B. den 60 Sekunden. Nun möchte ich die Terassenbeleuchtung, die über einen Dämmerungssensor eingeschaltet wird, nach 2 Stunden wieder automatisch ausschalten, d.h. nach 7200 Sekunden.

Das klappt aber nicht, das Intervall ist deutlich länger als 2 Stunden (und zwar immer unterschiedlich lange), der Timer scheint bei Zeitspannen grösser 30 Minuten nicht mehr zu funktionieren.

Hat jemand einen Tip oder eine alternative Vorgehensweise für mich.

Der Vollständigkeit halber anbei mein komplettes Skiript.


<?

 //Skript zum Steuern diverser Aktoren abhängig von der Dämmerung im Aussenbereich
 
 
$DAEMMERUNG = GetValue(25659 /*[Garten\Dämmerungssensor\Status]*/);

if ($DAEMMERUNG === true)
 {

	if($IPS_SENDER == "TimerEvent")
 	{
   	FS20_SwitchMode(56697 /*[Garten\Beleuchtung\Terrassen Beleuchtung ]*/, false);

	  //Timer ausschalten
 	 IPS_SetScriptTimer($IPS_SELF, 0);
 	} else {
  	//An Befehl

	  	FS20_SwitchMode(56697 /*[Garten\Beleuchtung\Terrassen Beleuchtung ]*/, true);
  

	  //Timer anschalten
  	IPS_SetScriptTimer($IPS_SELF, 3600);
	}
 } else {
   FS20_SwitchMode(56697 /*[Garten\Beleuchtung\Terrassen Beleuchtung ]*/, false);
   IPS_SetScriptTimer($IPS_SELF, 0);
 }


?>

Danke für Eure Hilfe

Welche IPS Version setzt Du denn ein?
Ich kann keinen Fehler im Script erkennen.

iPS 2.20
das ganze läuft unter Windows XP in einer Virtualbox VM unter Linux, alles andere tut bestens.

Füge mal die Ansicht Timer Informationen in der Konsole ein. Und prüfe die Zeit „Letzer Aufruf“ / „Nächster Aufruf“ des Scriptes was steht dort beim Start?

Was ich mir noch vorstellen könnte, dass das Script von ID 25659 „bei Aktualisierung“ getriggert wird. Dann würde der Scripttimer immer wieder gesetzt.
Hier muss unbedingt „bei Änderung“ getriggert werden.

@cyberganny
Kannst du das ausschließen?

Hallo nancilla,

wird nur bei Änderung getriggert. Aktualisierung kann ich ausschliessen.

Hi Thomas,

Konsole habe ich aktiviert, steht allerdings kein Wert drin, da ich heute das Windows wg. Updates rebooten musste, werde das mal übers Wochenende beobachten.

Hallo Thomas,

Dämmerungssensor hat geschaltet, aber in der Timerübersicht, taucht nichts auf!?!

Siehe Attachment.

Sorry Micha, falsche Baustelle. Ereignis Informationen zeigt die Timer der Scripte.

Hi Thomas,

Timer steht derzeit auf einer Stunde (3600 Sekunden)
das sieht in den Ereignis Informationen wie folgt aus:

Das bedeutet das er den letzten Timer schonmal vom Wert her richtig gesetzt hat.
Schaue mal beim nächsten Scriptstart (oder simuliere es einfach) wie die beiden Zeiten aussehen („letzter- und nächster Aufruf“) und ob die Zeit „nächster Aufruf“ vom wirklichen nächsten Scriptstart abweicht.

In einer VM kann es schon mal Probleme mit der Zeit geben geben. Wird denn die normale Uhrzeit in der Windows-Box immer richtig angezeigt?

Tommi

Hallo Thomas,
hallo Tommi,

die Zeit der VM stimmt, und ist zuverlässig.

Ich habe heute um 11:15:24 h eine Schaltung simuliert.
Darauf hat er als nächsten Zeitpunkt einer Aktion 12:15:24h im Ereignis Protokoll eingetragen (siehe Screenshot), in der Zwischenzeit ist es 14:28h und das Licht brennt immer noch!

Was bedeutet denn „Zeit ab“?

um 14:45h hat er abgeschaltet ???

Mein Latein ist hier so gut wie am Ende. Probiere mal bitte noch folgendes um einen evtl. übersehenen Scriptfehler auszugrenzen. Schreibe bitte in Zeile 1 des Scriptes eine Bool Variable und schaue mal ob diese nach einer Stunde geschrieben wird.
Und ersetze mal bitte:


if ($DAEMMERUNG === true)
 {

durch:


if ($DAEMMERUNG)
 {

Liegt der Fehler vielleicht an den drei Gleichheitszeichen beim if? Dürfen doch nur zwei sein.

Mir war das anfänglich schon aufgefallen, aber dürfte in diesem Fall nicht störend sein, wenn $DAEMMERUNG tatsächlich eine bool-Variable ist.

Das dritte Gleichheitszeichen überprüft einfach nur zusätzlich den Typ der Variable.

Siehe auch: PHP: PHP type comparison tables - Manual

Ich war mir nur nicht so sicher ob GetValue immer den richtigen Typ zurückliefert.

Hallo zusammen,

habe Eure Änderungen eingepflegt aber ohne Erfolg.

Das Skript wird gestartet, aber der Timer überzieht immer 50%.

Ich habe jetzt mal Sekunden genau mit kurzen Schaltzyklen getestet.

statt 10 -> 14 Sek
statt 20 -> 30 Sek
statt 30 -> 45 Sek
statt 60 -> 90 Sek

In der Ereignisanzeige wird immer der richtige Zeitpunkt eingetragen, geschalten wird aber immer erst Anzahl Sekunden * 1,5 ???

um auszuschliessen, dass das ganze nicht an der VM liegt werde ich jetzt mal alles auf einem Notebook installieren und dort nochmals testen

gebe dann Status

Hallo zusammen,

vielen Dank für Eure Unterstützung, ich habe die Installation kurz aus der VM auf einen Notebook umgezogen. Und obwohl die Uhrzeit in der VM grundsätzlich richtig angezeigt wird, scheint es doch ein VM Problem zu sein.

Auf dem Notebook klappt das alles auf die Sekunde genau.

Also muss ich mir doch einen kleinen EEEPC kaufen nur für iPS :frowning:

Euch nochmals Danke sowie ein schönes Restwochenende und hoffentlich besseres Wetter als hier!