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]