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

…nun fehlt aber noch die Zeit-Anzeige im WebFront.
Wo muß ich dann noch etwas ändern?

Gruß

…anbei ein 2. Bild

Hast Du den Variablen auch ein Profil verpasst? - vermutlich nicht, versuchst mal mit ~STRING (Korrektur)

…sorry, aber ich muß noch einmal nerven.
Ich möchte die Anzeige gern so wie im Bild 1 haben wollen.

Gruß

dann pack das ganze in ein Dummymodul.

…Anleitung gesucht, gelesen was ist ein „Dummymodul“ umgesetzt, tatataaa!:wink:

Dankeschön! :slight_smile:

Hallo,
ich möchte hinter der Uhrzeit (siehe Bild) das Wort „Uhr“ anfügen. Wo kann ich das denn ändern?

Gruß

im Variablenprofil unter Suffix.

…na das war ja einfach.

Dankeschön :slight_smile:

Irgendwie steh ich grad auf dem Schlauch. Kannst du mir bitte mal einen Tipp geben wie ich die Grenzwerte in das Astroscript einbaue?
Ich stelle mir das wie folgt vor:

  • Astrozeiten werden berechnet
  • Wenn Sonnenaufgang vor Grenzwert1 dann TimerZeit auf Grenzwert1 setzen
  • Wenn Sonnenuntergang vor Grenzwert2 dann TimerZeit auf Grenzweret2 setzen.

Oder habt ihr das ganz anders gelöst?

Hallo zusammen,
beim PHP stöbern ist mir aufgefallen das es seit PHP 5.1.2 die Funktion date_sun_info gibt. Habe mal das script umgeschrieben und es kommen leicht andere Uhrzeiten raus, aber diese stimmen jetzt fast mit denen von Erde und Sonne Applet überein.

<?
    /*****
    *
    * 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 = 50.11;    // Breitengrad
    $longitude = 8.69;    // Längengrad

    /*
        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();
    $scripts[] = array("id" => 29862, "offset" => 2, "type" => "sunrise");
    $scripts[] = array("id" => 08154, "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) *****/
	//Erstellt ein Dummy Modul und eine untergeordnete Variable die im WebFront alle
	//erviceMeldungen anzeigt. Einfach in ein Skript kopieren und ausführen.

	$object = IPS_GetObject($IPS_SELF);
	$parentID = $object['ParentID'];

	//Installer
	if ($IPS_SENDER == "Execute")
	{
  		IPS_SetHidden($IPS_SELF, true);
  		IPS_SetName($IPS_SELF, "Sonnenstand aktualisieren");
  		$parentObject = IPS_GetObject($parentID);
  		if ($parentObject['ObjectType'] !== 1)
  		{
   		$instanceID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
   		IPS_SetParent($instanceID, $parentID);
   		$parentID = $instanceID;
      	IPS_SetParent($IPS_SELF, $parentID);
      	IPS_SetName($instanceID, "Sonnenstand");
      	IPS_SetIcon($instanceID, "Sun");
  		}
  		SetTimerByName($IPS_SELF, "Timer", mktime(0, 1, 0, date("m"), date("d") + 1, date("Y")));
	}

	 $sun_info = date_sun_info(time(), $latitude, $longitude);
    SetValueString(CreateVariableByName($parentID, 1, "astronomische Morgendämmerung", 3, "~String"), date("H:i:s",$sun_info["astronomical_twilight_begin"]));
    SetValueString(CreateVariableByName($parentID, 2, "nautische Morgendämmerung", 3, "~String"), date("H:i:s",$sun_info["nautical_twilight_begin"]));
    SetValueString(CreateVariableByName($parentID, 3, "zivile Morgendämmerung", 3, "~String"), date("H:i:s",$sun_info["civil_twilight_begin"]));
	 SetValueString(CreateVariableByName($parentID, 4, "Sonnenaufgang", 3, "~String"), date("H:i:s",$sun_info["sunrise"]));
    SetValueString(CreateVariableByName($parentID, 5, "Höchststand", 3, "~String"), date("H:i:s",$sun_info["transit"]));
    SetValueString(CreateVariableByName($parentID, 6, "Sonnenuntergang", 3, "~String"), date("H:i:s",$sun_info["sunset"]));
    SetValueString(CreateVariableByName($parentID, 7, "zivile Abenddämmerung", 3, "~String"), date("H:i:s",$sun_info["civil_twilight_end"]));
    SetValueString(CreateVariableByName($parentID, 8, "nautische Abenddämmerung", 3, "~String"), date("H:i:s",$sun_info["nautical_twilight_end"]));
    SetValueString(CreateVariableByName($parentID, 9, "astronomische Abenddämmerung", 3, "~String"), date("H:i:s",$sun_info["astronomical_twilight_end"]));

    foreach ($scripts as $num => $script)
    {
        $ts = $script['offset']*60;

        switch ($script['type'])
        {
            case "astronomicTwilightStart": $ts += $sun_info["astronomical_twilight_begin"]; break;
            case "nauticTwilightStart": $ts += $sun_info["nautical_twilight_begin"]; break;
            case "civilTwilightStart": $ts += $sun_info["civil_twilight_begin"]; break;
            case "sunrise": $ts += $sun_info["sunrise"]; break;
            case "sunset": $ts += $sun_info["sunset"]; break;
            case "civilTwilightEnd": $ts += $sun_info["civil_twilight_end"]; break;
            case "nauticTwilightEnd": $ts += $sun_info["nautical_twilight_end"]; break;
            case "astronomicTwilightEnd": $ts += $sun_info["astronomical_twilight_end"]; 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!
");
        }
    }


    function CreateVariableByName($id, $pos, $name, $type, $profile = "")
    {
        global $IPS_SELF;
        $vid = @IPS_GetVariableIDByName($name, $id);
        if($vid === false)
        {
            $vid = IPS_CreateVariable($type);
            IPS_SetParent($vid, $id);
            IPS_SetPosition($vid, $pos);
            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;
    }


?>

Gruß Raul.

Noch eine vielleicht nicht ganz unwichtige Anmerkung zu den Scripten:

Wenn der Offset für ein auszuführendes Script so groß ist, dass er zu einer Skript-Ausführungszeit führt, die nach dem nächsten Durchlauf der Astronomischen Berechnung (Lauf des Scripts) liegt, wird dieser Event früher wieder überschrieben, als er eigentlich fällig wäre und somit nie ausgeführt.

Das dürfte im Winter und bei den Anfangszeiten (Dämmerung & Sunrise-Zeiten) meist nicht ins Gewicht fallen.

Wer aber z.B. „3 Stunden nach ziviler Abenddämmerung“ ein Script laufen lassen will, der wird im Sommer Schiffbruch erleiden, denn das kann leicht nach 24:00 Uhr sein (bei meinem Standort wär’s das heute gewesen: Zivile Abenddämmerung = 22:13 Uhr).

Um das zu vermeiden, müsste man, je nach dem wieviel maximalen Offset man zulassen will, zumindest für die späteren Zeitpunkte eine zweite Timer-Serie anlegen und die je nach Tag der Woche (even/odd) alternativ beschreiben.

Dann auch nicht vergessen, einen einmaligen Durchlauf zu machen statt wiederkehrend wie im Moment.

Just my 2 cents
jwka

Wie hast Du das gemacht mit den Grenzwerten?
Angenommen: im Sommer ist der Sonnenaufgang um 5:00 h und der Sonnenuntergang um 22:00 h, Im Gegensatz ist im Winter der Sonnenaufgang um 8:30 h und der Sonnenuntergang um 18:00 h. Wie kann ich nun einstellen, dass die Rollos nicht vor 8:00 h und nicht nach 20:30 h runter fahren? Wie geht das mit der „enabled“ Variable?
1000 Dank im Voraus.

Wenn „gwanjek“ nicht antwortet … hat jemand eine Idee?
Ich will das die Rollladen nicht vor 8.00 h und nicht nach 20.00 h herunter fahren.

… ich habe das in meinem IPSTwillight Modul so implementiert - kannst Dir anschauen wie es gemacht ist, bzw. das Modul zur Berechnung verwenden …

Ja, mit Brownsons Modul passt das so, klappt ohne Probleme.

Gruss, Christian

SUPER!
Ich habe mir das jetzt mal installiert. Das sieht toll aus und erfüllt augenscheinlich meinen Zweck (bin beeindruckt).
Wie kann ich nun auf die ermittelten Zeiten ein Ereignis auslösen?

Push! :slight_smile:
Keiner eine Idee?
@metzench, Brownson: Wie habt Ihr das umgesetzt?

ich mach das mit meiner Beschattungssteuerung. Dort kann ich die Variablen der Dämmerungsberechnung in der Konfiguration eintragen und damit am Morgen bzw. Abend die Jalousien schliessen (Details sind im Wiki beschrieben)…

ich mach das mit meiner Beschattungssteuerung. Dort kann ich die Variablen der Dämmerungsberechnung in der Konfiguration eintragen und damit am Morgen bzw. Abend die Jalousien schliessen (Details sind im Wiki beschrieben)…

Gibt es eine Möglichkeit ein zu startendes Skript direkt einzutragen oder zu starten ohne die Beschattungssteuerung?