Files
SITER-Solar/images/v2-image-2.svg
Charles N Wyble 400764a9ff feat: initial project setup with bash-based NREL analysis
- Add bash script (siter-solar-analysis.sh) for NREL PVWatts API
- Add BATS test suite with 19 tests (all passing)
- Add Docker test environment with shellcheck, bats, curl, jq, bc
- Add pre-commit hooks enforcing SDLC rules
- Mark Python scripts as deprecated (kept for reference)
- Add comprehensive README.md and AGENTS.md documentation
- Add .env.example for configuration template
- Add .gitignore excluding private data (base-bill/, .env)
- Add SVG diagrams for presentation
- Redact all private location data (use SITER placeholder)

All work done following SDLC: Docker-only development, TDD approach,
conventional commits, code/docs/tests synchronized.

Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-27 16:45:41 -05:00

121 lines
7.4 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 450">
<defs>
<linearGradient id="barGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#f59e0b;stop-opacity:1" />
<stop offset="100%" style="stop-color:#d97706;stop-opacity:1" />
</linearGradient>
<linearGradient id="consumptionGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#3b82f6;stop-opacity:1" />
<stop offset="100%" style="stop-color:#1d4ed8;stop-opacity:1" />
</linearGradient>
</defs>
<!-- Background -->
<rect width="800" height="450" fill="#f8fafc"/>
<!-- Title -->
<text x="400" y="30" text-anchor="middle" font-family="Arial, sans-serif" font-size="18" font-weight="bold" fill="#1e293b">Solar Production vs Monthly Consumption</text>
<text x="400" y="50" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#64748b">16 × 250W panels = 4.0 kW DC | SITER, Pflugerville, TX</text>
<!-- Y-axis -->
<line x1="80" y1="70" x2="80" y2="340" stroke="#cbd5e1" stroke-width="1"/>
<text x="40" y="205" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#64748b" transform="rotate(-90, 40, 205)">kWh</text>
<!-- Y-axis labels -->
<text x="70" y="344" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">0</text>
<text x="70" y="289" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">750</text>
<text x="70" y="234" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">1,500</text>
<text x="70" y="179" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">2,250</text>
<text x="70" y="124" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">3,000</text>
<text x="70" y="74" text-anchor="end" font-family="Arial, sans-serif" font-size="10" fill="#94a3b8">3,750</text>
<!-- Grid lines -->
<g stroke="#e2e8f0" stroke-width="1">
<line x1="80" y1="284" x2="760" y2="284"/>
<line x1="80" y1="229" x2="760" y2="229"/>
<line x1="80" y1="174" x2="760" y2="174"/>
<line x1="80" y1="119" x2="760" y2="119"/>
<line x1="80" y1="74" x2="760" y2="74"/>
</g>
<!-- X-axis -->
<line x1="80" y1="340" x2="760" y2="340" stroke="#cbd5e1" stroke-width="1"/>
<!-- Monthly data: Consumption (blue) vs Solar (orange) -->
<!-- Scale: 3500 kWh = 270px height, so each kWh = 0.077px -->
<!-- Y offset: 340 - value * 0.077 -->
<!-- Jan: Consumption ~1333 (winter avg), Solar 450 -->
<rect x="95" y="237" width="22" height="103" fill="url(#consumptionGrad)" rx="2"/>
<rect x="120" y="305" width="22" height="35" fill="url(#barGrad)" rx="2"/>
<text x="117" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Jan</text>
<!-- Feb: Consumption ~1333, Solar 453 -->
<rect x="150" y="237" width="22" height="103" fill="url(#consumptionGrad)" rx="2"/>
<rect x="175" y="305" width="22" height="35" fill="url(#barGrad)" rx="2"/>
<text x="172" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Feb</text>
<!-- Mar: Consumption ~1777 (shoulder), Solar 492 -->
<rect x="205" y="203" width="22" height="137" fill="url(#consumptionGrad)" rx="2"/>
<rect x="230" y="302" width="22" height="38" fill="url(#barGrad)" rx="2"/>
<text x="227" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Mar</text>
<!-- Apr: Consumption ~1777, Solar 508 -->
<rect x="260" y="203" width="22" height="137" fill="url(#consumptionGrad)" rx="2"/>
<rect x="285" y="301" width="22" height="39" fill="url(#barGrad)" rx="2"/>
<text x="282" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Apr</text>
<!-- May: Consumption ~1777, Solar 534 -->
<rect x="315" y="203" width="22" height="137" fill="url(#consumptionGrad)" rx="2"/>
<rect x="340" y="299" width="22" height="41" fill="url(#barGrad)" rx="2"/>
<text x="337" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">May</text>
<!-- Jun: Consumption ~2912 (summer), Solar 514 -->
<rect x="370" y="116" width="22" height="224" fill="url(#consumptionGrad)" rx="2"/>
<rect x="395" y="300" width="22" height="40" fill="url(#barGrad)" rx="2"/>
<text x="392" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Jun</text>
<!-- Jul: Consumption ~2912, Solar 555 -->
<rect x="425" y="116" width="22" height="224" fill="url(#consumptionGrad)" rx="2"/>
<rect x="450" y="297" width="22" height="43" fill="url(#barGrad)" rx="2"/>
<text x="447" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Jul</text>
<!-- Aug: Consumption ~2912, Solar 571 (peak) -->
<rect x="480" y="116" width="22" height="224" fill="url(#consumptionGrad)" rx="2"/>
<rect x="505" y="296" width="22" height="44" fill="url(#barGrad)" rx="2"/>
<text x="502" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Aug</text>
<!-- Sep: Consumption ~2912, Solar 514 -->
<rect x="535" y="116" width="22" height="224" fill="url(#consumptionGrad)" rx="2"/>
<rect x="560" y="300" width="22" height="40" fill="url(#barGrad)" rx="2"/>
<text x="557" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Sep</text>
<!-- Oct: Consumption ~1777, Solar 516 -->
<rect x="590" y="203" width="22" height="137" fill="url(#consumptionGrad)" rx="2"/>
<rect x="615" y="300" width="22" height="40" fill="url(#barGrad)" rx="2"/>
<text x="612" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Oct</text>
<!-- Nov: Consumption ~1333, Solar 469 -->
<rect x="645" y="237" width="22" height="103" fill="url(#consumptionGrad)" rx="2"/>
<rect x="670" y="304" width="22" height="36" fill="url(#barGrad)" rx="2"/>
<text x="667" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Nov</text>
<!-- Dec: Consumption ~1333, Solar 429 -->
<rect x="700" y="237" width="22" height="103" fill="url(#consumptionGrad)" rx="2"/>
<rect x="725" y="307" width="22" height="33" fill="url(#barGrad)" rx="2"/>
<text x="722" y="355" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#64748b">Dec</text>
<!-- Legend -->
<rect x="250" y="375" width="300" height="60" rx="6" fill="white" stroke="#e2e8f0"/>
<rect x="270" y="395" width="20" height="15" fill="url(#consumptionGrad)" rx="2"/>
<text x="300" y="407" font-family="Arial, sans-serif" font-size="11" fill="#64748b">Monthly Consumption (avg by season)</text>
<rect x="270" y="415" width="20" height="15" fill="url(#barGrad)" rx="2"/>
<text x="300" y="427" font-family="Arial, sans-serif" font-size="11" fill="#64748b">Solar Production (NREL estimate)</text>
<!-- Summary stats -->
<rect x="580" y="375" width="180" height="60" rx="4" fill="#fef3c7"/>
<text x="670" y="395" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" fill="#92400e">Annual Production: 6,004 kWh</text>
<text x="670" y="412" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#a16207">Annual Consumption: ~22,600 kWh</text>
<text x="670" y="427" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" fill="#92400e" font-weight="bold">Offset: 26.6%</text>
</svg>