Automatischer Skriptstart nach astronomischen Ereignissen (Sonnenaufgang, Dämmerung)

Hallo und vieleen dank für die super schnellen Antworten.
Da ich absoluter Neuling bin, habe ich nicht wirklich einen Idee was ich beim array noch eintragen muß. Könnt ihr mir da vieleicht auch auf die prünge helfen?
Vielen Dank
Meinrad

Tommy hat es doch im vorletzten Post geschrieben wie es aussehen muss.

$scripts[] = array("id" => 34476, "offset" => 15, "type" => "sunset");
$scripts[] = array("id" => 39574, "offset" => 15, "type" => "sunset");
$scripts[] = array("id" => 55044, "offset" => 15, "type" => "sunset");
$scripts[] = array("id" => 33489, "offset" => 15, "type" => "sunset");

Hallo,
nochmal vielen dank für die Hilfen.
Ich habe es jetzt zum Laufen gebracht. Mann sollte auch richtig schreiben und lesen können. :smiley:

jetzt ist aber alles OK!!!
Danke an alle Helfer

Gruß
Meinrad

Brauch bitte auch mal Hilfe als Anfänger,
Ich bekomme immer die Fehlermeldung (siehe Anhang). Auch wenn ich Zeile 23 (Angabe der Koordinaten) orginal lasse.
Über Hinweise würde ich mich freuen !
mfg
Armin

<?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");

    $scripts[] = array("id" => 34711, "offset" => -15, "type" => "civilTwilightEnd");
    /***** 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;
    }
?>

Übertrage mal alles noch einmal neu. Da sind bestimmt einige Steuerzeichen die man nicht sieht aber nicht da hin gehören. Schon dass das PHP erst in der zweiten Zeile ist sieht etwas komisch aus.

Danke Heiner, das ging ja fix!! Damit ist der Fehler behoben!
Wie kann sowas passieren, wenn man einfach mit copy und paste arbeitet?
mfg
Armin

iNach dem jetzt das Script auch bei mir funktioniert habe ich mir alles 3 mal durchgelesen. VErstehe aber nicht wie ich das Script verändern muß, das es z.B nur an Wochentagen oder nur am WE startet. Über eine Info für blutige Anfänger würde ich mich freuen!
mfg
Armin

Hallo,
ich möchte auch so eine Anzeige wie auf deinem Screenshot. Könntest du mir bitte ein paar Hinweise (evtl. ein Foto vom Objektbaum) geben, wie ich das realisieren kann?

Gruß

…hat denn keiner eine Idee?

Gruß

was willst Du denn genau? - nur „irgendwie“ Sonnenaufgang/Untergang im WFE darstellen oder wann der Rolladen hoch- und runtergefahren wurde?

Also ein bischen mehr Anstrengung bitte, … wenn Du ihm helfen willst. :smiley:

Bild unten

Gruß
Bruno

bin mal gespannt, ob das seine Frage beantwortet. Ich glaubs ja nicht :D:D:D

Ging ja auch um Deine Frage :stuck_out_tongue:

Also,
ich möchte im WebFront die Anzeige wann Rollo hoch fährt und wann runter wie in diesem Screenshot von „jhobrlant“ Anzeige.
Ich habe 2 Scripte mit folgender (Astrotimer schaltet diese bereits) ID:
28677 alle Wago an
55047 alle Wago aus

  • Wo muß das Script von „jhobrlant“ im Objektbaum eingefügt werden[/li][li]dann komme ich mit den Bezeichnungen nicht klar (welche ID muß dort eingetragebn werden)
    [‚scriptId‘]; // Script id wie im Astrotimerscript
    [‚timeVariableId‘]; // Id der Variablen mit dem Uhrzeit String zur Anzeige in Webfront
    [‚timerId‘]; // Id des Astrotimers, die im Eventnamen angezeigt wird
$scripts[] = array("scriptId" => 55047, "timeVariableId" => 31400, "timerId" => 59508); //Rollo morgens rauf
$scripts[] = array("scriptId" => 28677, "timeVariableId" => 34659, "timerId" => 52165); //Rollo abends runter


foreach ($scripts as $num => $script)
{
    $scriptId           = $script['scriptId'];       // Script id wie im Astrotimerscript
    $timeVariableId     = $script['timeVariableId']  // Id der Variablen mit dem Uhrzeit String zur Anzeige in Webfront
    $timerId            = $script['timerId'];        // Id des Astrotimers, die im Eventnamen angezeigt wird

Beim ausführen des Scripts „anzeige“ kommt folgende Fehlermeldung:

Parse error:  syntax error, unexpected T_VARIABLE in [Rollladen\anzeige] on line 13

Hallo Inspiron,

Dir (IPS) fehlen zwei neu zu erstellende Variable (String) 1x Uhrzeit hoch, 1x runter. Die IDs dieser Variablen kommen statt 31400, 34659 rein.

Die Ids des Astrotimer siehst Du wenn Du Bild 2 anschaust. Die Werte nach der Raute #0, #1 … Ohne Raute statt 59508 und 52165 eintragen.

Wo Du das Script ablegst ist egal, es muss nur nach dem Astroscript gestartet werden.

Gruß
Bruno

o.k.
danke für die Hilfe! :slight_smile:

[ul]
[li]Variable String „Uhrzeit rauf“ erstellt ID: 26042 [/li][li]Variable String „Uhrzeit runter“ erstellt ID: 31716[/li][/ul]

welche ID muß jetzt bei „$scripts[] = array(„scriptId“ => xxxxx“ eingefügt werden?

im Script „anzeige“ angepasst:

$scripts[] = array("scriptId" => 31400, "timeVariableId" => 26042, "timerId" => 1); //Rollo morgens rauf
$scripts[] = array("scriptId" => 34659, "timeVariableId" => 31716, "timerId" => 0); //Rollo abends runter

Gruß

Wat fingerst Du denn jetzt wieder an der Script-ID rum :confused: Die waren doch richtig.

Bei rauf die ID des Scriptes welches die Rolläden hochfährt, und bei runter die des „runter“-scriptes. :smiley:

Gruß
Bruno

…ich war nicht sicher, weil ich auch mit folgender Einstellung diese Fehlermeldung bekomme:


Parse error:  syntax error, unexpected T_VARIABLE in [Rollladen\anzeige] on line 9


<?
$scripts[] = array("scriptId" => 55047, "timeVariableId" => 26042, "timerId" => 1); //Rollo morgens rauf
$scripts[] = array("scriptId" => 28677, "timeVariableId" => 31716, "timerId" => 0); //Rollo abends runter

foreach ($scripts as $num => $script)
{
    $scriptId           = $script['scriptId'];       // Script id wie im Astrotimerscript
    $timeVariableId     = $script['timeVariableId']  // Id der Variablen mit dem Uhrzeit String zur Anzeige in Webfront
    $timerId            = $script['timerId'];        // Id des Astrotimers, die im Eventnamen angezeigt wird

Gruß

Hast Du sonst noch was verändert an dem Script ? Poste mal das komplette Script.

Gruß
Bruno

…Fehlermeldung ist weg, es fehlte ein Semikolon!

alt ...$script['timeVariableId']  // Id der Var.....
neu ...$script['timeVariableId'];  // Id der Var.....