Spaces:
Sleeping
Sleeping
File size: 6,555 Bytes
e64644c 96286cb e64644c 85f9199 31f6eb4 e64644c 31f6eb4 18de9e7 85f9199 31f6eb4 e64644c 31f6eb4 e64644c 85f9199 e64644c 85f9199 e64644c 31f6eb4 85f9199 68ee376 09d90d6 18de9e7 09d90d6 |
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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
import streamlit as st
import numpy as np
from io import BytesIO
# Function to calculate load and solar panel requirement
def calculate_requirements(equipment, system_type):
total_load = 0
# Calculate total load based on counts and wattage
for item, values in equipment.items():
total_load += values['wattage'] * values['count'] # Total load in watts
total_load_kw = total_load / 1000 # Convert watts to kilowatts
# Solar panel estimation (assume 300W per panel for On-Grid)
panel_wattage = 550 # Wattage of a single solar panel
panels_required = np.ceil(total_load_kw / (panel_wattage / 1000)) # Number of panels required
# Battery capacity estimation (for Off-Grid and Hybrid)
if system_type in ["Off-Grid", "Hybrid"]:
battery_capacity = total_load_kw * 6 # Assuming 6 hours of backup for Off-Grid/Hybrid
else:
battery_capacity = 0 # No battery needed for On-Grid
# Inverter sizing (assumed 1.2 times the total load for safety)
inverter_capacity = total_load_kw * 1.2
# DC cable sizing (estimate based on total load and distance)
dc_cable_size = 10 # Dummy value, in meters
# Average daily electricity production from solar panels
avg_daily_production = panels_required * panel_wattage * 5 / 1000 # Assuming 5 hours of sunlight per day
return panels_required, battery_capacity, inverter_capacity, dc_cable_size, avg_daily_production
# App UI
st.title("Solar System Installation Estimator")
st.markdown("""
**Welcome to the Solar System Estimator!**
Use this app to estimate the requirements for your solar system based on your home appliances and preferences.
""")
# Collecting user input
st.sidebar.header("Enter your details")
num_stories = st.sidebar.selectbox("Number of Stories", ["Single Story", "Two Story"])
system_type = st.sidebar.selectbox("System Type", ["On-Grid", "Off-Grid", "Hybrid"])
# Default wattage values and adjustable wattage inputs
equipment = {
"Fan": {'wattage': 80, 'count': st.sidebar.number_input("Number of Fans", min_value=0, value=2), 'adjustable_wattage': st.sidebar.slider("Fan Wattage (W)", 40, 150, 80)},
"AC": {'wattage': 1500, 'count': st.sidebar.number_input("Number of ACs", min_value=0, value=1), 'adjustable_wattage': st.sidebar.slider("AC Wattage (W)", 1000, 2500, 1500)},
"Fridge": {'wattage': 200, 'count': st.sidebar.number_input("Number of Fridges", min_value=0, value=1), 'adjustable_wattage': st.sidebar.slider("Fridge Wattage (W)", 100, 400, 200)},
"Tube Lights": {'wattage': 40, 'count': st.sidebar.number_input("Number of Tube Lights", min_value=0, value=5), 'adjustable_wattage': st.sidebar.slider("Tube Light Wattage (W)", 20, 100, 40)},
"Iron": {'wattage': 1200, 'count': st.sidebar.number_input("Number of Irons", min_value=0, value=1), 'adjustable_wattage': st.sidebar.slider("Iron Wattage (W)", 800, 2000, 1200)},
"Electric Motor Pump": {'wattage': 500, 'count': st.sidebar.number_input("Number of Electric Motor Pumps", min_value=0, value=1), 'adjustable_wattage': st.sidebar.slider("Motor Pump Wattage (W)", 100, 1000, 500)},
"Energy Saver": {'wattage': 15, 'count': st.sidebar.number_input("Number of Energy Savers", min_value=0, value=5), 'adjustable_wattage': st.sidebar.slider("Energy Saver Wattage (W)", 10, 40, 15)},
"Electric Geyser": {'wattage': 3000, 'count': st.sidebar.number_input("Number of Electric Geysers", min_value=0, value=1), 'adjustable_wattage': st.sidebar.slider("Geyser Wattage (W)", 1000, 5000, 3000)},
}
# Adjust wattage of each appliance based on user input
for appliance, values in equipment.items():
values['wattage'] = values['adjustable_wattage']
# Button to calculate
if st.sidebar.button("Estimate Solar Requirements"):
panels, battery, inverter, cable, avg_daily_production = calculate_requirements(equipment, system_type)
# Display results
st.subheader(f"Estimated Solar System Requirements ({system_type} Solution)")
# Display load summary
st.write(f"Total Load: {sum([values['wattage'] * values['count'] for values in equipment.values()])} W")
# List the components required for installation
st.write("### Required Components for Solar Installation:")
st.write(f"- **Solar Panels**: {panels} panels (Each panel is 300W)")
if system_type != "On-Grid":
st.write(f"- **Battery Capacity**: {battery} kWh (for {system_type} system)")
else:
st.write("- **Battery**: No battery required for On-Grid system")
st.write(f"- **Inverter Capacity**: {inverter:.2f} kW")
st.write(f"- **DC Cable**: {cable} meters (estimated length)")
# Average daily electricity production (kWh)
st.write(f"**Average Daily Electricity Production**: {avg_daily_production:.2f} kWh")
# Display appliance summary
st.write("### Appliance Summary:")
for appliance, values in equipment.items():
st.write(f"- {values['count']} {appliance}(s) with {values['wattage']}W each")
# Prepare a quotation string
quotation = f"""
Solar System Quotation
------------------------
System Type: {system_type}
Number of Stories: {num_stories}
Total Load: {sum([values['wattage'] * values['count'] for values in equipment.values()])} W
Solar Panels Required: {panels} panels (550W each)
Battery Capacity: {battery} kWh (if Off-Grid/Hybrid)
Inverter Capacity: {inverter:.2f} kW
DC Cable Length: {cable} meters
Average Daily Production: {avg_daily_production:.2f} kWh
Appliance Details:
-------------------
"""
for appliance, values in equipment.items():
quotation += f"{values['count']} {appliance}(s) with {values['wattage']}W each\n"
# Convert the string quotation to bytes
quotation_bytes = quotation.encode('utf-8')
# Provide the download button
st.download_button(
label="Download Quotation",
data=quotation_bytes,
file_name="solar_quotation.txt",
mime="text/plain"
)
# About Section
st.sidebar.markdown("""
## How This App Works:
- The app asks for the number of each device (Fans, ACs, Lights, etc.) and their wattage to estimate load.
- Based on your inputs, it suggests the number of solar panels, battery capacity, inverter, and DC cable requirement.
- Three system types are available: **On-Grid**, **Off-Grid**, and **Hybrid**.
- The app takes into account whether your building is a single-story or two-story structure for more accurate recommendations.
""")
|