power-compare/README.md
dlawler489 84c4922bbc Initial commit: solar usage vs AER plan comparison app
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>
2026-09-09 11:07:01 +10:00

67 lines
2.2 KiB
Markdown

# Power Compare
Compares your Sungrow solar system's actual usage against every electricity
plan the AER publicly lists for your Queensland distributor, so you can see
which plan would actually cost you the least given how much you generate,
consume, import and export -- no battery/storage assumed.
## How it works
- An always-on background scheduler polls your Sungrow iSolarCloud plant
every few minutes and stores interval generation/load/import/export data
in a local SQLite database, building up history over time.
- It also periodically refreshes a cache of every current QLD electricity
plan from the AER's public "Get Generic Plans" / "Get Generic Plan
Detail" APIs.
- A costing engine evaluates every cached plan (flat or time-of-use, with
supply charge and feed-in tariff credit) against your actual usage
history and ranks them by estimated annual cost, compared against your
own plan (entered manually in Settings).
- A small web dashboard shows your usage over time and the plan comparison
table.
## Quick start (no real solar data yet)
The app runs entirely on synthetic mock usage data until you've registered
a Sungrow developer app (see [SETUP.md](SETUP.md)) -- useful for seeing how
the comparison works today.
```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env
# optional: instantly backfill a year of synthetic usage data instead of
# waiting for the scheduler to accumulate it in real time
python scripts/seed_sample_data.py --days 365
uvicorn app.main:app --reload
```
Then open http://localhost:8000, set your distributor/postcode and current
plan under Settings, and check the Plan Comparison page.
## Running the tests
```bash
pytest
```
The costing engine and the AER plan mapper are both unit-tested, including
against real plan data fetched from the live AER API (see
`app/aer/tests/sample_*.json`).
## Connecting your real Sungrow system
See [SETUP.md](SETUP.md) for registering a developer app on the iSolarCloud
portal and connecting your account.
## Running as an always-on service
```bash
docker compose up -d
```
This persists the SQLite database in a named Docker volume and restarts
automatically. See `.env.example` for configuration.