Prasanna1622 commited on
Commit
7170843
·
verified ·
1 Parent(s): e01307c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +9 -45
app.py CHANGED
@@ -6,89 +6,56 @@ from salesforce_integration import fetch_poles
6
  from modules.visuals import display_dashboard, display_charts
7
 
8
  # Title
9
- st.title("📡 VIEP Smart Poles Dashboard")
10
 
11
  # Fetch the raw data from Salesforce
12
  df = fetch_poles()
13
 
14
  # --- Sidebar Filters ---
15
- st.sidebar.header("📁 Filter Data")
16
-
17
- # Alert Level Filter
18
  selected_alert_levels = st.sidebar.multiselect(
19
  "Alert Level", ["Red", "Yellow", "Green"], default=["Red", "Yellow", "Green"]
20
  )
21
-
22
- # Camera Status Filter
23
- selected_camera_status = st.sidebar.selectbox(
24
- "Camera Status", ["All", "Online", "Offline"]
25
- )
26
-
27
- # Site Filter with "All" option
28
  site_options = ["All"] + df["Site__c"].dropna().unique().tolist()
29
  selected_site = st.sidebar.selectbox("Site", site_options, index=0)
30
 
31
  # --- Filtering Logic ---
32
  filtered_df = df[df["Alert_Level__c"].isin(selected_alert_levels)]
33
-
34
  if selected_camera_status != "All":
35
  filtered_df = filtered_df[filtered_df["Camera_Status__c"] == selected_camera_status]
36
-
37
  if selected_site != "All":
38
  filtered_df = filtered_df[filtered_df["Site__c"] == selected_site]
39
 
40
- # --- Count Faults Based on Alert Level ---
41
- # Assuming default 0 fault count or based on Alert Level:
42
- filtered_df["Fault_Count__c"] = filtered_df["Alert_Level__c"].apply(
43
- lambda x: 3 if x == "Red" else (2 if x == "Yellow" else 1)
44
- )
45
-
46
  # --- Display System Summary ---
47
  display_dashboard(filtered_df)
48
 
49
  # --- Pole Table ---
50
- st.subheader("📋 Pole Table")
51
  st.dataframe(filtered_df, use_container_width=True)
52
 
53
  # --- Energy Generation Chart ---
54
  st.subheader("⚙ Energy Generation (Solar vs Wind)")
55
  st.plotly_chart(px.bar(
56
- filtered_df,
57
- x="Name",
58
- y=["Solar_Generation__c", "Wind_Generation__c"],
59
- barmode="group"
60
  ))
61
 
62
-
63
  # --- Alert Level Breakdown Chart ---
64
  display_charts(filtered_df)
65
 
66
-
67
- # Fetch the raw data from Salesforce
68
- df = fetch_poles()
69
-
70
  # Define function to generate heatmap based on site
71
  def generate_heatmap_for_site(site_name, df):
72
  site_df = df[df['Site__c'] == site_name]
73
 
74
- # Define color mapping for fault levels
75
- def get_fault_level(fault_count):
76
- if fault_count <= 1:
77
- return "Green"
78
- elif 2 <= fault_count <= 3:
79
- return "Yellow"
80
- else:
81
- return "Red"
82
-
83
  color_map = {
84
  "Green": [0, 255, 0],
85
  "Yellow": [255, 255, 0],
86
  "Red": [255, 0, 0]
87
  }
88
 
89
- print(df.columns) # Add this to see the available columns
90
- site_df["Fault_Level"] = site_df["Faults_Count"].apply(get_fault_level)
91
- site_df["color"] = site_df["Fault_Level"].map(color_map)
92
 
93
  # Create a Pydeck map for the site
94
  layer = pdk.Layer(
@@ -112,7 +79,6 @@ def generate_heatmap_for_site(site_name, df):
112
  "html": """
113
  <b>Pole Name:</b> {Name}<br>
114
  <b>Site:</b> {Site__c}<br>
115
- <b>Fault Count:</b> {Fault_Count__c}<br>
116
  <b>Alert Level:</b> {Alert_Level__c}<br>
117
  <b>RFID Tag:</b> {RFID_Tag__c}<br>
118
  <b>Tilt:</b> {Tilt__c}<br>
@@ -130,19 +96,17 @@ def generate_heatmap_for_site(site_name, df):
130
  layers=[layer],
131
  tooltip=tooltip
132
  )
133
- print(df.columns)
134
  # Divide into four columns (Hyderabad, Kurnool, Ballari, Gadwal)
135
  col1, col2 = st.columns(2)
136
  with col1:
137
  st.subheader("Hyderabad")
138
  st.pydeck_chart(generate_heatmap_for_site("Hyderabad", df))
139
-
140
  st.subheader("Kurnool")
141
  st.pydeck_chart(generate_heatmap_for_site("Kurnool", df))
142
 
143
  with col2:
144
  st.subheader("Ballari")
145
  st.pydeck_chart(generate_heatmap_for_site("Ballari", df))
146
-
147
  st.subheader("Gadwal")
148
  st.pydeck_chart(generate_heatmap_for_site("Gadwal", df))
 
6
  from modules.visuals import display_dashboard, display_charts
7
 
8
  # Title
9
+ st.title("VIEP Smart Poles Dashboard")
10
 
11
  # Fetch the raw data from Salesforce
12
  df = fetch_poles()
13
 
14
  # --- Sidebar Filters ---
15
+ st.sidebar.header("Filter Data")
 
 
16
  selected_alert_levels = st.sidebar.multiselect(
17
  "Alert Level", ["Red", "Yellow", "Green"], default=["Red", "Yellow", "Green"]
18
  )
19
+ selected_camera_status = st.sidebar.selectbox("Camera Status", ["All", "Online", "Offline"])
 
 
 
 
 
 
20
  site_options = ["All"] + df["Site__c"].dropna().unique().tolist()
21
  selected_site = st.sidebar.selectbox("Site", site_options, index=0)
22
 
23
  # --- Filtering Logic ---
24
  filtered_df = df[df["Alert_Level__c"].isin(selected_alert_levels)]
 
25
  if selected_camera_status != "All":
26
  filtered_df = filtered_df[filtered_df["Camera_Status__c"] == selected_camera_status]
 
27
  if selected_site != "All":
28
  filtered_df = filtered_df[filtered_df["Site__c"] == selected_site]
29
 
 
 
 
 
 
 
30
  # --- Display System Summary ---
31
  display_dashboard(filtered_df)
32
 
33
  # --- Pole Table ---
34
+ st.subheader("Pole Table")
35
  st.dataframe(filtered_df, use_container_width=True)
36
 
37
  # --- Energy Generation Chart ---
38
  st.subheader("⚙ Energy Generation (Solar vs Wind)")
39
  st.plotly_chart(px.bar(
40
+ filtered_df, x="Name", y=["Solar_Generation__c", "Wind_Generation__c"], barmode="group"
 
 
 
41
  ))
42
 
 
43
  # --- Alert Level Breakdown Chart ---
44
  display_charts(filtered_df)
45
 
 
 
 
 
46
  # Define function to generate heatmap based on site
47
  def generate_heatmap_for_site(site_name, df):
48
  site_df = df[df['Site__c'] == site_name]
49
 
50
+ # Define color mapping for alert levels
 
 
 
 
 
 
 
 
51
  color_map = {
52
  "Green": [0, 255, 0],
53
  "Yellow": [255, 255, 0],
54
  "Red": [255, 0, 0]
55
  }
56
 
57
+ # Assign colors based on Alert Level
58
+ site_df["color"] = site_df["Alert_Level__c"].map(color_map)
 
59
 
60
  # Create a Pydeck map for the site
61
  layer = pdk.Layer(
 
79
  "html": """
80
  <b>Pole Name:</b> {Name}<br>
81
  <b>Site:</b> {Site__c}<br>
 
82
  <b>Alert Level:</b> {Alert_Level__c}<br>
83
  <b>RFID Tag:</b> {RFID_Tag__c}<br>
84
  <b>Tilt:</b> {Tilt__c}<br>
 
96
  layers=[layer],
97
  tooltip=tooltip
98
  )
99
+
100
  # Divide into four columns (Hyderabad, Kurnool, Ballari, Gadwal)
101
  col1, col2 = st.columns(2)
102
  with col1:
103
  st.subheader("Hyderabad")
104
  st.pydeck_chart(generate_heatmap_for_site("Hyderabad", df))
 
105
  st.subheader("Kurnool")
106
  st.pydeck_chart(generate_heatmap_for_site("Kurnool", df))
107
 
108
  with col2:
109
  st.subheader("Ballari")
110
  st.pydeck_chart(generate_heatmap_for_site("Ballari", df))
 
111
  st.subheader("Gadwal")
112
  st.pydeck_chart(generate_heatmap_for_site("Gadwal", df))