Sunrise_Sunset

Script zum testen. IPS V2 !!!

Ausführen mit Execute, die Variablen werden angelegt.

Zeile 48 bis 51 wird automatisch übernommen.

Alles andere muss über Anpassung per Hand vorgenommen werden.

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : SUNRISE_SUNSET.ips.php
Trigger  :
Interval : 60 Sekunden
*/


//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

switch ($IPS_SENDER)
{
case "Execute": // ************** Initialisierung *****************************
$CatID = IPS_CreateCategory();         // Kategorie anlegen
IPS_SetName($CatID, "SunriseSunset");  // Kategorie benennen


$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "SUNRISE_OFFSET"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "SUNSET_OFFSET");  IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "SUNRISE");        IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "SUNSET");         IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(0); IPS_SetName($VarID, "DAYLIGHT");       IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "TIME");           IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "WEEKDAY");        IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "DAY");            IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "MONTH");          IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "YEAR");           IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "TIME_STRING");    IPS_SetParent($VarID, $CatID);

break;
}
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


// Sonnenauf Sonnenuntergang berechnen
$longitude = 9.0;
$latitude = 50.25;

$day_offset = (GetValue(57376 /*[SunriseSunset\Sonnenauf Sonnenuntergang\SUNRISE_OFFSET]*/ )+(date("I")*60))/60+1;
$night_offset = (GetValue(27507 /*[SunriseSunset\Sonnenauf Sonnenuntergang\SUNSET_OFFSET]*/ )+(date("I")*60))/60+1;

$var_sunrise = date(date_sunrise(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $day_offset));
$var_sunset = date(date_sunset(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $night_offset));

$VarID = IPS_GetVariableID("SUNRISE");
SetValue($VarID, $var_sunrise);
$VarID = IPS_GetVariableID("SUNSET");
SetValue($VarID, $var_sunset);

//DAYLIGHT festlegen
if (date("H:i") == $var_sunrise) {
   SetValue(15438 /*[SunriseSunset\Sonnenauf Sonnenuntergang\DAYLIGHT]*/ , true);
   }
if (date("H:i") == $var_sunset) {
   SetValue(15438 /*[SunriseSunset\Sonnenauf Sonnenuntergang\DAYLIGHT]*/ , false);
   }

//Zeit ausgeben
SetValue(54188 /*[SunriseSunset\Sonnenauf Sonnenuntergang\TIME]*/ , date("H:i"));

// Wochentag in deutsch ausgeben
$Tag = Date("w");
//$Tag1 = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
$Tag1 = array("So","Mo","Di","Mi","Do","Fr","Sa");
SetValue(38024 /*[SunriseSunset\Sonnenauf Sonnenuntergang\WEEKDAY]*/ , $Tag1[$Tag]);

// Tag
SetValue(32843 /*[SunriseSunset\Sonnenauf Sonnenuntergang\DAY]*/ , (INT)date("j"));

//Monat in deutsch ausgeben
$Monat = Date("n");
$Monat1 = array("","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
SetValue(13541 /*[SunriseSunset\Sonnenauf Sonnenuntergang\MONTH]*/ , $Monat1[$Monat]);

//Jahr ausgeben
SetValue(13903 /*[SunriseSunset\Sonnenauf Sonnenuntergang\YEAR]*/ , (INT)date("Y"));

//Timestring schreiben
//SetValue(50347 /*[SunriseSunset\Sonnenauf Sonnenuntergang\TIME_STRING]*/,$Tag1[$Tag]." ".date("j").".".$Monat1[$Monat]." ".date("Y")."  ".date("H:i"));
SetValue(50347 /*[SunriseSunset\Sonnenauf Sonnenuntergang\TIME_STRING]*/ ,date("j").".".$Monat1[$Monat]." ".date("Y"));
 

?>

… jo - was macht das Skript alle 60 Sekunden :confused:
Geht so oft die Sonne auf und unter :rolleyes:
Sicherlich dafür:

//DAYLIGHT festlegen
if (date("H:i") == $var_sunrise) {

also um Tag / Nacht zu setzen.

Skript läuft - danke.

MST

Hallo,

als blutiger Anfänger (erfolgreich installiert, erste Geräte eingebunden, Skript „Licht an“ erstellt und mal mit Timer gestartet) würde ich gerne mit folgendem Projekt starten:

Ich möchte gerne eine Lampe nach Sonnenuntergang einschalten und um 23:30 Uhr wieder ausschalten.

Für den Sonnenuntergang kann ich ja das Skript nutzen.

Wie gehe ich aber jetzt vor? Mache ich ein ereignisgesteuertes Skript auch für Licht an? Wie vermeide ich, dass um 23:31 wieder das Licht angeschaltet wird, da es ja immer noch Nacht ist?

Wie kann ich die Information (es ist dunkel, es ist hell) allen zukünftigen Skripten zur Verfügung stellen?

Hallo,

ich hab das script oben nicht installiert, daher weiß ich nicht genau welche Variablen du zu verfühgung hast, für Vergleichoperationen ist aber ein Wert im time() Format nützlich.

Zum Probieren könntes du dieses Script noch mal nehmen, das liefert dir die Daten auch als Integer.

<?
$longitude = "13";                                      // Longitude (geografische Länge)
$latitude = "52.5";                                       // Latitude (geografische Breite)



if (date("I") == 1) $daylight = 2;       // Sommerzeit
if (date("I") == 0) $daylight = 1;       // Winterzeit

// *** Sonnenaufgang des heutigen Tages berechnen ***
$sunrise = date(date_sunrise(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90.8333, $daylight));
echo "Sonnenaufgang um ",date($sunrise)," Uhr"."
";

// *** Sonnenaufgang des heutigen Tages berechnen ***
$sunrise_int = date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90.8333, $daylight);
echo "Sonnenaufgang um ",date($sunrise_int)," Uhr"."
";


// *** Sonnenuntergang des heutigen Tages berechnen ***
$sunset = date(date_sunset(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90.8333, $daylight));
echo "Sonnenuntergang um ",date($sunset)," Uhr"."
";

// *** Sonnenuntergang des heutigen Tages berechnen ***
$sunset_int = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90.8333, $daylight);
echo "Sonnenuntergang um ",date($sunset_int)," Uhr"."
";

SetValue(15819 /*[Sonne\sunrise]*/ , $sunrise);
SetValueInteger(12390 /*[Sonne\sunrise_int]*/ , $sunrise_int);
SetValue(35304 /*[Sonne\sunset]*/ , $sunset);
SetValueInteger(41156 /*[Sonne\sunset_int]*/ , $sunset_int);

$dauer = $sunset_int - $sunrise_int;
$dauer_h = gmdate("H:i",$dauer);
echo "Sonnenscheindauer ", $dauer," Stunden"."
";
echo "Sonnenscheindauer ", $dauer_h," Stunden"."
";
?>

Wenn du die Variablen im Integer Format hast kannst du sie einfach vergleichen.
Hier noch mal Script, diese Schaltet eine Lame an wenn die Sonne unter gegangen ist eine Lampe für 300 sec. an.

<?
$timestamp = time();
$sunrise_int = GetValue(12390 /*[Sonne\sunrise_int]*/);
$sunset_int = GetValue(41156 /*[Sonne\sunset_int]*/);
if($timestamp < $sunrise_int or $timestamp > $sunset_int)
{
if($IPS_SENDER == "TimerEvent")
    {
        FS20_SetIntensity(25535 /*[FS20\Empfänger\Wohnzimmer Decke Halogen dimmbar]*/, 0, 5);
        IPS_SetScriptTimer($IPS_SELF, 0);
    }
    else
    {
        FS20_SetIntensity(25535 /*[FS20\Empfänger\Wohnzimmer Decke Halogen dimmbar]*/, 5, 5);
        IPS_SetScriptTimer($IPS_SELF, 300);
    }
}
else
{
        FS20_SetIntensity(25535 /*[FS20\Empfänger\Wohnzimmer Decke Halogen dimmbar]*/, 0, 5);
        IPS_SetScriptTimer($IPS_SELF, 0);
}
?>

Das Script für Sonnenauf -untergang starte ich einmal Täglich um 00:00.

Kennst du dich mit PHP schon aus, ich würde sagen fange erst mal an und wenn es hängt frage noch mal.

Schöne Grüße
Thomas

Wollte Paresy das nicht mal wieder in die Ereignisssteuerung mit einbauen ? So mit ± X Minuten. So war das doch in V1.0 :confused:

Will ich immer noch. Weiß nur noch nicht wo und wie ich es am beste löse.

paresy