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.
""")