automat. Zähler für Interger Wert

Möchte eine Interger Variable von z.b. 400 Sekunden auf 0 zählen lassen, dieses soll aber wenn möglich ohne einen sleep Befehl auskommen.
Das heist ich möchte irgendwo im Script sagen zähle ab jetzt von 400 Sekunden bis 0 Sekunden und speichere den aktuellen Zähler immer in einer Variablen. Das Script soll aber weiter laufen.
Hat jemand da ne Idee?

MfG Thomas

Hallo Thomas,

eine von Dir beschriebene Funktion kenne ich leider nicht.

Beschreibe doch mal, wofür dieser Count Down gebraucht wird. Sicherlich läßt sich die Funktion auch ohne automatisch runterzählender Variable programmieren.

Ich wünsche einen schönen Abend.

Christoph

… vielleicht findest Du hier eine Anregung: http://www.ipsymcon.de/forum/showthread.php?t=2726

MST

@Christoph

Ich möchte die Restlaufzeit des Timers meiner PIRIS anzeigen lassen.

@Steiner

Das Beispiel hat mir geholfen, werde einfach ein Script starten was per IPS_SetScriptTimer immer im 1 Sekunden Takt die Variable des Timers des Bewegungsmelders runterzählt und so kann ich mir diese im Designer anzeigen lassen.

THX Thomas

Thomas,

Das kann doch ganz einfach berechnet werden…
Startzeit merken und hopla :wink:
if jetzt - startzeit < 400 {timeout = jetzt - startzeit}else{timeout = 0; startzeit=0;}

Hallo,

wie genau sind denn der IPS-Befehl IÜS_SetScriptTimer?

Wenn der hinreichend genau ist könnte ein Script nach 1 Sek. gestartet werden, dass die Variable 1 runterzählt und danach den Timer wieder für 1 Sek. setzt.


SetValueInteger("Variable",GetValueInteger("Variable"));
if(GetValueInteger("Variable"))>0) IPS_SetScriptTimer("Dieses Script", 10);

Gibt es eigentlich eine Möglichkeit einen PHP-Befehl per Timer ausführen zu lassen, oder muss dafür immer ein Script erstellt werden? Ich würde gerne ein Gerät nur kurz einschalten.

Ich wünsche einen schönen Abend.

Christoph


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : EG_Flur_Bewegungsmelder.ips.php
Trigger  : EG_Flur_Bewegungsmelder_Status 
Interval : 
*/


 include("C:/Programme/IP-Symcon/scripts/Konstanten.ips.php");

 if ($Run_EG_Flur) // Mehrfaches Triggern in kurzer Zeit verhindern
 {
 return;
 }

 SetValueBoolean("Run_EG_Flur", true);
 SetValueString("trig_script", $IPS_SELF); //Scriptstart an Designer Log übertragen

 //------------------------- Bewegung in Dunkelheit ----------------------------

 if ($OG_Bal_Daemmerungssensor_Status == true) //Dunkel
 {
 FS20_SwitchMode($OG_Flu_Dimmer, true); // Licht an
 SetValueBoolean("OG_Flu_Dimmer_Deckenlicht_Status", true);
 //Bewegungsmelderzeit
 SetValueInteger("EG_Flur_Zeit", 120);
 IPS_SetScriptTimer("EG_Flur_Zeit",1);
 }

 //------------------------ Bewegung bei Helligkeit ----------------------------

 else
 {
 //Bewegungsmelderzeit
 SetValueInteger("EG_Flur_Zeit", 120);
 IPS_SetScriptTimer("EG_Flur_Zeit",1);
 }

 //-----------------------------------------------------------------------------

?>


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : EG_Flur_Zeit.ips.php
Trigger  : 
Interval : 1s
*/


 include("C:/Programme/IP-Symcon/scripts/Konstanten.ips.php");

 SetValueInteger("EG_Flur_Zeit", GetValueInteger("EG_Flur_Zeit")-1);

 If ($EG_Flur_Zeit == 1)
 {
 IPS_SetScriptTimer("EG_Flur_Zeit",0);
 SetValueBoolean("EG_Flu_Bewegungsmelder_Status", false);
 FS20_SwitchMode($OG_Flu_Dimmer, false); // Licht aus
 SetValueBoolean("OG_Flu_Dimmer_Deckenlicht_Status", false);
 SetValueBoolean("Run_EG_Flur", false);
 }


?>

Hallo Christoph,

Wenn der hinreichend genau ist könnte ein Script nach 1 Sek. gestartet werden, dass die Variable 1 runterzählt und danach den Timer wieder für 1 Sek. setzt.

Grundsätzlich läßt sich ein Skript immer durch irgendeinen Event starten. Es spielt dabei nicht die geringste Rolle, wie genau der ScriptTimer läuft. Der Sekundentakt des ScriptTimers entspricht im Durchschnitt dem der Systemzeit, genauer geht es ohne äußere Hilfsmittel nicht.

SetValueInteger("Variable",GetValueInteger("Variable")); 

Es wird der Inhalt der Variablen „Variable“ gelesen. Dieser wird in der Variablen „Variable“ abgespeichert.
Was bewirkt diese Zeile?
Gar nichts!

if(GetValueInteger("Variable"))>0) IPS_SetScriptTimer("Dieses Script", 10); 

Ich vermute der ScriptTimer soll auf 1 (nicht auf 10) gesetzt werden. Der Timer wird also nach jeder Sekunde neu „aufgezogen“.
Was bewirkt diese Zeile?
Gar nichts!

Warum?
Der ScriptTimer zieht sich selbst auf! Das ist nachzulesen in der Dokumentation des Befehls IPS_SetScriptTimer(…).

Gibt es eigentlich eine Möglichkeit einen PHP-Befehl per Timer ausführen zu lassen, oder muss dafür immer ein Script erstellt werden?

Da heutzutage weder gedankliche noch mündliche Übermittlung von Befehlen an einen PC zuverlässig funktionieren, bleibt als letzter Ausweg nur die schriftliche Formulierung (z.B. eines PHP-Befehls).
Wie nennt man diese schriftliche Form der Übermittlung?
Skript!

:smiley: :wink: Nichts für ungut!:wink: :smiley:

Gruß
HJH

Hallo HJH,

Stimmt es fehlt ein -1!

Mir kam es auch schon etwas merkwürdig vor, dass ich einen Timer immer neu starten muss, andererseits ist das z. B. bei Javascript genau so. Ich hatte diese Anleitung gelesen. Den Text verstehe ich so, dass ein Timer nur 1x ausgeführt wird.

Ich hatte nichts anderes vor. Meine Frage war, muss ich ein Script schreiben, oder kann ich auch direkt einen PHP Befehl per Timer zur Ausführung bringen. Ein Skript ist für mich immer dazu gedacht, um mehrere Befehle zusammenzufassen. Einzelne Befehle in ein Skript zu schreiben, halte ich für sehr umständlich.

Ich wünsche einen schönen Tag.

Christoph

wenn du genau hinsiehst wirst du feststellen, dass die von dir verlinkte Funktion garnichts ausführt sondern einen Integer zurück liefert.

Beschreibung:

[b]*[/b] Fragt den Script Timer Intervall ab 

Klassischer Fall von verguckt. :wink:

Alles was größergleich eine Zeile ist und Anweisungen enthält, die von PHP ausgeführt werden können, ist ein Script. :wink:

Schreib die Zeile, so wie du es vor hattest, einfach in eine Datei. Das alles.

Gruß,

Toni