""" BAN YARO — Wetter-Zusammenfassung via Open-Meteo Prüft mehrere deutsche Städte und liefert max. Temperatur und Gewitterwarnung. """ import logging import httpx logger = logging.getLogger(__name__) # Wichtige deutsche Städte als Stichprobe CITIES = [ {"name": "Berlin", "lat": 52.52, "lon": 13.41}, {"name": "München", "lat": 48.14, "lon": 11.58}, {"name": "Hamburg", "lat": 53.55, "lon": 10.00}, {"name": "Frankfurt", "lat": 50.11, "lon": 8.68}, {"name": "Köln", "lat": 50.94, "lon": 6.96}, ] # WMO-Wettercodes 95–99 = Gewitter THUNDERSTORM_CODES = {95, 96, 99} async def get_weather_summary() -> dict: """ Holt Tagesprognose für mehrere deutsche Städte von Open-Meteo. Gibt zurück: {"max_temp_c": float, "thunderstorm": bool} """ max_temp = -999.0 thunderstorm = False async with httpx.AsyncClient(timeout=10.0) as client: for city in CITIES: url = ( "https://api.open-meteo.com/v1/forecast" f"?latitude={city['lat']}&longitude={city['lon']}" "&daily=temperature_2m_max,precipitation_probability_max,weathercode" "&timezone=Europe%2FBerlin&forecast_days=1" ) try: resp = await client.get(url) resp.raise_for_status() data = resp.json() daily = data.get("daily", {}) temps = daily.get("temperature_2m_max", [None]) precip_probs = daily.get("precipitation_probability_max", [None]) weathercodes = daily.get("weathercode", [None]) temp = temps[0] if temps else None precip_prob = precip_probs[0] if precip_probs else None weathercode = weathercodes[0] if weathercodes else None if temp is not None and temp > max_temp: max_temp = temp if ( precip_prob is not None and precip_prob > 50 and weathercode is not None and int(weathercode) in THUNDERSTORM_CODES ): thunderstorm = True logger.info(f"Gewitter erkannt: {city['name']} (Code {weathercode}, {precip_prob}% Niederschlag)") except Exception as e: logger.warning(f"Wetter-Abruf für {city['name']} fehlgeschlagen: {e}") if max_temp == -999.0: max_temp = 0.0 logger.info(f"Wetter-Zusammenfassung: max_temp={max_temp}°C, thunderstorm={thunderstorm}") return {"max_temp_c": max_temp, "thunderstorm": thunderstorm}