Timerfrageabfrage

Hallo Timerprofis

ich bin auf der suche nach einem Befehl um den Timerwert zurückzulesen bzw. einen Timer abzufragen ob dieser schon auf Null ist.

Zum Hintergrund, ich möchte einen Rechner abschalten wenn ein Timer abgelaufen ist. Es soll verhindert werden das der Rechner direkt abgeschaltet wird bevor der Timer (Windows Shutdown Zeit) abgelaufen ist.

Hier mein bisheriges Script. Läuft bisher soweit gut bis auf den Punkt wenn ich das Script per „Ausschalter Button“ ein zweites mal triggere wird der PC sofort abgeschaltet ohne die Timerzeit abzuwarten. Bisher verwende ich das Script auf der V1, bin gerade auf der Portierung auf die V2. Deshalb noch ohne ID´s.
Um einen Tipp wäre ich Dankbar!

Ciao
Andrge


<?

//Steuerung des Power und Shutdown PC Küche (Ein-bzw. Ausschalten)

//Variablen:
$id = 23358;   //Nummer des 1-Wire Bausteins
$Status = GetValueBoolean("PC-Kueche_Anzeige");
$Status_Timer_Power = GetValueBoolean("PC-Kueche_Timer-Power");
$Status_Power = GetValueBoolean("PC-Kueche_Power");

//Netzspannung einschalten
//*********************
if($Status_Power == false )
      {
      TMEX_F29_SetPin($id, 0, false);   //Power Relais einschalten
         echo "Status: PC-Kueche_Power eingeschaltet
\r";

      //Designer Buttonsteuerung
      SetValueBoolean ("PC-Kueche_Power", true);
      SetValueBoolean ("PC-Kueche_Anzeige", true);
      TMEX_F29_SetPin($id, 1, true);   //USV Relais ausschalten
         echo "Status: PC-Kueche_USV deaktiviert
\r";

      }


// Power Ausschalten
if($Status_Power == true )
      {
      //USV Ausschalten
      SetValueBoolean ("PC-Kueche_Anzeige", false);
      TMEX_F29_SetPin($id, 1, false);  //Ansteuerung des USV Relais
      echo "Status: PC-Kueche_USV ausgeschaltet bzw. im Shutdownmodus
\r";

      //PC-Power ausschalten
      if($Status_Timer_Power == false )
         {
          SetValueBoolean ("PC-Kueche_Timer-Power", true);
          IPS_SetScriptTimer($IPS_SELF, 180); //Wartezeit bis Power Off
            echo "Status: Ausgeschalttimer gestartet
";
         }

      if($Status_Timer_Power == true )
         {
          IPS_SetScriptTimer($IPS_SELF, 0);
          SetValueBoolean ("PC-Kueche_Timer-Power", false);
          SetValueBoolean ("PC-Kueche_Power", false);
          TMEX_F29_SetPin($id, 0, true); //Power Relais abschalten
          TMEX_F29_SetPin($id, 1, true); //USV Relais abschalten
            echo "Status: PC-Kueche_Power aus
";
         }

 }

?>

Hallo Andrge,

also in der V2 würde ich das über die Startursache des Skriptes steuern.
Ein „Bild“ sagt mehr als 1000 Worte, hier also eine mögliche Lösung:


//Steuerung des Power und Shutdown PC Küche (Ein-bzw. Ausschalten)

//Variablen:
$id = 23358;   //Nummer des 1-Wire Bausteins
$varAnzeige    = {ID der Var. PC-Kueche_Anzeige};
$varTimerPower = {ID der Var. PC-Kueche_Timer-Power};
$varPower      = {ID der Var. PC-Kueche_Power};


$Status = GetValue($varAnzeige);
$Status_Timer_Power = GetValue($varTimerPower);
$Status_Power = GetValueBoolean($varPower);

if ($IPS_SENDER == 'Designer') {
    // Aufruf aus dem Designer, Einschalten oder Timer starten
    if($Status_Power == false ) {
    TMEX_F29_SetPin($id, 0, false);   //Power Relais einschalten
        echo "Status: PC-Kueche_Power eingeschaltet
\r";

        //Designer Buttonsteuerung
        SetValue($varPower,  true);
        SetValue($varAnzeige, true);
        
        //USV einschalten
        TMEX_F29_SetPin($id, 1, true);   //USV Relais ausschalten
        echo "Status: PC-Kueche_USV aktiviert
\r";
    }
    
    // Ausschalttimer starten
    if($Status_Power == true AND $Status_Timer_Power == false) {
        $eventID = GetEventID($IPS_SELF, "OFF-Timer", 1, $IPS_SELF);
        IPS_SetEventCyclic($eventID, 0, 0, 0, 0, 1, 180);    // Timer auf 3 Minuten (180 Sekunden) programmieren
        IPS_SetEventCyclicTimeBounds($eventID, time(), 0);
        IPS_SetEventActive($eventID, true);
        SetValue($varTimerPower, true);
        echo "Status: Ausgeschalttimer gestartet
";
        
        //USV Ausschalten
        SetValue($varAnzeige, false);
        TMEX_F29_SetPin($id, 1, false);  //Ansteuerung des USV Relais
        echo "Status: PC-Kueche_USV ausgeschaltet bzw. im Shutdownmodus
\r";
    }
}

if ($IPS_SENDER == 'TimerEvent') {
    // OFF-Timer ist abgelaufen, also Timer deaktivieren und den PC ausschalten
    $eventID = GetEventID($IPS_SELF, "OFF-Timer", -1, $IPS_SELF);
    if ($eventID === false) {
        IPS_LogMessage(IPS_GetName($IPS_SELF), "OFF-Timer wurde nicht gefunden!");
    } else {
        IPS_SetEventActive($eventID, false);

        SetValue($varTimerPower, false);
        SetValue($varPower, false);
        TMEX_F29_SetPin($id, 0, true); //Power Relais abschalten
        TMEX_F29_SetPin($id, 1, true); //USV Relais abschalten
        echo "Status: PC-Kueche_Power aus
";
    }
}

// Liefert die EventID der Ereignisses $name, das sich unterhalb des Objektes
// mit der ID $parentID befindet. Sollte das Ereignis nicht existieren, wird
// automatisch ein neues Ereignis zum Script $scriptID mit dem Type $type
// angelegt. Ist $type = -1 so wird kein neues Ereignis angelegt sondern
// FALSE zurückgeliefert.
function GetEventID($parentID, $name, $type, $scriptID) {
    $eventID = @IPS_GetEventIDByName($name, $parentID);
   if ($eventID === false) {
      if ($type == -1) {
            $eventID = false;
        } else {
          $eventID = IPS_CreateEvent($type);
          IPS_SetEventScript($eventID, $scriptID);
          IPS_SetParent($eventID, $parentID);
          IPS_SetName($eventID, $name);
        }
   }
   return $eventID;
}

?> 

Wird der Designer-Knopf betätigt und die Variable Status_Power ist false, dann wird der PC einfach eingeschaltet. Ist der Status true, dann wird ein 180-Sekunden-Timer gestartet (weitere Tastendrücke werden ignoriert, bis der Ausschaltvorgang abgeschlossen ist).

Hallo Thorsten,

KLASSE!! Genau nach sowas hab ich gesucht. Ich werde das Script heut Abend testen (wenn unsere kleine nicht was dagegen hat :wink:

Ciao
Andrge