As an engineer who designs renewable energy systems, I have seen many U.S. homeowners struggle to decide whether it is worth investing in solar panels and batteries. Online calculators often use simple data or ignore regional utility tariffs, which can make the savings estimates seem unrealistic. My goal is to create a tool that is clear and based on facts. This will help consumers make informed decisions about energy.
- Input: user address or ZIP → geocoded to lat/lon via OpenStreetMap Nominatim.
- Solar resource & production: PVWatts v8 returns
ac_annual,ac_monthly, andcapacity_factorfor that location. - Tariffs: NREL Utility Rates/URDB fetch residential ¢/kWh and DG rules to price self-consumption vs export.
- Sizing logic: combine production with user/system cost assumptions to propose PV kW and battery kWh bands aimed at shortest payback and backup-hours targets.
- Outputs in the prototype (scripts/): savings/payback bands (best/base/conservative), bill offset %, and estimated backup hours by battery size.
- Comms artefact (M4): landing page/brief will render these API-backed scenarios for homeowners.
- Repository setup: GitHub project board (Backlog → In Progress → Review → Done) and branch protections on
main(PR + review required); PR template lives at.github/pull_request_template.md. Add the board URL and protection status here once set. - Collaboration docs: group norms, constraints, communication plan, and learning goals stored in
planning/README.md. - Meeting agendas/minutes: kept in
planning/meeting_notes.md(rolling log). - Milestones: six course milestones defined and tracked in the repo.
- Retrospective: record M0 reflections in
planning/meeting_notes.mdunder M0. - Tag: create
m0-setupon the final M0 commit before M1 work begins. - Survey: complete the M0 course survey (note completion in meeting notes).
This milestone consolidates our understanding of the U.S. residential solar-plus-storage domain and formalizes the research question that drives subsequent work. The full narrative, literature review, and analytical framing are documented in 0_domain_study/README.md and 1_problem_identification/README.md.
For Milestone 1, we provide the following deliverables:
- A problem statement grounded in practitioner experience, based on the perspective of a renewable energy systems engineer working with U.S. homeowners (see the M0 overview and
1_data_analysis/README.md). - A background review of the research domain, including energy price trends, policy incentives, load profiles, and solar-plus-storage adoption, with references to EIA, NREL, SEIA, and related sources (
0_domain_study/README.md). - A structured summary of the group’s systems-level understanding of the problem domain, covering households, utilities, policy, and technology (
1_data_analysis/README.md). - An actionable research question that guides the modelling and data work for subsequent milestones: How can open-access solar radiation data and public APIs be used to model and predict the optimal solar and battery system size for U.S. households to maximize energy cost savings and minimize payback time?
- A set of planning artefacts (group norms, learning goals, constraints, and a communication plan) maintained in the team’s collaboration tools, with key assumptions reflected in the project documentation.
- A short retrospective for this milestone that captures what worked well, what was challenging, and what we will adjust going into M2 (
1_data_analysis/README.md). - A labelled Git tag (for example,
m1-domain-research) created on the final M1 commit before the deadline to serve as the evaluation baseline. - Completion of the official Milestone 1 survey by all team members in accordance with course requirements.
Our work is guided by a single core question:
How can open-access solar radiation data and public APIs be used to model and predict the optimal solar and battery system size for U.S. households to maximize energy cost savings and minimize payback time?
This question frames the platform as a decision-support tool for homeowners who want to understand whether a rooftop PV plus battery investment is financially attractive under their local conditions.
To operationalize this question, we model the investment decision using three integrated components:
-
Environmental Factors
- Solar irradiance and climate conditions for a specific location.
- Modeled using NREL PVWatts® v8, which provides annual AC energy output and performance metrics based on NSRDB TMY data.
-
Economic & Policy Factors
- Retail electricity prices and tariff structures from OpenEI / Utility Rate Database (URDB).
- Federal incentives (e.g., IRS Section 25D Residential Clean Energy Credit) and state-level SREC market values where available.
-
Technical System Parameters
- PV system size, inverter efficiency, and battery capacity from user input, combined with PVWatts outputs (such as
ac_annualandcapacity_factor).
- PV system size, inverter efficiency, and battery capacity from user input, combined with PVWatts outputs (such as
These elements feed into a simplified energy-balance and financial model that:
- Estimates how much grid consumption is offset by solar generation and storage.
- Derives annual bill savings, net investment cost after incentives, and payback period.
- Supports comparison of different system sizes and configurations to identify an economically optimal solar + battery bundle for a given household.
All inputs are sourced through public, reproducible APIs (NREL, OpenEI, IRS, SREC providers) and standardized into an analysis-ready dataset. While this creates a scalable modeling framework, it also introduces known limitations:
- Use of typical meteorological year (TMY) data rather than full historical weather.
- Simplified household load assumptions instead of detailed hourly smart meter data.
- Uneven availability and granularity of tariff and SREC data across utilities and states.
Despite these constraints, the model provides a transparent, data-driven baseline for evaluating residential solar and battery investments at scale and serves as the analytical backbone for subsequent milestones in this project.
- Scripts and raw pulls live in
2_data_collection/data/(fetch_geocode.py,fetch_pvwatts.py,fetch_rates.py,clean_merge_dataset.py,generate_visualizations.py). - Raw API responses:
2_data_collection/data/raw/. - Processed dataset:
2_data_collection/data/processed/solar_analysis_dataset.csv(8 sample locations with production, rates, and payback fields). - Visual outputs:
2_data_collection/data/visualizations/. - For full steps, see
2_data_collection/data/README.md; setNREL_API_KEYin2_data_collection/data/.envbefore running the pipeline.
This milestone validates our solar PV + battery sizing question using transparent, question-driven analysis rather than heavy-weight ML. Methods must fit the data we have (PVWatts outputs, tariff data, user load assumptions) and stay reproducible under project constraints.
- Frame answerable questions and state the limits of what the data can and cannot support.
- Select appropriate, minimal techniques (scenario tables, bar/line charts, sensitivity checks) that align with available data and time.
- Quantify and communicate uncertainty (weather variability, tariff gaps, load assumptions) and be ready to accept null or undesirable results.
- Document every step so results can be replicated and critiqued.
Milestone deliverables (see M3. Data Analysis for full detail)
- Non-technical findings with visuals, uncertainty levels, and key caveats.
- Technical write-up explaining chosen methods, rationale, flaws, and alternative approaches.
- Reproducibility package: scripts/notebooks and documentation so others can re-run the analysis on the same data.
- Milestone survey completed per course requirements.
- Tagged commit for the milestone (e.g.,
m3-data-analysis) created before the deadline. - Retrospective (group + individual) capturing lessons learned and adjustments for M4.
A lightweight Flask prototype that exercises the sizing logic and visual outputs lives in scripts/ (run locally or via Docker; see scripts/README.md).
This milestone turns our analysis into audience-fit messaging for U.S. homeowners deciding whether rooftop solar plus a battery is worth it.
- Audience: mobile-first homeowners (30–65) in high-tariff or outage-prone states (CA, TX, FL) with $120–$300 monthly bills; time-constrained and non-technical but engaged in HOA/neighborhood groups.
- Learning goals: see ZIP-specific savings/payback ranges that include the 25D tax credit, understand outage backup hours by battery size, and know what drives uncertainty.
- Desired actions: run the address-based check, select an “outage-ready” preset, schedule a follow-up, and share the summary with neighbors/HOA.
- Uncertainty framing: present best/base/conservative bands, flag tariff/load assumptions, and invite them to confirm their rate plan before acting.
- Medium: mobile-first landing page with an embedded scenario snapshot (from
scripts/), plus a printable 2-page brief for HOA/email/WhatsApp distribution. - Rationale: fits mobile sharing habits, fast to skim, localized by ZIP to build trust.
- Assets: will be stored under
4_Communicating_Results/(built from PVWatts + URDB data and the Flask visuals).
- Audience & strategy doc with personas, goals, channels, and success criteria (
4_Communicating_Results/strategy.md). - Communication artifact aligned to the strategy (PDF/landing copy) in
4_Communicating_Results/artifacts/. - Completed milestone survey (course requirement).
- Tagged commit created before the deadline (planned tag:
m4-communication). - Group and individual retrospective stored alongside the artifact.
- Retrieve solar resource and performance data via the official U.S. Government API:
NREL PVWatts® API (v8). - Automatically obtain geographical coordinates from a given address using
OpenStreetMap Nominatim API. - Estimate annual electricity generation and system efficiency based on real-world irradiance data.
- Compute financial feasibility metrics: system cost, savings, and payback period.
- Provide data visualization for consumers to explore scenarios interactively.
- Deliverable: 2.5-minute pitch covering research question, findings, and communication strategy; link to deck/video will live in
5_final_presentation/. - Tag: planned
m5-final-presentationbefore submission. - Survey & retrospectives: per syllabus; individual and group notes to be stored alongside the deck.
The platform integrates data collection, processing, and analysis in the following workflow:
| Step | Description | API / Data Source |
|---|---|---|
| 1. Geocoding | Convert user-entered address to latitude and longitude. | OpenStreetMap Nominatim |
| 2. Solar Data Retrieval | Query U.S. Government solar datasets for irradiance and production estimates. | NREL PVWatts API v8 |
| 3. Data Modeling | Calculate optimal PV system and battery configuration based on consumption and cost data. | Internal algorithms |
| 4. Financial Analysis | Compute annual savings, ROI, and payback period. | User input + cost model |
| 5. Visualization | Present results clearly for non-technical users. | Web-based dashboard |
This open, API-driven architecture allows scalability and reproducibility for various U.S. locations.
By bridging publicly available U.S. energy data and consumer decision tools, the project aims to:
- Help households reduce energy bills and carbon footprint.
- Increase awareness of renewable energy economics.
- Demonstrate data science applications for sustainability and smart energy systems.
.
├── 0_domain_study/
│ └── README.md
├── 1_problem_identification/
│ └── README.md
├── 2_data_collection/
│ └── README.md
├── 3_data_analysis/
│ └── README.md
├── 4_Communicating_Results/
│ └── README.md
├── scripts/
│ ├── app.py
│ ├── app_improved.py
│ ├── api.py
│ ├── analysis_helpers.py
│ ├── config.py
│ ├── validators.py
│ ├── swagger_spec.py
│ ├── logger.py
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── README.md
│ ├── requirements.txt
│ ├── .env.example
│ ├── data/
│ ├── static/
│ │ └── css/
│ │ └── style.css
│ └── templates/
│ ├── advanced_budget_analysis.html
│ ├── base.html
│ ├── budget_analysis.html
│ ├── index.html
│ ├── results.html
│ └── sizing.html
├── 2_data_collection/
│ ├── README.md
│ ├── loadprofile.png
│ └── data/
│ ├── .env
│ ├── README.md
│ ├── fetch_geocode.py
│ ├── fetch_pvwatts.py
│ ├── fetch_rates.py
│ ├── clean_merge_dataset.py
│ ├── generate_visualizations.py
│ ├── raw/
│ │ ├── geocode_results.json
│ │ ├── pvwatts_results.json
│ │ └── utility_rates_results.json
│ ├── processed/
│ │ └── solar_analysis_dataset.csv
│ └── visualizations/
│ ├── srec_pricing_analysis.png
│ ├── irradiance_by_region.png
│ ├── seasonal_production_comparison.png
│ ├── latitude_analysis.png
│ ├── production_geographic_map.png
│ ├── location_summary_table.png
│ ├── electricity_rates_comparison.png
│ └── performance_metrics_summary.png
├── .gitignore
├── LICENSE
└── README.md
Geocoding & Coordinates
- OpenStreetMap Nominatim API: free geocoding service used for address-to-coordinate conversion. Compliance with rate limits and usage policy is maintained.
Solar Resource & Production
- NREL PVWatts® API (v8): primary data source for solar energy modeling and irradiance estimation.
- NREL Solar Resource Data API (v1): supplementary irradiance data (GHI, DNI, tilt-at-latitude).
Tariffs & Export Credits
- NREL Utility Rates API (v3): provides annual average electricity rates by sector.
- OpenEI Utility Rate Database (URDB): includes time-of-use structures and dgrules for distributed generation (Net Metering, Net Billing, Buy‑All‑Sell‑All).
Federal Incentives
- IRS Residential Clean Energy Credit (Section 25D): 30 % credit for solar + battery systems (2022–2032); claimable via Form 5695.
SREC Programs
- EPA State Solar REC Markets: definition 1 SREC = 1 MWh.
- Solar United Neighbors Guide: consumer overview and current state programs.
Market & Statistical Data
- EIA Electric Power Monthly: national and state‑level retail electricity prices (Tables 5.3 & 5.6.A).
- SEIA Solar Market Insight 2024: annual capacity additions and market trends.
This project is released under the MIT License — open for educational and non-commercial use.