Skript: Einmaliges Ausführen bei bestimmter Uhrzeit

Abend,

ich habe jede Menge Skripte die mir die Präsenzmelder ab einer bestimmten Uhrzeit sperren, und bei einer anderen wieder entsperren. (Nachtruhe)

Dies funktinioniert einwandfrei, aber das Skript wird jede Minute gestartet und somit auch das Ergebnis jede Minute neu auf den Bus gesendet.

Ich möchte aber, das das Skirpt zu der bestimmten Uhrzeit nur EINMALIG gestartet wird.

Also einmal in der Früh (zb. 8 Uhr) und einmal am Abend (z.b. 20 Uhr). Die Stunde und die Minute stehen als Variable zur Verfügung und können im Webfront verändert werden. Sollte so bleiben.

Bitte / Danke und lg
Christian

Das folgende Skript jede Minute ausgeführt:

<?php

// PM Konstantlichtregelung Sperre bei Tag / Nacht

// Uhrzeit
$timestamp = time();
$uhrzeit = date("H:i", $timestamp);
$datum = date("d.m.Y", $timestamp);

// Nur für das Meldungsskript
$IDname = $IPS_SELF;
$textt = "(".$IDname.") Beleuchtungs-Automatik";
 
 // Uhrzeiten für Sperre EIN und AUS
$actualZeitStartHour = GetValue(44377); 
$actualZeitStartMinute = GetValue(58807); 

$actualZeitStopHour = GetValue(16403); 
$actualZeitStopMinute = GetValue(31129); 

// Ist die Automatik aktiv geschaltet?
$PM_Aaron = GetValue(40872); 

$WertTAG = true;
$WertNACHT = false;


// Abfrage ob Uhrzeit im Tagbetrieb ist (Sperre AUS)
$tagbetrieb = false;
$timeStart = mktime($actualZeitStartHour,$actualZeitStartMinute); 
$timeStop = mktime($actualZeitStopHour,$actualZeitStopMinute); 
    // Gibt den Timestamp für: 2006-04-05T01:02:03+00:00 
    // mktime(1, 2, 3, 4, 5, 2006) 


        if ($timestamp > $timeStart && $timestamp < $timeStop) 
            {   // Tagbetrieb

               
                 if ($PM_Aaron == true)
                    {
                        RequestAction(54517, $WertNACHT); // umgekehrt
                    }

                            // Meldung eintragen
                            
                            $textt1 = "Konstantlichtregelung Kinderzimmer Aaron [Tagbetrieb]";
                            $text = "</b>".$datum." ".$uhrzeit."</b> <b>".$textt." </b>".$textt1;
                   //         $number = IPS_RunScriptWaitEx(19710, array('action' => 'add', 'text' => $text, 'expires' => time() + 300000, 'removable' => true, 'type' => '3')); 
                            
                            # - 'type' (optional): Art der Meldung ... 0 => Info(grün), 1 => Fehler(rot), 2 => Warnung(gelb), 3 => Status(blau)

            }
        else
            {
                // Nachtbetrieb

   
                  if ($PM_Aaron == true)
                    {
                        RequestAction(54517, $WertTAG); //  Sperre umgekehrt
                    }

                    // Meldung eintragen
                            
                            $textt1 = "Konstantlichtregelung Kinderzimmer Aaron [Nachtbetrieb]";
                            $text = "</b>".$datum." ".$uhrzeit."</b> <b>".$textt." </b>".$textt1;
                 //           $number = IPS_RunScriptWaitEx(19710, array('action' => 'add', 'text' => $text, 'expires' => time() + 300000, 'removable' => true, 'type' => '3')); 
                            
                            # - 'type' (optional): Art der Meldung ... 0 => Info(grün), 1 => Fehler(rot), 2 => Warnung(gelb), 3 => Status(blau)

            }    

Benutze dafür doch einfach den Wochenplan als Auslöser für dein Script.
Start und Endzeit kannst du dann ganz bequem über das WebFront einstellen und brauchst auch deine Hilfsvariablen nicht mehr.
Michael

Danke Michael,
gerade den WOCHENPLAN durchgelesen → völlig planlos

Warum nicht zwei Ereignisse? Die kannst du dann auch passend Konfigurieren? Der Wochenplan ist natürlich eleganter, da du dies für jeden Tag definieren könntest.

paresy

Ich glaube ich habe es jetzt verstanden:

switch ($_IPS['ACTION']) {
  case 1: //ID 1
    // Aktion für Action ID 2
    $actionID = "Hallo Welt, Unter der Woche";
    break;

  case 2: //ID 2
    // Aktion für Action ID 2
    $actionID = "Hallo Welt, Yay Wochenende!!";
    break;

}

Das Skript wird durch den Wochenplan aufgerufen, und mit dem Code oben wird abgefragt welcher Zustand gerade aktiv ist…