Schaltung an bestimmten Tagen

wie die überschrift schon sagt möchte ich gerne eine Schaltung nur „Montag, Dienstag, Mittwoch, Donnerstag, Freitag“ schalten. Im Forum habe ich schon herrausgefunden wie man den Wochentag ermittelt nur weiß ich jetzt nicht weiter wie ich die IF anwendung zu den Tagen anpassen kann.

Hier mal das Script:

$Tag = Date("w");
$Tag1 = array("7","1","2","3","4","5","6");
echo "Aktueller Tag ", $Tag1[$Tag];

$aktuelleZeit = time();


if //Am Mo.,Di.,Mi.,Do.,Fr. von XX:XX - XX:XX Uhr 

Wäre über unterstützung sehr dankbar

Hallo Kalikola,

warum fügst Du dem Skript nicht einfach eine wöchentliches Ereignis als Trigger hinzu?

Joachim

weil im Script (siehe unten) noch ein else befehl ist, für sonstige Tage.

$Tag = Date("w");
$Tag1 = array("7","1","2","3","4","5","6");
echo "Aktueller Tag ", $Tag1[$Tag];

$aktuelleZeit = time();


if //Am Mo.,Di.,Mi.,Do.,Fr. von XX:XX - XX:XX Uhr 
 {
 //mein befehl
 }
 else //sonstige Tage oder Urlaub usw.
  {
 //mein Befehl
  }

Ich weiß das ich den If-Befehl mit eine Variabel setzen könnte das möchte ich aber nicht.

Ich hatte mir dazu auch mal Gedanken gemacht:
http://www.ip-symcon.de/forum/threads/20616-Wochenschaltuhr?p=186623#post186623

Hallo,

Deinen Urlaub wird man nur schwerlich mit einem mathematischen Algorithmus berechnen können :slight_smile:

Da ich diese Informationen oft und an vielen Stellen in meinem System brauche, berechne ich einmal in meinem 0.00 Uhr-Skript, ob Wochenende oder Feiertag ist, oder der Urlaubsmerker geschaltet wurde. Aufgrund dessen wird dann eine Variable gesetzt. Diese kann dann in allen Skripten abgefragt werden.
Vorteil ist, dass die Berechnung nur an einer Stelle erfolgt und gezielt geändert werden kann, ohne dass man 1000 Skripte anpacken muss.

Gruß
Walter

Wow,
ich kann es zwar gerade nicht ausprobieren aber vom ersten Augenschein ist es das was ich gesucht habe.

So nach einiger Zeit und mit dem neuem Update von IPS habe ich mich nach sehr langer Zeit mal wieder an die Programmierung gewagt und u.a. noch einmal erfolgreich an das Thema „Schaltung an bestimmten Tagen“ hineinversetzt.

Danke für die Vorlagen und Tipps :slight_smile:

Hier mal die Ergebnisse:

HM-Aktor an ausgewählten Tagen Schalten


<?

function Schaltzeit ($Tag)
 {
 $heute = date ("N");
 $Tag = explode("-" ,$Tag);
 $cntTag = count($Tag);

   for ($a = 0; $a < $cntTag; $a++)
       {
       if ($Tag[$a] == $heute)
          {
          return true;
          }
       }
 }

//========================================================================================

if (Schaltzeit ("1-2-3-4-5"))
    {
    HM_WriteValueBoolean(58235 /*[My @Home\Esszimmer\Beleuchtung\Beleuchtung\Ambiente]*/, "STATE", true);
    }

IPS_SetScriptTimer($_IPS['SELF'], 15);
?>

Tages/- & Zeit Schaltung mit einem HM Aktor


<?
// Schaltung zu den Ereignissen
$Ansonsten = false;
$Anwesend = true;
$Abwesend = false;

$aktuelleZeit = time();

//Berechnung des Tages 1= Mo. 2= Di. 3= Mi. 4= Do. 5= Fr. 6= Sa. 7= So.
function Schaltzeit ($Tag)
 {
 $heute = date ("N");
 $Tag = explode("-" ,$Tag);
 $cntTag = count($Tag);

   for ($a = 0; $a < $cntTag; $a++)
       {
       if ($Tag[$a] == $heute)
          {
          return true;
          }
       }
 }

//Zeitschaltung:
// An Werkstagen (1= Mo. bis 5= Fr.) von xx:xx bis xx:xx Uhr Schalten
if((Schaltzeit ("1-2-3-4-5")))
  {
  $timestampEin=mktime( 5, 00, 0, date("m"), date("d"), date("Y"));
  $timestampAus=mktime( 17, 35, 0, date("m"), date("d"), date("Y"));
  }
   else //Ansonsten von xx:xx bis xx:xx Uhr
   {
   $timestampEin=mktime( 17, 15, 0, date("m"), date("d"), date("Y"));
   $timestampAus=mktime( 22, 0, 0, date("m"), date("d"), date("Y"));
   }

$tagsueber = (($aktuelleZeit >= $timestampEin) && ($aktuelleZeit < $timestampAus));

//Werkstag oder Urlaub
if($tagsueber && !GetValueBoolean(21318 /*[Test Center\Test Feld 6\Test Feld 6\Werkstag / Urlaub]*/)) 
  {
  //Anwesendheitskontrolle
  if(GetValueBoolean(29471 /*[System Konfiguration\Personen Tracker\Personen Tracker\Stefan\An/- Abwesend]*/))
    {
    if(date("G"))
	   {
      $Schalten = $Anwesend;
      }
    }
   else
   {
   $Schalten = $Abwesend;
   }
  }
else
 {
 $Schalten = $Ansonsten;
 }

if
 (HM_WriteValueBoolean(58235 /*[My @Home\Esszimmer\Beleuchtung\Beleuchtung\Ambiente]*/, "STATE", $Schalten));

IPS_SetScriptTimer($_IPS['SELF'], 15);
?>

Tages/- & Zeit Schaltung mit einem HM Wandthermostat


<?
// Soll Temperaturen:
$Ansonsten = 18.0;
$Anwesend = 20.0;
$Abwesend = 15.0;

$aktuelleZeit = time();

//Berechnung des Tages 1= Mo. 2= Di. 3= Mi. 4= Do. 5= Fr. 6= Sa. 7= So.
function Schaltzeit ($Tag)
 {
 $heute = date ("N");
 $Tag = explode("-" ,$Tag);
 $cntTag = count($Tag);

   for ($a = 0; $a < $cntTag; $a++)
       {
       if ($Tag[$a] == $heute)
          {
          return true;
          }
       }
 }
 
//Zeitschaltung:
// An Werkstagen (1= Mo. bis 5= Fr.) von xx:xx bis xx:xx Uhr Tmperatur setzen
if((Schaltzeit ("1-2-3-4-5")))
  {
  $timestampEin=mktime( 4, 15, 0, date("m"), date("d"), date("Y"));
  $timestampAus=mktime( 4, 30, 0, date("m"), date("d"), date("Y"));
  }
   else //Ansonsten von xx:xx - xx:xx Uhr heizen
   {
   $timestampEin=mktime( 7, 00, 0, date("m"), date("d"), date("Y"));
   $timestampAus=mktime( 22, 0, 0, date("m"), date("d"), date("Y"));
   }

$tagsueber = (($aktuelleZeit >= $timestampEin) && ($aktuelleZeit < $timestampAus));

//Werkstag oder Urlaub
if($tagsueber && !GetValueBoolean(21318 /*[Test Center\Test Feld 6\Test Feld 6\Werkstag / Urlaub]*/))
  {
  //Anwesendheitskontrolle
  if(GetValueBoolean(29471 /*[System Konfiguration\Personen Tracker\Personen Tracker\Stefan\An/- Abwesend]*/))
    {
    if(date("G"))
	   {
      $Temperatur = $Anwesend;
      }
    }
     else
     {
     $Temperatur = $Abwesend;
     }
  }
else
 {
 $Temperatur = $Ansonsten;
 }

if(GetValueFloat(42568 /*[Heizung\Räume\Badezimmer\Soll Temperatur\SOLL- Temperatur\SETPOINT]*/) != $Temperatur)
 {
 HM_WriteValueFloat(42857 /*[Heizung\Räume\Badezimmer\Soll Temperatur\SOLL- Temperatur]*/, "SETPOINT", $Temperatur);
 IPS_LogMessage($IPS_SELF, "Setzte Temperatur für Heizkörper Bad auf " . $Temperatur . " °C.");
 }
 IPS_SetScriptTimer($_IPS['SELF'], 15);//600
?>

Bei einer Sache komme ich aber nicht weiter, wie schaffe ich es das ich mehrere Zeit Zyklen (timestampEin und Aus) einsetzten kann, ich hätte gerne noch Zwei weitere:


if((Schaltzeit ("1-2-3-4-5")))
  {
  $timestampEin=mktime( 4, 15, 0, date("m"), date("d"), date("Y"));
  $timestampAus=mktime( 4, 30, 0, date("m"), date("d"), date("Y"));
  }

Wäre schön wen mir da jemand weiter Helfen könnte.