import networkx
import os
import pandapower
import streamlit
from matplotlib import pyplot
from Application import initialization_powerfactory, pandapower_model
[docs]
def convert_pf_pandapower(app_path: str, project_name: str) -> None:
"""
Input mask for the conversion of a power factory pfd file to
a pandapower network instance.
:param app_path: path of the power factory executable
:type app_path: str
:param project_name: power factory project name
:type project_name: str
"""
# streamlit button to start the model conversion process
if streamlit.sidebar.button("Start Model Conversion Process."):
# call model conversion method on click
initialization_powerfactory.convert_model(
app_path=app_path,
project_name=project_name
)
[docs]
def import_pandapower_model() -> pandapower.pandapowerNet:
"""
Input mask for the import of a pandapower network stored in a
JSON file.
:return: **network** (pandapower.pandapowerNet) - pandapower \
network instance
"""
# get the main path of the python project
module_path = (
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(
__file__
)))))
# Text input for the user's json file path
json_path = streamlit.sidebar.text_input(
label="Pandapower Model Path.",
value=module_path
+ "/Results"
+ "/20240507_Kalman_Filter_09_30_2024_12_08_05_network.json"
)
# streamlit button to start the import of the pandapowerNet from
# JSON
if streamlit.sidebar.button("Import Pandapower Model From JSON."):
# call import method on click
network = pandapower_model.import_pandapower_model_json(
json_path=json_path
)
return network
return streamlit.session_state["network"]
[docs]
def load_network_plot(network: pandapower.pandapowerNet) -> None:
"""
Input mask for network plot creation of a pandapower network
instance.
:param network: pandapower network instance to be plotted
:type network: pandapower.pandapowerNet
"""
# streamlit button to start the network plot creation
if streamlit.button("Load Pandapower Network Plot."):
# check if the network instance is not None to avoid errors
if network is not None:
# call the networkx creation
nxg_network, pos = pandapower_model.create_nxgraph(network=network)
# add networks powersystem plot to streamlit gui
streamlit.session_state["Network Plot"], ax = pyplot.subplots()
networkx.draw(nxg_network, pos, with_labels=True)
streamlit.session_state["Network Plot Bool"] = "True"
else:
# Error handling if no pandapower model is loaded
streamlit.error("No Pandapower Model loaded.", icon="🚨")
[docs]
def load_network_components(network: pandapower.pandapowerNet) -> None:
"""
Input mask for the visibility of the pandapower network
components table.
:param network: pandapower network instance to be plotted
:type network: pandapower.pandapowerNet
"""
# streamlit button to change the visibility of the pandapower
# network components table
if streamlit.button("Load Pandapower Network Components Table."):
# check if the network instance is not None to avoid errors
if network is not None:
streamlit.session_state["Network Components Table Bool"] = "True"
else:
# Error handling if no pandapower model is loaded
streamlit.error("No Pandapower Model loaded.", icon="🚨")