Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -10,18 +10,12 @@ SITES = {
|
|
10 |
"Hyderabad": [17.385044, 78.486671],
|
11 |
"Gadwal": [16.2351, 77.8052],
|
12 |
"Kurnool": [15.8281, 78.0373],
|
13 |
-
"Ballari": [
|
14 |
}
|
15 |
|
16 |
# ---- Helper Functions ----
|
17 |
-
def generate_location(base_lat, base_lon):
|
18 |
-
return [
|
19 |
-
base_lat + random.uniform(-0.02, 0.02),
|
20 |
-
base_lon + random.uniform(-0.02, 0.02)
|
21 |
-
]
|
22 |
-
|
23 |
def simulate_pole(pole_id, site_name):
|
24 |
-
lat, lon =
|
25 |
solar_kwh = round(random.uniform(3.0, 7.5), 2)
|
26 |
wind_kwh = round(random.uniform(0.5, 2.0), 2)
|
27 |
power_required = round(random.uniform(4.0, 8.0), 2)
|
@@ -65,7 +59,7 @@ def simulate_pole(pole_id, site_name):
|
|
65 |
|
66 |
# ---- Streamlit UI ----
|
67 |
st.set_page_config(page_title="Smart Pole Monitoring", layout="wide")
|
68 |
-
st.title("
|
69 |
|
70 |
selected_site = st.text_input("Enter site to view (Hyderabad, Gadwal, Kurnool, Ballari):", "Hyderabad")
|
71 |
|
@@ -82,7 +76,7 @@ if selected_site in SITES:
|
|
82 |
col3.metric("Power Insufficiencies", site_df[site_df['Power Status'] == 'Insufficient'].shape[0])
|
83 |
|
84 |
# Table View
|
85 |
-
st.subheader(f"
|
86 |
with st.expander("Filter Options"):
|
87 |
alert_filter = st.multiselect("Alert Level", options=site_df['Alert Level'].unique(), default=site_df['Alert Level'].unique())
|
88 |
camera_filter = st.multiselect("Camera Status", options=site_df['Camera Status'].unique(), default=site_df['Camera Status'].unique())
|
@@ -91,22 +85,22 @@ if selected_site in SITES:
|
|
91 |
st.dataframe(filtered_df, use_container_width=True)
|
92 |
|
93 |
# Charts
|
94 |
-
st.subheader("
|
95 |
st.bar_chart(site_df[['Solar (kWh)', 'Wind (kWh)']].mean())
|
96 |
|
97 |
-
st.subheader("
|
98 |
st.scatter_chart(site_df[['Tilt Angle (ยฐ)', 'Vibration (g)']])
|
99 |
|
100 |
# ---- Map Section with Tooltip ----
|
101 |
-
st.subheader("
|
102 |
|
103 |
def alert_level_to_color(alert_level):
|
104 |
if alert_level == 'Red':
|
105 |
-
return [255, 0, 0, 160]
|
106 |
elif alert_level == 'Yellow':
|
107 |
-
return [255, 255, 0, 160]
|
108 |
else:
|
109 |
-
return [0, 255, 0, 160]
|
110 |
|
111 |
if not site_df.empty:
|
112 |
site_df = site_df.copy()
|
|
|
10 |
"Hyderabad": [17.385044, 78.486671],
|
11 |
"Gadwal": [16.2351, 77.8052],
|
12 |
"Kurnool": [15.8281, 78.0373],
|
13 |
+
"Ballari": [15.1394, 76.9214] # Corrected Ballari location
|
14 |
}
|
15 |
|
16 |
# ---- Helper Functions ----
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
def simulate_pole(pole_id, site_name):
|
18 |
+
lat, lon = SITES[site_name] # FIXED: Use constant location without random offset
|
19 |
solar_kwh = round(random.uniform(3.0, 7.5), 2)
|
20 |
wind_kwh = round(random.uniform(0.5, 2.0), 2)
|
21 |
power_required = round(random.uniform(4.0, 8.0), 2)
|
|
|
59 |
|
60 |
# ---- Streamlit UI ----
|
61 |
st.set_page_config(page_title="Smart Pole Monitoring", layout="wide")
|
62 |
+
st.title("\U0001F30D Smart Renewable Pole Monitoring - Multi-Site")
|
63 |
|
64 |
selected_site = st.text_input("Enter site to view (Hyderabad, Gadwal, Kurnool, Ballari):", "Hyderabad")
|
65 |
|
|
|
76 |
col3.metric("Power Insufficiencies", site_df[site_df['Power Status'] == 'Insufficient'].shape[0])
|
77 |
|
78 |
# Table View
|
79 |
+
st.subheader(f"\U0001F4CB Pole Data Table for {selected_site}")
|
80 |
with st.expander("Filter Options"):
|
81 |
alert_filter = st.multiselect("Alert Level", options=site_df['Alert Level'].unique(), default=site_df['Alert Level'].unique())
|
82 |
camera_filter = st.multiselect("Camera Status", options=site_df['Camera Status'].unique(), default=site_df['Camera Status'].unique())
|
|
|
85 |
st.dataframe(filtered_df, use_container_width=True)
|
86 |
|
87 |
# Charts
|
88 |
+
st.subheader("\U0001F4CA Energy Generation Comparison")
|
89 |
st.bar_chart(site_df[['Solar (kWh)', 'Wind (kWh)']].mean())
|
90 |
|
91 |
+
st.subheader("\U0001F4C8 Tilt vs. Vibration")
|
92 |
st.scatter_chart(site_df[['Tilt Angle (ยฐ)', 'Vibration (g)']])
|
93 |
|
94 |
# ---- Map Section with Tooltip ----
|
95 |
+
st.subheader("\U0001F4CD Pole Alert Levels (Green, Yellow, Red)")
|
96 |
|
97 |
def alert_level_to_color(alert_level):
|
98 |
if alert_level == 'Red':
|
99 |
+
return [255, 0, 0, 160]
|
100 |
elif alert_level == 'Yellow':
|
101 |
+
return [255, 255, 0, 160]
|
102 |
else:
|
103 |
+
return [0, 255, 0, 160]
|
104 |
|
105 |
if not site_df.empty:
|
106 |
site_df = site_df.copy()
|