IPSTwilight - Dämmerungsberechung und grafische Darstellung

@mac106 und @BestEx.

Guck doch bitte mal in eure IPSconsole und sortiert in <Ansicht> nach <Listenansicht>. Siehe Bild. Dann nach <Wert> sortieren.

Jetzt bitte unter Wert nach <media\IPSTwilight_Mond.jpg> suchen.
Bitte von der Zeile mal ein Screenshot machen und dann mal posten oder als PM schicken.

Beispiel von mir anbei.
Falls der Pfad (Der Pfad in Klammern im Bild) ein anderer ist als bei mir, bitte das Objekt löschen.
Anschliessend IPSTwilight nochmal installieren. (Kein Loadmodule).

GA

Ich habe das Jpeg gelöscht und neu installiert. Jetzt funktioniert das ganze. Herzlichen Dank, super Fehleranalyse

Hallo,

das ist schon mal gut.
Ich hoffe Du hast vorher ein Screenshot gemacht.
Damit Brownson (war im übrigen seine Idee) und ich den Fehler wie es dazu kam nachvollziehen kann.

GA

Das ist mir jetzt wirklich peinlich aber den Screenshot habe ich vergessen.

Ich habe gerade mein Backup eingespielt aber wie vermutet hatte ich zum Zeitpunkt des Backups den Fehler schon behoben so das ich den Screenshot nachträglich nicht mehr generieren kann. Deine E-Mail war eindeutig formuliert, ich hätte das aufmerksamer lesen/umsetzen müssen http://www.ip-symcon.de/forum/images/smilies/mad.gif

Nachdem ich die Bilder heute gelöscht hatte,
klappt es auch bei mir. Habe das mit dem Screenshot
leider erst gesehen, wo schon alles wieder ok war.

Wisst Ihr wenigstens noch in welcher Category lagen?

GA

Die Dateien aus dem Medien Ordner waren es

Das ist klar, aber sie muß in IPS ja als Instanz angelegt worden sein.

Wo (in welcher Category) diese Instanz angelegt wurde, das ist relevant.

Also z.B. direkt unter IP-Symcon oder Program.Data…

GA

Habe nur das „alte“ Library-Twilight, da waren die Bilder unter

Program\IPSLibrary\data\modules\weather\IPSTwilight\Graphics

angelegt.

(PS: Das Leerzeichen bei Twilight ist nicht von mir)

Gruß
Bruno

Die Frage gilt nur für die User, die bei der Installation Probleme hatten und die Instanz für das Bild der Mondphase gelöscht haben:

Wo befand sich die Instanz?

Ich vermute, daß bei der Installation zwar das MondPhasenbild angelegt wurde, aber die Instanz an einem falschen Ort.
Die Datei selbst war in jedem Fall in \media. Nur wo wurde die entsprechende Instanz angelegt?
Da die Instanz nicht im richtigem Ort war, versuchte das Installationsscript die Datei nochmal anzulegen. Das ging aber nicht da die Datei vorhanden und einer Instanz schon zugeordnet war.
Daher kam es zu o. g. Fehlermeldung.

GA

Ich kann es leider nicht mehr sagen.
Ich bin über die Konsole in den Media Ordner gegangen und habe von da gelöscht.
Ich weiß das ist nicht die Info die du haben willst, aber mehr weis ich leider nicht.

Hallo,

in der IPSTwilight Datei habe ich einen Fehler gefunden. Möchte man CallBack Funktionen für die Bereiche Limited nutzen, werden diese mit den Zeiten ohne Limit angelegt. Z.B. Sonnenaufgang ist laut Programm 5:14 Uhr. Ich habe aber als unteres Limit 6:30 Uhr gesetzt. Das Programm legt jetzt den Trigger SunriseBeginnLimited an, verwendet aber als Uhrzeit 5:14 Uhr und nicht 6.340 Uhr.

Das Problem läßt sich lösen, wenn man in der Funktion „SetLimitedValues“ die beiden oberen CreateTimer Aufrufe mit den beiden letzten tauscht.

	function SetLimitedValues($NameLimits, $NameBegin, $NameEnd, $TimeStart, $TimeEnd, $categoryId_Values, $scriptId_Refresh) {
		CreateTimer($TimeStart, 'IPSTwilight_'.str_replace('Limited', '', $NameBegin), $scriptId_Refresh);
		CreateTimer($TimeEnd,   'IPSTwilight_'.str_replace('Limited', '', $NameEnd),   $scriptId_Refresh);


		$Limits = GetValue(IPS_GetVariableIDByName($NameLimits, $categoryId_Values));
		//                   01234567890123456789012
		// Format or Limits: xx:xx-xx:xx/yy:yy-yy:yy
		$TimeStartMin =  mktime(substr($Limits,0,2), substr($Limits,3,2), 0);
		$TimeStartMax =  mktime(substr($Limits,6,2), substr($Limits,9,2), 0);
		$TimeEndMin   =  mktime(substr($Limits,12,2), substr($Limits,15,2), 0);
		$TimeEndMax   =  mktime(substr($Limits,18,2), substr($Limits,21,2), 0);
		if ($TimeStart > $TimeStartMax) { $TimeStart= $TimeStartMax;}
		if ($TimeStart < $TimeStartMin) { $TimeStart= $TimeStartMin;}
		if ($TimeEnd > $TimeEndMax) { $TimeEnd= $TimeEndMax;}
		if ($TimeEnd < $TimeEndMin and date('H', $TimeEnd)=='00') { $TimeEnd= $TimeEndMax;}
		if ($TimeEnd < $TimeEndMin) { $TimeEnd= $TimeEndMin;}
		SetValue(IPS_GetVariableIDByName($NameBegin, $categoryId_Values), date("H:i",$TimeStart));
		SetValue(IPS_GetVariableIDByName($NameEnd,   $categoryId_Values), date("H:i",$TimeEnd));

		CreateTimer($TimeStart, 'IPSTwilight_'.$NameBegin, $scriptId_Refresh);
		CreateTimer($TimeEnd,   'IPSTwilight_'.$NameEnd,   $scriptId_Refresh);
	}

Hallo zusammen,
ich würde gerne wissen, wie ich die Funktion zur Ermittlung der Variablenwerte (function CalculateCurrentValues ?) für ein bestimmtes Datum (Vergangenheit oder Zukunft) aus einem anderen Script heraus aufrufen kann. Hab versucht Brownson’s Scripte nachzuverfolgen, hab’s aber leider nicht geblickt.
Danke für Eure Tipps,

Zeile 160

		$timestamp               = time();

hier einfach Deine gewünschte Zeit setzen (zB mit mktime)

Hallo Brownson,
ich versuche seit einiger Zeit die Grafik Deines Moduls mit HighCharts darzustellen. Mit Hilfe von Raketenschnecke bin ich auch schon ziemlich weit gekommen.
Was mache ich:
Ich schreibe die Daten der Sonnen-Auf und Untergänge sowie die Anfänge und Enden der versch. Dämmerungszeiten in eine MySQL-DB.
Funktioniert soweit auch.
Nur die mit Deiner (und die die ich von anderen gefunden habe) Funktion für die Ermittlung des Astronomischen SonnenAufgangs (Untergang ist selbes Problem) bekomme ich zwischen dem 7.6. und dem 3/5.7. immer Null/"", was mir dann den Chart komplett verkorkst.
Da ichs nicht wirklich blick, meine Bitte, mir auf die Sprünge zu helfen wie ich die Daten in diesen Zeiträumen generieren muss um nacher eine so tolle Grafik in HC zu generieren wie in Deinem Modul.
Anbei das Script wie ich die Daten schreibe.

<?

// Infos zum Parameter Zenit: http://de.wikipedia.org/wiki/D%C3%A4mmerung

// Schreibt die kompletten Daten für ein Jahr in eine Tabelle

//Startdatum
$Jahr        = "2012";
$Monat   = "1";
$Tag     = "1";

// Geographische Daten Mühlacker
$longitude = "8.841";            // Longitude (geografische Länge)
$latitude  = "48.933355";        // Latitude (geografische Breite)
$offsetgmt = (date("Z")/3600);   // Offset zur GMT in Stunden

// MySQL Daten
$MySQLConn=mysql_connect($MySQLIP.$MySQLPort, $MySQLAdmin, $MySQLAdminPW);
$db = $IPS_DB;
$SQLTable = $TBL_Wetter_Daemmerung;

//berechnen Tage im Jahr: Berechnen Tage im Februar
$TagFeb = cal_days_in_month(CAL_GREGORIAN, 2, $Jahr);
//echo "Der Februar " .$Jahr. " hat " .$TagFeb. " Tage"."
";

If ($TagFeb == 28)
    {$TageImJahr = "365";}
elseif ($TagFeb == 29)
    {$TageImJahr = '366';}

if (!$MySQLConn)
    {IPS_LogMessage('SunRiseSet_For1Year', 'error= '. mysql_error());}
     $db_selected = mysql_select_db($db, $MySQLConn);
if (!$db_selected)
    {IPS_LogMessage('SunRiseSet_For1Year', 'opendb= '. mysql_error());}

//echo "Das Jahr " .$Jahr. " hat " .$TageImJahr." Tage 
";

        //MySQL Tabelle löschen
        $sql_drop_table = mysql_query("DROP TABLE ". $SQLTable . ";"); //$sql = "DROP TABLE tutorials_tbl";
        if($sql_drop_table)
           {print_r("Tabelle gelöscht 
");}
        else
           {print_r("Tabelle nicht gelöscht 
");}

        //MySQL Tabelle erstellen
        $sql_create_Table = mysql_query("CREATE TABLE " . $SQLTable . "(
            id INT NOT NULL AUTO_INCREMENT ,
            DateX INT NULL ,
            SunRise INT NULL ,
            SunRiseCivil INT NULL ,
            SunRiseNautic INT NULL ,
            SunRiseAstro INT NULL ,
            SunSet INT NULL ,
            SunSetCivil INT NULL ,
            SunSetNautic INT NULL ,
            SunSetAstro INT NULL ,
            TimeStamp TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
            PRIMARY KEY (id));")
         OR die("'".$sql_create_Table."':".mysql_error());

            if($sql_drop_table)
               {print_r("Tabelle erstellt 
");}
            else
               {print_r("Tabelle nicht erstellt 
");}

// zum Test nur ein Monat
//for($i = 1; $i<=2; $i++)

// Für alle Daten im Jahr
for($i = 1; $i<=$TageImJahr; $i++)
    {
        //echo Date('Y-m-d',mktime(0,0,0,$Monat,$Tag-1+$i,$Jahr))."
";
        $DateX                = mktime(0,0,0,$Monat,$Tag-1+$i,$Jahr);
        //print_r($DateX."
");
        $DateX2                = Date('Y.m.d H:m',$DateX);
        //print_r($DateX2."
");
        //                               Datum                                                  Zenit        GMT Offset
        $SunRise                = date_sunrise($DateX, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90+50/60,    date("O")/100);
        $SunSet                = date_sunset ($DateX, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90+50/60,    date("O")/100);
        $SunRiseCivil        = date_sunrise($DateX, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 96,            date("O")/100);
        $SunSetCivil        = date_sunset ($DateX, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 96,            date("O")/100);
        $SunRiseNautic        = date_sunrise($DateX, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 102,            date("O")/100);
        $SunsetNautic        = date_sunset ($DateX, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 102,            date("O")/100);
        $SunRiseAstro        = date_sunrise($DateX, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 108,            date("O")/100);
        $SunSetAstro        = date_sunset ($DateX, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 108,            date("O")/100);

        //print_r ($DateX2."
".date('Y.m.d H:m',$SunRiseAstro)."
");
        
        //------------------------------------------------------------------------------
/*        print_r("DateX " . $DateX."
");
        print_r("DateX human " . Date('d.m.Y H:i',$DateX)."
");
        print_r("Sunrise " . $SunRise ."
");
        print_r("Sunrise korrigiert " . ($SunRise-$DateX-3600) . "
");
        print_r("Sunrise korrigiert human " . Date('d.m.Y H:i',($SunRise-$DateX-3600)));
        print_r($SunRiseCivil."
");
        print_r($SunRiseNautic."
");
        print_r($SunRiseAstro."
");
*/        print_r($SunSetAstro."
".date("d.m.Y H:i",$SunSetAstro)."
");
/*        print_r($SunSet."
");
        print_r($SunSetCivil."
");
        print_r($SunsetNautic."
");
        print_r($SunSetAstro."
");
*/

      $sql_insert = mysql_query("INSERT INTO ".$SQLTable." (DateX, SunRise, SunRiseCivil, SunRiseNautic, SunRiseAstro, SunSet, SunSetCivil,
                                            SunSetNautic, SunSetAstro)
                                            VALUES ("
                                  ."'".$DateX."'".", "
                                              ."'".$SunRise."'".", "
                                            ."'".$SunRiseCivil."'".", "
                                            ."'".$SunRiseNautic."'".", "
                                            ."'".$SunRiseAstro."'".", "
                                            ."'".$SunSet."'".", "
                                            ."'".$SunSetCivil."'".", "
                                            ."'".$SunsetNautic."'".", "
                                   ."'".$SunSetAstro."'".");")
                                            OR die("'".$sql_Insert."':".mysql_error());
    }
    
        if($sql_insert)
           {print_r("Daten gespeichert 
");}
        else
           {print_r("Daten nicht gespeichert 
");}

//Verbindung beenden
mysql_close($MySQLConn);

?>

Und das relevante Ergebnis aus print_r($SunSetAstro."
„.date(„d.m.Y H:i“,$SunSetAstro).“
");

1339024325
07.06.2012 01:12

01.01.1970 01:00

.
.
.
.
01.01.1970 01:00

01.01.1970 01:00
1341443996
05.07.2012 01:19
1341529813

Wenn Informationen Fehlen bitte erst fragen.

Danke für Deine/Eure Hilfe,

Wolfgang,
das liegt vermutlich daran, dass der astronomische Sonnenuntergang in dem Zeitraum nach Mitternacht liegt (umgekehrt der astronom. SA vor Mitternacht). Ich habs jetzt für deine Koordninaten nicht nachvollzogen, aber für den Norddeutschen Raum gilt dieses „Problem“.

:smiley: so, eben im Kopf nachgerechnet: es ist so wie vermutet:

RS.net Screenshot 000 2012-09-03.png

falls jemand selbst nachrechnen möchte: Einfache Formeln für Berechnung von Sonnen-, Mondposition und Mondphase in JavaScript

Hallo RS,
Deinen Kopf will ich haben …
Danke für die Tipps. Hatte mir so was schon gedacht. Wenn ich mir die Daten aber anschaue fängt z.B. die Astronomische MorgenDämmerung bei 2:00 Uhr auf Null zu springen. Da wären noch einige Datensätze bis 0:00 Uhr drin (würde (wenn ich die Werte davor und danach interpoliere) auch nicht über 0.00 kommen). Bei der AbendDämmerung passts ziemlich genau um 0:00 Uhr.
Hab dann mal ein wenig mit dem lat rumgepielt und rausbekommen, dass bei lat 48.3 Schluss ist. Darüber gibts Nullwerte. 48.3 liegt zur Orientierung etwa in der Höhe von Wien. Hab dann mal die Sonnenaufgangswerte von Wien und meinen verglichen. Die Differenz liegt zwischen -1 und 3 Minuten. Kann man zwar nicht 1:1 übertragen, denke aber das ist verkraftbar. Daher hab ich vorerst auch mal darauf verzichtet die Null-Daten die bei meinem lat berechnet werden mit den Differenzdaten zu Wien anzupassen. Wenn ich die fehlenden Daten durch Interpolation berechne bekomme ich eine ähnliche Kurve.
Anbei ein screenshot wies gerade aussieht. Allen Daten von meinem lat ausser den astronomischen.

@all:
Was mich aber noch immer interessieren würde ist wie Brownson die Daten manipuliert. Irgend wie muss der ja ich die Grafik generieren. Und seine find ich rein technisch (wie die Astronomische Dämmerung umgebrochen wird) und optisch aussagekräftiger. Weiss jemand wie er das macht?

Wenn ich mir die Daten aber anschaue fängt z.B. die Astronomische MorgenDämmerung bei 2:00 Uhr auf Null zu springen. Da wären noch einige Datensätze bis 0:00 Uhr drin

jetzt rate ich auch nur noch: ich könnte mir vorstellen, dass das mit der Umrechnung von MESZ auf UTC zu tun hat, und da wäre 2:00 Uhr MESZ 0:00 Uhr UTC. Und da macht die Logik zu.
Aber wie gesagt: Vermutung