68 lines
3.0 KiB
Markdown
68 lines
3.0 KiB
Markdown
---
|
|
title: Solar Arbitrage
|
|
visibility: private
|
|
---
|
|
|
|
# ONCOR real-time arbitrage: sell to Base Power vs serve load
|
|
|
|
Status: v1 (2026-09-06, #826). Location: Pflugerville, Travis County, TX —
|
|
ONCOR wires, ERCOT South load zone (`LZ_SOUTH`). Tool:
|
|
`solar-analysis/oncor-arbitrage.sh`.
|
|
|
|
## The plan facts that shape everything
|
|
|
|
Base Power (verified 2026-09-06):
|
|
- **Import: $[redacted — LLC-private] flat** (contract through Oct 2028)
|
|
- **Export: $[redacted — LLC-private]/kWh flat** solar credit — Base does NOT pay real-time
|
|
wholesale for exports
|
|
|
|
So on Base Power, **both sides of your meter are flat rates**. ERCOT's
|
|
real-time market price (RTM, 15-min settlement point prices) does not change
|
|
what you pay or earn today — it is a *counterfactual* and a *planning
|
|
signal*:
|
|
|
|
## Decision rules (what the tool emits)
|
|
|
|
For each kWh of solar surplus, best action = max of:
|
|
| option | value | when it wins |
|
|
|---|---|---|
|
|
| serve own/deferrable load | $[redacted — LLC-private] avoided | almost always ([redacted] > [redacted]) |
|
|
| export to Base | $[redacted — LLC-private] flat | only when NO deferrable load exists |
|
|
| export on an RTW plan* | RTM $/kWh | only when RTM > $[redacted — LLC-private] (rare spikes) |
|
|
|
|
*counterfactual — would require switching export credit to a real-time-
|
|
wholesale retailer plan (e.g. Octopus-style RTW). Texas RTW export averages
|
|
~2¢/kWh with rare spikes >$5/kWh — as a steady diet it LOSES to Base's flat
|
|
[redacted]; it only wins if you can time exports into spikes (needs battery).
|
|
|
|
**Practical rules:**
|
|
1. **Every surplus kWh has a home: load first.** HFNOC batch compute, site-2
|
|
deferrable manufacturing, battery charging — all displace [redacted] power.
|
|
This is why the KNELPerf class-3 batch gate keys on solar surplus.
|
|
2. **Only truly surplus-after-load gets exported at [redacted].**
|
|
3. **RTM spike alerts** (`rtw_would_beat_self_consume: true`, RTM >
|
|
$85/MWh): under a future RTW plan you'd earn more exporting than
|
|
self-consuming. Track how often this happens; if frequent and clustered,
|
|
an RTW plan + battery beats Base's flat buyback for exports. Until then,
|
|
staying on Base and self-consuming is strictly better.
|
|
4. **Battery note**: Base's free battery — verify who controls dispatch
|
|
(Base dispatches it for grid services; if they own the dispatch, do not
|
|
count it in household arbitrage). Open question logged on #826.
|
|
|
|
## Price sources
|
|
|
|
Official API (api.ercot.com public API) and gridstatus.io both require a
|
|
free API key; ercot.com's dashboard JSON is behind an Imperva bot-wall
|
|
(tested 2026-09-06). Tool source precedence: `RTM_OVERRIDE` →
|
|
`GRIDSTATUS_API_KEY` → `ERCOT_API_KEY` → cache file. Key registration is a
|
|
founder action ( NeedsInput on #826).
|
|
|
|
## KNELPerf integration
|
|
|
|
`oncor-arbitrage.sh` emits `start_deferrable_load` + `rtw_would_beat_self_consume`
|
|
as JSON — the batch launcher consumes this plus the HA solar-surplus sensor
|
|
once the plant is live. Docs: KNELPerf docs/ARCHITECTURE.md §7-8.
|
|
|
|
> **Docs live on Discourse — this repo is the executable source of truth.**
|
|
|