+ Antworten
Seite 1 von 16 1 2 3 11 ... LetzteLetzte
Ergebnis 1 bis 10 von 153
  1. #1
    Registriert seit
    Aug 2008
    Ort
    Sereetz
    Beiträge
    1,649

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

    Hier ein Skript, das andere Skripte nach verschiedenen astronomischen Ereignissen startet. Zusätzlich hat man die Zeitpunkte der Ereignisse in Variablen.
    PHP-Code:
    <?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($timestampSUNFUNCS_RET_TIMESTAMP$latitude$longitude90+50/60date("O")/100);
        
    $sunset date_sunset($timestampSUNFUNCS_RET_TIMESTAMP$latitude$longitude90+50/60date("O")/100);
        
    $civilTwilightStart date_sunrise($timestampSUNFUNCS_RET_TIMESTAMP$latitude$longitude96date("O")/100);
        
    $civilTwilightEnd date_sunset($timestampSUNFUNCS_RET_TIMESTAMP$latitude$longitude96date("O")/100);
        
    $nauticTwilightStart date_sunrise($timestampSUNFUNCS_RET_TIMESTAMP$latitude$longitude102date("O")/100);
        
    $nauticTwilightEnd date_sunset($timestampSUNFUNCS_RET_TIMESTAMP$latitude$longitude102date("O")/100);
        
    $astronomicTwilightStart date_sunrise($timestampSUNFUNCS_RET_TIMESTAMP$latitude$longitude108date("O")/100);
        
    $astronomicTwilightEnd date_sunset($timestampSUNFUNCS_RET_TIMESTAMP$latitude$longitude108date("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!\n");
            }
        }

        
    SetTimerByName($IPS_SELF"Timer"mktime(010date("m"), date("d") + 1date("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($eidtrue);
            }
            
    IPS_SetEventCyclic($eid000000);
            
    IPS_SetEventCyclicTimeBounds($eid$ts0);
            return 
    $eid;
        }
    ?>
    Geändert von paresy (10.03.10 um 12:45 Uhr)
    Horst

  2. #2
    Registriert seit
    Feb 2008
    Ort
    127.0.0.1
    Beiträge
    455

    Hallo Horst,

    tolles Script ABER,

    das Script läuft z.b. heute(08.09.) um 00:00 Uhr und setzte die Ereignisse. Unter Ereigniss Informationen steht aber z.b. "nächster Aufruf 09.09.2009 19:45:14" Also Morgen. Wenn das Script neute Nacht wieder läuft, habe ich wieder einen Tag "Offset" und die im Array eingefügten Scripte werden nie gestartet. Deswegen habe ich den Scripaufruf manuell auf 23:55 gestellt, dann klapp es.

    Gruß

  3. #3
    Registriert seit
    Aug 2008
    Ort
    Sereetz
    Beiträge
    1,649

    Oh, ist mir gar nicht aufgefallen. paresy hat es korrigiert .
    Horst

  4. #4
    Registriert seit
    Mar 2008
    Ort
    NRW
    Beiträge
    313

    Hallo Horst,
    interessantes Script

    "offset": Skriptstart vor/nach dem astronomischen Ereignis in Minuten
    Die Offsetangabe ist jedoch z.Zt. in Sekunden.
    Musst sie *60 nehmen
    Grüße,
    Neon

  5. #5
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    22,219

    Zitat Zitat von Neon Beitrag anzeigen
    Hallo Horst,
    interessantes Script


    Die Offsetangabe ist jedoch z.Zt. in Sekunden.
    Musst sie *60 nehmen
    Habe ich im Skript korrigiert. Da fehlt ein *60

    $ts = $script['offset']*60; <--

    paresy

  6. #6
    Registriert seit
    Feb 2009
    Beiträge
    156

    Servus. Das Skript ist genau das was ich suche. Allerdings verstehe ich noch nicht genau wie es arbeitet.
    Wann wird denn dieses Skript ausgeführt? Ich habe es jetzt so wie beschrieben eingefügt in IPS. Bei dem Skript, welches ich bei Sonnenuntergang ausführen will wurde jetzt ein zeitliches Event hinzugefügt mit dem namen

    AstroTimer #0 (Ereignis: täglich 18.57:15)

    Wie kann ich das jetzt verstehen?

  7. #7
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    22,219

    Das Skript macht nichts anderes als neue Ereignisse zu erstellen, die immer kurz nach Mitternacht aktualisiert werden. Du wirst also in deinem AstroTimer jeden Tag einen neuen Zeitwert drin stehen haben, der durch dieses Skript berechnet und eingefügt wurde.

    paresy

  8. #8
    Registriert seit
    Feb 2009
    Beiträge
    156

    Ah, super. Danke. Echt super!!!

  9. #9
    Registriert seit
    Apr 2006
    Ort
    Dingelstädt/ Eichsfeld
    Beiträge
    615

    Hallo,

    wollte das Script mal testen, bei mir ist aber die Funktion IPS_SetVariableCustomProfile nicht vorhanden.

    Ok, ich habe länger nichts gemacht und meine Version ist nicht die neueste. Ihr wisst ja: die Zeit...
    Ab welcher Version ist die Func verfügbar?

    Neues Update habe ich gerade bei Michael bestellt...

    Grüße
    Fabian

    Was nicht passt wird passend gemacht!

  10. #10
    Registriert seit
    Aug 2008
    Ort
    Sereetz
    Beiträge
    1,649

    Die Funktion ist seit Version 2.1 vorhanden.
    Horst