Files
KNELSiterSolar/docs/oncor-realtime-arbitrage.md
mrcharles baf4088059 ERCOT daily risk-intelligence brief (#826)
ercot-brief.sh: LZ_SOUTH RTM now + 24h peak -> GREEN/WATCH/ELEVATED/CRITICAL
risk level + actions (precharge battery, defer class-3 batch, RTW
counterfactual flag) + TSV history. Rationale: Base Power stays the retail
counterparty; ISO signals are risk intelligence, not an export market.

https://projects.knownelement.com/issues/826#note-7
2026-09-06 15:02:15 -05:00

78 lines
3.6 KiB
Markdown

# 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: $0.085/kWh flat** (contract through Oct 2028)
- **Export: $0.040/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 | $0.085 avoided | almost always (8.5¢ > 4¢) |
| export to Base | $0.040 flat | only when NO deferrable load exists |
| export on an RTW plan* | RTM $/kWh | only when RTM > $0.085 (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
4¢; 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 8.5¢ power.
This is why the KNELPerf class-3 batch gate keys on solar surplus.
2. **Only truly surplus-after-load gets exported at 4¢.**
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.**
## Day-to-day ISO risk intelligence (ercot-brief.sh)
Founder ruling 2026-09-06: Base Power must remain the retail provider (no
direct ERCOT interconnection). So the ISO's signals are RISK INTELLIGENCE,
not an export market:
- `ercot-brief.sh` produces a daily risk level from LZ_SOUTH RTM (now +
24h peak): GREEN (<$150/MWh) / WATCH (>=150) / ELEVATED (>=500) /
CRITICAL (>=2000, adders/EEA territory).
- Actions it emits: precharge battery (WATCH+), defer class-3 batch load
(ELEVATED+), rtw_counterfactual_flag (RTM > $85).
- On EEA-watch days expect Base to dispatch the fleet battery and expect
RTW-plan counterfactual spikes — history TSV accumulates for trend stats.
- Same source chain as the arbitrage tool (GRIDSTATUS_API_KEY /
ERCOT_API_KEY / override — key registration still pending, see #826/#827).