From 3574fb99c789cd0eeef4b034aaa9c4276d405b8d Mon Sep 17 00:00:00 2001 From: Eskimue Date: Fri, 3 Apr 2026 15:41:16 +0200 Subject: [PATCH] Bugfixes --- .codex-temp/php-server.err.log | 48 +++++++++++++++++++ public/monatsvorhersage_old.php | 36 +++++++++++++++ public/py/api.py | 81 +++++++++++++++++++++++++++++++-- 3 files changed, 161 insertions(+), 4 deletions(-) diff --git a/.codex-temp/php-server.err.log b/.codex-temp/php-server.err.log index d677643..a469590 100644 --- a/.codex-temp/php-server.err.log +++ b/.codex-temp/php-server.err.log @@ -650,3 +650,51 @@ Stack trace: [Fri Apr 3 14:51:41 2026] 127.0.0.1:57770 Accepted [Fri Apr 3 14:51:43 2026] 127.0.0.1:57770 [200]: GET /favicon.ico [Fri Apr 3 14:51:43 2026] 127.0.0.1:57770 Closing +[Fri Apr 3 15:00:25 2026] 127.0.0.1:60825 Accepted +[Fri Apr 3 15:00:42 2026] 127.0.0.1:60825 [200]: GET /monatsvorhersage_old.php?year=2026&month=2 +[Fri Apr 3 15:00:42 2026] 127.0.0.1:60825 Closing +[Fri Apr 3 15:00:42 2026] 127.0.0.1:60826 Accepted +[Fri Apr 3 15:01:00 2026] 127.0.0.1:60826 [200]: GET /monatsvorhersage_old.php?year=2026&month=2 +[Fri Apr 3 15:01:00 2026] 127.0.0.1:60826 Closing +[Fri Apr 3 15:01:56 2026] 127.0.0.1:55313 Accepted +[Fri Apr 3 15:02:12 2026] 127.0.0.1:55313 [200]: GET /monatsvorhersage_old.php?year=2026&month=2 +[Fri Apr 3 15:02:12 2026] 127.0.0.1:55313 Closing +[Fri Apr 3 15:02:19 2026] 127.0.0.1:55315 Accepted +[Fri Apr 3 15:02:35 2026] 127.0.0.1:55315 [200]: GET /monatsvorhersage_old.php?year=2026&month=2 +[Fri Apr 3 15:02:35 2026] 127.0.0.1:55315 Closing +[Fri Apr 3 15:02:58 2026] 127.0.0.1:55070 Accepted +[Fri Apr 3 15:03:14 2026] 127.0.0.1:55070 [200]: GET /monatsvorhersage_old.php?year=2026&month=1 +[Fri Apr 3 15:03:14 2026] 127.0.0.1:55070 Closing +[Fri Apr 3 15:03:14 2026] 127.0.0.1:53989 Accepted +[Fri Apr 3 15:03:14 2026] 127.0.0.1:53989 [200]: GET /css/style.css +[Fri Apr 3 15:03:14 2026] 127.0.0.1:53989 Closing +[Fri Apr 3 15:03:14 2026] 127.0.0.1:57256 Accepted +[Fri Apr 3 15:03:14 2026] 127.0.0.1:57256 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 15:03:14 2026] 127.0.0.1:57256 Closing +[Fri Apr 3 15:03:14 2026] 127.0.0.1:51498 Accepted +[Fri Apr 3 15:03:14 2026] 127.0.0.1:52205 Accepted +[Fri Apr 3 15:03:14 2026] 127.0.0.1:51498 [200]: GET /images/star16x16.png +[Fri Apr 3 15:03:14 2026] 127.0.0.1:52205 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 15:03:14 2026] 127.0.0.1:51498 Closing +[Fri Apr 3 15:03:14 2026] 127.0.0.1:52205 Closing +[Fri Apr 3 15:03:14 2026] 127.0.0.1:54954 Accepted +[Fri Apr 3 15:03:15 2026] 127.0.0.1:54954 [200]: GET /favicon.ico +[Fri Apr 3 15:03:15 2026] 127.0.0.1:54954 Closing +[Fri Apr 3 15:04:09 2026] 127.0.0.1:63267 Accepted +[Fri Apr 3 15:04:24 2026] 127.0.0.1:63267 [200]: GET /monatsvorhersage_old.php?year=2026&month=2 +[Fri Apr 3 15:04:24 2026] 127.0.0.1:63267 Closing +[Fri Apr 3 15:04:24 2026] 127.0.0.1:54402 Accepted +[Fri Apr 3 15:04:24 2026] 127.0.0.1:54402 [200]: GET /css/style.css +[Fri Apr 3 15:04:24 2026] 127.0.0.1:54402 Closing +[Fri Apr 3 15:04:24 2026] 127.0.0.1:61692 Accepted +[Fri Apr 3 15:04:24 2026] 127.0.0.1:61692 [200]: GET /js/astronomy.browser.min.js +[Fri Apr 3 15:04:24 2026] 127.0.0.1:61692 Closing +[Fri Apr 3 15:04:24 2026] 127.0.0.1:64364 Accepted +[Fri Apr 3 15:04:24 2026] 127.0.0.1:64364 [200]: GET /images/star16x16.png +[Fri Apr 3 15:04:24 2026] 127.0.0.1:64854 Accepted +[Fri Apr 3 15:04:24 2026] 127.0.0.1:64854 [200]: GET /images/star16x16_rays.png +[Fri Apr 3 15:04:24 2026] 127.0.0.1:64364 Closing +[Fri Apr 3 15:04:24 2026] 127.0.0.1:64854 Closing +[Fri Apr 3 15:04:24 2026] 127.0.0.1:64920 Accepted +[Fri Apr 3 15:04:26 2026] 127.0.0.1:64920 [200]: GET /favicon.ico +[Fri Apr 3 15:04:26 2026] 127.0.0.1:64920 Closing diff --git a/public/monatsvorhersage_old.php b/public/monatsvorhersage_old.php index 9eec81e..b233abe 100644 --- a/public/monatsvorhersage_old.php +++ b/public/monatsvorhersage_old.php @@ -63,6 +63,7 @@ $eclipseEvents = []; $moonApsisEvents = []; $sunApsisEvents = []; $innerPlanetElongationEvents = []; +$venusPeakMagnitudeEvents = []; $outerPlanetEvents = []; $outerPlanetStationEvents = []; $moonOccultations = []; @@ -424,6 +425,23 @@ if (is_array($elongationDecoded) && ($elongationDecoded['ok'] ?? false)) { $innerPlanetElongationEvents = is_array($elongationDecoded['events'] ?? null) ? $elongationDecoded['events'] : []; } +$venusPeakMagnitudeOutput = []; +$venusPeakMagnitudeExitCode = 0; +$venusPeakMagnitudeArgs = [ + $pythonScriptPath, + 'venus_peak_magnitude_for_month', + (string) $selectedYear, + (string) $selectedMonth, + $chartTimezone, +]; +$venusPeakMagnitudeCommand = $pythonExecutable . ' ' . implode(' ', array_map('escapeshellarg', $venusPeakMagnitudeArgs)) . ' 2>&1'; +exec($venusPeakMagnitudeCommand, $venusPeakMagnitudeOutput, $venusPeakMagnitudeExitCode); +$venusPeakMagnitudeRaw = trim(implode("\n", $venusPeakMagnitudeOutput)); +$venusPeakMagnitudeDecoded = json_decode($venusPeakMagnitudeRaw, true); +if (is_array($venusPeakMagnitudeDecoded) && ($venusPeakMagnitudeDecoded['ok'] ?? false)) { + $venusPeakMagnitudeEvents = is_array($venusPeakMagnitudeDecoded['events'] ?? null) ? $venusPeakMagnitudeDecoded['events'] : []; +} + $outerPlanetOutput = []; $outerPlanetExitCode = 0; $outerPlanetArgs = [ @@ -676,6 +694,24 @@ foreach ($innerPlanetElongationEvents as $elongationEvent) { ]; } +foreach ($venusPeakMagnitudeEvents as $venusPeakMagnitudeEvent) { + if (!is_array($venusPeakMagnitudeEvent)) { + continue; + } + + $magnitudeText = isset($venusPeakMagnitudeEvent['mag']) + ? number_format((float) $venusPeakMagnitudeEvent['mag'], 1, ',', '') . ' mag' + : ''; + + $monthEventList[] = [ + 'event' => trim('Venus in groesster Helligkeit' . ($magnitudeText !== '' ? ' (' . $magnitudeText . ')' : '')), + 'date' => (string) ($venusPeakMagnitudeEvent['local_date'] ?? ''), + 'time' => (string) ($venusPeakMagnitudeEvent['local_time'] ?? ''), + 'local_iso' => (string) ($venusPeakMagnitudeEvent['local_iso'] ?? ''), + 'type' => 'venus_peak_magnitude', + ]; +} + foreach ($outerPlanetEvents as $outerPlanetEvent) { if (!is_array($outerPlanetEvent)) { continue; diff --git a/public/py/api.py b/public/py/api.py index 4e00831..d4acfb6 100644 --- a/public/py/api.py +++ b/public/py/api.py @@ -750,8 +750,6 @@ def action_planet_conjunctions_for_month(args: list[str]) -> dict: coarse_threshold = max_sep_deg + 1.0 planet_defs = [ - ("Merkur", astronomy.Body.Mercury, "mercury"), - ("Venus", astronomy.Body.Venus, "venus"), ("Mars", astronomy.Body.Mars, "mars"), ("Jupiter", astronomy.Body.Jupiter, "jupiter"), ("Saturn", astronomy.Body.Saturn, "saturn"), @@ -1230,6 +1228,74 @@ def action_inner_planet_elongations_for_month(args: list[str]) -> dict: } +def action_venus_peak_magnitude_for_month(args: list[str]) -> dict: + if len(args) != 3: + fail( + "Aktion venus_peak_magnitude_for_month erwartet 3 Argumente: year month timezone", + extra={"argv": args}, + ) + + try: + year = int(args[0]) + month = int(args[1]) + 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[2] + try: + tz = ZoneInfo(timezone_name) + except Exception as exc: + fail("Zeitzone ist ungueltig oder auf dem Server nicht verfuegbar.", extra={"details": str(exc)}) + + 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) + scan_start = dt_to_time(utc_start - timedelta(days=80)) + + events: list[dict] = [] + event = astronomy.SearchPeakMagnitude(astronomy.Body.Venus, scan_start) + while event is not None: + dt_utc = time_to_datetime(event.time) + local_dt = dt_utc.astimezone(tz) + if local_dt >= local_end: + break + + if local_dt >= local_start: + events.append({ + "planet_key": "venus", + "planet_label": "Venus", + "kind": "peak_magnitude", + "label": "Venus in groesster Helligkeit", + "mag": float(event.mag), + "utc_iso": dt_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"), + }) + + event = astronomy.SearchPeakMagnitude(astronomy.Body.Venus, event.time.AddDays(30.0)) + + events.sort(key=lambda item: item["local_iso"]) + + return { + "ok": True, + "action": "venus_peak_magnitude_for_month", + "selected": { + "year": year, + "month": month, + "timezone": timezone_name, + }, + "events": events, + } + + def action_outer_planet_events_for_month(args: list[str]) -> dict: if len(args) != 3: fail( @@ -1389,6 +1455,8 @@ def action_outer_planet_stations_for_month(args: list[str]) -> dict: scan_step = timedelta(hours=12) planet_defs = [ + ("Merkur", astronomy.Body.Mercury, "mercury"), + ("Venus", astronomy.Body.Venus, "venus"), ("Mars", astronomy.Body.Mars, "mars"), ("Jupiter", astronomy.Body.Jupiter, "jupiter"), ("Saturn", astronomy.Body.Saturn, "saturn"), @@ -2510,7 +2578,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", "season_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", "outer_planet_events_for_month", "outer_planet_stations_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", "season_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", "moon_star_occultations_for_month"]}) action = sys.argv[1] args = sys.argv[2:] @@ -2585,6 +2653,11 @@ def main() -> None: print(json.dumps(result, ensure_ascii=False)) return + if action == "venus_peak_magnitude_for_month": + result = action_venus_peak_magnitude_for_month(args) + print(json.dumps(result, ensure_ascii=False)) + return + if action == "outer_planet_events_for_month": result = action_outer_planet_events_for_month(args) print(json.dumps(result, ensure_ascii=False)) @@ -2600,7 +2673,7 @@ def main() -> None: 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", "season_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", "outer_planet_events_for_month", "outer_planet_stations_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", "season_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", "moon_star_occultations_for_month"]}) if __name__ == "__main__":