38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
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"))
|
|
),
|
|
)
|