Files
infrapuzzle/projects/grabengasse/backend/schemas/weather.py
T

36 lines
1.8 KiB
Python

from pydantic import BaseModel, Field
from typing import Optional, List, Dict
class CurrentWeatherMetrics(BaseModel):
temperature: Optional[float] = Field(None, description="Current temperature in °C")
apparent_temperature: Optional[float] = Field(None, description="Apparent temperature in °C")
wind_chill: Optional[float] = Field(None, description="Wind chill temperature in °C")
dew_point: Optional[float] = Field(None, description="Dew point in °C")
humidex: Optional[float] = Field(None, description="Humidex in °C")
humidity: Optional[float] = Field(None, description="Relative humidity percentage (%)")
pressure: Optional[float] = Field(None, description="Atmospheric pressure in hPa")
rain_status: Optional[int] = Field(None, description="Rain status (0: Dry, 1: Wet)")
rain_status_label: Optional[str] = Field("Dry", description="Human readable rain status label")
wind_speed: Optional[float] = Field(None, description="Wind speed in km/h")
gust_speed: Optional[float] = Field(None, description="Gust speed in km/h")
wind_direction: Optional[float] = Field(None, description="Wind direction in degrees (0-360°)")
illuminance_lux: Optional[float] = Field(None, description="Solar illuminance in LUX")
uv_index: Optional[float] = Field(None, description="UV Index")
battery_percent: Optional[float] = Field(None, description="Battery level (%)")
linkquality_lqi: Optional[float] = Field(None, description="Zigbee signal strength (LQI)")
updated_at: str = Field(..., description="Timestamp of metric evaluation")
class TimeSeriesPoint(BaseModel):
timestamp: int
value: float
class TimeSeriesMetric(BaseModel):
name: str
label: str
unit: str
data: List[TimeSeriesPoint]
class WeatherHistoryResponse(BaseModel):
timeframe: str
metrics: Dict[str, TimeSeriesMetric]