Mondphasen Script gesucht ...

Hallo, habe Eure kleine Diskussion via Google gefunden.

Als kleinen Dank für die Inspiration habe ich hier eine weitere Variante des Scripts für Euch.

Da man unter Wikipedia eine gute Referenz für die Mondereignisse hat (rückwirkend bis 2005 und in die Zukunft bis 2020), konnte ich anhand einiger Stichproben die Richtigkeit der Anzeige testen, und - zumindest bei den Stichproben - hat alles einwandfrei funktioniert.

Ich weiss nicht, wie weit man rückwärts gehen kann, bis sich Rundungsfehler einstellen, aber ich glaube für ein, zwei Leben reicht es.

Die Problematik bei den bisherigen hier war, dass einige Werte nicht anzeigen konnten, weil die führenden Nullen teilweise falsch angehängt werden.
Das habe ich ausgleichen können, statt ifThen habe ich switch case verwendet.

Die Rückgabe des $path ist jetzt der komplette Dateiname des Bildes.

Nochmals danke, die Basis konnte ich sehr gut für meine eigenen Zwecke gebrauchen.

Liebe Grüsse,

NICO


HIER DER CODE:


<?PHP
// TESTWERTE ODER ÜBERGABE DES ZIELDATUMS VIA $TAG, $MONAT, $JAHR

$tag     = 15;
$monat  = 5;
$jahr     = 2009;

// CODE AUF BASIS DES BESTEHENDEN, INKL EDIT NICO

   $akt_datum = mktime(0,0,00,$monat,$tag,$jahr);
   $vollmond_datum = mktime(05, 01, 32, 5, 9, 2009);               // Referenzzeitpunkt eines Vollmondereignisses, z.B. aus Wikipedia Mondphasentabelle 
   $zyklusdauer    = (29 * 86400) + (12 * 3600) + (44 * 60) + 2.8; // Länge eines Mond-Zyklus (29 Tage, 12 Std, 44 Min, 2.8 Sek)
   $mondzeit       = ($akt_datum - $vollmond_datum) / $zyklusdauer;
   $mondphase = (($mondzeit - (int)$mondzeit) * 100);
              if($mondphase < 50)
              {
              $mond362 = ($mondphase + 50) * 3.62;
              }
           else
              {
              $mond362 = ($mondphase - 50) * 3.62;
              }
              
   $mond362 = (int) $mond362;
   
   // zunächst negative Werte umkehren
   if ($mond362 <0){
   $mond362 = $mond362 *-1;
   }
 
   // Dann nach bedarf leere Stellen auffüllen mit 0

   switch ($mond362)
   {
   case($mond362 < 100 && $mond362 >= 10):
   $mond_pic = "mond0".$mond362;
   break;
   
   case($mond362 < 100 && $mond362 < 10):
   $mond_pic = "mond00".$mond362;
   break;
  
    default: 
    $mond_pic = "mond".$mond362;
  }

   $path = $mond_pic;
?>

PS: @ThomasD:
Ich weiss nicht, ob das vorher eine Rolle gespielt hat, aber kann man in einer if then Schleife Zahlenwerte in Anführungszeichen vergleichen? Eventuell ist das ja auch ne Fehlerquelle. Ich hab sie mal rausgelassen, wie gesagt, im Test funktioniert das Skript jetzt einwandfrei.

Hallo,

hab heute leider noch mal einen Fehler gefunden und beim testen nach einen zweiten, darum noch mal ein update.
Allerdings lag es nicht an der Vermutung oben, das funktioniert einwandfrei.
Aber man muß natürlich bei Zahlen unter 10 zwei 00 vorstellen, nicht nur ein, das ist jetzt behoben, der zweite Fehler war so zu sagen der Reset bei 362 auf 1, ist auch behoben, zur Kontrolle hab ich diesmal das Script per Schleife ein paar Monate durchlaufen lassen, Ergebnis als Anhang.

Hier das neue Script:


 <?
   $akt_datum = time();
   $neumond_datum = mktime(5, 23, 00, 4, 25, 2009);             // Referenzzeitpunkt eines Neumondereignisses (25.04.2009 5:23:00)
   $zyklusdauer    = (29 * 86400) + (12 * 3600) + (44 * 60) + 2.8; // Länge eines Mond-Zyklus (29 Tage, 12 Std, 44 Min, 2.8 Sek)
   $mondzeit       = ($akt_datum - $neumond_datum) / $zyklusdauer;
   $mondphase = (($mondzeit - (int)$mondzeit) * 362) + 1;
   $mond362 = (int)$mondphase;
   if ($mond362 < "100")
   {
   if ($mond362 < "10")
   {
   $mond_pic = "00" . $mond362;
   }
   else
   $mond_pic = "0" . $mond362;
   }
   else
   {
   $mond_pic = $mond362;
   }
   $path = "<IMG SRC = \"http://www.avgoe.de/Himmel/img/Mond".$mond_pic.".gif\">";
   echo $path;
?>

bild.txt (81.7 KB)

Hallo Leute!

Ich habe mir mal den letzten Stand des Skriptes von Thomas D angeschaut da ich auch auf der Suche nach einem Skript für die Mondphasen.

Der Ausgangspunkt eines Neumondes am 25.04.2009 5:23:00 stimmt ja auch mit der Referenztabelle bei Wikipedia überein (die 1 Stunde Versatz kommt ja von MEZ <-> MESZ )

Jedoch wäre laut dem Skript der nächste Neumond am 22.07.2009 19:35.
Laut Referenztabelle sowie anderen Quellen ist der aber am 22.07. 03:34 MEZ.

Also irgendwas rechnet da noch falsch bei 16h Versatz.

Ich bin zugegeberweise noch kein php-Experte…

Vielleicht schaut Ihr da auch noch mal drüber?

Gruß
Stefan

Hallo,

ja den Versatz hab ich auch gemerkt, ich bin aber da von aus gegangen das die Wiki Tabelle die echte Mondphase anzeigt, während unsere Formeln nur ein Näherungswert ist.

Schöne Grüße
Thomas

Hallo,

so wie es aussieht liegt es daran das der Mondzyklus im Moment sehr kurz ist, da wir die durchschnitts Zykluszeit nehmen ist im moment ein Versatz drin, der sollte aber zum Ende des Jahres wieder kleiner werden da dort der Mond wieder länger als der Durchnittbraucht.
Ich werde mal Probieren was passiert wenn man einen älteren Neumond für den Startzeitpunkt wählt, dann müßten die Werte eigentlich besser im Durchnitt liegen.

Schöne Grüße
Thomas

Hallo,

…es wird Hilfe benötigt :slight_smile:

Ich möchte mit dem folgenden Script (angepasstes Script von der ersten Seite des Threads) einer Variablen die aktuelle Mondphase zuweisen - und bekomme immer einen Fehler:
„Parse error: parse error, unexpected T_VARIABLE in [Wetterstation\Berechnung Mondphase] on line 7“

Kann mal jemand draufschauen? Danke vorab :slight_smile:

<?

// Berechnet die aktuelle Mondphase. Ein kompletter Mondzyklus (Vollmond - Neumond - Vollmond) wird in 25
// Abschnitte unterteilt. Der Rückgabewert hat also folgende Bedeutung:
// 01  = Vollmond, 02 bis 12 = abnehmender Mond, 13 = Neumond, 14 bis 24 = zunehmender Mond, 25 = Vollmond
   $akt_datum = time()
	$vollmond_datum = mktime(16, 56, 00, 4, 9, 2009);               // Referenzzeitpunkt eines Vollmondereignisses (22.01.1970 12:55:25)
   $zyklusdauer    = (29 * 86400) + (12 * 3600) + (44 * 60) + 2.8; // Länge eines Mond-Zyklus (29 Tage, 12 Std, 44 Min, 2.8 Sek)
   $mondzeit       = ($akt_datum - $vollmond_datum) / $zyklusdauer;

   //Nachkommastellen extrahieren
   $mondphase = ($mondzeit - (int)$mondzeit);

   // Die Mondphase in 25 Abschnitte aufteilen und die Abschnittsnummer zurückliefern.
   if     ($mondphase <= (1 / 25) *  1) $abschnitt = 1;
   elseif ($mondphase <= (1 / 25) *  2) $abschnitt = 2;
   elseif ($mondphase <= (1 / 25) *  3) $abschnitt = 3;
   elseif ($mondphase <= (1 / 25) *  4) $abschnitt = 4;
   elseif ($mondphase <= (1 / 25) *  5) $abschnitt = 5;
   elseif ($mondphase <= (1 / 25) *  6) $abschnitt = 6;
   elseif ($mondphase <= (1 / 25) *  7) $abschnitt = 7;
   elseif ($mondphase <= (1 / 25) *  8) $abschnitt = 8;
   elseif ($mondphase <= (1 / 25) *  9) $abschnitt = 9;
   elseif ($mondphase <= (1 / 25) * 10) $abschnitt = 10;
   elseif ($mondphase <= (1 / 25) * 11) $abschnitt = 11;
   elseif ($mondphase <= (1 / 25) * 12) $abschnitt = 12;
   elseif ($mondphase <= (1 / 25) * 13) $abschnitt = 13;
   elseif ($mondphase <= (1 / 25) * 14) $abschnitt = 14;
   elseif ($mondphase <= (1 / 25) * 15) $abschnitt = 15;
   elseif ($mondphase <= (1 / 25) * 16) $abschnitt = 16;
   elseif ($mondphase <= (1 / 25) * 17) $abschnitt = 17;
   elseif ($mondphase <= (1 / 25) * 18) $abschnitt = 18;
   elseif ($mondphase <= (1 / 25) * 19) $abschnitt = 19;
   elseif ($mondphase <= (1 / 25) * 20) $abschnitt = 20;
   elseif ($mondphase <= (1 / 25) * 21) $abschnitt = 21;
   elseif ($mondphase <= (1 / 25) * 22) $abschnitt = 22;
   elseif ($mondphase <= (1 / 25) * 23) $abschnitt = 23;
   elseif ($mondphase <= (1 / 25) * 24) $abschnitt = 24;
   else $abschnitt = 25;

   SetValueString(47159 /*[xxx\xxx]*/, $abschnitt);

?>

Hallo dreamy,

in Zeile 6 fehlt das Semikolon!

   $akt_datum = time();

Gruß

Oh Mann,

vielen Dank - ich schäme mich :o

@Thomas

Super Script!!

Hab es gerade eingebunden.
(in einer abgewandelten Form)

Besten Dank. :loveips:

Hallo zusammen,

hab gerade versucht auf das Thema ‚[Script] Mondphasen- und Mond-/Sonnen-Finsternisberechnung‘ zu Anworten. Geht leider nicht mehr.
Daher bin ich hier gelandet.

Kann mir bitte jemand sagen wie ich die einzelnen Informationen, die in der lunarData.ips.php aus o.G. Thema generiert werden, einzeln abfragen kann?

Hoffe, dass hier noch jemand mitliest, der mir helfen kann.

hallo mich würde interessieren,

welche geoposition für das lunar-data-skript verwendet wird!?

lg.

alex

hallo mich würde interessieren,

welche geoposition für das lunar-data-skript verwendet wird!?

Ich hab bei Herbert Metz nachgefragt.

Antwort:

keine. Die Koordinaten werden nur für den Auf- und Untergang benötigt.

Wenn man sich die Grafik unter Die aktuelle Mondphase berechnet mit JavaScript anschaut wirds auch plausibel und die Frage fast peinlich.

Hallo zusammen,
auch ich habe hier versucht zu antworten. Leider erfolglos. Somit bin ich hier gelandet.
das Script von hier habe ich nun in IPS als Skript eingefügt. Wenn ich es ausführe kann ich mir auch die Bildnummer anzeigen lassen. Die Bilder habe ich auf die lokale Installation kopiert (Mond/mond_xxx.gif).

Wie kann ich mir denn nun auch das Bild als solches in IPSView anzeigen lassen?

Vielen Dank für eure Unterstützung.

Hallo nochmals,
Hatte gestern Abend noch eine „Idee“. Habe mir gedacht, ich gucke mal bei IPSView auf der Website. Tatsächlich, da bin ich fündig geworden.