Skip to content

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

ScenarioMean CFEP10Hours ≥ 50%Hours = 100%PV utilised
60 MW PV (BTM-econ-optimal), no BESS8.1%0%0%0%100%
60 MW PV + 60 MWh BESS8.1%0%0%0%100%
90 MW PV, no BESS12.1%0%2.8%0%100%
150 MW PV, no BESS20.2%0%19.1%0%100%
150 MW + 100 MWh BESS20.2%0%19.1%0%100%
200 MW PV, no BESS26.2%0%26.0%6.5%97%
200 MW + 200 MWh BESS26.8%0%26.5%8.3%99.9%
300 MW + 400 MWh BESS38.2%0%36.6%23.4%96%
500 MW + 800 MWh BESS56.3%0%57.8%37.7%87%

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:

pv_mwghi_max/1000PRload_mw\text{pv\_mw} \cdot \text{ghi\_max} / 1000 \cdot \text{PR} \geq \text{load\_mw}

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:

SourceCoverageNotes
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 offsetsresidual 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.

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