from datetime import datetime from pydantic import BaseModel class IntervalDataPoint(BaseModel): ts: datetime generation_kwh: float load_kwh: float import_kwh: float export_kwh: float resolution_minutes: int # Only populated for plants with a battery (from a live device-level # poll, not backfillable historical data) -- None for solar-only plants # and for every historical/backfilled point. battery_soc_percent: float | None = None battery_charge_w: float | None = None battery_discharge_w: float | None = None def as_row(self, source: str) -> dict: return { "ts": self.ts, "source": source, "generation_kwh": self.generation_kwh, "load_kwh": self.load_kwh, "import_kwh": self.import_kwh, "export_kwh": self.export_kwh, "resolution_minutes": self.resolution_minutes, "battery_soc_percent": self.battery_soc_percent, "battery_charge_w": self.battery_charge_w, "battery_discharge_w": self.battery_discharge_w, }