Solar canopy ROI model for river walk
01COMPLETED WORK
- Sized the array: 40 x 400 W = 16 kW; assumed 1,250 kWh/kW/yr (temperate-coastal canopy).
- Flat-tariff model finished: ~20,000 kWh/yr, ~$3,600/yr savings, simple payback ~11.4 yr, 15-yr net ~+$13k.
- Escalated model finished (4%/yr price rise, 0.5%/yr degradation): break-even ~9.8 yr, 15-yr net ~+$28.4k.
- Cross-checked annual yield against NREL PVWatts at the river-walk coordinates; within 6%.
02CURRENT STATE
- Two Python models agreed on.
install_cost = $41,000(turnkey, after incentives),price = $0.18/kWh. - Headline agreed: present the escalated case ($28.4k / 9.8 yr); keep the flat case as the conservative floor.
- Current escalated model, verbatim:
cum, rows = -install_cost, []
for yr in range(1, 16):
yield_yr = annual * (1 - 0.005) ** (yr - 1) # degradation
tariff = price * (1 + 0.04) ** (yr - 1) # escalation
cum += yield_yr * tariff
rows.append((yr, round(cum)))
print(rows[-1]) # (15, 28362)03IN PROGRESS
- Drafting the one-page board summary: ROI table done, narrative paragraph half-written.
04NEXT STEPS
- Add a sensitivity row for +/- 10% install cost.
- DECIDE: include battery storage in the v2 model vs keep PV-only for the board.
- Export the cumulative-savings chart at 2x for the slide deck.
- Send the summary to the city engineer for the permitting note.
05CONSTRAINTS
- User: conservative assumptions for any number shown to the board.
- Planning dept: canopy mounting only, no ground array (decided).
- User: hard budget cap of $45k turnkey.
06CRITICAL CONTEXT
- Yield assumption is the biggest lever on the result; PVWatts run used the river-walk coordinates.
- Incentives are already netted out of
install_cost— do not double-count them.
07DISCARDED ATTEMPTS
- Ground-mount layout: rejected, no land and it blocks the path.
- 30-year horizon: rejected, panels warrantied 25 yr and the user wanted a 15-yr view.
ATTACHMENTS
Images
Files
File · solar-roi-model.py
Two ROI models in one script: flat and 4%/yr escalated tariff, with 0.5%/yr panel degradation.