Temperatur mit Min/Max
This commit is contained in:
71
api/main.py
71
api/main.py
@@ -375,11 +375,11 @@ async def get_hourly_aggregated_data(
|
||||
conn.close()
|
||||
|
||||
|
||||
@app.get("/weather/daily-aggregated", response_model=List[WeatherData], tags=["Aggregated Data"])
|
||||
@app.get("/weather/daily-aggregated", response_model=List[dict], tags=["Aggregated Data"])
|
||||
async def get_daily_aggregated_data(
|
||||
days: int = Query(365, ge=1, le=730, description="Anzahl Tage zurück (max 730)")
|
||||
):
|
||||
"""Gibt täglich aggregierte Wetterdaten zurück (Tagesmittel)"""
|
||||
"""Gibt täglich aggregierte Wetterdaten zurück (Tagesmittel mit Min/Max-Temperaturen)"""
|
||||
conn = get_db_connection()
|
||||
try:
|
||||
with conn.cursor() as cursor:
|
||||
@@ -387,17 +387,15 @@ async def get_daily_aggregated_data(
|
||||
if days >= 365:
|
||||
cursor.execute("""
|
||||
SELECT
|
||||
0 as id,
|
||||
date_trunc('day', datetime) as datetime,
|
||||
AVG(temperature) as temperature,
|
||||
ROUND(AVG(humidity)) as humidity,
|
||||
AVG(pressure) as pressure,
|
||||
AVG(wind_speed * 1.60934) as wind_speed,
|
||||
MAX(wind_gust * 1.60934) as wind_gust,
|
||||
AVG(wind_dir) as wind_dir,
|
||||
AVG(rain) as rain,
|
||||
AVG(rain_rate) as rain_rate,
|
||||
MAX(received_at) as received_at
|
||||
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
|
||||
GROUP BY date_trunc('day', datetime)
|
||||
ORDER BY datetime ASC
|
||||
@@ -405,17 +403,15 @@ async def get_daily_aggregated_data(
|
||||
else:
|
||||
cursor.execute("""
|
||||
SELECT
|
||||
0 as id,
|
||||
date_trunc('day', datetime) as datetime,
|
||||
AVG(temperature) as temperature,
|
||||
ROUND(AVG(humidity)) as humidity,
|
||||
AVG(pressure) as pressure,
|
||||
AVG(wind_speed * 1.60934) as wind_speed,
|
||||
MAX(wind_gust * 1.60934) as wind_gust,
|
||||
AVG(wind_dir) as wind_dir,
|
||||
AVG(rain) as rain,
|
||||
AVG(rain_rate) as rain_rate,
|
||||
MAX(received_at) as received_at
|
||||
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 >= NOW() - make_interval(days => %s)
|
||||
GROUP BY date_trunc('day', datetime)
|
||||
@@ -428,6 +424,37 @@ async def get_daily_aggregated_data(
|
||||
conn.close()
|
||||
|
||||
|
||||
@app.get("/weather/daily-with-minmax", response_model=List[dict], tags=["Aggregated Data"])
|
||||
async def get_daily_with_minmax_data(
|
||||
days: int = Query(30, ge=1, le=90, description="Anzahl Tage zurück (max 90)")
|
||||
):
|
||||
"""Gibt täglich aggregierte Wetterdaten mit Min/Max-Temperaturen zurück"""
|
||||
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 >= NOW() - make_interval(days => %s)
|
||||
GROUP BY date_trunc('day', datetime)
|
||||
ORDER BY datetime ASC
|
||||
""", (days,))
|
||||
results = cursor.fetchall()
|
||||
|
||||
return [dict(row) for row in results]
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
@app.get("/weather/rain-daily", response_model=List[dict], tags=["Aggregated Data"])
|
||||
async def get_daily_rain_data(
|
||||
days: int = Query(30, ge=1, le=365, description="Anzahl Tage zurück")
|
||||
|
||||
Reference in New Issue
Block a user