This commit is contained in:
Eskimue
2026-04-03 15:41:16 +02:00
parent a4e2367f33
commit 3574fb99c7
3 changed files with 161 additions and 4 deletions
+48
View File
@@ -650,3 +650,51 @@ Stack trace:
[Fri Apr 3 14:51:41 2026] 127.0.0.1:57770 Accepted [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 [200]: GET /favicon.ico
[Fri Apr 3 14:51:43 2026] 127.0.0.1:57770 Closing [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
+36
View File
@@ -63,6 +63,7 @@ $eclipseEvents = [];
$moonApsisEvents = []; $moonApsisEvents = [];
$sunApsisEvents = []; $sunApsisEvents = [];
$innerPlanetElongationEvents = []; $innerPlanetElongationEvents = [];
$venusPeakMagnitudeEvents = [];
$outerPlanetEvents = []; $outerPlanetEvents = [];
$outerPlanetStationEvents = []; $outerPlanetStationEvents = [];
$moonOccultations = []; $moonOccultations = [];
@@ -424,6 +425,23 @@ if (is_array($elongationDecoded) && ($elongationDecoded['ok'] ?? false)) {
$innerPlanetElongationEvents = is_array($elongationDecoded['events'] ?? null) ? $elongationDecoded['events'] : []; $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 = []; $outerPlanetOutput = [];
$outerPlanetExitCode = 0; $outerPlanetExitCode = 0;
$outerPlanetArgs = [ $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) { foreach ($outerPlanetEvents as $outerPlanetEvent) {
if (!is_array($outerPlanetEvent)) { if (!is_array($outerPlanetEvent)) {
continue; continue;
+77 -4
View File
@@ -750,8 +750,6 @@ def action_planet_conjunctions_for_month(args: list[str]) -> dict:
coarse_threshold = max_sep_deg + 1.0 coarse_threshold = max_sep_deg + 1.0
planet_defs = [ planet_defs = [
("Merkur", astronomy.Body.Mercury, "mercury"),
("Venus", astronomy.Body.Venus, "venus"),
("Mars", astronomy.Body.Mars, "mars"), ("Mars", astronomy.Body.Mars, "mars"),
("Jupiter", astronomy.Body.Jupiter, "jupiter"), ("Jupiter", astronomy.Body.Jupiter, "jupiter"),
("Saturn", astronomy.Body.Saturn, "saturn"), ("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: def action_outer_planet_events_for_month(args: list[str]) -> dict:
if len(args) != 3: if len(args) != 3:
fail( fail(
@@ -1389,6 +1455,8 @@ def action_outer_planet_stations_for_month(args: list[str]) -> dict:
scan_step = timedelta(hours=12) scan_step = timedelta(hours=12)
planet_defs = [ planet_defs = [
("Merkur", astronomy.Body.Mercury, "mercury"),
("Venus", astronomy.Body.Venus, "venus"),
("Mars", astronomy.Body.Mars, "mars"), ("Mars", astronomy.Body.Mars, "mars"),
("Jupiter", astronomy.Body.Jupiter, "jupiter"), ("Jupiter", astronomy.Body.Jupiter, "jupiter"),
("Saturn", astronomy.Body.Saturn, "saturn"), ("Saturn", astronomy.Body.Saturn, "saturn"),
@@ -2510,7 +2578,7 @@ def action_satellite_passes(args: list[str]) -> dict:
def main() -> None: def main() -> None:
if len(sys.argv) < 2: 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] action = sys.argv[1]
args = sys.argv[2:] args = sys.argv[2:]
@@ -2585,6 +2653,11 @@ def main() -> None:
print(json.dumps(result, ensure_ascii=False)) print(json.dumps(result, ensure_ascii=False))
return 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": if action == "outer_planet_events_for_month":
result = action_outer_planet_events_for_month(args) result = action_outer_planet_events_for_month(args)
print(json.dumps(result, ensure_ascii=False)) print(json.dumps(result, ensure_ascii=False))
@@ -2600,7 +2673,7 @@ def main() -> None:
print(json.dumps(result, ensure_ascii=False)) print(json.dumps(result, ensure_ascii=False))
return 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__": if __name__ == "__main__":