import streamlit as st import pandas as pd import plotly.express as px from app_backend import fetch_weather, generate_synthetic_data, optimize_load # Constants API_KEY = "84e26811a314599e940f343b4d5894a7" LOCATION = "Pakistan" # Sidebar st.sidebar.title("Smart Grid Dashboard") location = st.sidebar.text_input("Enter Location", LOCATION) # Fetch and display weather data weather = fetch_weather(API_KEY, location) if weather: st.sidebar.write(f"Temperature: {weather['temperature']} °C") st.sidebar.write(f"Wind Speed: {weather['wind_speed']} m/s") st.sidebar.write(f"Weather: {weather['weather']}") # Main dashboard with tabs tabs = st.tabs(["Home", "Electricity Storage", "Electricity Trading"]) with tabs[0]: st.title("Real-Time Smart Grid Dashboard") # Generate synthetic data data = generate_synthetic_data() # Plot total consumption, grid generation, and storage usage fig = px.line(data, x="timestamp", y=["total_consumption_kwh", "grid_generation_kwh", "storage_usage_kwh"], title="Energy Consumption, Generation, and Storage Usage Over Time", labels={"value": "Energy (kWh)", "variable": "Energy Source"}) st.plotly_chart(fig) # Grid health overview st.subheader("Grid Health Overview") grid_health_counts = data["grid_health"].value_counts() st.bar_chart(grid_health_counts) # Optimization recommendations current_demand = data["total_consumption_kwh"].iloc[-1] current_solar = data["solar_output_kw"].iloc[-1] current_wind = data["wind_output_kw"].iloc[-1] recommendation = optimize_load(current_demand, current_solar, current_wind) st.subheader("Recommendations") st.write(f"Current Load Demand: {current_demand} kWh") st.write(f"Solar Output: {current_solar} kW") st.write(f"Wind Output: {current_wind} kW") st.write(f"Recommendation: {recommendation}") with tabs[1]: st.title("Energy Storage Overview") # Total energy stored total_storage = 500 # Example of total energy storage st.subheader(f"Total Energy Stored: {total_storage} kWh") # Energy storage contribution from different sources st.subheader("Energy Storage Contributions") energy_sources = pd.DataFrame({ "Source": ["Wind", "Solar", "Turbine"], "Energy (kW/min)": [5, 7, 10] }) st.bar_chart(energy_sources.set_index("Source")) # Show energy storage status with a rounded circle st.subheader("Energy Storage Circle") st.markdown("Energy storage is a combination of contributions from different renewable sources.") # Visualization of energy storage circle using Plotly storage_data = { "Source": ["Wind", "Solar", "Turbine"], "Energy": [5, 7, 10], } storage_df = pd.DataFrame(storage_data) fig = px.pie(storage_df, names="Source", values="Energy", title="Energy Storage Sources") st.plotly_chart(fig) with tabs[2]: st.title("Energy Trading Overview") # Energy cubes st.subheader("Energy Cubes Stored") energy_cubes = pd.DataFrame({ "Country": ["China", "Sri Lanka", "Bangladesh"], "Energy (kWh)": [100, 200, 300], "Shareable": [True, True, False] }) # Displaying the energy cubes in a grid st.write("Stored energy can be shared with other countries.") st.dataframe(energy_cubes) # Visualization of energy that can be shared st.subheader("Energy Trading Visualization") st.markdown("The following energy amounts are available for sharing with different countries.") trading_fig = px.bar(energy_cubes, x="Country", y="Energy (kWh)", color="Shareable", title="Energy Trading") st.plotly_chart(trading_fig) # code 2 # import streamlit as st # import pandas as pd # import plotly.graph_objects as go # from app_backend import fetch_weather, generate_synthetic_data, generate_storage_data # # Constants # API_KEY = "84e26811a314599e940f343b4d5894a7" # DEFAULT_LOCATION = "Pakistan" # # Sidebar for location and weather data # st.sidebar.title("Smart Grid Dashboard") # location = st.sidebar.text_input("Enter Location", DEFAULT_LOCATION) # weather = fetch_weather(API_KEY, location) # if weather: # st.sidebar.write(f"Temperature: {weather['temperature']} °C") # st.sidebar.write(f"Wind Speed: {weather['wind_speed']} m/s") # st.sidebar.write(f"Weather: {weather['weather']}") # # Main interface # st.title("Real-Time Smart Grid Dashboard") # # Tabs # tabs = st.tabs(["Home", "Power Storage", "Electricity Trade Management"]) # # Home Tab # with tabs[0]: # st.header("Overview: Power and Energy Usage") # # Fetch synthetic data # data = generate_synthetic_data() # # Line Graph for Power Consumption, Generation, and Storage # fig = go.Figure() # fig.add_trace(go.Scatter( # x=data["timestamp"], # y=data["total_power_consumption_mw"], # mode='lines', # name="Total Power Consumption (MW)", # line=dict(color="red") # )) # fig.add_trace(go.Scatter( # x=data["timestamp"], # y=data["grid_generation_mw"], # mode='lines', # name="Grid Generation (MW)", # line=dict(color="green") # )) # fig.add_trace(go.Scatter( # x=data["timestamp"], # y=data["storage_utilization_mw"], # mode='lines', # name="Storage Utilization (MW)", # line=dict(color="blue") # )) # fig.update_layout(title="Power and Energy Trends", xaxis_title="Time", yaxis_title="Power (MW)") # st.plotly_chart(fig) # # Storage Tab # with tabs[1]: # st.header("Energy Storage Overview") # storage_data = generate_storage_data() # st.write(f"**Total Energy Stored:** {storage_data['total_stored_kwh']} kWh") # # Circular storage breakdown # sources = ["Wind", "Solar", "Turbine"] # values = [storage_data["wind"], storage_data["solar"], storage_data["turbine"]] # fig = go.Figure(data=[go.Pie(labels=sources, values=values, hole=.4)]) # fig.update_layout(title="Energy Storage Breakdown") # st.plotly_chart(fig) # # Electricity Trade Management Tab # with tabs[2]: # st.header("Electricity Trade Management") # # Sample trade data # trade_data = { # "Country": ["Srilanka", "China", "Bangladesh"], # "Energy Exported (MW)": [50, 30, 70], # "Energy Imported (MW)": [20, 40, 10], # } # trade_df = pd.DataFrame(trade_data) # st.subheader("Trade Details") # st.write(trade_df) # # Visualization # fig = go.Figure() # fig.add_trace(go.Bar(x=trade_df["Country"], y=trade_df["Energy Exported (MW)"], name="Exported", marker_color='purple')) # fig.add_trace(go.Bar(x=trade_df["Country"], y=trade_df["Energy Imported (MW)"], name="Imported", marker_color='orange')) # fig.update_layout(title="Energy Trade", barmode='group') # st.plotly_chart(fig) # code 3 # import streamlit as st # import pandas as pd # import plotly.graph_objects as go # from app_backend import fetch_weather, generate_synthetic_data, generate_storage_data # # Constants # API_KEY = "84e26811a314599e940f343b4d5894a7" # DEFAULT_LOCATION = "pakistan" # # Sidebar for location and weather data # st.sidebar.title("Smart Grid Dashboard") # location = st.sidebar.text_input("Enter Location", DEFAULT_LOCATION) # weather = fetch_weather(API_KEY, location) # if weather: # st.sidebar.write(f"Temperature: {weather['temperature']} °C") # st.sidebar.write(f"Wind Speed: {weather['wind_speed']} m/s") # st.sidebar.write(f"Weather: {weather['weather']}") # # Main interface # st.title("Real-Time Smart Grid Dashboard") # # Tabs # tabs = st.tabs(["Home", "Storage", "Electricity Trade Management"]) # # Home Tab # with tabs[0]: # st.header("Overview: Power and Energy Usage") # # Fetch synthetic data # data = generate_synthetic_data() # # Line Graph for Power Consumption, Generation, and Storage # fig = go.Figure() # fig.add_trace(go.Scatter( # x=data["timestamp"], # y=data["total_power_consumption_mw"], # mode='lines', # name="Total Power Consumption (MW)", # line=dict(color="red") # )) # fig.add_trace(go.Scatter( # x=data["timestamp"], # y=data["grid_generation_mw"], # mode='lines', # name="Grid Generation (MW)", # line=dict(color="green") # )) # fig.add_trace(go.Scatter( # x=data["timestamp"], # y=data["storage_utilization_mw"], # mode='lines', # name="Storage Utilization (MW)", # line=dict(color="blue") # )) # fig.update_layout(title="Power and Energy Trends", xaxis_title="Time", yaxis_title="Power (MW)") # st.plotly_chart(fig) # # Grid Health Indicator # # # Grid health overview # # st.subheader("Grid Health Overview") # # grid_health_counts = data["grid_health"].value_counts() # # st.bar_chart(grid_health_counts) # st.subheader("Grid Health Status") # grid_health = "Stable" if data["grid_generation_mw"].mean() >= data["total_power_consumption_mw"].mean() else "Critical" # st.write(f"**Grid Health:** {grid_health}") # # AI Recommendations # st.subheader("AI Recommendations") # recommendations = [ # "Increase solar panel efficiency by 10% for peak hours.", # "Optimize wind turbine alignment based on real-time wind data.", # "Store excess energy during low-demand periods for future use.", # "Improve grid stability by distributing load dynamically across sectors.", # ] # for rec in recommendations: # st.write(f"- {rec}") # # Storage Tab # with tabs[1]: # st.header("Energy Storage Overview") # storage_data = generate_storage_data() # # Individual Circles for Wind, Solar, and Turbine # st.subheader("Energy Contributions") # col1, col2, col3 = st.columns(3) # with col1: # st.metric("Wind Energy", f"{storage_data['wind']} MW/min") # with col2: # st.metric("Solar Energy", f"{storage_data['solar']} MW/min") # with col3: # st.metric("Turbine Energy", f"{storage_data['turbine']} MW/min") # # Central Grid Storage Visualization # st.subheader("Total Energy Stored in Grid") # fig = go.Figure() # fig.add_trace(go.Scatter(x=[0], y=[0], mode='markers+text', text=["Grid"], marker=dict(size=70, color="blue"))) # fig.add_trace(go.Scatter( # x=[-1, 1, 0], # y=[1, 1, -1], # mode='markers+text', # text=["Wind", "Solar", "Turbine"], # marker=dict(size=50, color=["green", "yellow", "orange"]) # )) # fig.add_trace(go.Scatter( # x=[-0.5, 0.5, 0], # y=[0.5, 0.5, -0.5], # mode="lines", # line=dict(width=3, color="gray"), # )) # fig.update_layout( # title="Energy Storage Visualization", # xaxis=dict(visible=False), # yaxis=dict(visible=False), # showlegend=False # ) # st.plotly_chart(fig) # st.write(f"**Total Energy Stored:** {storage_data['total_stored_kwh']} kWh") # # Electricity Trade Management Tab # with tabs[2]: # st.header("Electricity Trade Management") # # Sample trade data # trade_data = { # "Country": ["Country A", "Country B", "Country C"], # "Energy Exported (MW)": [50, 30, 70], # "Energy Imported (MW)": [20, 40, 10], # } # trade_df = pd.DataFrame(trade_data) # st.subheader("Trade Details") # st.write(trade_df) # # Visualization # fig = go.Figure() # fig.add_trace(go.Bar(x=trade_df["Country"], y=trade_df["Energy Exported (MW)"], name="Exported", marker_color='purple')) # fig.add_trace(go.Bar(x=trade_df["Country"], y=trade_df["Energy Imported (MW)"], name="Imported", marker_color='orange')) # fig.update_layout(title="Energy Trade", barmode='group') # st.plotly_chart(fig) # code 4 # import streamlit as st # import plotly.express as px # from app_backend import fetch_weather, generate_synthetic_data, optimize_load # import pandas as pd # # Constants # API_KEY = "84e26811a314599e940f343b4d5894a7" # Replace with your OpenWeather API key # LOCATION = "Pakistan" # # Sidebar # st.sidebar.title("Smart Grid Dashboard") # location = st.sidebar.text_input("Enter Location", LOCATION) # # Fetch and display weather data # weather = fetch_weather(API_KEY, location) # st.sidebar.subheader("Weather Information") # if weather: # st.sidebar.write(f"**Temperature**: {weather['temperature']} °C") # st.sidebar.write(f"**Wind Speed**: {weather['wind_speed']} m/s") # st.sidebar.write(f"**Weather**: {weather['weather']}") # # Main tabs # tab1, tab2, tab3 = st.tabs(["Home", "Power Storage", "Power Trading management"]) # # Home Tab # with tab1: # st.title("Real-Time Smart Grid Dashboard") # # Generate synthetic data # data = generate_synthetic_data() # # Show weather at top # if weather: # st.write(f"### Location: {location}") # st.write(f"Temperature: {weather['temperature']} °C | Wind Speed: {weather['wind_speed']} m/s | Weather: {weather['weather']}") # # Power consumption graph # fig = px.line( # data, # x="timestamp", # y=["power_consumption_mw", "generation_mw", "storage_usage_mw"], # labels={"value": "Power (MW)", "variable": "Metric"}, # title="Power Flow Over Time" # ) # fig.update_traces(mode="lines+markers") # st.plotly_chart(fig) # # Grid health as bar chart # st.subheader("Grid Health Overview") # grid_health_counts = data["grid_health"].value_counts() # fig_health = px.bar( # grid_health_counts, # x=grid_health_counts.index, # y=grid_health_counts.values, # labels={"x": "Grid Status", "y": "Count"}, # title="Grid Health Status" # ) # st.plotly_chart(fig_health) # # AI recommendations # st.subheader("AI Recommendations") # current_demand = data["power_consumption_mw"].iloc[-1] # current_solar = data["solar_output_mw"].iloc[-1] # current_wind = data["wind_output_mw"].iloc[-1] # recommendation = optimize_load(current_demand, current_solar, current_wind) # st.write(f"**Current Load Demand**: {current_demand} MW") # st.write(f"**Solar Output**: {current_solar} MW") # st.write(f"**Wind Output**: {current_wind} MW") # st.write(f"**Recommendation**: {recommendation}") # # Storage Tab # with tab2: # st.title("Energy Storage Status") # # Pie chart of energy percentage contribution # storage_data = { # "Wind": data["wind_output_mw"].mean(), # "Solar": data["solar_output_mw"].mean(), # "Turbine": data["turbine_output_mw"].mean() # } # fig_pie = px.pie( # names=storage_data.keys(), # values=storage_data.values(), # title="Energy Contribution by Resource" # ) # st.plotly_chart(fig_pie) # # Circle visualization for storage # st.subheader("Total Energy Stored") # total_storage = sum(storage_data.values()) # st.write(f"**Total Energy Stored**: {total_storage:.2f} MW") # st.markdown( # """ #
#
# {total_storage:.2f} MW #
#
#
# Wind
{storage_data["Wind"]:.2f} MW #
#
# Solar
{storage_data["Solar"]:.2f} MW #
#
# Turbine
{storage_data["Turbine"]:.2f} MW #
#
#
# """, # unsafe_allow_html=True # ) # # Trading Tab # with tab3: # st.title("Electricity Trade Management") # st.write("Under development...") # code 5 # import streamlit as st # import pandas as pd # import plotly.express as px # from app_backend import fetch_weather, generate_synthetic_data, optimize_load # # Constants # API_KEY = "84e26811a314599e940f343b4d5894a7" # LOCATION = "Pakistan" # # Sidebar # st.sidebar.title("Smart Grid Dashboard") # location = st.sidebar.text_input("Enter Location", LOCATION) # # Fetch and display weather data # weather = fetch_weather(API_KEY, location) # if weather: # st.sidebar.write(f"Temperature: {weather['temperature']} °C") # st.sidebar.write(f"Wind Speed: {weather['wind_speed']} m/s") # st.sidebar.write(f"Weather: {weather['weather']}") # # Tabs # tab_home, tab_storage, tab_trading = st.tabs(["Home", "Power Storage", "Electricity Trade Management"]) # # Home Tab # with tab_home: # st.title("Real-Time Smart Grid Dashboard") # # Generate synthetic data # data = generate_synthetic_data() # # Grid Health # # st.subheader("Grid Health Overview") # # grid_health_counts = data["grid_health"].value_counts() # # st.bar_chart(grid_health_counts) # # Power Consumption, Generation & Storage Graph # st.subheader("Power Consumption, Generation & Storage") # fig = px.line(data, x="timestamp", y=["load_demand_kwh", "solar_output_kw", "wind_output_kw"], # title="Power Consumption, Generation & Storage", labels={"value": "Power (MW)"}) # fig.update_traces(line=dict(width=2)) # st.plotly_chart(fig) # # Grid Health # st.subheader("Grid Health Overview") # grid_health_counts = data["grid_health"].value_counts() # st.bar_chart(grid_health_counts) # # Optimization Recommendations # current_demand = data["load_demand_kwh"].iloc[-1] # current_solar = data["solar_output_kw"].iloc[-1] # current_wind = data["wind_output_kw"].iloc[-1] # recommendation = optimize_load(current_demand, current_solar, current_wind) # st.subheader("Recommendations") # st.write(f"Current Load Demand: {current_demand} MW") # st.write(f"Solar Output: {current_solar} MW") # st.write(f"Wind Output: {current_wind} MW") # st.write(f"Recommendation: {recommendation}") # # Storage Tab # with tab_storage: # st.title("Energy Storage Overview") # # Energy Contribution by Resources # st.subheader("Energy Contribution Percentage by Resources") # energy_data = { # "Wind": 5, # "Solar": 7, # "Turbine": 10 # } # energy_df = pd.DataFrame(list(energy_data.items()), columns=["Source", "Energy (MW)"]) # fig = px.pie(energy_df, values="Energy (MW)", names="Source", title="Energy Contribution by Resources") # st.plotly_chart(fig) # # Energy Storage Merge # st.subheader("Total Energy Stored") # st.write("Energy stored from all sources:") # energy_stored = sum(energy_data.values()) # st.write(f"Total Energy Stored: {energy_stored} MW") # st.write("Energy sources merged into total energy storage:") # st.write(f"Total Energy Stored in Grid: {energy_stored} MW") # # Trading Tab # with tab_trading: # st.title("Electricity Trade Management") # # Simulating Electricity Trade (Energy cubes & trading) # st.subheader("Energy Trade Overview") # energy_trade = { # "USA": 50, # "Germany": 40, # "India": 30 # } # trade_df = pd.DataFrame(list(energy_trade.items()), columns=["Country", "Energy (MW)"]) # fig = px.bar(trade_df, x="Country", y="Energy (MW)", title="Energy Trading Overview") # st.plotly_chart(fig) # st.write("Energy cubes available for trading:") # st.write("The system can trade energy with other countries.") # code 6 # import streamlit as st # import pandas as pd # import plotly.graph_objects as go # from app_backend import fetch_data, generate_recommendations, grid_health_status, generate_trading_options # # Dashboard layout # st.title('Real-Time Smart Grid Application Dashboard') # st.sidebar.title('Navigation') # tabs = ['Home', 'Energy Storage', 'Electricity Trade Management'] # selected_tab = st.sidebar.radio('Choose Tab', tabs) # # Fetch data and prepare visualizations # data = fetch_data() # if selected_tab == 'Home': # st.header('Home - Real-Time Data Overview') # # Current weather and grid information # st.subheader("Location Weather Data") # st.write(f"Temperature: {data['temperature']} °C") # st.write(f"Wind Speed: {data['wind_speed']} m/s") # st.write(f"Weather: {data['weather_condition']}") # # Real-Time Power Flow Visualization (with dynamic chart) # st.subheader("Real-Time Power Flow Visualization") # fig = go.Figure() # fig.add_trace(go.Scatter(x=data['timestamps'], y=data['total_consumption'], mode='lines', name='Total Consumption (MW)', line=dict(color='red'))) # fig.add_trace(go.Scatter(x=data['timestamps'], y=data['grid_generation'], mode='lines', name='Grid Generation (MW)', line=dict(color='green'))) # fig.add_trace(go.Scatter(x=data['timestamps'], y=data['storage_usage'], mode='lines', name='Storage Usage (MW)', line=dict(color='blue'))) # fig.update_layout(title="Power Flow", xaxis_title="Time", yaxis_title="Power (MW)") # st.plotly_chart(fig) # # Grid Health Status # st.subheader("Grid Health Indicators") # health_status = grid_health_status(data) # st.write(health_status) # # AI Recommendations # st.subheader("AI Recommendations") # recommendations = generate_recommendations(data) # for rec in recommendations: # st.write(rec) # elif selected_tab == 'Energy Storage': # st.header('Energy Storage Overview') # # Storage Contribution Chart # st.subheader("Energy Storage Contribution by Resources") # fig = go.Figure() # fig.add_trace(go.Pie(labels=['Solar', 'Wind', 'Hydro'], values=[data['solar_storage'], data['wind_storage'], data['hydro_storage']], hole=0.3)) # fig.update_layout(title="Energy Storage Contribution") # st.plotly_chart(fig) # # Total Energy Storage with Circle Representation # st.subheader("Total Energy Storage Representation") # fig = go.Figure() # fig.add_trace(go.Scatterpolar(r=[data['solar_storage'], data['wind_storage'], data['hydro_storage']], theta=['Solar', 'Wind', 'Hydro'], fill='toself', name='Energy Sources')) # fig.add_trace(go.Scatterpolar(r=[data['total_storage']], theta=['Total Storage'], fill='none', mode='text+markers', text=['Total Storage'], textposition='center', marker=dict(size=15, color='purple'))) # fig.update_layout(title="Energy Storage and Total", polar=dict(radialaxis=dict(visible=True)), showlegend=False) # st.plotly_chart(fig) # elif selected_tab == 'Electricity Trade Management': # st.header('Electricity Trade Management') # # Display available energy for trade # st.subheader("Energy Trade Availability") # trading_options = generate_trading_options(data) # st.write(trading_options)