BESS breakeven — required VPP service revenue
Generated: 2026-05-07. Method: reverse-solve the BESS-incremental NPV gap at
8% WACC, 20-year horizon, with 50% augmentation at year 10. Inputs: LP-optimal
dispatch results from reports/btm_economics_dc100.json.
For commercial discussions For a 4-hour BESS attached to a 100 MW JB DC anchor at current capex (5 M RM/MWh = USD 1,000/kWh):
| Quantity | Value | Equivalent |
|---|---|---|
| Required extra revenue per MWh installed | 646 kRM/MWh/yr | ~USD 137k/MWh/yr |
| Required revenue per MW power | 2.58 M RM/MW/yr | ~USD 560k/MW/yr |
| Capacity-payment equivalent | 215 k RM/MW/month | ~USD 47k/MW/month |
| Dispatch fee equivalent | 3.16 RM/kWh delivered | ~USD 0.69/kWh |
The dispatch-fee number is ~5–10× current peak energy rates and is not a realistic per-energy commercial structure. The capacity-payment equivalent is the right framing — and at ~USD 47k/MW/month it is 5–10× current global VPP service benchmarks, which is why BESS doesn’t clear today.
Full sensitivity sweep
Section titled “Full sensitivity sweep”PV held constant (LP dispatch); BESS sized at PV/4 power × 4 h duration:
| PV (MW) | BESS (MWh) | ICPT | BTM Δsavings | Required | Gap | kRM/MWh/yr | RM/MW/month | RM/kWh dispatched |
|---|---|---|---|---|---|---|---|---|
| 30 | 30 | period-aligned | 2.49 | 21.8 | 19.3 | 644 | 214,769 | 3.16 |
| 60 | 60 | period-aligned | 4.97 | 43.6 | 38.7 | 644 | 214,769 | 3.16 |
| 90 | 90 | period-aligned | 7.46 | 65.4 | 58.0 | 644 | 214,769 | 3.16 |
| 30 | 30 | +16 sen flat | 2.42 | 21.8 | 19.4 | 646 | 215,458 | 3.17 |
| 60 | 60 | +16 sen flat | 4.85 | 43.6 | 38.8 | 646 | 215,458 | 3.17 |
| 90 | 90 | +16 sen flat | 7.27 | 65.4 | 58.2 | 646 | 215,458 | 3.17 |
(All RM millions/yr unless noted. “Gap” = required − BTM-captured.)
The gap is size-invariant at ~644 kRM/MWh/yr — the model has constant returns to scale. Doubling BESS doubles capex and doubles incremental savings. The per-MWh number is what matters for designing the commercial structure.
Benchmark vs existing global VPP service rates
Section titled “Benchmark vs existing global VPP service rates”| Service market | Capacity payment | Conversion to RM/MW/month |
|---|---|---|
| Singapore DRC (Demand Response Capacity) | ~SGD 5–10 k/MW/month | RM 17–34 k |
| UK Firm Frequency Response (FFR) | ~GBP 15–30 k/MW/yr | RM 7–14 k/month |
| UK Capacity Market | ~GBP 30–60 k/MW/yr | RM 14–28 k/month |
| AU FCAS regulation | ~AUD 50–150 k/MW/yr | RM 16–48 k/month |
| JB BESS gap @ current capex | RM 215 k/MW/month | — |
The JB requirement is 5–15× the upper bound of mature VPP service markets. No single market today pays this rate. Three plausible paths:
Path 1: Wait for capex to fall
Section titled “Path 1: Wait for capex to fall”BloombergNEF Lithium-Ion Battery Price Survey trajectory:
- 2024: ~USD 1,000/kWh installed (= 5 M RM/MWh) — current model assumption
- 2027: ~USD 600/kWh (= 3 M RM/MWh) — gap drops to ~280 kRM/MWh/yr
- 2030: ~USD 320/kWh (= 1.6 M RM/MWh) — gap drops to ~180 kRM/MWh/yr
By 2030, the gap is comparable to current Singapore DRC + UK CM stacked, which is achievable. The base-case BESS plan is to defer commitment until 2027-2028, then re-evaluate.
Path 2: Bundle multiple service streams (today)
Section titled “Path 2: Bundle multiple service streams (today)”To close the 215 k RM/MW/month gap with 2024 capex, you’d need to stack:
- Singapore DRC export (if ENEGEM evolves to allow): ~30 k RM/MW/mo
- TNB ancillary services contract (does not exist commercially today): ~50 k RM/MW/mo
- Hyperscaler 24/7 carbon match premium (private contract): ~70 k RM/MW/mo
- Capacity reserve for Johor grid (does not exist commercially today): ~50 k RM/MW/mo
- Plus arbitrage already captured in BTM model: implicit
This stack requires at least two markets that don’t exist yet to be negotiated with regulators or the hyperscaler tenant directly. Not impossible but bespoke.
Path 3: Anchor tenant pays for resilience
Section titled “Path 3: Anchor tenant pays for resilience”A hyperscaler with strict uptime requirements (99.999%+) might value on-site BESS as a backup-power complement to diesel gensets. If priced as “backup capacity premium” rather than “energy arbitrage”, the tenant could absorb the gap via a higher PPA rate.
Required premium on the bundled BTM PV+BESS PPA:
- BESS share of capex ≈ 60% of total project (300M of 510M)
- Annualised 2.58 M RM/MW/yr ÷ DC gross load 112 MW = 23 k RM/MW(DC)/yr
- ≈ 0.026 RM/kWh of DC consumption (at 8760 hr × 100% util)
- ≈ 2.6 sen/kWh markup on the PPA
A 2.6 sen/kWh markup on a hyperscaler PPA is small in absolute terms (it’s ~5% of the all-in tariff). This is the most plausible commercial structure for BESS today: bundle the PV+BESS as a “VPP-grade” PPA with a modest premium that compensates for resilience + carbon-match optionality.
Cross-cuts that change the answer
Section titled “Cross-cuts that change the answer”| Lever | Direction | Magnitude |
|---|---|---|
| Capex 5M → 3M RM/MWh by 2027 | Reduces gap ~50% | 644 → 320 kRM/MWh/yr |
| Capex 5M → 1.6M RM/MWh by 2030 | Reduces gap ~75% | 644 → 180 kRM/MWh/yr |
| Better BESS sizing (8h instead of 4h) | Captures more arbitrage | Gap −5 to −10% (modest) |
| Larger PV (relative to load) creating surplus | Reduces grid charge cost | Gap −10 to −15% if PV > 70% load |
| ICPT shifts from 16 sen to 30 sen | Increases peak/off-peak spread | Gap −15% per 14 sen ICPT increase |
| Allow grid export (PPA permits) | New revenue stream | Hard to size without ENEGEM data |
| Augmentation cost falls (cells alone < 50%) | Reduces year-10 cash drag | Gap −5 to −8% |
Commercial team takeaways
Section titled “Commercial team takeaways”- Today’s BESS commercial structure should be a 2.6 sen/kWh PPA premium bundled with PV. This is the only commercial path that closes the gap with current capex.
- A standalone “VPP service contract” needs to deliver ~RM 215 k/MW/month to clear NPV. No global market pays this; only a custom contract with the hyperscaler tenant can. Use this number as the negotiation floor with anchor customers.
- Capex trajectory is the dominant driver. Most of the gap closes by 2027–2028 on BNEF’s price curve. Recommend the BESS investment plan include a “trigger condition” — defer until capex falls below ~3 M RM/MWh OR a custom contract at the floor materialises.
- Stack-of-services modelling is misleading: most listed “VPP markets” in MY don’t exist commercially today. Don’t claim revenue from non-existent markets in the pro-forma.
- PV-only is bankable today at IRR 9.5%, payback 9 years. Don’t gate the PV decision on BESS contracting — fund PV alone, hold BESS as a trigger-conditional option.
Caveats
Section titled “Caveats”- Augmentation is modelled as a single 50% capex hit at year 10. Real augmentation curves are smoother (e.g., 5% per year cell replacement); may understate or overstate by ~10%.
- LP dispatch assumes perfect foresight of solar + load. Real dispatch has forecast error losses ~5–10%, which would slightly widen the gap.
- DC anchor load is modelled as flat 112 MW; real DC has cooling-driven CDH variation (PUE rises in hot months). Adding this variation would marginally help BESS by widening MD spread; estimate +5% gap closure.
- ICPT projections beyond 2025-H1 are placeholders. If ICPT structurally rises (e.g., subsidy reform), gap closes faster.
- All RM/USD conversions at 4.6 RM/USD (mid-2025 ballpark).
- This report:
reports/vpp_service_revenue_required.md - Raw breakeven results:
reports/breakeven_revenue.json - Source LP results:
reports/btm_economics_dc100.json - BTM model report:
reports/btm_economics_dc100.md