diff --git a/.codex-temp/php-server.err.log b/.codex-temp/php-server.err.log index e3a9de6..b939a54 100644 --- a/.codex-temp/php-server.err.log +++ b/.codex-temp/php-server.err.log @@ -197,3 +197,552 @@ [Fri Apr 3 18:53:24 2026] [::1]:53603 Accepted [Fri Apr 3 18:53:24 2026] [::1]:53603 [200]: GET /favicon.ico [Fri Apr 3 18:53:24 2026] [::1]:53603 Closing +[Fri Apr 3 18:57:24 2026] [::1]:60801 Accepted +[Fri Apr 3 18:57:25 2026] [::1]:60801 [200]: GET /meteorshowers.php +[Fri Apr 3 18:57:25 2026] [::1]:60801 Closing +[Fri Apr 3 18:57:48 2026] [::1]:58482 Accepted +[Fri Apr 3 18:57:49 2026] [::1]:58482 [200]: GET /index.php +[Fri Apr 3 18:57:49 2026] [::1]:58482 Closing +[Fri Apr 3 18:57:49 2026] [::1]:53042 Accepted +[Fri Apr 3 18:57:49 2026] [::1]:53042 [200]: GET /css/style.css +[Fri Apr 3 18:57:49 2026] [::1]:53042 Closing +[Fri Apr 3 18:57:49 2026] [::1]:61066 Accepted +[Fri Apr 3 18:57:49 2026] [::1]:58923 Accepted +[Fri Apr 3 18:57:49 2026] [::1]:61066 [200]: GET /images/star16x16.png +[Fri Apr 3 18:57:49 2026] [::1]:58923 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 18:57:49 2026] [::1]:61066 Closing +[Fri Apr 3 18:57:49 2026] [::1]:58923 Closing +[Fri Apr 3 18:57:49 2026] [::1]:59332 Accepted +[Fri Apr 3 18:57:50 2026] [::1]:59332 [200]: GET /favicon.ico +[Fri Apr 3 18:57:50 2026] [::1]:59332 Closing +[Fri Apr 3 18:57:51 2026] [::1]:63265 Accepted +[Fri Apr 3 18:57:52 2026] [::1]:63265 [200]: GET /meteorshowers.php +[Fri Apr 3 18:57:52 2026] [::1]:63265 Closing +[Fri Apr 3 18:57:52 2026] [::1]:63533 Accepted +[Fri Apr 3 18:57:52 2026] [::1]:63533 [200]: GET /css/style.css +[Fri Apr 3 18:57:52 2026] [::1]:63533 Closing +[Fri Apr 3 18:57:52 2026] [::1]:50081 Accepted +[Fri Apr 3 18:57:52 2026] [::1]:54913 Accepted +[Fri Apr 3 18:57:52 2026] [::1]:50081 [200]: GET /images/star16x16.png +[Fri Apr 3 18:57:52 2026] [::1]:54913 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 18:57:52 2026] [::1]:50081 Closing +[Fri Apr 3 18:57:52 2026] [::1]:54913 Closing +[Fri Apr 3 18:57:52 2026] [::1]:59072 Accepted +[Fri Apr 3 18:57:52 2026] [::1]:59072 [200]: GET /favicon.ico +[Fri Apr 3 18:57:52 2026] [::1]:59072 Closing +[Fri Apr 3 18:58:19 2026] [::1]:64090 Accepted +[Fri Apr 3 18:58:19 2026] [::1]:64090 [200]: GET /settings.php +[Fri Apr 3 18:58:19 2026] [::1]:64090 Closing +[Fri Apr 3 18:58:19 2026] [::1]:54419 Accepted +[Fri Apr 3 18:58:19 2026] [::1]:54419 [200]: GET /css/style.css +[Fri Apr 3 18:58:19 2026] [::1]:54419 Closing +[Fri Apr 3 18:58:19 2026] [::1]:60884 Accepted +[Fri Apr 3 18:58:19 2026] [::1]:49294 Accepted +[Fri Apr 3 18:58:19 2026] [::1]:60884 [200]: GET /images/star16x16.png +[Fri Apr 3 18:58:19 2026] [::1]:49294 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 18:58:19 2026] [::1]:60884 Closing +[Fri Apr 3 18:58:19 2026] [::1]:49294 Closing +[Fri Apr 3 18:58:20 2026] [::1]:58993 Accepted +[Fri Apr 3 18:58:20 2026] [::1]:58993 [200]: GET /favicon.ico +[Fri Apr 3 18:58:20 2026] [::1]:58993 Closing +[Fri Apr 3 18:58:24 2026] [::1]:56108 Accepted +[Fri Apr 3 18:58:25 2026] [::1]:56108 [200]: POST /settings.php +[Fri Apr 3 18:58:25 2026] [::1]:56108 Closing +[Fri Apr 3 18:58:25 2026] [::1]:49436 Accepted +[Fri Apr 3 18:58:25 2026] [::1]:49436 [200]: GET /css/style.css +[Fri Apr 3 18:58:25 2026] [::1]:49436 Closing +[Fri Apr 3 18:58:25 2026] [::1]:50060 Accepted +[Fri Apr 3 18:58:25 2026] [::1]:52218 Accepted +[Fri Apr 3 18:58:25 2026] [::1]:50060 [200]: GET /images/star16x16.png +[Fri Apr 3 18:58:25 2026] [::1]:52218 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 18:58:25 2026] [::1]:50060 Closing +[Fri Apr 3 18:58:25 2026] [::1]:52218 Closing +[Fri Apr 3 18:58:25 2026] [::1]:54880 Accepted +[Fri Apr 3 18:58:26 2026] [::1]:54880 [200]: GET /favicon.ico +[Fri Apr 3 18:58:26 2026] [::1]:54880 Closing +[Fri Apr 3 18:58:28 2026] [::1]:50962 Accepted +[Fri Apr 3 18:58:28 2026] [::1]:50962 [200]: GET /meteorshowers.php +[Fri Apr 3 18:58:28 2026] [::1]:50962 Closing +[Fri Apr 3 18:58:28 2026] [::1]:49723 Accepted +[Fri Apr 3 18:58:28 2026] [::1]:49723 [200]: GET /css/style.css +[Fri Apr 3 18:58:28 2026] [::1]:49723 Closing +[Fri Apr 3 18:58:28 2026] [::1]:58984 Accepted +[Fri Apr 3 18:58:28 2026] [::1]:56485 Accepted +[Fri Apr 3 18:58:28 2026] [::1]:58984 [200]: GET /images/star16x16.png +[Fri Apr 3 18:58:28 2026] [::1]:56485 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 18:58:28 2026] [::1]:58984 Closing +[Fri Apr 3 18:58:28 2026] [::1]:56485 Closing +[Fri Apr 3 18:58:28 2026] [::1]:50844 Accepted +[Fri Apr 3 18:58:29 2026] [::1]:50844 [200]: GET /favicon.ico +[Fri Apr 3 18:58:29 2026] [::1]:50844 Closing +[Fri Apr 3 19:08:05 2026] [::1]:63421 Accepted +[Fri Apr 3 19:08:11 2026] [::1]:63421 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:08:11 2026] [::1]:63421 Closing +[Fri Apr 3 19:08:20 2026] [::1]:61797 Accepted +[Fri Apr 3 19:08:20 2026] [::1]:61797 [200]: GET /monatsvorhersage.php +[Fri Apr 3 19:08:20 2026] [::1]:61797 Closing +[Fri Apr 3 19:08:20 2026] [::1]:54301 Accepted +[Fri Apr 3 19:08:20 2026] [::1]:54301 [200]: GET /css/style.css +[Fri Apr 3 19:08:20 2026] [::1]:54301 Closing +[Fri Apr 3 19:08:20 2026] [::1]:53037 Accepted +[Fri Apr 3 19:08:20 2026] [::1]:49480 Accepted +[Fri Apr 3 19:08:20 2026] [::1]:53037 [200]: GET /images/star16x16.png +[Fri Apr 3 19:08:20 2026] [::1]:49480 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:08:20 2026] [::1]:53037 Closing +[Fri Apr 3 19:08:20 2026] [::1]:49480 Closing +[Fri Apr 3 19:08:20 2026] [::1]:63715 Accepted +[Fri Apr 3 19:08:21 2026] [::1]:63715 [200]: GET /favicon.ico +[Fri Apr 3 19:08:21 2026] [::1]:63715 Closing +[Fri Apr 3 19:08:24 2026] [::1]:61477 Accepted +[Fri Apr 3 19:08:29 2026] [::1]:61477 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:08:29 2026] [::1]:61477 Closing +[Fri Apr 3 19:08:29 2026] [::1]:57646 Accepted +[Fri Apr 3 19:08:29 2026] [::1]:52815 Accepted +[Fri Apr 3 19:08:29 2026] [::1]:57646 [200]: GET /css/style.css +[Fri Apr 3 19:08:29 2026] [::1]:52815 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:08:29 2026] [::1]:57646 Closing +[Fri Apr 3 19:08:29 2026] [::1]:52815 Closing +[Fri Apr 3 19:08:29 2026] [::1]:63573 Accepted +[Fri Apr 3 19:08:29 2026] [::1]:63053 Accepted +[Fri Apr 3 19:08:29 2026] [::1]:63573 [200]: GET /images/star16x16.png +[Fri Apr 3 19:08:29 2026] [::1]:63053 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:08:29 2026] [::1]:63573 Closing +[Fri Apr 3 19:08:29 2026] [::1]:63053 Closing +[Fri Apr 3 19:08:29 2026] [::1]:54963 Accepted +[Fri Apr 3 19:08:29 2026] [::1]:54963 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:08:29 2026] [::1]:54963 Closing +[Fri Apr 3 19:08:29 2026] [::1]:60128 Accepted +[Fri Apr 3 19:08:30 2026] [::1]:60128 [200]: GET /favicon.ico +[Fri Apr 3 19:08:30 2026] [::1]:60128 Closing +[Fri Apr 3 19:08:35 2026] [::1]:60130 Accepted +[Fri Apr 3 19:08:40 2026] [::1]:60130 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:08:40 2026] [::1]:60130 Closing +[Fri Apr 3 19:10:18 2026] [::1]:51297 Accepted +[Fri Apr 3 19:10:24 2026] [::1]:51297 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:10:24 2026] [::1]:51297 Closing +[Fri Apr 3 19:10:25 2026] [::1]:52467 Accepted +[Fri Apr 3 19:10:30 2026] [::1]:52467 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:10:30 2026] [::1]:52467 Closing +[Fri Apr 3 19:10:30 2026] [::1]:57852 Accepted +[Fri Apr 3 19:10:30 2026] [::1]:57852 [200]: GET /css/style.css +[Fri Apr 3 19:10:30 2026] [::1]:62622 Accepted +[Fri Apr 3 19:10:30 2026] [::1]:57852 Closing +[Fri Apr 3 19:10:30 2026] [::1]:62622 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:10:30 2026] [::1]:62622 Closing +[Fri Apr 3 19:10:30 2026] [::1]:57496 Accepted +[Fri Apr 3 19:10:30 2026] [::1]:57496 [200]: GET /images/star16x16.png +[Fri Apr 3 19:10:30 2026] [::1]:57496 Closing +[Fri Apr 3 19:10:30 2026] [::1]:51178 Accepted +[Fri Apr 3 19:10:30 2026] [::1]:51178 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:10:30 2026] [::1]:51178 Closing +[Fri Apr 3 19:10:30 2026] [::1]:56561 Accepted +[Fri Apr 3 19:10:30 2026] [::1]:56561 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:10:30 2026] [::1]:56561 Closing +[Fri Apr 3 19:10:31 2026] [::1]:49294 Accepted +[Fri Apr 3 19:10:31 2026] [::1]:49294 [200]: GET /favicon.ico +[Fri Apr 3 19:10:31 2026] [::1]:49294 Closing +[Fri Apr 3 19:13:50 2026] [::1]:63772 Accepted +[Fri Apr 3 19:13:55 2026] [::1]:63772 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:13:55 2026] [::1]:63772 Closing +[Fri Apr 3 19:13:55 2026] [::1]:64089 Accepted +[Fri Apr 3 19:13:55 2026] [::1]:57514 Accepted +[Fri Apr 3 19:13:55 2026] [::1]:64089 [200]: GET /css/style.css +[Fri Apr 3 19:13:55 2026] [::1]:57514 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:13:55 2026] [::1]:64089 Closing +[Fri Apr 3 19:13:55 2026] [::1]:57514 Closing +[Fri Apr 3 19:13:55 2026] [::1]:52083 Accepted +[Fri Apr 3 19:13:55 2026] [::1]:52083 [200]: GET /images/star16x16.png +[Fri Apr 3 19:13:55 2026] [::1]:57803 Accepted +[Fri Apr 3 19:13:55 2026] [::1]:57803 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:13:55 2026] [::1]:52083 Closing +[Fri Apr 3 19:13:55 2026] [::1]:57803 Closing +[Fri Apr 3 19:13:55 2026] [::1]:59010 Accepted +[Fri Apr 3 19:13:55 2026] [::1]:59010 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:13:55 2026] [::1]:59010 Closing +[Fri Apr 3 19:13:56 2026] [::1]:64375 Accepted +[Fri Apr 3 19:13:56 2026] [::1]:64375 [200]: GET /favicon.ico +[Fri Apr 3 19:13:56 2026] [::1]:64375 Closing +[Fri Apr 3 19:15:31 2026] [::1]:54019 Accepted +[Fri Apr 3 19:15:36 2026] [::1]:54019 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:15:36 2026] [::1]:54019 Closing +[Fri Apr 3 19:16:08 2026] [::1]:64974 Accepted +[Fri Apr 3 19:16:13 2026] [::1]:64974 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:16:13 2026] [::1]:64974 Closing +[Fri Apr 3 19:16:13 2026] [::1]:49441 Accepted +[Fri Apr 3 19:16:13 2026] [::1]:51970 Accepted +[Fri Apr 3 19:16:13 2026] [::1]:49441 [200]: GET /css/style.css +[Fri Apr 3 19:16:13 2026] [::1]:51970 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:16:13 2026] [::1]:49441 Closing +[Fri Apr 3 19:16:13 2026] [::1]:51970 Closing +[Fri Apr 3 19:16:13 2026] [::1]:59287 Accepted +[Fri Apr 3 19:16:13 2026] [::1]:51598 Accepted +[Fri Apr 3 19:16:13 2026] [::1]:59287 [200]: GET /images/star16x16.png +[Fri Apr 3 19:16:13 2026] [::1]:51598 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:16:13 2026] [::1]:59287 Closing +[Fri Apr 3 19:16:13 2026] [::1]:51598 Closing +[Fri Apr 3 19:16:13 2026] [::1]:49606 Accepted +[Fri Apr 3 19:16:13 2026] [::1]:49606 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:16:13 2026] [::1]:49606 Closing +[Fri Apr 3 19:16:13 2026] [::1]:50983 Accepted +[Fri Apr 3 19:16:14 2026] [::1]:50983 [200]: GET /favicon.ico +[Fri Apr 3 19:16:14 2026] [::1]:50983 Closing +[Fri Apr 3 19:16:33 2026] [::1]:49455 Accepted +[Fri Apr 3 19:16:39 2026] [::1]:49455 [200]: GET /monatsvorhersage_old.php?year=2026&month=12 +[Fri Apr 3 19:16:39 2026] [::1]:49455 Closing +[Fri Apr 3 19:16:39 2026] [::1]:52661 Accepted +[Fri Apr 3 19:16:39 2026] [::1]:63304 Accepted +[Fri Apr 3 19:16:39 2026] [::1]:52661 [200]: GET /css/style.css +[Fri Apr 3 19:16:39 2026] [::1]:63304 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:16:39 2026] [::1]:52661 Closing +[Fri Apr 3 19:16:39 2026] [::1]:63304 Closing +[Fri Apr 3 19:16:39 2026] [::1]:56487 Accepted +[Fri Apr 3 19:16:39 2026] [::1]:59433 Accepted +[Fri Apr 3 19:16:39 2026] [::1]:56487 [200]: GET /images/star16x16.png +[Fri Apr 3 19:16:39 2026] [::1]:59433 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:16:39 2026] [::1]:56487 Closing +[Fri Apr 3 19:16:39 2026] [::1]:59433 Closing +[Fri Apr 3 19:16:39 2026] [::1]:57362 Accepted +[Fri Apr 3 19:16:39 2026] [::1]:57362 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:16:39 2026] [::1]:57362 Closing +[Fri Apr 3 19:16:39 2026] [::1]:61331 Accepted +[Fri Apr 3 19:16:40 2026] [::1]:61331 [200]: GET /favicon.ico +[Fri Apr 3 19:16:40 2026] [::1]:61331 Closing +[Fri Apr 3 19:27:34 2026] [::1]:53963 Accepted +[Fri Apr 3 19:27:34 2026] [::1]:53963 [200]: GET /meteorshowers.php +[Fri Apr 3 19:27:34 2026] [::1]:53963 Closing +[Fri Apr 3 19:27:34 2026] [::1]:60622 Accepted +[Fri Apr 3 19:27:34 2026] [::1]:60622 [200]: GET /css/style.css +[Fri Apr 3 19:27:34 2026] [::1]:60622 Closing +[Fri Apr 3 19:27:34 2026] [::1]:64705 Accepted +[Fri Apr 3 19:27:34 2026] [::1]:49187 Accepted +[Fri Apr 3 19:27:34 2026] [::1]:64705 [200]: GET /images/star16x16.png +[Fri Apr 3 19:27:34 2026] [::1]:49187 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:27:34 2026] [::1]:64705 Closing +[Fri Apr 3 19:27:34 2026] [::1]:49187 Closing +[Fri Apr 3 19:27:34 2026] [::1]:57972 Accepted +[Fri Apr 3 19:27:35 2026] [::1]:57972 [200]: GET /favicon.ico +[Fri Apr 3 19:27:35 2026] [::1]:57972 Closing +[Fri Apr 3 19:27:47 2026] [::1]:63915 Accepted +[Fri Apr 3 19:27:52 2026] [::1]:63915 [200]: GET /monatsvorhersage.php +[Fri Apr 3 19:27:52 2026] [::1]:63915 Closing +[Fri Apr 3 19:27:52 2026] [::1]:52819 Accepted +[Fri Apr 3 19:27:52 2026] [::1]:52819 [200]: GET /css/style.css +[Fri Apr 3 19:27:52 2026] [::1]:57847 Accepted +[Fri Apr 3 19:27:52 2026] [::1]:52819 Closing +[Fri Apr 3 19:27:52 2026] [::1]:57847 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:27:52 2026] [::1]:57847 Closing +[Fri Apr 3 19:27:52 2026] [::1]:52228 Accepted +[Fri Apr 3 19:27:52 2026] [::1]:53187 Accepted +[Fri Apr 3 19:27:52 2026] [::1]:52228 [200]: GET /images/star16x16.png +[Fri Apr 3 19:27:52 2026] [::1]:53187 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:27:52 2026] [::1]:52228 Closing +[Fri Apr 3 19:27:52 2026] [::1]:53187 Closing +[Fri Apr 3 19:27:52 2026] [::1]:51302 Accepted +[Fri Apr 3 19:27:52 2026] [::1]:51302 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:27:52 2026] [::1]:51302 Closing +[Fri Apr 3 19:27:52 2026] [::1]:55608 Accepted +[Fri Apr 3 19:27:53 2026] [::1]:55608 [200]: GET /favicon.ico +[Fri Apr 3 19:27:53 2026] [::1]:55608 Closing +[Fri Apr 3 19:34:18 2026] [::1]:59427 Accepted +[Fri Apr 3 19:34:18 2026] [::1]:59427 [200]: GET /jupitersystem.php +[Fri Apr 3 19:34:18 2026] [::1]:59427 Closing +[Fri Apr 3 19:34:18 2026] [::1]:51539 Accepted +[Fri Apr 3 19:34:18 2026] [::1]:53971 Accepted +[Fri Apr 3 19:34:18 2026] [::1]:51539 [200]: GET /css/style.css +[Fri Apr 3 19:34:18 2026] [::1]:53971 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:34:18 2026] [::1]:51539 Closing +[Fri Apr 3 19:34:18 2026] [::1]:53971 Closing +[Fri Apr 3 19:34:18 2026] [::1]:53017 Accepted +[Fri Apr 3 19:34:18 2026] [::1]:53017 [200]: GET /images/star16x16.png +[Fri Apr 3 19:34:18 2026] [::1]:56923 Accepted +[Fri Apr 3 19:34:18 2026] [::1]:56923 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:34:18 2026] [::1]:53017 Closing +[Fri Apr 3 19:34:18 2026] [::1]:56923 Closing +[Fri Apr 3 19:34:18 2026] [::1]:63438 Accepted +[Fri Apr 3 19:34:18 2026] [::1]:63438 [200]: GET /js/three.module.js +[Fri Apr 3 19:34:18 2026] [::1]:63438 Closing +[Fri Apr 3 19:34:18 2026] [::1]:60150 Accepted +[Fri Apr 3 19:34:18 2026] [::1]:60150 [200]: GET /js/three.core.js +[Fri Apr 3 19:34:18 2026] [::1]:62413 Accepted +[Fri Apr 3 19:34:19 2026] [::1]:62413 [200]: GET /favicon.ico +[Fri Apr 3 19:34:19 2026] [::1]:62413 Closing +[Fri Apr 3 19:34:19 2026] [::1]:60150 Closing +[Fri Apr 3 19:34:19 2026] [::1]:49660 Accepted +[Fri Apr 3 19:34:19 2026] [::1]:49660 [200]: GET /jupitersystem.php?grs_api +[Fri Apr 3 19:34:19 2026] [::1]:49660 Closing +[Fri Apr 3 19:34:19 2026] [::1]:56296 Accepted +[Fri Apr 3 19:34:19 2026] [::1]:56296 [200]: GET /images/planets/jupiter_2048.jpg +[Fri Apr 3 19:34:19 2026] [::1]:49733 Accepted +[Fri Apr 3 19:34:19 2026] [::1]:64045 Accepted +[Fri Apr 3 19:34:19 2026] [::1]:57444 Accepted +[Fri Apr 3 19:34:19 2026] [::1]:49733 [200]: GET /images/moons/io.jpg +[Fri Apr 3 19:34:19 2026] [::1]:64045 [200]: GET /images/moons/europa.jpg +[Fri Apr 3 19:34:19 2026] [::1]:54549 Accepted +[Fri Apr 3 19:34:19 2026] [::1]:57444 [200]: GET /images/moons/ganymede.jpg +[Fri Apr 3 19:34:19 2026] [::1]:54549 [200]: GET /images/moons/callisto.jpg +[Fri Apr 3 19:34:19 2026] [::1]:56296 Closing +[Fri Apr 3 19:34:19 2026] [::1]:49733 Closing +[Fri Apr 3 19:34:19 2026] [::1]:57444 Closing +[Fri Apr 3 19:34:19 2026] [::1]:64045 Closing +[Fri Apr 3 19:34:19 2026] [::1]:54549 Closing +[Fri Apr 3 19:34:26 2026] [::1]:60747 Accepted +[Fri Apr 3 19:34:26 2026] [::1]:60747 [200]: GET /images/logoAM.png +[Fri Apr 3 19:34:26 2026] [::1]:60747 Closing +[Fri Apr 3 19:38:39 2026] [::1]:56708 Accepted +[Fri Apr 3 19:38:44 2026] [::1]:56708 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:38:44 2026] [::1]:56708 Closing +[Fri Apr 3 19:38:50 2026] [::1]:56710 Accepted +[Fri Apr 3 19:38:56 2026] [::1]:56710 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:38:56 2026] [::1]:56710 Closing +[Fri Apr 3 19:40:57 2026] [::1]:59669 Accepted +[Fri Apr 3 19:41:03 2026] [::1]:59669 [200]: GET /monatsvorhersage.php +[Fri Apr 3 19:41:03 2026] [::1]:59669 Closing +[Fri Apr 3 19:41:03 2026] [::1]:50751 Accepted +[Fri Apr 3 19:41:03 2026] [::1]:64367 Accepted +[Fri Apr 3 19:41:03 2026] [::1]:50751 [200]: GET /css/style.css +[Fri Apr 3 19:41:03 2026] [::1]:64367 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:41:03 2026] [::1]:50751 Closing +[Fri Apr 3 19:41:03 2026] [::1]:64367 Closing +[Fri Apr 3 19:41:03 2026] [::1]:54669 Accepted +[Fri Apr 3 19:41:03 2026] [::1]:54669 [200]: GET /images/star16x16.png +[Fri Apr 3 19:41:03 2026] [::1]:63084 Accepted +[Fri Apr 3 19:41:03 2026] [::1]:63084 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:41:03 2026] [::1]:54669 Closing +[Fri Apr 3 19:41:03 2026] [::1]:63084 Closing +[Fri Apr 3 19:41:03 2026] [::1]:57496 Accepted +[Fri Apr 3 19:41:03 2026] [::1]:57496 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:41:03 2026] [::1]:57496 Closing +[Fri Apr 3 19:41:03 2026] [::1]:49327 Accepted +[Fri Apr 3 19:41:04 2026] [::1]:49327 [200]: GET /favicon.ico +[Fri Apr 3 19:41:04 2026] [::1]:49327 Closing +[Fri Apr 3 19:41:05 2026] [::1]:59324 Accepted +[Fri Apr 3 19:41:11 2026] [::1]:59324 [200]: GET /monatsvorhersage_old.php +[Fri Apr 3 19:41:11 2026] [::1]:59324 Closing +[Fri Apr 3 19:41:11 2026] [::1]:52808 Accepted +[Fri Apr 3 19:41:11 2026] [::1]:63422 Accepted +[Fri Apr 3 19:41:11 2026] [::1]:52808 [200]: GET /css/style.css +[Fri Apr 3 19:41:11 2026] [::1]:63422 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:41:11 2026] [::1]:52808 Closing +[Fri Apr 3 19:41:11 2026] [::1]:63422 Closing +[Fri Apr 3 19:41:11 2026] [::1]:53705 Accepted +[Fri Apr 3 19:41:11 2026] [::1]:53705 [200]: GET /images/star16x16.png +[Fri Apr 3 19:41:11 2026] [::1]:61313 Accepted +[Fri Apr 3 19:41:11 2026] [::1]:61313 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:41:11 2026] [::1]:53705 Closing +[Fri Apr 3 19:41:11 2026] [::1]:61313 Closing +[Fri Apr 3 19:41:11 2026] [::1]:61457 Accepted +[Fri Apr 3 19:41:11 2026] [::1]:61457 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:41:11 2026] [::1]:61457 Closing +[Fri Apr 3 19:41:11 2026] [::1]:61144 Accepted +[Fri Apr 3 19:41:12 2026] [::1]:61144 [200]: GET /favicon.ico +[Fri Apr 3 19:41:12 2026] [::1]:61144 Closing +[Fri Apr 3 19:42:30 2026] [::1]:55014 Accepted +[Fri Apr 3 19:42:36 2026] [::1]:55014 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:42:36 2026] [::1]:55014 Closing +[Fri Apr 3 19:44:26 2026] [::1]:55985 Accepted +[Fri Apr 3 19:44:26 2026] [::1]:55985 [200]: GET /jupitersystem.php +[Fri Apr 3 19:44:26 2026] [::1]:55985 Closing +[Fri Apr 3 19:44:26 2026] [::1]:55563 Accepted +[Fri Apr 3 19:44:26 2026] [::1]:52283 Accepted +[Fri Apr 3 19:44:26 2026] [::1]:55563 [200]: GET /css/style.css +[Fri Apr 3 19:44:26 2026] [::1]:52283 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:44:26 2026] [::1]:55563 Closing +[Fri Apr 3 19:44:26 2026] [::1]:52283 Closing +[Fri Apr 3 19:44:26 2026] [::1]:54539 Accepted +[Fri Apr 3 19:44:26 2026] [::1]:61207 Accepted +[Fri Apr 3 19:44:26 2026] [::1]:54539 [200]: GET /images/star16x16.png +[Fri Apr 3 19:44:26 2026] [::1]:61207 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:44:26 2026] [::1]:54539 Closing +[Fri Apr 3 19:44:26 2026] [::1]:61207 Closing +[Fri Apr 3 19:44:26 2026] [::1]:51376 Accepted +[Fri Apr 3 19:44:26 2026] [::1]:51376 [200]: GET /js/three.module.js +[Fri Apr 3 19:44:26 2026] [::1]:51376 Closing +[Fri Apr 3 19:44:26 2026] [::1]:58649 Accepted +[Fri Apr 3 19:44:26 2026] [::1]:58649 [200]: GET /js/three.core.js +[Fri Apr 3 19:44:26 2026] [::1]:58038 Accepted +[Fri Apr 3 19:44:27 2026] [::1]:58038 [200]: GET /favicon.ico +[Fri Apr 3 19:44:27 2026] [::1]:58038 Closing +[Fri Apr 3 19:44:27 2026] [::1]:58649 Closing +[Fri Apr 3 19:44:27 2026] [::1]:59586 Accepted +[Fri Apr 3 19:44:27 2026] [::1]:59586 [200]: GET /jupitersystem.php?grs_api +[Fri Apr 3 19:44:27 2026] [::1]:59586 Closing +[Fri Apr 3 19:44:27 2026] [::1]:59600 Accepted +[Fri Apr 3 19:44:27 2026] [::1]:59600 [200]: GET /images/planets/jupiter_2048.jpg +[Fri Apr 3 19:44:27 2026] [::1]:49805 Accepted +[Fri Apr 3 19:44:27 2026] [::1]:49805 [200]: GET /images/moons/io.jpg +[Fri Apr 3 19:44:27 2026] [::1]:63920 Accepted +[Fri Apr 3 19:44:27 2026] [::1]:50291 Accepted +[Fri Apr 3 19:44:27 2026] [::1]:49805 Closing +[Fri Apr 3 19:44:27 2026] [::1]:51653 Accepted +[Fri Apr 3 19:44:27 2026] [::1]:63920 [200]: GET /images/moons/europa.jpg +[Fri Apr 3 19:44:27 2026] [::1]:50291 [200]: GET /images/moons/ganymede.jpg +[Fri Apr 3 19:44:27 2026] [::1]:51653 [200]: GET /images/moons/callisto.jpg +[Fri Apr 3 19:44:27 2026] [::1]:50291 Closing +[Fri Apr 3 19:44:27 2026] [::1]:59600 Closing +[Fri Apr 3 19:44:27 2026] [::1]:51653 Closing +[Fri Apr 3 19:44:27 2026] [::1]:63920 Closing +[Fri Apr 3 19:46:27 2026] [::1]:54531 Accepted +[Fri Apr 3 19:46:27 2026] [::1]:54531 [200]: GET /images/logoAM.png +[Fri Apr 3 19:46:27 2026] [::1]:54531 Closing +[Fri Apr 3 19:46:42 2026] [::1]:54533 Accepted +[Fri Apr 3 19:46:48 2026] [::1]:54533 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:46:48 2026] [::1]:54533 Closing +[Fri Apr 3 19:47:05 2026] [::1]:51453 Accepted +[Fri Apr 3 19:47:12 2026] [::1]:51453 [200]: GET /monatsvorhersage_old.php +[Fri Apr 3 19:47:12 2026] [::1]:51453 Closing +[Fri Apr 3 19:47:12 2026] [::1]:63972 Accepted +[Fri Apr 3 19:47:12 2026] [::1]:64765 Accepted +[Fri Apr 3 19:47:12 2026] [::1]:63972 [200]: GET /css/style.css +[Fri Apr 3 19:47:12 2026] [::1]:64765 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:47:12 2026] [::1]:63972 Closing +[Fri Apr 3 19:47:12 2026] [::1]:64765 Closing +[Fri Apr 3 19:47:12 2026] [::1]:64051 Accepted +[Fri Apr 3 19:47:12 2026] [::1]:49245 Accepted +[Fri Apr 3 19:47:12 2026] [::1]:64051 [200]: GET /images/star16x16.png +[Fri Apr 3 19:47:12 2026] [::1]:49245 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:47:12 2026] [::1]:64051 Closing +[Fri Apr 3 19:47:12 2026] [::1]:49245 Closing +[Fri Apr 3 19:47:12 2026] [::1]:51600 Accepted +[Fri Apr 3 19:47:12 2026] [::1]:51600 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:47:12 2026] [::1]:51600 Closing +[Fri Apr 3 19:47:12 2026] [::1]:64846 Accepted +[Fri Apr 3 19:47:13 2026] [::1]:64846 [200]: GET /favicon.ico +[Fri Apr 3 19:47:13 2026] [::1]:64846 Closing +[Fri Apr 3 19:54:01 2026] [::1]:52168 Accepted +[Fri Apr 3 19:54:08 2026] [::1]:52168 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:54:08 2026] [::1]:52168 Closing +[Fri Apr 3 19:54:29 2026] [::1]:63821 Accepted +[Fri Apr 3 19:54:35 2026] [::1]:63821 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 19:54:35 2026] [::1]:63821 Closing +[Fri Apr 3 19:55:02 2026] [::1]:64657 Accepted +[Fri Apr 3 19:55:07 2026] [::1]:64657 [200]: GET /monatsvorhersage_old.php +[Fri Apr 3 19:55:07 2026] [::1]:64657 Closing +[Fri Apr 3 19:55:07 2026] [::1]:62611 Accepted +[Fri Apr 3 19:55:07 2026] [::1]:57039 Accepted +[Fri Apr 3 19:55:07 2026] [::1]:62611 [200]: GET /css/style.css +[Fri Apr 3 19:55:07 2026] [::1]:57039 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:55:07 2026] [::1]:62611 Closing +[Fri Apr 3 19:55:07 2026] [::1]:57039 Closing +[Fri Apr 3 19:55:07 2026] [::1]:55565 Accepted +[Fri Apr 3 19:55:07 2026] [::1]:49810 Accepted +[Fri Apr 3 19:55:07 2026] [::1]:55565 [200]: GET /images/star16x16.png +[Fri Apr 3 19:55:07 2026] [::1]:49810 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:55:07 2026] [::1]:55565 Closing +[Fri Apr 3 19:55:07 2026] [::1]:49810 Closing +[Fri Apr 3 19:55:07 2026] [::1]:51843 Accepted +[Fri Apr 3 19:55:07 2026] [::1]:51843 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:55:07 2026] [::1]:51843 Closing +[Fri Apr 3 19:55:08 2026] [::1]:64708 Accepted +[Fri Apr 3 19:55:08 2026] [::1]:64708 [200]: GET /favicon.ico +[Fri Apr 3 19:55:08 2026] [::1]:64708 Closing +[Fri Apr 3 19:56:42 2026] [::1]:60236 Accepted +[Fri Apr 3 19:56:47 2026] [::1]:60236 [200]: GET /monatsvorhersage_old.php +[Fri Apr 3 19:56:47 2026] [::1]:60236 Closing +[Fri Apr 3 19:56:47 2026] [::1]:65013 Accepted +[Fri Apr 3 19:56:47 2026] [::1]:65013 [200]: GET /css/style.css +[Fri Apr 3 19:56:47 2026] [::1]:53017 Accepted +[Fri Apr 3 19:56:47 2026] [::1]:65013 Closing +[Fri Apr 3 19:56:47 2026] [::1]:53017 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 19:56:47 2026] [::1]:53017 Closing +[Fri Apr 3 19:56:47 2026] [::1]:59924 Accepted +[Fri Apr 3 19:56:47 2026] [::1]:59924 [200]: GET /images/star16x16.png +[Fri Apr 3 19:56:47 2026] [::1]:56687 Accepted +[Fri Apr 3 19:56:47 2026] [::1]:59924 Closing +[Fri Apr 3 19:56:47 2026] [::1]:56687 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 19:56:47 2026] [::1]:56687 Closing +[Fri Apr 3 19:56:48 2026] [::1]:61438 Accepted +[Fri Apr 3 19:56:48 2026] [::1]:61438 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 19:56:48 2026] [::1]:61438 Closing +[Fri Apr 3 19:56:48 2026] [::1]:60578 Accepted +[Fri Apr 3 19:56:48 2026] [::1]:60578 [200]: GET /favicon.ico +[Fri Apr 3 19:56:48 2026] [::1]:60578 Closing +[Fri Apr 3 20:02:39 2026] [::1]:62230 Accepted +[Fri Apr 3 20:02:45 2026] [::1]:62230 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 20:02:45 2026] [::1]:62230 Closing +[Fri Apr 3 20:02:50 2026] [::1]:63167 Accepted +[Fri Apr 3 20:02:57 2026] [::1]:63167 [200]: GET /monatsvorhersage_old.php +[Fri Apr 3 20:02:57 2026] [::1]:63167 Closing +[Fri Apr 3 20:02:57 2026] [::1]:64749 Accepted +[Fri Apr 3 20:02:57 2026] [::1]:64749 [200]: GET /css/style.css +[Fri Apr 3 20:02:57 2026] [::1]:53760 Accepted +[Fri Apr 3 20:02:57 2026] [::1]:64749 Closing +[Fri Apr 3 20:02:57 2026] [::1]:53760 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 20:02:57 2026] [::1]:53760 Closing +[Fri Apr 3 20:02:57 2026] [::1]:50625 Accepted +[Fri Apr 3 20:02:57 2026] [::1]:56453 Accepted +[Fri Apr 3 20:02:57 2026] [::1]:50625 [200]: GET /images/star16x16.png +[Fri Apr 3 20:02:57 2026] [::1]:56453 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 20:02:57 2026] [::1]:50625 Closing +[Fri Apr 3 20:02:57 2026] [::1]:56453 Closing +[Fri Apr 3 20:02:57 2026] [::1]:50074 Accepted +[Fri Apr 3 20:02:57 2026] [::1]:50074 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 20:02:57 2026] [::1]:50074 Closing +[Fri Apr 3 20:02:57 2026] [::1]:59868 Accepted +[Fri Apr 3 20:02:58 2026] [::1]:59868 [200]: GET /favicon.ico +[Fri Apr 3 20:02:58 2026] [::1]:59868 Closing +[Fri Apr 3 20:02:58 2026] [::1]:52829 Accepted +[Fri Apr 3 20:02:58 2026] [::1]:52829 [200]: GET /jupitersystem.php +[Fri Apr 3 20:02:58 2026] [::1]:52829 Closing +[Fri Apr 3 20:02:58 2026] [::1]:62831 Accepted +[Fri Apr 3 20:02:58 2026] [::1]:62831 [200]: GET /css/style.css +[Fri Apr 3 20:02:58 2026] [::1]:56907 Accepted +[Fri Apr 3 20:02:58 2026] [::1]:56907 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 20:02:58 2026] [::1]:62831 Closing +[Fri Apr 3 20:02:58 2026] [::1]:56907 Closing +[Fri Apr 3 20:02:58 2026] [::1]:50191 Accepted +[Fri Apr 3 20:02:58 2026] [::1]:58317 Accepted +[Fri Apr 3 20:02:58 2026] [::1]:50191 [200]: GET /images/star16x16.png +[Fri Apr 3 20:02:58 2026] [::1]:58317 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 20:02:58 2026] [::1]:50191 Closing +[Fri Apr 3 20:02:58 2026] [::1]:58317 Closing +[Fri Apr 3 20:02:58 2026] [::1]:49612 Accepted +[Fri Apr 3 20:02:58 2026] [::1]:49612 [200]: GET /js/three.module.js +[Fri Apr 3 20:02:58 2026] [::1]:49612 Closing +[Fri Apr 3 20:02:58 2026] [::1]:57626 Accepted +[Fri Apr 3 20:02:58 2026] [::1]:51326 Accepted +[Fri Apr 3 20:02:58 2026] [::1]:51326 [200]: GET /js/three.core.js +[Fri Apr 3 20:02:59 2026] [::1]:57626 [200]: GET /favicon.ico +[Fri Apr 3 20:02:59 2026] [::1]:57626 Closing +[Fri Apr 3 20:02:59 2026] [::1]:51326 Closing +[Fri Apr 3 20:02:59 2026] [::1]:60870 Accepted +[Fri Apr 3 20:02:59 2026] [::1]:60870 [200]: GET /jupitersystem.php?grs_api +[Fri Apr 3 20:02:59 2026] [::1]:60870 Closing +[Fri Apr 3 20:02:59 2026] [::1]:51387 Accepted +[Fri Apr 3 20:02:59 2026] [::1]:50529 Accepted +[Fri Apr 3 20:02:59 2026] [::1]:62844 Accepted +[Fri Apr 3 20:02:59 2026] [::1]:51387 [200]: GET /images/planets/jupiter_2048.jpg +[Fri Apr 3 20:02:59 2026] [::1]:52071 Accepted +[Fri Apr 3 20:02:59 2026] [::1]:50529 [200]: GET /images/moons/io.jpg +[Fri Apr 3 20:02:59 2026] [::1]:62844 [200]: GET /images/moons/europa.jpg +[Fri Apr 3 20:02:59 2026] [::1]:52881 Accepted +[Fri Apr 3 20:02:59 2026] [::1]:52071 [200]: GET /images/moons/ganymede.jpg +[Fri Apr 3 20:02:59 2026] [::1]:52881 [200]: GET /images/moons/callisto.jpg +[Fri Apr 3 20:02:59 2026] [::1]:50529 Closing +[Fri Apr 3 20:02:59 2026] [::1]:52071 Closing +[Fri Apr 3 20:02:59 2026] [::1]:51387 Closing +[Fri Apr 3 20:03:00 2026] [::1]:62844 Closing +[Fri Apr 3 20:03:00 2026] [::1]:52881 Closing +[Fri Apr 3 20:08:07 2026] [::1]:53517 Accepted +[Fri Apr 3 20:08:13 2026] [::1]:53517 [200]: GET /monatsvorhersage_old.php?year=2026&month=4 +[Fri Apr 3 20:08:13 2026] [::1]:53517 Closing +[Fri Apr 3 20:08:45 2026] [::1]:57076 Accepted +[Fri Apr 3 20:08:51 2026] [::1]:57076 [200]: GET /monatsvorhersage_old.php +[Fri Apr 3 20:08:51 2026] [::1]:57076 Closing +[Fri Apr 3 20:08:51 2026] [::1]:49850 Accepted +[Fri Apr 3 20:08:51 2026] [::1]:49850 [200]: GET /css/style.css +[Fri Apr 3 20:08:51 2026] [::1]:49850 Closing +[Fri Apr 3 20:08:51 2026] [::1]:58903 Accepted +[Fri Apr 3 20:08:51 2026] [::1]:58903 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 20:08:51 2026] [::1]:58903 Closing +[Fri Apr 3 20:08:51 2026] [::1]:63669 Accepted +[Fri Apr 3 20:08:51 2026] [::1]:62908 Accepted +[Fri Apr 3 20:08:51 2026] [::1]:63669 [200]: GET /images/star16x16.png +[Fri Apr 3 20:08:51 2026] [::1]:62908 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 20:08:51 2026] [::1]:63669 Closing +[Fri Apr 3 20:08:51 2026] [::1]:62908 Closing +[Fri Apr 3 20:08:51 2026] [::1]:63413 Accepted +[Fri Apr 3 20:08:51 2026] [::1]:63413 [200]: GET /images/moons/moon4geocron.png +[Fri Apr 3 20:08:51 2026] [::1]:63413 Closing +[Fri Apr 3 20:08:51 2026] [::1]:62755 Accepted +[Fri Apr 3 20:08:52 2026] [::1]:62755 [200]: GET /favicon.ico +[Fri Apr 3 20:08:52 2026] [::1]:62755 Closing diff --git a/public/monatsvorhersage_old.php b/public/monatsvorhersage_old.php index 659d336..927dc6c 100644 --- a/public/monatsvorhersage_old.php +++ b/public/monatsvorhersage_old.php @@ -17,8 +17,26 @@ $starLabelMagnitudeLimit = 2.0; $messierDatabaseMagnitudeLimit = 4.0; $messierDisplayMagnitudeLimit = 1.0; $moonPlanetMaxSeparationDeg = 1.5; +$moonDeepSkyMaxSeparationDeg = 1.0; $planetConjunctionMaxSeparationDeg = 1.0; $moonOccultationMaxMag = 2.0; +// Gute Merkur-Sichtbarkeit wird nicht nur über Elongation, sondern über echte +// Beobachtbarkeit am Himmel definiert: Wir prüfen pro Tag zu einem festen +// Zeitpunkt relativ zu Sonnenauf- oder -untergang, ob Merkur hoch genug steht +// und die Sonne bereits tief genug unter dem Horizont ist. +$mercuryGoodVisibilitySampleOffsetMinutes = 45; +// Morgens: so viele Minuten VOR Sonnenaufgang prüfen. +// Abends: so viele Minuten NACH Sonnenuntergang prüfen. +$mercuryGoodVisibilityMinAltitudeDeg = 7.0; +// Merkur muss bei diesem Prüfzeitpunkt mindestens so hoch über dem Horizont +// stehen, damit wir die Sichtbarkeit als "gut" einstufen. +$mercuryGoodVisibilityMaxSunAltitudeDeg = -3.0; +// Die Sonne muss gleichzeitig mindestens 4 Grad unter dem Horizont stehen. +// So vermeiden wir Treffer, bei denen Merkur zwar formal da ist, aber noch zu +// stark in der hellen Dämmerung untergeht. +$mercuryGoodVisibilityMinConsecutiveDays = 3; +// Einzelne gute Tage sind oft zu zufällig. Erst ab dieser Anzahl +// aufeinanderfolgender Tage erzeugen wir ein Monatsereignis. $years = range($currentYear - 2, $currentYear + 5); $months = [ @@ -59,6 +77,8 @@ $moonData = null; $moonPhaseEvents = []; $goldenHandleEvents = []; $moonPlanetApproaches = []; +$moonDeepSkyApproaches = []; +$mercuryGoodVisibilityEvents = []; $planetConjunctions = []; $eclipseEvents = []; $moonApsisEvents = []; @@ -655,6 +675,27 @@ if (is_array($moonPlanetDecoded) && ($moonPlanetDecoded['ok'] ?? false)) { $moonPlanetApproaches = is_array($moonPlanetDecoded['approaches'] ?? null) ? $moonPlanetDecoded['approaches'] : []; } +$moonDeepSkyOutput = []; +$moonDeepSkyExitCode = 0; +$moonDeepSkyArgs = [ + $pythonScriptPath, + 'moon_deep_sky_approaches_for_month', + (string) $chartLatitude, + (string) $chartLongitude, + (string) $chartElevation, + (string) $selectedYear, + (string) $selectedMonth, + $chartTimezone, + (string) $moonDeepSkyMaxSeparationDeg, +]; +$moonDeepSkyCommand = $pythonExecutable . ' ' . implode(' ', array_map('escapeshellarg', $moonDeepSkyArgs)) . ' 2>&1'; +exec($moonDeepSkyCommand, $moonDeepSkyOutput, $moonDeepSkyExitCode); +$moonDeepSkyRaw = trim(implode("\n", $moonDeepSkyOutput)); +$moonDeepSkyDecoded = json_decode($moonDeepSkyRaw, true); +if (is_array($moonDeepSkyDecoded) && ($moonDeepSkyDecoded['ok'] ?? false)) { + $moonDeepSkyApproaches = is_array($moonDeepSkyDecoded['approaches'] ?? null) ? $moonDeepSkyDecoded['approaches'] : []; +} + $planetConjunctionOutput = []; $planetConjunctionExitCode = 0; $planetConjunctionArgs = [ @@ -676,6 +717,30 @@ if (is_array($planetConjunctionDecoded) && ($planetConjunctionDecoded['ok'] ?? f $planetConjunctions = is_array($planetConjunctionDecoded['conjunctions'] ?? null) ? $planetConjunctionDecoded['conjunctions'] : []; } +$mercuryGoodVisibilityOutput = []; +$mercuryGoodVisibilityExitCode = 0; +$mercuryGoodVisibilityArgs = [ + $pythonScriptPath, + 'mercury_good_visibility_for_month', + (string) $chartLatitude, + (string) $chartLongitude, + (string) $chartElevation, + (string) $selectedYear, + (string) $selectedMonth, + $chartTimezone, + (string) $mercuryGoodVisibilitySampleOffsetMinutes, + (string) $mercuryGoodVisibilityMinAltitudeDeg, + (string) $mercuryGoodVisibilityMaxSunAltitudeDeg, + (string) $mercuryGoodVisibilityMinConsecutiveDays, +]; +$mercuryGoodVisibilityCommand = $pythonExecutable . ' ' . implode(' ', array_map('escapeshellarg', $mercuryGoodVisibilityArgs)) . ' 2>&1'; +exec($mercuryGoodVisibilityCommand, $mercuryGoodVisibilityOutput, $mercuryGoodVisibilityExitCode); +$mercuryGoodVisibilityRaw = trim(implode("\n", $mercuryGoodVisibilityOutput)); +$mercuryGoodVisibilityDecoded = json_decode($mercuryGoodVisibilityRaw, true); +if (is_array($mercuryGoodVisibilityDecoded) && ($mercuryGoodVisibilityDecoded['ok'] ?? false)) { + $mercuryGoodVisibilityEvents = is_array($mercuryGoodVisibilityDecoded['events'] ?? null) ? $mercuryGoodVisibilityDecoded['events'] : []; +} + $moonOccultationStars = []; try { if (isset($pdo)) { @@ -986,6 +1051,24 @@ foreach ($moonPlanetApproaches as $approachEvent) { ]; } +foreach ($moonDeepSkyApproaches as $approachEvent) { + if (!is_array($approachEvent)) { + continue; + } + + $distanceText = isset($approachEvent['separation_deg']) + ? number_format((float) ($approachEvent['separation_deg']), 2, ',', '') . ' Grad' + : ''; + + $monthEventList[] = [ + 'event' => trim((string) ($approachEvent['label'] ?? 'Mond nahe Sternhaufen') . ($distanceText !== '' ? ' (' . $distanceText . ')' : '')), + 'date' => (string) ($approachEvent['local_date'] ?? ''), + 'time' => (string) ($approachEvent['local_time'] ?? ''), + 'local_iso' => (string) ($approachEvent['local_iso'] ?? ''), + 'type' => 'moon_deep_sky', + ]; +} + foreach ($planetConjunctions as $conjunctionEvent) { if (!is_array($conjunctionEvent)) { continue; @@ -1004,6 +1087,20 @@ foreach ($planetConjunctions as $conjunctionEvent) { ]; } +foreach ($mercuryGoodVisibilityEvents as $visibilityEvent) { + if (!is_array($visibilityEvent)) { + continue; + } + + $monthEventList[] = [ + 'event' => (string) ($visibilityEvent['label'] ?? 'Gute Merkur-Sichtbarkeit'), + 'date' => (string) ($visibilityEvent['local_date'] ?? ''), + 'time' => (string) ($visibilityEvent['local_time'] ?? ''), + 'local_iso' => (string) ($visibilityEvent['local_iso'] ?? ''), + 'type' => 'mercury_good_visibility', + ]; +} + foreach ($moonOccultations as $occultationEvent) { if (!is_array($occultationEvent)) { continue; diff --git a/public/py/__pycache__/api.cpython-312.pyc b/public/py/__pycache__/api.cpython-312.pyc index 8ccc3cd..f132f92 100644 Binary files a/public/py/__pycache__/api.cpython-312.pyc and b/public/py/__pycache__/api.cpython-312.pyc differ diff --git a/public/py/api.py b/public/py/api.py index 875adf2..265c9ba 100644 --- a/public/py/api.py +++ b/public/py/api.py @@ -262,6 +262,17 @@ def action_planet_rise_set(args: list[str]) -> dict: } +def body_altitude_deg( + body: astronomy.Body, + observer: astronomy.Observer, + dt_utc: datetime, +) -> float: + time_value = dt_to_time(dt_utc) + eq = astronomy.Equator(body, time_value, observer, True, True) + hor = astronomy.Horizon(time_value, observer, eq.ra, eq.dec, astronomy.Refraction.Normal) + return float(hor.altitude) + + def serialize_body_position( key: str, label: str, @@ -293,6 +304,148 @@ def serialize_body_position( return payload +def action_mercury_good_visibility_for_month(args: list[str]) -> dict: + if len(args) != 10: + fail( + "Aktion mercury_good_visibility_for_month erwartet 10 Argumente: latitude longitude elevation year month timezone sample_offset_minutes min_mercury_alt_deg max_sun_alt_deg min_consecutive_days", + extra={"argv": args}, + ) + + latitude = parse_float(args[0], "Latitude") + longitude = parse_float(args[1], "Longitude") + elevation = parse_float(args[2], "Elevation") + + try: + year = int(args[3]) + month = int(args[4]) + sample_offset_minutes = int(args[6]) + min_consecutive_days = int(args[9]) + except ValueError as exc: + fail("Jahr, Monat oder Sichtbarkeitsparameter sind ungueltig.", extra={"details": str(exc), "argv": args}) + + if month < 1 or month > 12: + fail("Monat muss zwischen 1 und 12 liegen.", extra={"month": month}) + + timezone_name = args[5] + min_mercury_alt_deg = parse_float(args[7], "Minimale Merkurhoehe") + max_sun_alt_deg = parse_float(args[8], "Maximale Sonnenhoehe") + + try: + tz = ZoneInfo(timezone_name) + except Exception as exc: + fail("Zeitzone ist ungueltig oder auf dem Server nicht verfuegbar.", extra={"details": str(exc)}) + + observer = astronomy.Observer(latitude, longitude, elevation) + local_start = datetime(year, month, 1, 0, 0, 0, tzinfo=tz) + if month == 12: + local_end = datetime(year + 1, 1, 1, 0, 0, 0, tzinfo=tz) + else: + local_end = datetime(year, month + 1, 1, 0, 0, 0, tzinfo=tz) + + daily_checks: list[dict] = [] + current_local = local_start + while current_local < local_end: + day_start_utc = current_local.astimezone(timezone.utc) + next_day_utc = (current_local + timedelta(days=1)).astimezone(timezone.utc) + start_time = dt_to_time(day_start_utc) + + sunrise = search_event(astronomy.Body.Sun, astronomy.Direction.Rise, observer, start_time, next_day_utc) + sunset = search_event(astronomy.Body.Sun, astronomy.Direction.Set, observer, start_time, next_day_utc) + + morning_ok = False + morning_dt_local = None + morning_mercury_alt = None + morning_sun_alt = None + if sunrise is not None: + sunrise_local = time_to_datetime(sunrise).astimezone(tz) + morning_dt_local = sunrise_local - timedelta(minutes=sample_offset_minutes) + morning_dt_utc = morning_dt_local.astimezone(timezone.utc) + morning_mercury_alt = body_altitude_deg(astronomy.Body.Mercury, observer, morning_dt_utc) + morning_sun_alt = body_altitude_deg(astronomy.Body.Sun, observer, morning_dt_utc) + morning_ok = morning_mercury_alt >= min_mercury_alt_deg and morning_sun_alt <= max_sun_alt_deg + + evening_ok = False + evening_dt_local = None + evening_mercury_alt = None + evening_sun_alt = None + if sunset is not None: + sunset_local = time_to_datetime(sunset).astimezone(tz) + evening_dt_local = sunset_local + timedelta(minutes=sample_offset_minutes) + evening_dt_utc = evening_dt_local.astimezone(timezone.utc) + evening_mercury_alt = body_altitude_deg(astronomy.Body.Mercury, observer, evening_dt_utc) + evening_sun_alt = body_altitude_deg(astronomy.Body.Sun, observer, evening_dt_utc) + evening_ok = evening_mercury_alt >= min_mercury_alt_deg and evening_sun_alt <= max_sun_alt_deg + + daily_checks.append({ + "date": current_local.strftime("%d.%m.%Y"), + "morning_ok": morning_ok, + "morning_local": morning_dt_local, + "morning_mercury_alt_deg": morning_mercury_alt, + "morning_sun_alt_deg": morning_sun_alt, + "evening_ok": evening_ok, + "evening_local": evening_dt_local, + "evening_mercury_alt_deg": evening_mercury_alt, + "evening_sun_alt_deg": evening_sun_alt, + }) + + current_local += timedelta(days=1) + + def build_windows(period_key: str, label_text: str) -> list[dict]: + events = [] + start_index = None + + for index, day in enumerate(daily_checks): + is_ok = bool(day[f"{period_key}_ok"]) + if is_ok and start_index is None: + start_index = index + is_last = index == len(daily_checks) - 1 + if start_index is not None and (not is_ok or is_last): + end_index = index if (is_ok and is_last) else index - 1 + duration_days = end_index - start_index + 1 + if duration_days >= min_consecutive_days: + start_day = daily_checks[start_index] + end_day = daily_checks[end_index] + start_local = start_day[f"{period_key}_local"] + if start_local is not None: + range_text = ( + start_day["date"] + if start_index == end_index + else f'{start_day["date"]} bis {end_day["date"]}' + ) + events.append({ + "period": period_key, + "label": f"Gute Merkur-Sichtbarkeit am {label_text} ({range_text})", + "utc_iso": start_local.astimezone(timezone.utc).isoformat().replace("+00:00", "Z"), + "local_iso": start_local.isoformat(), + "local_date": start_local.strftime("%d.%m.%Y"), + "local_time": start_local.strftime("%H:%M"), + "end_local_date": end_day["date"], + "duration_days": duration_days, + }) + start_index = None + + return events + + events = build_windows("morning", "Morgen") + events.extend(build_windows("evening", "Abend")) + events.sort(key=lambda item: item["local_iso"]) + + return { + "ok": True, + "action": "mercury_good_visibility_for_month", + "selected": { + "year": year, + "month": month, + "timezone": timezone_name, + "sample_offset_minutes": sample_offset_minutes, + "min_mercury_alt_deg": min_mercury_alt_deg, + "max_sun_alt_deg": max_sun_alt_deg, + "min_consecutive_days": min_consecutive_days, + }, + "events": events, + } + + def action_month_sky_context(args: list[str]) -> dict: if len(args) != 8: fail( @@ -774,6 +927,17 @@ def moon_planet_separation_deg( return spherical_separation_deg(float(moon_eq.ra), float(moon_eq.dec), float(body_eq.ra), float(body_eq.dec)) +def moon_fixed_equatorial_separation_deg( + ra_hours: float, + dec_deg: float, + observer: astronomy.Observer, + dt_utc: datetime, +) -> float: + time_value = dt_to_time(dt_utc) + moon_eq = astronomy.Equator(astronomy.Body.Moon, time_value, observer, True, True) + return spherical_separation_deg(float(moon_eq.ra), float(moon_eq.dec), float(ra_hours), float(dec_deg)) + + def planet_pair_separation_deg( body_a: astronomy.Body, body_b: astronomy.Body, @@ -835,6 +999,31 @@ def refine_planet_pair_minimum_separation( return best, planet_pair_separation_deg(body_a, body_b, observer, best) +def refine_fixed_target_minimum_separation( + ra_hours: float, + dec_deg: float, + observer: astronomy.Observer, + left_utc: datetime, + right_utc: datetime, +) -> tuple[datetime, float]: + left = left_utc + right = right_utc + + for _ in range(32): + span = (right - left) / 3 + m1 = left + span + m2 = right - span + f1 = moon_fixed_equatorial_separation_deg(ra_hours, dec_deg, observer, m1) + f2 = moon_fixed_equatorial_separation_deg(ra_hours, dec_deg, observer, m2) + if f1 <= f2: + right = m2 + else: + left = m1 + + best = left + (right - left) / 2 + return best, moon_fixed_equatorial_separation_deg(ra_hours, dec_deg, observer, best) + + def action_moon_planet_approaches(args: list[str]) -> dict: if len(args) != 7: fail( @@ -946,6 +1135,112 @@ def action_moon_planet_approaches(args: list[str]) -> dict: } +def action_moon_deep_sky_approaches_for_month(args: list[str]) -> dict: + if len(args) != 7: + fail( + "Aktion moon_deep_sky_approaches_for_month erwartet 7 Argumente: latitude longitude elevation year month timezone max_sep_deg", + extra={"argv": args}, + ) + + latitude = parse_float(args[0], "Latitude") + longitude = parse_float(args[1], "Longitude") + elevation = parse_float(args[2], "Elevation") + + try: + year = int(args[3]) + month = int(args[4]) + except ValueError as exc: + fail("Jahr oder Monat sind ungueltig.", extra={"details": str(exc), "argv": args}) + + if month < 1 or month > 12: + fail("Monat muss zwischen 1 und 12 liegen.", extra={"month": month}) + + timezone_name = args[5] + max_sep_deg = parse_float(args[6], "Maximalabstand") + + try: + tz = ZoneInfo(timezone_name) + except Exception as exc: + fail("Zeitzone ist ungueltig oder auf dem Server nicht verfuegbar.", extra={"details": str(exc)}) + + observer = astronomy.Observer(latitude, longitude, elevation) + local_start = datetime(year, month, 1, 0, 0, 0, tzinfo=tz) + if month == 12: + local_end = datetime(year + 1, 1, 1, 0, 0, 0, tzinfo=tz) + else: + local_end = datetime(year, month + 1, 1, 0, 0, 0, tzinfo=tz) + + utc_start = local_start.astimezone(timezone.utc) + utc_end = local_end.astimezone(timezone.utc) + scan_step = timedelta(hours=1) + coarse_threshold = max_sep_deg + 1.0 + + target_defs = [ + ("pleiades", "Plejaden", 3.7833, 24.1167), + ("praesepe", "Praesepe", 8.6667, 19.9833), + ] + + approaches = [] + for key, label, ra_hours, dec_deg in target_defs: + samples: list[tuple[datetime, float]] = [] + current = utc_start + while current <= utc_end: + samples.append((current, moon_fixed_equatorial_separation_deg(ra_hours, dec_deg, observer, current))) + current += scan_step + if samples[-1][0] < utc_end: + samples.append((utc_end, moon_fixed_equatorial_separation_deg(ra_hours, dec_deg, observer, utc_end))) + + seen_ranges: list[tuple[datetime, datetime]] = [] + for index in range(1, len(samples) - 1): + curr_t, curr_sep = samples[index] + prev_sep = samples[index - 1][1] + next_sep = samples[index + 1][1] + + if curr_sep > coarse_threshold: + continue + if curr_sep > prev_sep or curr_sep > next_sep: + continue + + left = max(utc_start, curr_t - scan_step) + right = min(utc_end, curr_t + scan_step) + + if any(not (right <= seen_left or left >= seen_right) for seen_left, seen_right in seen_ranges): + continue + + min_time_utc, min_sep = refine_fixed_target_minimum_separation(ra_hours, dec_deg, observer, left, right) + local_dt = min_time_utc.astimezone(tz) + if local_dt.year != year or local_dt.month != month: + continue + if min_sep > max_sep_deg: + continue + + seen_ranges.append((left, right)) + approaches.append({ + "target_key": key, + "target_label": label, + "label": f"Mond nahe {label}", + "separation_deg": float(min_sep), + "utc_iso": min_time_utc.isoformat().replace("+00:00", "Z"), + "local_iso": local_dt.isoformat(), + "local_date": local_dt.strftime("%d.%m.%Y"), + "local_time": local_dt.strftime("%H:%M"), + }) + + approaches.sort(key=lambda item: item["local_iso"]) + + return { + "ok": True, + "action": "moon_deep_sky_approaches_for_month", + "selected": { + "year": year, + "month": month, + "timezone": timezone_name, + "max_separation_deg": max_sep_deg, + }, + "approaches": approaches, + } + + def action_planet_conjunctions_for_month(args: list[str]) -> dict: if len(args) != 7: fail( @@ -3135,7 +3430,7 @@ def action_satellite_passes(args: list[str]) -> dict: def main() -> None: if len(sys.argv) < 2: - fail("Es wurde keine Aktion uebergeben.", extra={"available_actions": ["sun_moon_rise_set", "moon_star_occultations", "moon_phase_details", "satellite_passes", "planet_rise_set", "month_sky_context", "moon_phases_for_month", "golden_handle_for_month", "season_changes_for_month", "time_changes_for_month", "moon_planet_approaches", "planet_conjunctions_for_month", "eclipses_for_month", "moon_apsides_for_month", "sun_apsides_for_month", "inner_planet_elongations_for_month", "venus_peak_magnitude_for_month", "outer_planet_events_for_month", "outer_planet_stations_for_month", "jupiter_moons_one_side_for_month", "moon_star_occultations_for_month"]}) + fail("Es wurde keine Aktion uebergeben.", extra={"available_actions": ["sun_moon_rise_set", "moon_star_occultations", "moon_phase_details", "satellite_passes", "planet_rise_set", "month_sky_context", "moon_phases_for_month", "golden_handle_for_month", "season_changes_for_month", "time_changes_for_month", "moon_planet_approaches", "moon_deep_sky_approaches_for_month", "planet_conjunctions_for_month", "eclipses_for_month", "moon_apsides_for_month", "sun_apsides_for_month", "inner_planet_elongations_for_month", "venus_peak_magnitude_for_month", "outer_planet_events_for_month", "outer_planet_stations_for_month", "jupiter_moons_one_side_for_month", "mercury_good_visibility_for_month", "moon_star_occultations_for_month"]}) action = sys.argv[1] args = sys.argv[2:] @@ -3195,6 +3490,11 @@ def main() -> None: print(json.dumps(result, ensure_ascii=False)) return + if action == "moon_deep_sky_approaches_for_month": + result = action_moon_deep_sky_approaches_for_month(args) + print(json.dumps(result, ensure_ascii=False)) + return + if action == "planet_conjunctions_for_month": result = action_planet_conjunctions_for_month(args) print(json.dumps(result, ensure_ascii=False)) @@ -3240,12 +3540,17 @@ def main() -> None: print(json.dumps(result, ensure_ascii=False)) return + if action == "mercury_good_visibility_for_month": + result = action_mercury_good_visibility_for_month(args) + print(json.dumps(result, ensure_ascii=False)) + return + if action == "moon_star_occultations_for_month": result = action_moon_star_occultations_for_month(args) print(json.dumps(result, ensure_ascii=False)) return - fail("Unbekannte Aktion.", extra={"action": action, "available_actions": ["sun_moon_rise_set", "moon_star_occultations", "moon_phase_details", "satellite_passes", "planet_rise_set", "month_sky_context", "moon_phases_for_month", "golden_handle_for_month", "season_changes_for_month", "time_changes_for_month", "moon_planet_approaches", "planet_conjunctions_for_month", "eclipses_for_month", "moon_apsides_for_month", "sun_apsides_for_month", "inner_planet_elongations_for_month", "venus_peak_magnitude_for_month", "outer_planet_events_for_month", "outer_planet_stations_for_month", "jupiter_moons_one_side_for_month", "moon_star_occultations_for_month"]}) + fail("Unbekannte Aktion.", extra={"action": action, "available_actions": ["sun_moon_rise_set", "moon_star_occultations", "moon_phase_details", "satellite_passes", "planet_rise_set", "month_sky_context", "moon_phases_for_month", "golden_handle_for_month", "season_changes_for_month", "time_changes_for_month", "moon_planet_approaches", "moon_deep_sky_approaches_for_month", "planet_conjunctions_for_month", "eclipses_for_month", "moon_apsides_for_month", "sun_apsides_for_month", "inner_planet_elongations_for_month", "venus_peak_magnitude_for_month", "outer_planet_events_for_month", "outer_planet_stations_for_month", "jupiter_moons_one_side_for_month", "mercury_good_visibility_for_month", "moon_star_occultations_for_month"]}) if __name__ == "__main__": diff --git a/todo.md b/todo.md index dbee541..14b9d88 100644 --- a/todo.md +++ b/todo.md @@ -2,11 +2,8 @@ - Besonders enge Mond-Stern-Begegnungen heller Sterne ergaenzen, auch ohne Bedeckung - Helle Stern-/Planeten-Begegnungen aufnehmen, z. B. Venus nahe Regulus oder Mars nahe Spica -- Mond nahe Plejaden und Mond nahe Praesepe als eigene Ereignisse pruefen - Auffaellige Planeten-Sichtbarkeit redaktionell ausgeben, z. B. Morgenstern/Abendstern, ganze Nacht sichtbar -- Gute Merkur-Sichtbarkeit ausgeben, nicht nur groesste Elongation -- Supermond / Minimon d als populaere Monatsereignisse pruefen +- Supermond / Minimond als populaere Monatsereignisse pruefen - Sichtbare ISS-Ueberfluege fuer den Standort ergaenzen -- Zodiacallicht als saisonalen Beobachtungshinweis pruefen - Sehr dunkle Naechte um Neumond / Milchstrassen-Beobachtungsfenster als Hinweis pruefen - Hesiodusstrahl als eigenes Mondlichtphaenomen fuer die Monatsvorschau ergaenzen