from __future__ import annotations import os from dataclasses import dataclass @dataclass(frozen=True) class Settings: ha_url: str | None = None ha_token: str | None = None model_store: str = ".model_store" automation_store: str = ".automation_store" actuator_store: str = ".actuator_store" history_days: int = 14 min_training_points: int = 24 retrain_stale_hours: int = 24 reconcile_interval_seconds: int = 900 @property def ha_configured(self) -> bool: return bool(self.ha_url and self.ha_token) def load_settings() -> Settings: return Settings( ha_url=os.getenv("SILLYHOME_HA_URL") or os.getenv("HA_URL"), ha_token=os.getenv("SILLYHOME_HA_TOKEN") or os.getenv("HA_TOKEN"), model_store=os.getenv("SILLYHOME_MODEL_STORE", ".model_store"), automation_store=os.getenv("SILLYHOME_AUTOMATION_STORE", ".automation_store"), actuator_store=os.getenv("SILLYHOME_ACTUATOR_STORE", ".actuator_store"), history_days=max(1, min(31, int(os.getenv("SILLYHOME_HISTORY_DAYS", "14")))), min_training_points=max(2, int(os.getenv("SILLYHOME_MIN_TRAINING_POINTS", "24"))), retrain_stale_hours=max(1, int(os.getenv("SILLYHOME_RETRAIN_STALE_HOURS", "24"))), reconcile_interval_seconds=max( 60, int(os.getenv("SILLYHOME_RECONCILE_INTERVAL_SECONDS", "900")) ), )