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 |
|