diff --git a/pyproject.toml b/pyproject.toml index 9e0d293..8191f4f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] name = "weather2oag" -version = "1.1.0" +version = "1.1.1" description = "Monatlicher Wetterbericht der Sternwarte Welzheim" requires-python = ">=3.12" diff --git a/weather_report.py b/weather_report.py index ef67d13..5e37acf 100644 --- a/weather_report.py +++ b/weather_report.py @@ -4,7 +4,7 @@ import os import smtplib import tempfile -from collections import defaultdict + from datetime import datetime, timedelta, timezone from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart @@ -85,32 +85,19 @@ def _data_temp_hourly(start: datetime, end: datetime): def _data_rain_daily(start: datetime, end: datetime): - # +1 Tag extra damit der Abschlusswert des letzten Tages (kum. Zähler) enthalten ist - data = fetch("/weather/range", { - "start": start.isoformat(), - "end": (end + timedelta(days=1)).isoformat(), - "limit": 50000, - }) - by_day: dict[str, list[float]] = defaultdict(list) + today = datetime.now(timezone.utc).replace(hour=0, minute=0, second=0, microsecond=0) + days = min((today - start).days + 2, 365) + data = fetch("/weather/rain-daily", {"days": days}) + pairs = [] for d in data: - if d.get("rain") is not None: - by_day[parse_dt(d["datetime"]).strftime("%Y-%m-%d")].append(d["rain"]) - - dates, rain = [], [] - for day_key in sorted(by_day): - day_dt = datetime.fromisoformat(day_key).replace(tzinfo=timezone.utc) - if day_dt >= end: - break - vals = list(by_day[day_key]) - next_key = (day_dt + timedelta(days=1)).strftime("%Y-%m-%d") - if next_key in by_day: - vals.append(by_day[next_key][0]) - daily = max(vals) - min(vals) - if daily < 0: - daily = max(vals) - dates.append(day_dt) - rain.append(round(daily, 1)) - return dates, rain + day_dt = parse_dt(d["date"]).replace(hour=0, minute=0, second=0, microsecond=0) + if start <= day_dt < end: + pairs.append((day_dt, round(d["total_rain"], 1))) + pairs.sort() + if not pairs: + return [], [] + dates, rain = zip(*pairs) + return list(dates), list(rain) def create_combined_chart(start: datetime, end: datetime, label: str) -> bytes: