Files
KNELSiterSolar/docs/oncor-realtime-arbitrage.md
T
mrcharles 0693739d70 ONCOR real-time arbitrage decision tool + economics doc (#826)
oncor-arbitrage.sh: LZ_SOUTH RTM price (pluggable source) -> best-action
verdict (serve load vs export to Base flat 4c vs RTW counterfactual);
JSON out for the KNELPerf batch gate. Verified with override prices.

https://projects.knownelement.com/issues/826#note-5
2026-09-06 14:58:45 -05:00

2.8 KiB

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_OVERRIDEGRIDSTATUS_API_KEYERCOT_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.