Hier ein Skript, das andere Skripte nach verschiedenen astronomischen Ereignissen startet. Zusätzlich hat man die Zeitpunkte der Ereignisse in Variablen.
<?php
/*****
*
* Automatischer Skriptstart nach astronomischen Ereignissen
*
* Dieses Skript sorgt für die Ausführung anderer Skripte nach den
* Zeitpunkten astronomischer Ereignisse.
* Im Konfigurationsbereich sind die Geokoordinaten und die zu
* startenden Skripte anzupassen. Das Skript ist nach der Konfiguration
* einfach auszuführen, alle Timer werden automatisch erstellt. Ein
* automatischer Aufruf des Skripts erfolgt nach dem ersten Ausführen
* immer um Mitternacht.
*
* Nach dem nachträglichen Hinzugefügen neuer Skripte reicht das erneute
* Ausführen dieses Skriptes zu Einrichtung der Timer.
*
******/
/***** Konfiguration *****/
// Geokoordinaten des Wohnortes
$latitude = 53.92; // Breitengrad
$longitude = 10.73; // Längengrad
$scripts = array();
/*
Zu startende Skripte. Es sind beliebig viele Einträge möglich. Dazu einfach
einen neue Zeile nach vorgegebenem Muster anfügen.
"id": Skript-ID,
"offset": Skriptstart vor/nach dem astronomischen Ereignis in Minuten
"type": Typ des astronomischen Ereignisses
"astronomicTwilightStart": astronomische Morgendämmerung
"nauticTwilightStart": nautische Morgendämmerung
"civilTwilightStart": zivile Morgendämmerung
"sunrise": Sonnenaufgang
"sunset": Sonnenuntergang
"civilTwilightEnd": zivile Abenddämmerung
"nauticTwilightEnd": nautische Abenddämmerung
"astronomicTwilightEnd": astronomische Abenddämmerung
*/
$scripts[] = array("id" => 28697, "offset" => 0, "type" => "civilTwilightStart");
$scripts[] = array("id" => 28697, "offset" => 0, "type" => "sunset");
$scripts[] = array("id" => 34567, "offset" => 30, "type" => "sunset");
$scripts[] = array("id" => 45678, "offset" => -15, "type" => "civilTwilightEnd");
$scripts[] = array("id" => 56789, "offset" => 60, "type" => "nauticTwilightStart");
/***** Programmcode (ab hier nichts mehr verändern) *****/
$timestamp = time();
$sunrise = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90+50/60, date("O")/100);
$sunset = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90+50/60, date("O")/100);
$civilTwilightStart = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 96, date("O")/100);
$civilTwilightEnd = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 96, date("O")/100);
$nauticTwilightStart = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 102, date("O")/100);
$nauticTwilightEnd = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 102, date("O")/100);
$astronomicTwilightStart = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 108, date("O")/100);
$astronomicTwilightEnd = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 108, date("O")/100);
SetValueString(CreateVariableByName($IPS_SELF, "Sonnenaufgang", 3, "~String"), date("H:i:s", $sunrise));
SetValueString(CreateVariableByName($IPS_SELF, "Sonnenuntergang", 3, "~String"), date("H:i:s", $sunset));
SetValueString(CreateVariableByName($IPS_SELF, "zivile Morgendämmerung", 3, "~String"), date("H:i:s", $civilTwilightStart));
SetValueString(CreateVariableByName($IPS_SELF, "zivile Abenddämmerung", 3, "~String"), date("H:i:s", $civilTwilightEnd));
SetValueString(CreateVariableByName($IPS_SELF, "nautische Morgendämmerung", 3, "~String"), date("H:i:s", $nauticTwilightStart));
SetValueString(CreateVariableByName($IPS_SELF, "nautische Abenddämmerung", 3, "~String"), date("H:i:s", $nauticTwilightEnd));
SetValueString(CreateVariableByName($IPS_SELF, "astronomische Morgendämmerung", 3, "~String"), date("H:i:s", $astronomicTwilightStart));
SetValueString(CreateVariableByName($IPS_SELF, "astronomische Abenddämmerung", 3, "~String"), date("H:i:s", $astronomicTwilightEnd));
foreach ($scripts as $num => $script)
{
$ts = $script['offset']*60;
switch ($script['type'])
{
case "astronomicTwilightStart": $ts += $astronomicTwilightStart; break;
case "nauticTwilightStart": $ts += $nauticTwilightStart; break;
case "civilTwilightStart": $ts += $civilTwilightStart; break;
case "sunrise": $ts += $sunrise; break;
case "sunset": $ts += $sunset; break;
case "civilTwilightEnd": $ts += $civilTwilightEnd; break;
case "nauticTwilightEnd": $ts += $nauticTwilightEnd; break;
case "astronomicTwilightEnd": $ts += $astronomicTwilightEnd; break;
default: die("Ungültiger Wert: ".$script['type']);
}
if (IPS_ScriptExists($script['id']))
{
SetTimerByName($script['id'], "AstroTimer #".$num, $ts);
}
else
{
die("Skript #".$script['id']." existiert nicht!
");
}
}
SetTimerByName($IPS_SELF, "Timer", mktime(0, 1, 0, date("m"), date("d") + 1, date("Y")));
function CreateVariableByName($id, $name, $type, $profile = "")
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
function SetTimerByName($id, $name, $ts)
{
global $IPS_SELF;
$eid = @IPS_GetEventIDByName($name, $id);
if($eid === false)
{
$eid = IPS_CreateEvent(1);
IPS_SetParent($eid, $id);
IPS_SetName($eid, $name);
IPS_SetInfo($eid, "this timer was created by script #$IPS_SELF");
IPS_SetEventScript($eid, $id);
IPS_SetEventActive($eid, true);
}
IPS_SetEventCyclic($eid, 0, 0, 0, 0, 0, 0);
IPS_SetEventCyclicTimeBounds($eid, $ts, 0);
return $eid;
}
?>