idea93-gridguard-verifiable.../energi_bridge/adapters/solar_meter_adapter.py

35 lines
1.1 KiB
Python

"""Toy Solar Meter Adapter with deterministic replay support."""
from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional
@dataclass
class SolarMeterAdapter:
site_id: str
samples: Optional[List[Dict[str, Any]]] = None
_cursor: int = field(init=False, default=0)
def __post_init__(self) -> None:
if self.samples is None:
self.samples = []
def read_meter(self) -> Dict[str, Any]:
if self.samples:
sample_list = self.samples
if self._cursor >= len(sample_list):
raise IndexError("No more solar meter samples available")
reading = dict(sample_list[self._cursor])
self._cursor += 1
reading.setdefault("site_id", self.site_id)
reading.setdefault("timestamp", self._cursor)
reading.setdefault("status", "ok")
return reading
return {
"site_id": self.site_id,
"timestamp": self._cursor,
"solar_output_kw": 750.0,
"status": "ok",
}