Script Timer auslesen

Hallo,

wie kann ich den aktuellen Script-Timer Wert auslesen.

Beispiel:

IPS_SetScriptTimer(„TestScript“, 30); //setzt den Script-Timer auf 30s

Timer zählt runter - den aktuellen Wert möchte ich als Countdown im Designer darstellen.

So nach dem Motto :

echo „Detonation in „.$TimerAktuell.“ Sekunden!“; //:wink:

Gruß,
kpiep

Was bringt denn der Befehl:
IPS_GetScriptTimer
für eine Info. Bin leider nicht Zuhause und aus der Diku geht es nicht genau hervor. Kannst ja mal testen ob der den Aktuellen Counter anzeigt oder nur sagt worauf er Ursrünglich gestellt war.

@Retiarius
IPS_GetScriptTimer gibt nur den eingestellten Timmerwert zurück, nicht die noch laufende Zeit…

Einfach parallel zum Skript ein zweites Skript starten das im Sekundentakt einen Zähler runterzählt bis auf 0, das den gleichen Anfangswert hat wie der Ursprungstimer den du als erstes gesetzt hattest ! Und den Zählerstand kannst du dann ganz bequem im Designer anzeigen lassen !

mfG Franz

Quatsch…

Versuch diese Formel:

Startzeit + IPS_GetScriptTimer - aktuelle Uhrzeit.

also:

0:10 + 0:30 - 0:20 = 0:20 
  • Um 0:10 gestartet
  • 30 Minuten eingestellt
  • jetzt 0:20 Uhr
    -> 20 minuten Rest.

Toni


 echo IPS_GetScriptTimer("TimerEvent") + IPS_GetLastRun("TimerEvent") - time();

Hallo ,

könnte jemand mal den aktuellen String zur abfrage der Restlaufzeit Posten ?

echo GetTimeRemaining($_IPS['SELF']); //Von sich selbst herausfinden
 
function GetTimeRemaining($id)
{
    $eid=@IPS_GetEventIDByName("ScriptTimer", $id);
    if($eid === false) {
        return -1;
    } else {
        $e=IPS_GetEvent($eid);
        if($e['NextRun'] == 0)
        {
            return -1;
        } else {
            return $e['NextRun'] - microtime(true);
        }
    }
setvalue (47345, GetTimeRemaining(37227) / 60 ); // Restzeit in eine String Variable abspeichern , die ID 37227 ist das Script mit dem Timer 
$rest = substr(getvalue(47345 ), 0, -16); // zahlen abschneiden nicht schön aber sinnvoll 
setvalue (47345,$rest); // Fertig Restlaufzeit in Minuten 
}

geht sicherlich schöner .

Hallo,

ich scheine zu blöd, die Restlaufzeit eines Skripttimers auszulesen.

Angenommen, Skript ID 12345 hat Skripttimer ID 67890. Wenn ich in einem separaten Skript 34567 die Restlaufzeit abfragen (und idealerweise in eine String-Variable schreiben) lassen möchte, wie lautet genau der Skript-Code???

Danke für einen Hinweis…!

Viele Grüße

Götz

 echo IPS_GetScriptTimer("TimerEvent") + IPS_GetLastRun("TimerEvent") - time(); 

Wenn ich das im Skript ID 12345 ausführen lasse, bekomme ich folgende Fehlermeldung:

Warning: Cannot auto-convert value for parameter ScriptID in /var/lib/symcon/scripts/50148.ips.php on line 16

Fatal error: Uncaught Error: Call to undefined function IPS_GetLastRun() in /var/lib/symcon/scripts/50148.ips.php:16
Stack trace:
#0 {main}
thrown in /var/lib/symcon/scripts/50148.ips.php on line 16
Abort Processing during Fatal-Error: Uncaught Error: Call to undefined function IPS_GetLastRun() in /var/lib/symcon/scripts/50148.ips.php:16

Auch

echo IPS_GetScriptTimer($IPS_SELF, "TimerEvent") + IPS_GetLastRun($IPS_SELF, "TimerEvent") - time();

funktioniert nicht und bringt

Warning: Wrong parameter count for IPS_GetScriptTimer() in /var/lib/symcon/scripts/50148.ips.php on line 16

Fatal error: Uncaught Error: Call to undefined function IPS_GetLastRun() in /var/lib/symcon/scripts/50148.ips.php:16
Stack trace:
#0 {main}
thrown in /var/lib/symcon/scripts/50148.ips.php on line 16
Abort Processing during Fatal-Error: Uncaught Error: Call to undefined function IPS_GetLastRun() in /var/lib/symcon/scripts/50148.ips.php:16
Stack trace:
#0 {main}
thrown
Error in Script /var/lib/symcon/scripts/50148.ips.php on Line 16

Kann jemand helfen diesbezüglich und bezüglich des Skripts von Fraunhofer?

VG, Götz

So, ich habe es nun so umgesetzt, falls jemand es brauchen kann (ein Profi könnte ggf. vieles kürzen und schöner machen):

Ziel:

Ich wollte einen Timer per Schalter (Boolean ID 11111) einschalten, um nach einer gewissen Zeit eine Lampe in Homematic (ID 55555) auszuschalten (meine kleine Tochter will immer bei Licht einschlafen und ich habe es schon öfters vergessen, auszuschalten). Im Webfront möchte ich über eine String (ID 22222) sehen, welche Rest-Laufzeit bleibt, aber nur, wenn der Timer aktiv ist.

Vorgehen:

Dazu habe ich zwei Skripte (IDs 33333 und 44444) wie folgt angelegt:

Skript 33333 (Ereignis: Änderung der ID 11111):

<?

$Zeit = 2700; // Ausschaltzeit in Sekunden
$Minuten = $Zeit/60;

$Arr = IPS_GetChildrenIDs(44444);
if (empty($Arr) == true)
	{
	$eid = IPS_CreateEvent(1);
	IPS_SetEventCyclic($eid, 0 /* Keine Datumsüberprüfung */, 0, 0, 2, 1 /* Sekündlich */ , 5 /* Alle 5 Sekunden */);
	IPS_SetParent($eid, 44444);
	}
$TEN = IPS_GetChildrenIDs(44444)['0'];

if ($IPS_SENDER == "TimerEvent") 
		{
		IPS_SetScriptTimer($IPS_SELF, 0); 
		IPS_SetEventActive($TEN, false);
		SetValue(11111, false);
		IPS_SetHidden(22222, true);
		HM_WriteValueBoolean(55555, "STATE", false);
		return; 
		}
		
else
	{		
	if (GetValue (11111)
		{
	   	IPS_SetScriptTimer($IPS_SELF, $Zeit); 
		IPS_SetHidden(22222, false);
		SetValue(22222, ("Ausschalten in ").$Minuten.(" Minuten"));
		IPS_SetEventActive($TEN, true);
		}

	else
		{
		IPS_SetScriptTimer($IPS_SELF, 0); 
		IPS_SetEventActive($TEN, false);
		IPS_SetHidden(22222, true);
		return;
		}
	}

?>

Skript 44444 (Ereignis: alle 5 Sek. auslösen):

<?

  	$TEH = IPS_GetEventIDByName("ScriptTimer", 33333);
 	$RT = date ('i:s', ((IPS_GetEvent($TEH)['NextRun']) - time()));
	SetValue(22222, ("Ausschalten in ").$RT.(" Minuten")); 
 
?>

So zählt die String runter - ich habe als Ereignis alle 10 Sek. auslösen gewählt, da IPS sekündlich bei mir nicht hinterher kam. Wird kein Ergeignis festgelegt, wird eines kreiert (5 Sek.).

VG, Götz