|
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 35s
AER's Consumer Data Right unitPrice fields are GST-exclusive, confirmed by comparing a real, currently-effective EnergyAustralia contract's own GST-inclusive rates against this plan's cached AER data: usage rates and the supply charge all matched the cached value multiplied by exactly 1.1 (four independent figures). A real AGL bill confirmed the same convention separately (excl-GST line items, GST added back as one combined amount at the end). This understated every one of the ~700+ cached comparison plans' costs by ~10% relative to manually-entered current plans (which were correctly GST-inclusive, taken from real bills), biasing every "savings vs current" figure across the board. Feed-in/solar buy-back rates are the exception -- confirmed GST-free in that same contract's own terms -- so the multiplier applies only to usage rates and the supply charge. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| .forgejo/workflows | ||
| app | ||
| scripts | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| pyproject.toml | ||
| README.md | ||
| SETUP.md | ||
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) -- useful for seeing how the comparison works today.
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
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 for registering a developer app on the iSolarCloud portal and connecting your account.
Running as an always-on service
docker compose up -d
This persists the SQLite database in a named Docker volume and restarts
automatically. See .env.example for configuration.