solar-intelligence / examples /quickstart.py
ghostieee11's picture
Upload folder using huggingface_hub
15b595e verified
Raw
History Blame Contribute Delete
4.41 kB
"""Quick start example for Solar Intelligence Platform.
Demonstrates the core workflow:
1. Load solar data (synthetic)
2. Analyze irradiance patterns
3. Estimate energy production
4. Find optimal panel orientation
5. Run financial analysis
6. Generate AI insights
"""
import logging
from solar_intelligence.ai_engine import SolarAIEngine
from solar_intelligence.data_loader import generate_synthetic_solar_data
from solar_intelligence.energy_estimator import EnergyEstimator
from solar_intelligence.financial import FinancialAnalyzer
from solar_intelligence.orientation_simulator import OrientationSimulator
from solar_intelligence.solar_analysis import SolarAnalyzer
logger = logging.getLogger(__name__)
def main():
"""Run the complete Solar Intelligence analysis pipeline."""
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
)
# --- Configuration ---
CITY = "New Delhi"
LAT, LON = 28.6139, 77.2090
logger.info("Solar Potential Intelligence Platform")
logger.info("Location: %s (%.4f N, %.4f E)", CITY, LAT, LON)
# --- 1. Load Data ---
logger.info("1. Loading solar radiation data...")
ds = generate_synthetic_solar_data(lat=LAT, lon=LON, start_year=2020, end_year=2023)
logger.info(" Dataset: %d days, %s...", len(ds.time), list(ds.data_vars)[:5])
# --- 2. Solar Analysis ---
logger.info("2. Analyzing solar irradiance...")
analyzer = SolarAnalyzer(dataset=ds, latitude=LAT, longitude=LON)
summary = analyzer.summary()
logger.info(" Average daily GHI: %.2f kWh/m2/day", summary["average_daily_ghi"])
logger.info(" Annual solar energy: %.0f kWh/m2/year", summary["annual_solar_energy_kwh_m2"])
logger.info(" Best month: %s (%.2f)", summary["best_month"], summary["best_month_ghi"])
logger.info(" Worst month: %s (%.2f)", summary["worst_month"], summary["worst_month_ghi"])
# --- 3. Energy Estimation ---
logger.info("3. Estimating energy production...")
estimator = EnergyEstimator(
panel_efficiency=0.20,
panel_area=1.7,
num_panels=20,
system_losses=0.14,
)
energy_summary = estimator.system_summary(ds)
logger.info(" System capacity: %.1f kW", energy_summary["system"]["capacity_kw"])
logger.info(" Annual energy: %,.0f kWh", energy_summary["production"]["annual_energy_kwh"])
logger.info(" Capacity factor: %.1f%%", energy_summary["performance"]["capacity_factor_pct"])
# --- 4. Orientation Simulation ---
logger.info("4. Simulating panel orientations...")
simulator = OrientationSimulator(
latitude=LAT, longitude=LON,
panel_efficiency=0.20,
panel_area=estimator.total_area,
system_losses=0.14,
tilt_angles=[0, 15, 30, 45],
azimuths={"North": 0, "East": 90, "South": 180, "West": 270},
)
ghi_year = ds["ALLSKY_SFC_SW_DWN"].sel(time=slice("2023-01-01", "2023-12-31")).values
optimal = simulator.optimal_orientation(ghi_year, year=2023)
logger.info(" Optimal: %s at %d tilt", optimal["best_direction"], optimal["best_tilt"])
logger.info(" Gain vs horizontal: %.1f%%", optimal["energy_gain_vs_horizontal_pct"])
logger.info(" Gain vs worst: %.1f%%", optimal["energy_gain_vs_worst_pct"])
# --- 5. Financial Analysis ---
logger.info("5. Financial analysis...")
annual_energy = energy_summary["production"]["annual_energy_kwh"]
financial = FinancialAnalyzer(
system_cost=20000,
electricity_rate=0.12,
incentive_percent=0.30,
)
fin = financial.financial_summary(annual_energy)
logger.info(" Net cost: $%,.0f", fin["investment"]["net_cost"])
logger.info(" Payback: %s years", fin["returns"]["payback_years"])
logger.info(" 25-year NPV: $%,.0f", fin["returns"]["npv_25yr"])
logger.info(" ROI: %.0f%%", fin["returns"]["roi_pct"])
logger.info(" CO2 offset: %,.0f kg/year", fin["environmental"]["annual_co2_offset_kg"])
logger.info(" Equivalent trees: %d", fin["environmental"]["equivalent_trees"])
# --- 6. AI Insights ---
logger.info("6. Generating AI insights...")
ai = SolarAIEngine()
report = ai.generate_report(summary, energy_summary, fin, optimal)
logger.info("AI Report:\n%s", report)
logger.info("Analysis complete!")
if __name__ == "__main__":
main()