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
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.