Timer für das WebFront

Hallo,

seit vergangener Woche bin ich nun auch IP-Symcon-Nutzer. Da ich im Forum schon länger mitgelesen habe und hieraus viele nützliche Skripte verwenden konnte, möchte als ersten Post gleich ein kleines Timer-Skript für das WebFront vorstellen.

Inspiriert wurde ich vom Eieruhr-Skript (hieraus stammt auch die Sounddatei und ein Teil des Codes).

Das Skript lässt sich einfach mit 6 Tasten bedienen (auch Touchpanel-geeignet).
Wenn der Timer aktiv ist, startet das Skript automatisch alle 10 Sekunden (in den letzten 10s jede Sekunde) um die Webfront-Anzeige zu aktualisieren.

Die Variablen wie im Anhang gezeigt anlegen.
Für die „SetTimer“ Variable muss noch ein Variablen-Profil (s.Bild) angelegt und das Timer Skript als auszuführendes Skript eingetragen werden.

Mit zwei Links auf „Anzeige“(Variablen-Profil ~String) und „SetTimer“ lässt sich der Timer dann im WebFront darstellen.

Viele Grüße,
to

P.S. Gibt es im Skript-Editor eine „Suche und Ersetze“-Funktion? Diese wäre hier sehr hilfreich. Nur als Anregung für spätere IP-Symcon-Versionen.

<?
$timer = 33009 /*[Skripte\Timer\Timer]*/;
$setTimer = 44414 /*[Skripte\Timer\SetTimer]*/;
$status = 35439 /*[Skripte\Timer\Timer_Status]*/;
$display = 56394 /*[Skripte\Timer\Timer Anzeige]*/;
$timerStart = 42758 /*[Skripte\Timer\Time_Start]*/;
$id_sound = 18213 /*[Instanzen\Media Player Radio]*/;

if ($IPS_SENDER == "WebFront"){
    $Timer=GetValue($timer);
   switch ($IPS_VALUE) {
       case 0:                                           //+1 min.
                $Timer=$Timer+60;
                SetValue($setTimer,0);
       break;
       case 1:                                           //11 min.
            if ($Timer >= 60) {
                $Timer=$Timer-60;
                }
                SetValue($setTimer,1);
       break;
       case 2:                                           //+10 min.
            $Timer=$Timer+600;
            SetValue($setTimer,2);
       break;
       case 3:                                           //-10 min.
            if ($Timer >= 600) {
            $Timer=$Timer-600;
                }
                SetValue($setTimer,3);
       break;
       case 4:                                              // Start/Stop
            if (GetValue($status)){   //Stop...
               SetValue($status, false);
               IPS_SetScriptTimer($IPS_SELF, 0);
               $Timer=GetValue($timerStart) +  GetValue($timer) - time();
               }
                else {                                      // ... und Start
                   SetValue($status, true);
                   SetValue($timerStart, time());
                   IPS_SetScriptTimer($IPS_SELF, 10);
                   }
            SetValue($setTimer,4);
        break;
       case 5:                                           //Reset
             if (GetValue($status)){
                    SetValue($status, false);
                   }
              $Timer=0;
               IPS_SetScriptTimer($IPS_SELF, 0);       // ScriptTimer ausschalten
               SetValue($setTimer,5);
        break;
    }
    SetValue($timer, $Timer);
    SetValue($display, "Start: " . date("i:s", GetValue($timer))." min.");          // Anzeige der Timereinstellung
    if (GetValue($status)) {
       SetValue($display, "Rest: " . date("i:s", GetValue($timer) - (time() - GetValue($timerStart))) . " min.");   //Anzeige bei änerung des Timers
       }
}

if ($IPS_SENDER == "TimerEvent"){
   SetValue($display, "Rest: " . date("i:s", GetValue($timer) - (time() - GetValue($timerStart))) . " min.");     //aktualisierung der Timer-Anzeige (alle 10 s)
    if (GetValue($timerStart) +  GetValue($timer) -time() <= 10) {                                                                                   // Für die letzten 10s wird das Skript jede sekunde ausgeführt
       IPS_SetScriptTimer($IPS_SELF, 1);
        }
    if (time() >= GetValue($timerStart) +  GetValue($timer) && GetValue($status)) {                               //Auslösen des Timers
      SetValue($display, "ALARM");
      IPS_SetScriptTimer($IPS_SELF, 0);
      SetValue($timer, 0);
      SetValue($status, false);

        WAC_SetVolume($id_sound, 50);
        WAC_PlayFile($id_sound, IPS_GetKernelDir()."sounds\\eieruhr.wav");
   }
}

?>

P.S. Gibt es im Skript-Editor eine „Suche und Ersetze“-Funktion? Diese wäre hier sehr hilfreich

Ctrl+H oder Shift+Ctrl+H