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,
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“.
so, eben im Kopf nachgerechnet: es ist so wie vermutet:
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
Bitte Vorsicht mit solchen Äußerungen, hatten wir doch gerade bei Facebook …
Meiner Meinung nach ist Deine Berechnung korrekt - das Problem liegt vielmehr an Deiner Location, eventuell wird der Zeitpunkt der astronomischen Dämmerung bei Dir erst gar nicht erreicht (weil die Sonne 18° unter dem Horizont nicht erreicht).
Siehe auch Dämmerung
… Am 50. Breitengrad dauern die drei Dämmerungsphasen rund 2 Stunden, sofern das astronomische Ende überhaupt erreicht wird, denn in den kurzen Nächten um die Sommersonnenwende geht die abendliche in die morgendliche Dämmerung über …
Sieh Dir mal die Dämmerungszeiten an:
$DateX = mktime(12,0,0,1,1,2012);
for($i = 1; $i<=365; $i++) {
$SunRiseNautic = date_sunrise ($DateX, SUNFUNCS_RET_TIMESTAMP, "48.933355", "8.841", 102, date("O")/100);
$SunSetNautic = date_sunset ($DateX, SUNFUNCS_RET_TIMESTAMP, "48.933355", "8.841", 102, date("O")/100);
$SunRiseAstro = date_sunrise ($DateX, SUNFUNCS_RET_TIMESTAMP, "48.933355", "8.841", 108, date("O")/100);
$SunSetAstro = date_sunset ($DateX, SUNFUNCS_RET_TIMESTAMP, "48.933355", "8.841", 108, date("O")/100);
print_r($SunSetAstro." - ".date("d.m.Y H:i",$DateX).' --> SunSetAstro='.date("H:i",$SunSetAstro).', SunRiseAstro='.date("H:i",$SunRiseAstro).
', SunRiseNautic='.date("H:i",$SunRiseNautic).', SunSetNautic='.date("H:i",$SunSetNautic)."
");
$DateX = $DateX + 60*60*24;
}
kopfklatsch na klar, du hast Recht: http://www.ip-symcon.de/forum/f52/astroscript-werte-falsch-berechnet-18523/#post163332
Hallo zusammen,
Danke Euch beiden für Eure Antworten.
Hab jetzt erst mal die Null-Werte durch den letzten ermittelten Wert ersetzt. Dadurch bekomme ich für den Zeitraum in dem die Sonne nicht unter 108° sinkt eine Gerade. Find ich besser als Werte hinzubescheissen dies nicht gibt.
Anbei noch der aktuelle Screenshot.
Alles weiter ist dann wieder HC-Sache.
Danke noch mal und
Hallo
Habe mit dem Twilight Script folgendes Problem.
Der Twilight Installer endet mit der folgende Fehlermeldung:
Fatal error: Call-time pass-by-reference has been removed; If you would like to pass argument by reference, modify the declaration of PrepareWFCItemData(). in D:\IP-Symcon\scripts\IPSInstaller.ips.php on line 373
Das Twilight Script selber endet mit der folgenden Fehlermeldung:
Fatal error: Call-time pass-by-reference has been removed in [Programs\IPSTwillight\Scripts\IPSTwillight] on line 148
Habe IPS 2.6 installiert. Denke hat etwas mit der neuen PHP Version zu tun aber das Forum gibt keine ausreichende Antwort auf die Suche „Call-time pass-by-reference has been removed“.
Irgend jemand eine Idee ?
Hi,
Durch die neue PHP Version von IP-Symcon sind einige Änderungen nötig geworden. Ich empfehle Dir die IPSTwilight Version der IPSLibrary, dort sind bereits alle Anpassungen gemacht.
Hallo Andreas
Ich habe versucht über die IPSTwilight_Custom Funktionen einzubinden, die bei Sonnenaufgang und Untergang ausgeführt werden sollen.
Leider passiert an beiden Events gar nichts. Das komplette Modul habe ich auch noch einmal installiert, aber ohne Erfolg.
Ist da etwas quer in IPSTwillight oder was mache ich verkehrt.
Für eine kurze Hilfestellung wäre ich Dir dankbar.
Hier noch der Sourcecode der IPSTwilight_Custom.
function IPSTwilight_SunriseBegin() {
IPSLogger_Dbg(__file__, 'Call to customer specific Function "IPSTwilight_SunriseBegin"');
if (GetValue(17237 /*[Program\Alarm Management\Alarm Email / SMS\Zone 1]*/) == true) {
IPS_RunScript(16123 /*[Home\Jalousie Steuerung\Alle Rolladen zu away]*/);
} elseif (GetValue(17237 /*[Program\Alarm Management\Alarm Email / SMS\Zone 1]*/) == false) {
IPS_RunScript(28785 /*[Home\Jalousie Steuerung\Alle Rolladen zu]*/);
}
}
/** Callback Methode, die beim Sonnenuntergang aufgerufen wird
*
*/
function IPSTwilight_SunriseEnd() {
IPSLogger_Dbg(__file__, 'Call to customer specific Function "IPSTwilight_SunriseEnd"');
IPS_RunScript(24170 /*[Home\Jalousie Steuerung\Alle Rolladen auf away]*/);
}
Sieht alles in Ordnung aus, die entsprechenden Timer sollten bei um Mitternacht oder bei einem manuellen ausführen des Scriptes/Installation oder bei einer Änderung in der GUI angelegt werden.
Welche Timer sind beim Twilight Script vorhanden?
Hallo Andreas
Die Timer sind da bzw. wurden sie angelegt. Trotzdem ging es erst nicht. Nach ein bisschen rum probieren funktioniert es aber nun.
Danke noch einmal für Deine HIlfe.
Hallo,
habe mir IPSTwilight auch mal installiert, hat soweit einwandfrei funktioniert.
Wird auch sauber in mein Webfront integriert.
Allerdings gibt die Seite partout „Tag- und Nachtstunden in Wien“ aus. Habe natürlich die „IPSTwilight_Configuration“ angepasst und augenscheinlich wird auch die Veränderung der Länge und Breite angenommen und umgesetzt.
Allein die Änderung des Wohnortes wird nicht übernommen. Ist auch unabhängig vom Browser, Cache geleert…
Ist natürlich völlig unwichtig, mich nervt nur, dass ich schon bei so einer Kleinigkeit strande und die Fehlerursache nicht finde. Zumal es bei Anderen laut Screenshot ja funktioniert. Alle Module laut Modul-Manager sind aktuell, IPS ist 3.4
Hallo
Hast du nach der Aenderung in der Konfiguration das Modul nochmal upgedatet?
Der Name der Stadt wird bei der Installation gesetzt.
Oder direkt im Tree Webfront.Weather.IPSTwilight.Bottom
ok, danke, das war es. Ich habe im Module-Manager das Modul nochmal ausgewählt und erneut auf „Installieren“ geklickt.
Hätte ich das wissen müssen? Die L+B-Angaben werden doch auch beim Run des Skriptes „IPSTwilight“ erneut eingelesen und berechnet.
„Wissen müssen“ nicht, man hätte es probieren können … für die Zukunft weisst Du es jetzt
Gruß
Bruno