File size: 3,860 Bytes
b555fe1 a851214 372b3f3 0cdc019 7a4002e 23fc541 ad6586e 0cdc019 618f85b eaee169 70d18af 27cc353 a851214 b555fe1 a851214 27cc353 ad6586e 586cb7a eaee169 ad6586e eaee169 2d29e28 ad6586e 54c70ee b555fe1 822b684 eaee169 c148187 ad6586e c148187 ad6586e 233f1db ad6586e 1854cda b555fe1 ad6586e b555fe1 ad6586e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
import streamlit as st
import pandas as pd
import google.generativeai as genai
import os
from dotenv import load_dotenv
import plotly.graph_objects as go
# Load environment variables
load_dotenv()
# Set page configuration
st.set_page_config(page_title="☀️AI-Based Solar Project Estimation Tool", layout="centered")
# Load solar data
@st.cache_data
def load_data():
df = pd.read_csv('https://huggingface.co/spaces/MLDeveloper/AI_based_Solar_Project_Estimation_Tool/resolve/main/solar_data_india_2024.csv')
return df
df = load_data()
# Constants
TARIFF_RATE = 7 # ₹7 per kWh
ROOFTOP_CONVERSION_FACTOR = 0.10 # 0.10 kW per sq meter
# UI - Form
st.title("☀️AI-Based Solar Project Estimation Tool")
st.write("### Enter Your Details Below:")
with st.form("solar_form"):
state_options = df['State'].dropna().unique()
location = st.selectbox("Select your State", options=sorted(state_options))
project_type = st.radio(
"Select Solar Project Type",
options=["Rooftop Solar", "Ground Mount Solar"]
)
if project_type == "Rooftop Solar":
roof_size = st.number_input("Enter your roof size (in sq meters)", min_value=1)
electricity_bill = st.number_input("Enter your monthly electricity bill (₹)", min_value=0)
desired_kwh = None
else:
desired_kwh = st.number_input("Enter desired monthly solar electricity production (kWh)", min_value=1)
electricity_bill = st.number_input("Enter your monthly electricity bill (₹)", min_value=0)
roof_size = None
submitted = st.form_submit_button("Get Estimate")
# Calculate directly
if submitted and location:
state_data = df[df['State'].str.contains(location, case=False)].iloc[0]
if state_data is not None:
ghi = state_data['Avg_GHI (kWh/m²/day)']
solar_cost_per_kw = state_data['Solar_Cost_per_kW (₹)']
if project_type == "Rooftop Solar":
system_size_kw = round(roof_size * ROOFTOP_CONVERSION_FACTOR, 2)
estimated_daily_output = round(system_size_kw * ghi, 2)
else:
system_size_kw = round(desired_kwh / (30 * ghi), 2)
estimated_daily_output = round(system_size_kw * ghi, 2)
total_system_cost = round(system_size_kw * solar_cost_per_kw, 2)
monthly_savings = round(estimated_daily_output * 30 * TARIFF_RATE, 2)
payback_period = round(total_system_cost / (monthly_savings * 12), 2)
# Display Results
st.subheader("🔹 Solar Project Estimate")
st.write(f"**Estimated solar system size in kW**: {system_size_kw}")
st.write(f"**Estimated daily solar output in kWh**: {estimated_daily_output}")
st.write(f"**Total system cost in ₹**: {total_system_cost}")
st.write(f"**Monthly savings in ₹**: {monthly_savings}")
st.write(f"**Payback period in years**: {payback_period}")
# Visual Summary
st.subheader("📊 Visual Summary")
fig = go.Figure(data=[
go.Bar(
name="System Parameters",
x=["System Size (kW)", "Daily Output (kWh)", "Total Cost (₹)", "Monthly Savings (₹)", "Payback (Years)"],
y=[system_size_kw, estimated_daily_output, total_system_cost, monthly_savings, payback_period],
marker_color='#636EFA'
)
])
fig.update_layout(
title="Solar System Estimation Overview",
yaxis_title="Values",
xaxis_title="Parameters"
)
st.plotly_chart(fig, use_container_width=True)
st.info("Note: Tariff assumed ₹7/kWh. Actual payback may vary based on location, grid policy, and maintenance.")
else:
st.error("State data not found. Please try a valid state.")
else:
st.warning("Please complete all fields to get your estimate.")
|