24/7 carbon-free energy matching
Generated: 2026-05-07. Reference: 100 MW DC anchor (112 MW gross), 5y POWER hourly weather, multiple PV/BESS sizing scenarios. CFE_t = min(carbon-free generation_t, load_t) / load_t, the literal hourly metric Microsoft / Google publish in sustainability reports.
BTM-optimal PV size delivers only 8% 24/7 matching
| Scenario | Mean CFE | P10 | Hours ≥ 50% | Hours = 100% | PV utilised |
|---|---|---|---|---|---|
| 60 MW PV (BTM-econ-optimal), no BESS | 8.1% | 0% | 0% | 0% | 100% |
| 60 MW PV + 60 MWh BESS | 8.1% | 0% | 0% | 0% | 100% |
| 90 MW PV, no BESS | 12.1% | 0% | 2.8% | 0% | 100% |
| 150 MW PV, no BESS | 20.2% | 0% | 19.1% | 0% | 100% |
| 150 MW + 100 MWh BESS | 20.2% | 0% | 19.1% | 0% | 100% |
| 200 MW PV, no BESS | 26.2% | 0% | 26.0% | 6.5% | 97% |
| 200 MW + 200 MWh BESS | 26.8% | 0% | 26.5% | 8.3% | 99.9% |
| 300 MW + 400 MWh BESS | 38.2% | 0% | 36.6% | 23.4% | 96% |
| 500 MW + 800 MWh BESS | 56.3% | 0% | 57.8% | 37.7% | 87% |
Three structural findings
Section titled “Three structural findings”1. At BTM-economics-optimal PV size, BESS is irrelevant for 24/7 CFE
Section titled “1. At BTM-economics-optimal PV size, BESS is irrelevant for 24/7 CFE”The 60 MW PV scenario produces maximum instantaneous PV ≈ 46 MW < 112 MW DC gross load — meaning PV is ALWAYS less than load. There is no surplus to charge BESS from. Adding 60 MWh of BESS produces zero CFE lift, because under 24/7 accounting BESS can only charge from carbon-free sources (grid charging from a 77%-fossil grid doesn’t qualify).
Implication: the 24/7 CFE Premium PPA structure recommended in EXECUTIVE_SUMMARY needs revision. At BTM-optimal sizing, the structure delivers annual RE100 matching (8% PV coverage of total energy), not 24/7 hourly matching.
2. Crossing the saturation threshold needs PV ≥ 1.8× DC load
Section titled “2. Crossing the saturation threshold needs PV ≥ 1.8× DC load”PV peak instantaneous ≥ DC gross load requires:
At max GHI ≈ 989 W/m² and PR 0.78, this gives pv_mw ≥ load_mw × 1.30. For
a 112 MW gross DC load, pv_mw ≥ 145 MW. At PV = 150 MW, surplus
appears occasionally. At PV = 200 MW, surplus is frequent enough that BESS
starts to add value (mean CFE 26.2% → 26.8% with BESS).
Implication: meaningful 24/7 CFE via on-site assets requires land-adjacent PV (rooftop alone won’t suffice for a 100 MW DC). For a hyperscaler with rooftop ~30 MW PV potential and adjacent land for another 100-150 MW, on-site can credibly deliver 25-30% hourly CFE.
3. 100% on-site 24/7 RE100 is structurally impossible
Section titled “3. 100% on-site 24/7 RE100 is structurally impossible”Even at 500 MW PV + 800 MWh BESS (a 5× PV oversize, 7× BESS oversize), mean CFE saturates at 56.3% and P10 (worst-decile hours) remains 0%. The bottleneck is night-time hours during cloudy stretches when the sun gives nothing for multiple consecutive days. To cover those, you’d need BESS sized for multi-day storage — economically impossible at any reasonable capex.
Implication: any hyperscaler claiming 100% 24/7 CFE in JB must use off-site PPAs (CGPP / CRESS / wind imports / hydro) to fill the gap. On-site BTM PV+BESS contributes a known fraction (8-30% depending on sizing); the rest is off-site contractual matching.
What BESS DOES deliver in 24/7 framing (when PV is large enough)
Section titled “What BESS DOES deliver in 24/7 framing (when PV is large enough)”At PV ≥ 200 MW, BESS shifts surplus daytime PV into early-evening hours (18:00-22:00 MYT) when residual demand is high but PV has dropped to zero.
- 200 MW + 200 MWh BESS vs 200 MW PV alone: mean CFE +0.6 pp, hours at 100% CFE +1.8 pp (6.5 → 8.3%)
- 300 MW + 400 MWh BESS: hours at 100% CFE rises to 23.4% — 4 hours per day matched
- 500 MW + 800 MWh: 37.7% of hours at 100% — covers full peak window most days plus partial overnight
Per-MWh BESS, this lift is much smaller than the BTM economics ROI per MWh. 24/7 CFE is the future BESS revenue stream, not the dominant one today.
Composite structure: BTM + off-site PPA for true 24/7
Section titled “Composite structure: BTM + off-site PPA for true 24/7”A realistic JS-SEZ hyperscaler 24/7 RE100 path:
| Source | Coverage | Notes |
|---|---|---|
| BTM PV 60 MW (rooftop) | 8% | bankable today, 13.0% IRR |
| BTM PV +90 MW (land-adjacent) | +12 pp = 20% | additional capex 315 M RM |
| BTM BESS 100 MWh @ 8h | +1 pp = 21% | uneconomic standalone, future trigger |
| Off-site solar PPA (CRESS/CGPP) — peninsular | +30 pp = 51% | RM 30/MWh premium |
| Off-site wind/hydro PPA (cross-border, ENEGEM) | +25 pp = 76% | currently blocked, structural model only |
| Off-site batteries (regional, future MY market) | +15 pp = 91% | depends on policy |
| RECs / carbon offsets | residual to 100% | last resort, audit-weak |
Reading: even a fully-built on-site PV+BESS only contributes ~21% of the 24/7 path. The hyperscaler tenant’s 24/7 CFE strategy is fundamentally an off-site contracting story; BTM PV+BESS plays the “additionality + auditability” role, not the “matching depth” role.
What this means for the commercial case
Section titled “What this means for the commercial case”Reposition the 24/7 CFE Premium PPA pitch:
- Old framing (per EXECUTIVE_SUMMARY v1): “RM 450-550/MWh for 24/7 CFE with BESS time-shifting.” This is misleading at 60 MW PV size — only 8% true 24/7 coverage.
- New framing: “RM 350-450/MWh PPA premium for verified on-site BTM additionality (RE100 contribution) + carbon attribute monetisation. 24/7 hourly matching is delivered separately via off-site PPAs, with BTM contributing an auditable 8-21% on-site share.”
The carbon-NPV argument from carbon_re100_analysis.md still
holds: BTM PV displaces grid kWh at 631 gCO2/kWh, generating 46,650
tCO2/yr of carbon attributes worth +211M NPV at hyperscaler internal
prices. This is independent of 24/7 hourly matching.
The 24/7 CFE positioning depends on what the hyperscaler’s specific RE100 commitment requires:
- Annual matching (Microsoft pre-2025 precedent): ✓ deliverable with 60 MW BTM PV, 8% on-site share + 92% RECs/offsets
- 24/7 CFE annual average target ≥ 90%: ✗ not deliverable on-site alone; requires committed off-site PPA stack
- 24/7 hourly 100% always: ✗ not deliverable in MY’s grid context without geographic diversification
Three commercial structures, refined
Section titled “Three commercial structures, refined”Structure A: BTM additionality PPA (recommended for typical hyperscaler)
Section titled “Structure A: BTM additionality PPA (recommended for typical hyperscaler)”- 60 MW PV on rooftop + adjacent land
- PPA premium: RM 350-400/MWh (covers BTM + carbon attributes)
- Hyperscaler stacks REC procurement for the 92% gap
- Bankable today
Structure B: Larger-PV + BESS for partial 24/7 (for ambitious tenants)
Section titled “Structure B: Larger-PV + BESS for partial 24/7 (for ambitious tenants)”- 150-200 MW PV on extended site footprint
- 100-200 MWh BESS for 4-h evening peak coverage
- PPA premium: RM 450-550/MWh
- Delivers ~25-30% verified hourly 24/7 matching
- BESS economics still negative on its own; tenant pays a “24/7 capability premium”
Structure C: Off-site PPA layer (separate contract)
Section titled “Structure C: Off-site PPA layer (separate contract)”- CRESS / CGPP / cross-border PPAs for the 70-90% off-site share
- Regulatory engagement for ENEGEM cross-border imports
- Volume-priced separately from the on-site PV
- Delivers true 80-95% 24/7 CFE
Most tenants will need Structure A + Structure C. Structure B is for flagship “24/7 CFE pioneer” tenants willing to pay the BESS premium for auditable on-site time-shifting.
- This report:
reports/cfe_247_analysis.md - Raw scenarios:
reports/cfe_247.json - Source code:
src/jb_vpp/models/cfe_247.py - Cross-references:
reports/carbon_re100_analysis.md,reports/btm_economics_dc100.md,reports/EXECUTIVE_SUMMARY.md
Caveats
Section titled “Caveats”- Flat 7×24 DC load assumed (no cooling-CDH variance — tested separately in btm_economics; impact on 24/7 ratio is < 1 pp).
- No PV degradation in this analysis (uses 5y avg POWER GHI).
- BESS dispatch is heuristic (charge from PV surplus only, discharge whenever pv < load). LP-optimal could marginally improve; expected delta < 2 pp on mean CFE.
- “Carbon-free” treats grid charging as 0% CFE-eligible. If/when MY grid hits ≥ 70% RE (NETR 2050 target), grid charging may partially qualify, lifting BESS’s 24/7 contribution.