|
import panel as pn |
|
import pandas as pd |
|
import os |
|
|
|
from consts import INVERTER_ID_MAPPING, TEMPERATURE_COLUMNS_TO_USE, CURRENT, IRRADIANCE, VOLTAGE, POWER_DC, POWER_AC, T_AMBIENT, T_MODULE, T_HEATSINK, T_CPU, T_BOARD |
|
from plotting import ( |
|
create_heatmap, |
|
create_iv_plot_with_power_curves, |
|
create_iv_plot, |
|
create_iv_plot_with_power_and_temperature_curves, |
|
create_iv_plot_with_temperature_curves, |
|
) |
|
|
|
|
|
def load_data_in_chunks(file_path, columns, start_date=None, end_date=None, chunksize=10000): |
|
chunks = [] |
|
for chunk in pd.read_csv(file_path, usecols=['datetime'] + columns, chunksize=chunksize, parse_dates=['datetime']): |
|
if start_date and end_date: |
|
chunk = chunk[(chunk['datetime'] >= start_date) & (chunk['datetime'] <= end_date)] |
|
chunks.append(chunk) |
|
return pd.concat(chunks) |
|
|
|
|
|
pn.extension("plotly") |
|
|
|
|
|
inverter_ids = pn.widgets.MultiSelect( |
|
name="Inverter IDs", |
|
value=[list(INVERTER_ID_MAPPING.keys())[0]], |
|
options=list(INVERTER_ID_MAPPING.keys()), |
|
size=8, |
|
) |
|
|
|
plot_power_curves = pn.widgets.Checkbox(name="Plot P-dc and P-ac", value=False) |
|
plot_temperature_curves = pn.widgets.Checkbox(name="Plot Temperatures", value=False) |
|
|
|
|
|
heatmap_pr = pn.widgets.Checkbox(name="Heat Map PR", value=False) |
|
heatmap_sy = pn.widgets.Checkbox(name="Heat Map SY", value=False) |
|
heatmap_current = pn.widgets.Checkbox(name="Heat Map - Current", value=False) |
|
heatmap_voltage = pn.widgets.Checkbox(name="Heat Map - Voltage", value=False) |
|
heatmap_power = pn.widgets.Checkbox(name="Heat Map - Power", value=False) |
|
heatmap_irradiance = pn.widgets.Checkbox(name="Heat Map - Irradiance", value=False) |
|
heatmap_temperature = pn.widgets.Checkbox( |
|
name="Heat Map - Temperature " "Heatsink", value=False |
|
) |
|
|
|
|
|
loading_spinner = pn.indicators.LoadingSpinner(width=50, height=50) |
|
|
|
|
|
@pn.depends( |
|
inverter_ids.param.value, |
|
plot_power_curves.param.value, |
|
plot_temperature_curves.param.value, |
|
) |
|
def update_iv_plot(inverter_ids, plot_power_curves, plot_temperature_curves): |
|
if not inverter_ids: |
|
return pn.pane.Markdown("No Inverters selected for Plotting.") |
|
else: |
|
columns = [] |
|
if plot_power_curves: |
|
columns += [CURRENT, IRRADIANCE, VOLTAGE, POWER_DC, POWER_AC] |
|
if plot_temperature_curves: |
|
columns += [T_AMBIENT, T_MODULE, T_HEATSINK, T_CPU, T_BOARD] |
|
if not plot_power_curves and not plot_temperature_curves: |
|
columns += [CURRENT, IRRADIANCE, VOLTAGE] |
|
|
|
data = load_data_in_chunks('multi_index_timeseries_data.csv', columns) |
|
other_data = load_data_in_chunks('other_features_data.csv', TEMPERATURE_COLUMNS_TO_USE) |
|
|
|
|
|
if plot_power_curves and plot_temperature_curves: |
|
print("Plotting IV + Power + Temperature Curves") |
|
return create_iv_plot_with_power_and_temperature_curves( |
|
data, other_data, inverter_ids |
|
) |
|
|
|
elif (not plot_power_curves) and plot_temperature_curves: |
|
print("Plot IV + Temperature Curves") |
|
return create_iv_plot_with_temperature_curves( |
|
data, other_data, inverter_ids |
|
) |
|
|
|
elif plot_power_curves and (not plot_temperature_curves): |
|
print("Plot IV + Power Curves") |
|
return create_iv_plot_with_power_curves(data, inverter_ids) |
|
|
|
else: |
|
print("Plot only IV Curves") |
|
return create_iv_plot(data, inverter_ids) |
|
|
|
@pn.depends(heatmap_pr.param.value) |
|
def update_heatmap_pr(heatmap_pr): |
|
if heatmap_pr: |
|
pr_df = kpi_data.filter(like="pr") |
|
pr_df.columns = [i.split("-")[1] for i in pr_df.columns] |
|
pr_heatmap = create_heatmap(pr_df, "PR Heatmap") |
|
return pn.Row(pr_heatmap) |
|
return pn.pane.Markdown("") |
|
|
|
@pn.depends(heatmap_sy.param.value) |
|
def update_heatmap_sy(heatmap_sy): |
|
if heatmap_sy: |
|
sy_df = kpi_data.filter(like="daily_specific_yield") |
|
sy_df.columns = [i.split("-")[1] for i in sy_df.columns] |
|
sy_heatmap = create_heatmap(sy_df, "SY Heatmap") |
|
return pn.Row(sy_heatmap) |
|
return pn.pane.Markdown("") |
|
|
|
@pn.depends(heatmap_current.param.value) |
|
def update_heatmap_current(heatmap_current): |
|
if heatmap_current: |
|
current_df = daily_timeseries_data.filter(like="I") |
|
current_df.columns = [i.split("-")[1] for i in current_df.columns] |
|
current_heatmap = create_heatmap(current_df, "Current Heatmap") |
|
return pn.Row(current_heatmap) |
|
return pn.pane.Markdown("") |
|
|
|
@pn.depends(heatmap_voltage.param.value) |
|
def update_heatmap_voltage(heatmap_voltage): |
|
if heatmap_voltage: |
|
voltage_df = daily_timeseries_data.filter(like="V") |
|
voltage_df.columns = [i.split("-")[1] for i in voltage_df.columns] |
|
voltage_heatmap = create_heatmap(voltage_df, "Voltage Heatmap") |
|
return pn.Row(voltage_heatmap) |
|
return pn.pane.Markdown("") |
|
|
|
@pn.depends(heatmap_power.param.value) |
|
def update_heatmap_power(heatmap_power): |
|
if heatmap_power: |
|
power_df = daily_timeseries_data.filter(like="P") |
|
power_df.columns = [i.split("-")[1] for i in power_df.columns] |
|
power_heatmap = create_heatmap(power_df, "Power Heatmap") |
|
return pn.Row(power_heatmap) |
|
return pn.pane.Markdown("") |
|
|
|
@pn.depends(heatmap_irradiance.param.value) |
|
def update_heatmap_irradiance(heatmap_irradiance): |
|
if heatmap_irradiance: |
|
irradiance_df = daily_timeseries_data.filter(like="G") |
|
irradiance_df.columns = [i.split("-")[1] for i in irradiance_df.columns] |
|
irradiance_heatmap = create_heatmap(irradiance_df, "Irradiance " "Heatmap") |
|
return pn.Row(irradiance_heatmap) |
|
return pn.pane.Markdown("") |
|
|
|
@pn.depends(heatmap_temperature.param.value) |
|
def update_heatmap_temperature(heatmap_temperature): |
|
if heatmap_temperature: |
|
temp_df = daily_timeseries_data.filter(like="THeatSink") |
|
temp_df.columns = [i.split("-")[1] for i in temp_df.columns] |
|
temp_heatmap = create_heatmap(temp_df, "T-Heatsink Heatmap") |
|
return pn.Row(temp_heatmap) |
|
return pn.pane.Markdown("") |
|
|
|
|
|
dashboard = pn.Column( |
|
"# ENEL Dashboard", |
|
|
|
pn.Row( |
|
pn.Column(inverter_ids, plot_power_curves, plot_temperature_curves), |
|
pn.panel(update_iv_plot, sizing_mode="stretch_width"), |
|
), |
|
|
|
pn.Row( |
|
pn.Column(heatmap_pr), pn.panel(update_heatmap_pr, sizing_mode="stretch_width") |
|
), |
|
pn.Row( |
|
pn.Column(heatmap_sy), pn.panel(update_heatmap_sy, sizing_mode="stretch_width") |
|
), |
|
pn.Row( |
|
pn.Column(heatmap_current), |
|
pn.panel(update_heatmap_current, sizing_mode="stretch_width"), |
|
), |
|
pn.Row( |
|
pn.Column(heatmap_voltage), |
|
pn.panel(update_heatmap_voltage, sizing_mode="stretch_width"), |
|
), |
|
pn.Row( |
|
pn.Column(heatmap_power), |
|
pn.panel(update_heatmap_power, sizing_mode="stretch_width"), |
|
), |
|
pn.Row( |
|
pn.Column(heatmap_irradiance), |
|
pn.panel(update_heatmap_irradiance, sizing_mode="stretch_width"), |
|
), |
|
pn.Row( |
|
pn.Column(heatmap_temperature), |
|
pn.panel(update_heatmap_temperature, sizing_mode="stretch_width"), |
|
), |
|
) |
|
|
|
|
|
dashboard.servable() |
|
|