Hallo,
es handelt sich um eine variation des Astro-/Dämmerungsskrpites aus dem Forum. Ich habe es hier reduziert wie folgt:
<?php
// Geokoordinaten des Wohnortes
$latitude = 49.78; // Breitengrad
$longitude = 7.65; // Längengrad
$scripts = array();
$scripts[] = array("id" => 18473, "offset" => 0, "type" => "sunrise", "name" => "Rollo 55 auf");
$scripts[] = array("id" => 56713 , "offset" => 0, "type" => "sunset", "name" => "Rollo 55 zu");
$scripts[] = array("id" => 18673 , "offset" => 2, "type" => "sunrise", "name" => "Rollo + Heizung auf");
$scripts[] = array("id" => 38307 , "offset" => 2, "type" => "sunset", "name" => "Rollo + Heizung zu");
$scripts[] = array("id" => 10660 , "offset" => 4, "type" => "sunrise", "name" => "Rollo + Heizung auf");
$scripts[] = array("id" => 11045 , "offset" => 4, "type" => "sunset", "name" => "Rollo + Heizung zu");
$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);
SetValueString(CreateVariableByName($_IPS['SELF'], "Sonnenaufgang", 3, "~String"), date("H:i:s", $sunrise));
SetValueString(CreateVariableByName($_IPS['SELF'], "Sonnenuntergang", 3, "~String"), date("H:i:s", $sunset));
foreach($scripts as $num => $script)
{
$ts = $script['offset']*60;
switch ($script['type'])
{
case "sunrise": $ts += $sunrise; break;
case "sunset": $ts += $sunset; break;
default: die("Ungueltiger Wert: ".$script['type']);
}
if(IPS_ScriptExists($script['id']))
{
SetTimerByName($script['id'], $script['name'], $ts);
IPS_Sleep(500);
}
else
{
die("Skript #".$script['id']." existiert nicht!
");
}
}
function SetTimerByName($id, $name, $ts)
{
echo $id." ".$name." ".$ts.PHP_EOL;
// existiert der event schon?
$eid = @IPS_GetEventIDByName($name, $id);
if($eid === false)
{
$eid = IPS_CreateEvent(1); // event neu anlegen
IPS_SetParent($eid, $id); // eltern: übergeordnete Instanz
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);
$std = intval(date("G", $ts));
$min = intval(date("i", $ts));
$sec = intval(date("s", $ts));
IPS_SetEventCyclicTimeFrom($eid, $std, $min, $sec);
return $eid;
}
function CreateVariableByName($id, $name, $type, $profile = "")
{
$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;
}
?>
Die (test-)Skripte, die jetzt abgearbeitet werden und geänderte Ereignisse erhalten sollen, sind alle leer. Nun gibt es auch keinen Absturz mehr. Die Skripte im Original enthalten Rollo-Befehle für LCN. Ich kann mir aber nicht vorstellen, dass dies der Grund für den Absturz sein sollte. Wenn ich nur 1 Rollo abarbeite (2 Skripte), klappt es. Bei mehr als 2 Skripten kommt der Absturz.
Ich hoffe, ich habe es verständlich erklärt.
Grüße, Gerhard