FastAPI app that pulls interval usage from Sungrow iSolarCloud (OAuth2), caches AER Consumer Data Right electricity plan data, and compares actual metered usage against every available plan to estimate real annual cost (TOU, tiered feed-in, and flat tariffs). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
30 lines
956 B
Python
30 lines
956 B
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
from apscheduler.triggers.interval import IntervalTrigger
|
|
|
|
from app.config import settings
|
|
from app.scheduler.jobs import poll_isolarcloud_job, refresh_aer_plans_job
|
|
|
|
|
|
def build_scheduler() -> BackgroundScheduler:
|
|
scheduler = BackgroundScheduler()
|
|
scheduler.add_job(
|
|
poll_isolarcloud_job,
|
|
trigger=IntervalTrigger(minutes=settings.isolarcloud_poll_interval_minutes),
|
|
id="poll_isolarcloud",
|
|
next_run_time=datetime.now(), # run once immediately on startup
|
|
max_instances=1,
|
|
coalesce=True,
|
|
)
|
|
scheduler.add_job(
|
|
refresh_aer_plans_job,
|
|
trigger=IntervalTrigger(hours=settings.aer_refresh_interval_hours),
|
|
id="refresh_aer_plans",
|
|
next_run_time=datetime.now(),
|
|
max_instances=1,
|
|
coalesce=True,
|
|
)
|
|
return scheduler
|