ranczo-energy-usage-scrapers/EnergyPrice.py
Bartosz Wieczorek 166d64d51e init
2025-09-02 18:14:05 +02:00

30 lines
884 B
Python

# EnergyPrice.py
from __future__ import annotations
from dataclasses import dataclass
from datetime import datetime
import zoneinfo
from utils.time_helpers import WARSAW_TZ
@dataclass
class EnergyPriceBase:
tz: zoneinfo.ZoneInfo = WARSAW_TZ
def to_local_dt(self, ts: datetime) -> datetime:
if ts.tzinfo is None:
return ts.replace(tzinfo=self.tz)
return ts.astimezone(self.tz)
def has_rate(self, ts: datetime) -> bool:
try:
self.rate(ts)
return True
except KeyError:
return False
def rate(self, ts: datetime) -> float:
"""Return PLN/kWh (net) for given timestamp (override in subclasses)."""
raise NotImplementedError
def cost(self, ts: datetime, consumption_kwh: float) -> float:
return self.rate(ts) * float(consumption_kwh)