mudassarrafique commited on
Commit
4ad29fa
·
verified ·
1 Parent(s): 45b9eb6

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +98 -0
app.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
9
+ # Initialize Groq API
10
+ client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
11
+
12
+ # App title
13
+ st.title("Optimized EV Charging Scheduling in Microgrids")
14
+
15
+ # Upload Excel file
16
+ st.sidebar.header("Upload Data File")
17
+ uploaded_file = st.sidebar.file_uploader("Upload Excel File", type=["xlsx", "xls"])
18
+
19
+ if uploaded_file:
20
+ data = pd.ExcelFile(uploaded_file)
21
+
22
+ # Load data from sheets
23
+ try:
24
+ historical_data = data.parse("Historical Data")
25
+ renewable_forecast = data.parse("Renewable Energy Forecast")
26
+ ev_profiles = data.parse("EV Charging Profiles")
27
+
28
+ # Display datasets
29
+ st.header("Uploaded Data")
30
+ st.subheader("Historical Data")
31
+ st.write(historical_data)
32
+
33
+ st.subheader("Renewable Energy Forecast")
34
+ st.write(renewable_forecast)
35
+
36
+ st.subheader("EV Charging Profiles")
37
+ st.write(ev_profiles)
38
+
39
+ # Parameters
40
+ rated_grid_capacity = 3500 # kW
41
+ disconnect_threshold = 3200 # kW
42
+
43
+ # Generate optimized schedule
44
+ def optimize_schedule(historical, renewable, profiles):
45
+ combined_data = pd.merge(
46
+ historical, renewable, on=["Date", "Time"], how="inner"
47
+ )
48
+ combined_data = pd.merge(
49
+ combined_data, profiles, on=["Date"], how="inner"
50
+ )
51
+
52
+ # Initialize schedule
53
+ schedule = []
54
+ total_load = 0
55
+
56
+ for _, row in combined_data.iterrows():
57
+ ev_load = row["State of Charge (kWh)"]
58
+ solar_load = row["Solar Load (kW)"]
59
+ total_load += ev_load - solar_load
60
+
61
+ if total_load > disconnect_threshold:
62
+ schedule.append("DISCONNECT")
63
+ elif total_load > rated_grid_capacity:
64
+ schedule.append("V2G ENABLED")
65
+ else:
66
+ schedule.append("ALLOW")
67
+
68
+ combined_data["Charging Action"] = schedule
69
+ return combined_data
70
+
71
+ # Generate schedule
72
+ st.subheader("Optimized EV Charging Schedule")
73
+ schedule_df = optimize_schedule(historical_data, renewable_forecast, ev_profiles)
74
+ st.write(schedule_df)
75
+
76
+ # Download optimized schedule
77
+ st.download_button(
78
+ "Download Schedule",
79
+ data=schedule_df.to_csv(index=False),
80
+ file_name="optimized_schedule.csv",
81
+ mime="text/csv",
82
+ )
83
+
84
+ # Simulate Groq API
85
+ st.subheader("Groq AI Insights")
86
+ prompt = st.text_input("Ask Groq for insights (e.g., grid stability)")
87
+ if prompt:
88
+ response = client.chat.completions.create(
89
+ messages=[{"role": "user", "content": prompt}],
90
+ model="llama-3.3-70b-versatile",
91
+ )
92
+ st.write(response.choices[0].message.content)
93
+
94
+ except Exception as e:
95
+ st.error(f"Error parsing file: {e}")
96
+
97
+ else:
98
+ st.warning("Please upload a file to proceed.")