36 lines
1.8 KiB
Python
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]
|