35 lines
1.1 KiB
Python
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",
|
|
}
|