mudassarrafique commited on
Commit
aef39fc
·
verified ·
1 Parent(s): 6b87414

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -110
app.py CHANGED
@@ -1,115 +1,60 @@
1
  import streamlit as st
2
  import pandas as pd
3
  import numpy as np
4
- from datetime import datetime, timedelta
5
  import faiss
6
- from groq import Groq
7
  import os
8
- from dotenv import load_dotenv # Import dotenv
9
-
10
- # Load environment variables from .env file
11
- load_dotenv()
12
-
13
- # Fetch the API key from the environment
14
- api_key = os.getenv("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")
15
-
16
- # Debugging line to verify the API key is loaded
17
- if api_key:
18
- st.write("Loaded API Key: Successfully Loaded.")
19
- client = Groq(api_key=api_key)
20
- else:
21
- st.warning("Groq API key is not set. Features requiring Groq API will be disabled.")
22
- client = None
23
-
24
- # App title
25
- st.title("Optimized EV Charging Scheduling in Microgrids")
26
-
27
- # Upload Excel file
28
- st.sidebar.header("Upload Data File")
29
- uploaded_file = st.sidebar.file_uploader("Upload Excel File", type=["xlsx", "xls"])
30
-
31
- if uploaded_file:
32
- data = pd.ExcelFile(uploaded_file)
33
-
34
- try:
35
- # Load data from sheets
36
- historical_data = data.parse("Historical Data")
37
- renewable_forecast = data.parse("Renewable Energy Forecast")
38
- ev_profiles = data.parse("EV Charging Profiles")
39
-
40
- # Standardize column names
41
- historical_data.columns = historical_data.columns.str.strip()
42
- renewable_forecast.columns = renewable_forecast.columns.str.strip()
43
- ev_profiles.columns = ev_profiles.columns.str.strip()
44
-
45
- # Rename specific columns if necessary
46
- historical_data.rename(columns={"DATE": "Date", "date": "Date"}, inplace=True)
47
- renewable_forecast.rename(columns={"DATE": "Date", "date": "Date"}, inplace=True)
48
- ev_profiles.rename(columns={"DATE": "Date", "date": "Date"}, inplace=True)
49
-
50
- # Parameters
51
- rated_grid_capacity = 3500 # kW
52
- disconnect_threshold = 3200 # kW
53
-
54
- # Generate optimized schedule
55
- def optimize_schedule(historical, renewable, profiles):
56
- combined_data = pd.merge(
57
- historical, renewable, on=["Date", "Time"], how="inner"
58
- )
59
- combined_data = pd.merge(
60
- combined_data, profiles, on=["Date"], how="inner"
61
- )
62
-
63
- # Initialize schedule
64
- schedule = []
65
- total_load = 0
66
-
67
- for _, row in combined_data.iterrows():
68
- ev_load = row["State of Charge (kWh)"]
69
- solar_load = row["Solar Load (kW)"]
70
- total_load += ev_load - solar_load
71
-
72
- if total_load > disconnect_threshold:
73
- schedule.append("DISCONNECT")
74
- elif total_load > rated_grid_capacity:
75
- schedule.append("V2G ENABLED")
76
- else:
77
- schedule.append("ALLOW")
78
-
79
- combined_data["Charging Action"] = schedule
80
- return combined_data
81
-
82
- # Generate schedule
83
- st.subheader("Optimized EV Charging Schedule")
84
- schedule_df = optimize_schedule(historical_data, renewable_forecast, ev_profiles)
85
- st.write(schedule_df)
86
-
87
- # Download optimized schedule
88
- st.download_button(
89
- "Download Schedule",
90
- data=schedule_df.to_csv(index=False),
91
- file_name="optimized_schedule.csv",
92
- mime="text/csv",
93
- )
94
-
95
- # Simulate Groq API
96
- if client:
97
- st.subheader("Groq AI Insights")
98
- prompt = st.text_input("Ask Groq for insights (e.g., grid stability)")
99
- if prompt:
100
- try:
101
- response = client.chat.completions.create(
102
- messages=[{"role": "user", "content": prompt}],
103
- model="llama-3.3-70b-versatile",
104
- )
105
- st.write(response.choices[0].message.content)
106
- except Exception as e:
107
- st.error(f"Error communicating with Groq API: {e}")
108
- else:
109
- st.warning("Groq API key is missing. Insights feature is disabled.")
110
-
111
- except Exception as e:
112
- st.error(f"Error parsing file: {e}")
113
-
114
- else:
115
- st.warning("Please upload a file to proceed.")
 
1
  import streamlit as st
2
  import pandas as pd
3
  import numpy as np
 
4
  import faiss
 
5
  import os
6
+ from groq import Groq
7
+ from sklearn.preprocessing import StandardScaler
8
+
9
+ # Initialize Groq client
10
+ client = Groq(api_key=os.environ.get("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"))
11
+
12
+ # Function to upload and process the Excel file
13
+ def process_data(uploaded_file):
14
+ df = pd.read_excel(uploaded_file)
15
+ return df
16
+
17
+ # Function to generate embeddings and store in FAISS DB
18
+ def generate_embeddings(df):
19
+ # Placeholder: actual embedding generation would depend on the model you use
20
+ embeddings = np.random.rand(len(df), 128).astype('float32') # Random embeddings for illustration
21
+ index = faiss.IndexFlatL2(128)
22
+ index.add(embeddings)
23
+ return index
24
+
25
+ # Function to display charging schedules
26
+ def display_schedule():
27
+ st.title("Optimized EV Charging Schedule")
28
+ uploaded_file = st.file_uploader("Upload your Excel data", type=["xlsx"])
29
+
30
+ if uploaded_file:
31
+ # Process the data
32
+ df = process_data(uploaded_file)
33
+ st.write("Uploaded Data Preview", df.head())
34
+
35
+ # Generate embeddings and store in FAISS
36
+ index = generate_embeddings(df)
37
+ st.write("Embeddings generated and stored in FAISS.")
38
+
39
+ # Placeholder for optimized schedule
40
+ st.write("Here is your optimized EV charging schedule based on the historical data.")
41
+
42
+ # Displaying the RAG (Red, Amber, Green) status for grid stability
43
+ st.write("Current Grid Status: Green (Stable)")
44
+
45
+ # Sidebar for additional inputs from the user
46
+ def user_inputs():
47
+ with st.sidebar:
48
+ st.header("User Inputs")
49
+ arrival_time = st.time_input("Arrival Time at EV Charging Station")
50
+ state_of_charge = st.slider("State of Charge (SOC) in kWh", 0, 50, 7)
51
+ battery_capacity = st.number_input("EV Battery Capacity (kWh)", 30, 100, 50)
52
+ st.button("Generate Charging Schedule")
53
+
54
+ # Main function
55
+ def main():
56
+ user_inputs()
57
+ display_schedule()
58
+
59
+ if __name__ == "__main__":
60
+ main()