Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -3,6 +3,7 @@ import pandas as pd
|
|
3 |
import streamlit as st
|
4 |
import pydeck as pdk
|
5 |
from datetime import datetime, timedelta
|
|
|
6 |
|
7 |
# ---- Constants ----
|
8 |
POLES_PER_SITE = 12
|
@@ -20,7 +21,7 @@ def generate_location(base_lat, base_lon):
|
|
20 |
base_lon + random.uniform(-0.02, 0.02)
|
21 |
]
|
22 |
|
23 |
-
def simulate_pole(pole_id, site_name):
|
24 |
lat, lon = generate_location(*SITES[site_name])
|
25 |
solar_kwh = round(random.uniform(3.0, 7.5), 2)
|
26 |
wind_kwh = round(random.uniform(0.5, 2.0), 2)
|
@@ -44,6 +45,20 @@ def simulate_pole(pole_id, site_name):
|
|
44 |
health_score = max(0, 100 - (tilt_angle + vibration * 10))
|
45 |
timestamp = datetime.now() - timedelta(hours=random.randint(0, 6))
|
46 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
return {
|
48 |
'Pole ID': f'{site_name[:3].upper()}-{pole_id:03}',
|
49 |
'Site': site_name,
|
@@ -70,8 +85,11 @@ st.title("🌍 Smart Renewable Pole Monitoring - Multi-Site")
|
|
70 |
selected_site = st.text_input("Enter site to view (Hyderabad, Gadwal, Kurnool, Ballari):", "Hyderabad")
|
71 |
|
72 |
if selected_site in SITES:
|
|
|
|
|
|
|
73 |
with st.spinner(f"Simulating poles at {selected_site}..."):
|
74 |
-
poles_data = [simulate_pole(i + 1,
|
75 |
df = pd.DataFrame(poles_data)
|
76 |
site_df = df[df['Site'] == selected_site]
|
77 |
|
|
|
3 |
import streamlit as st
|
4 |
import pydeck as pdk
|
5 |
from datetime import datetime, timedelta
|
6 |
+
from salesforce_integration import fetch_salesforce_data # Import the Salesforce integration
|
7 |
|
8 |
# ---- Constants ----
|
9 |
POLES_PER_SITE = 12
|
|
|
21 |
base_lon + random.uniform(-0.02, 0.02)
|
22 |
]
|
23 |
|
24 |
+
def simulate_pole(pole_id, site_name, salesforce_data=None):
|
25 |
lat, lon = generate_location(*SITES[site_name])
|
26 |
solar_kwh = round(random.uniform(3.0, 7.5), 2)
|
27 |
wind_kwh = round(random.uniform(0.5, 2.0), 2)
|
|
|
45 |
health_score = max(0, 100 - (tilt_angle + vibration * 10))
|
46 |
timestamp = datetime.now() - timedelta(hours=random.randint(0, 6))
|
47 |
|
48 |
+
# If salesforce data exists, prioritize it over simulation
|
49 |
+
if salesforce_data:
|
50 |
+
# Merge or override simulated data with Salesforce data
|
51 |
+
for pole_data in salesforce_data:
|
52 |
+
if pole_data['Site'] == site_name and pole_data['Pole ID'] == f'{site_name[:3].upper()}-{pole_id:03}':
|
53 |
+
solar_kwh = pole_data.get('Solar (kWh)', solar_kwh)
|
54 |
+
wind_kwh = pole_data.get('Wind (kWh)', wind_kwh)
|
55 |
+
power_required = pole_data.get('Power Required (kWh)', power_required)
|
56 |
+
total_power = solar_kwh + wind_kwh
|
57 |
+
power_status = 'Sufficient' if total_power >= power_required else 'Insufficient'
|
58 |
+
health_score = round(pole_data.get('Health Score', health_score), 2)
|
59 |
+
alert_level = pole_data.get('Alert Level', alert_level)
|
60 |
+
break
|
61 |
+
|
62 |
return {
|
63 |
'Pole ID': f'{site_name[:3].upper()}-{pole_id:03}',
|
64 |
'Site': site_name,
|
|
|
85 |
selected_site = st.text_input("Enter site to view (Hyderabad, Gadwal, Kurnool, Ballari):", "Hyderabad")
|
86 |
|
87 |
if selected_site in SITES:
|
88 |
+
# Fetch Salesforce data
|
89 |
+
salesforce_data = fetch_salesforce_data(selected_site)
|
90 |
+
|
91 |
with st.spinner(f"Simulating poles at {selected_site}..."):
|
92 |
+
poles_data = [simulate_pole(i + 1, selected_site, salesforce_data) for i in range(POLES_PER_SITE)]
|
93 |
df = pd.DataFrame(poles_data)
|
94 |
site_df = df[df['Site'] == selected_site]
|
95 |
|