Timer/StoppUhr im WebFront

Hallo Jungs

Ich versuche schon seid Tagen hier im Forum eine Lösung für mein „Problem“ zu finden.

Ich würde gerne im WebFront einen Timer mit laufen lassen wie lange eine Variable geschaltet ist und das es auch angezeigt wird im Webfront.

zb Schalter AN —> 00:00:01 nach 15 sek —> 00:00:15 Schalter AUS

hoffe ihr könnt mir helfen

a) Skript welches bei Anschalten losläuft und jede Sekunde ausgeführt wird
b) Integer Variable mit UnixTimestamp die von Skript a) hochgezählt wird
c) Skript a) bekommt noch ein nettes Extra, welches den Timer beim Ausschalten wieder deaktiviert

Leichte Ungenauigkeiten können bei dieser Methode auftreten. Aber ist eher simpel realisierbar :slight_smile:

paresy

Danke für denn Hinweis aber irgendwie bin ich heute schwer von begriff :frowning:

Könntest mir evtl das Skript schicken??

Du legst Dir z.B. einfach eine Variable vom Typ Integer mit Namen Start Time an und weist ihr das Profil ~Unixtimestamp zu. Dann legst Du Dir eine zweite Variable an vom Typ String mit Profil ~String, die den Text enthalten soll, der im Webfront steht. Unterhalb der Variable legst Du zwei Skripte an. Eines zum beschreiben des Werts in den Webfront und ein Skript das den Timer setzt bei Variablenaktualisierung der zu beobachtenden Variable.

Sieht dann z.B. so aus:
timer.png

Auf das eine Skript Timer schalten legst Du ein Ereignis bei Variablenaktualisierung und schaltest damit den Timer für das zweite Skript.

Timer schalten


$state = GetValue(36602 /*[Geräte\Homematic\Räume\Büro\Arbeitszimmer Licht\Zustand]*/); //Variable die geschaltet wird
 $timerscriptid =  48610 /*[Geräte\Homematic\Homematic Scripte\Dachgeschoss\Büro\Timer Beleuchtung\Time Elapsed	ime elapsed]*/;
 $starttimeid =  42559 /*[Geräte\Homematic\Homematic Scripte\Dachgeschoss\Büro\Timer Beleuchtung\Start Time]*/;

if($state)  // Beim Einschalten Timer setzten und Startzeit ablegen
{
	SetValue($starttimeid, time());
 	IPS_SetScriptTimer($timerscriptid, 1); //Skript alle 1s ausführen
}
else //Timer auschalten
{
	IPS_SetScriptTimer($timerscriptid, 0); // Timer löschen
}	

Das Script time elapsed mist die vergangene Zeit


$nowtime = time();
$oldtime = GetValueInteger(42559 /*[Geräte\Homematic\Homematic Scripte\Dachgeschoss\Büro\Timer Beleuchtung\Start Time]*/); //Startzeit
$timeprint = "Gerät eingeschaltet: ".time_elapsed($nowtime-$oldtime);
SetValue(35677 /*[Geräte\Homematic\Homematic Scripte\Dachgeschoss\Büro\Timer Beleuchtung\Time Elapsed]*/, $timeprint);

/** Output:
Gerät eingeschaltet: 6d 15h 48m 19s
**/


 function time_elapsed($secs){
    $bit = array(
        'y' => $secs / 31556926 % 12,
        'w' => $secs / 604800 % 52,
        'd' => $secs / 86400 % 7,
        'h' => $secs / 3600 % 24,
        'm' => $secs / 60 % 60,
        's' => $secs % 60
        );
        
    foreach($bit as $k => $v)
        if($v > 0)$ret[] = $v . $k;
        
    return join(' ', $ret);
    }