Bereichswahl dazu
This commit is contained in:
68
api/main.py
68
api/main.py
@@ -514,6 +514,74 @@ async def get_weekly_rain_data(
|
||||
conn.close()
|
||||
|
||||
|
||||
@app.get("/weather/hourly-aggregated-range", response_model=List[dict], tags=["Aggregated Data"])
|
||||
async def get_hourly_aggregated_range(
|
||||
start: datetime = Query(..., description="Startdatum (ISO 8601)"),
|
||||
end: datetime = Query(..., description="Enddatum (ISO 8601)")
|
||||
):
|
||||
"""Gibt stündlich aggregierte Wetterdaten für einen bestimmten Zeitraum zurück"""
|
||||
if start >= end:
|
||||
raise HTTPException(status_code=400, detail="Startdatum muss vor Enddatum liegen")
|
||||
|
||||
conn = get_db_connection()
|
||||
try:
|
||||
with conn.cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT
|
||||
date_trunc('hour', datetime) as datetime,
|
||||
AVG(temperature)::float as temperature,
|
||||
ROUND(AVG(humidity))::int as humidity,
|
||||
AVG(pressure)::float as pressure,
|
||||
AVG(wind_speed * 1.60934)::float as wind_speed,
|
||||
MAX(wind_gust * 1.60934)::float as wind_gust,
|
||||
AVG(wind_dir)::float as wind_dir
|
||||
FROM weather_data
|
||||
WHERE datetime BETWEEN %s AND %s
|
||||
GROUP BY date_trunc('hour', datetime)
|
||||
ORDER BY datetime ASC
|
||||
""", (start, end))
|
||||
results = cursor.fetchall()
|
||||
|
||||
return [dict(row) for row in results]
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
@app.get("/weather/daily-aggregated-range", response_model=List[dict], tags=["Aggregated Data"])
|
||||
async def get_daily_aggregated_range(
|
||||
start: datetime = Query(..., description="Startdatum (ISO 8601)"),
|
||||
end: datetime = Query(..., description="Enddatum (ISO 8601)")
|
||||
):
|
||||
"""Gibt täglich aggregierte Wetterdaten mit Min/Max-Temperaturen für einen bestimmten Zeitraum zurück"""
|
||||
if start >= end:
|
||||
raise HTTPException(status_code=400, detail="Startdatum muss vor Enddatum liegen")
|
||||
|
||||
conn = get_db_connection()
|
||||
try:
|
||||
with conn.cursor() as cursor:
|
||||
cursor.execute("""
|
||||
SELECT
|
||||
date_trunc('day', datetime) as datetime,
|
||||
AVG(temperature)::float as temperature,
|
||||
MIN(temperature)::float as min_temperature,
|
||||
MAX(temperature)::float as max_temperature,
|
||||
ROUND(AVG(humidity))::int as humidity,
|
||||
AVG(pressure)::float as pressure,
|
||||
AVG(wind_speed * 1.60934)::float as wind_speed,
|
||||
MAX(wind_gust * 1.60934)::float as wind_gust,
|
||||
AVG(wind_dir)::float as wind_dir
|
||||
FROM weather_data
|
||||
WHERE datetime BETWEEN %s AND %s
|
||||
GROUP BY date_trunc('day', datetime)
|
||||
ORDER BY datetime ASC
|
||||
""", (start, end))
|
||||
results = cursor.fetchall()
|
||||
|
||||
return [dict(row) for row in results]
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import uvicorn
|
||||
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||||
|
||||
Reference in New Issue
Block a user