diff --git a/enrich_demand.py b/enrich_demand.py
new file mode 100644
index 00000000..fa0b88e1
--- /dev/null
+++ b/enrich_demand.py
@@ -0,0 +1,55 @@
+import pandas as pd
+import calendar
+
+
+def enrich(city):
+ """
+ Enrich the city by using the heating and cooling demand data from Excel files.
+ """
+
+
+ # Read the heating and cooling Excel files
+ heating_df = pd.read_excel('./input_files/heating.xlsx')
+ cooling_df = pd.read_excel('./input_files/cooling.xlsx')
+
+ # Ensure that the data frames have the same number of buildings as city.buildings
+ assert len(heating_df) == len(city.buildings), "Mismatch in number of buildings in heating data."
+ assert len(cooling_df) == len(city.buildings), "Mismatch in number of buildings in cooling data."
+
+ # Helper function to compute monthly totals
+ def get_monthly_totals(hourly_values):
+ monthly_totals = []
+ hour_index = 0
+ for month in range(1, 13):
+ days_in_month = calendar.monthrange(2023, month)[1]
+ hours_in_month = days_in_month * 24
+ monthly_total = sum(hourly_values[hour_index:hour_index + hours_in_month])
+ monthly_totals.append(monthly_total)
+ hour_index += hours_in_month
+ return monthly_totals
+
+ # Iterate over buildings and data frames
+ for idx, (building, heating_row, cooling_row) in enumerate(
+ zip(city.buildings, heating_df.itertuples(index=False), cooling_df.itertuples(index=False))):
+ # Skip the 'building' column (assuming it's the first column)
+ heating_demand_hourly = list(heating_row)[1:] # Exclude the 'building' column
+ cooling_demand_hourly = list(cooling_row)[1:] # Exclude the 'building' column
+
+ # Convert demands to Joules (1 kWh = 3.6e6 J)
+ heating_demand_hourly_joules = [value * 3.6e6 for value in heating_demand_hourly]
+ cooling_demand_hourly_joules = [value * 3.6e6 for value in cooling_demand_hourly]
+
+ # Store the demands in the building object
+ building.heating_demand = {}
+ building.cooling_demand = {}
+
+ building.heating_demand['hour'] = heating_demand_hourly_joules
+ building.cooling_demand['hour'] = cooling_demand_hourly_joules
+
+ # Compute monthly demands
+ building.heating_demand['month'] = get_monthly_totals(heating_demand_hourly_joules)
+ building.cooling_demand['month'] = get_monthly_totals(cooling_demand_hourly_joules)
+
+ # Compute yearly demands
+ building.heating_demand['year'] = [sum(building.heating_demand['month'])]
+ building.cooling_demand['year'] = [sum(building.cooling_demand['month'])]
\ No newline at end of file
diff --git a/input_files/cooling.xlsx b/input_files/cooling.xlsx
new file mode 100644
index 00000000..47d55108
Binary files /dev/null and b/input_files/cooling.xlsx differ
diff --git a/input_files/heating.xlsx b/input_files/heating.xlsx
new file mode 100644
index 00000000..3cb35c4c
Binary files /dev/null and b/input_files/heating.xlsx differ
diff --git a/lachine_development.py b/lachine_development.py
index 826ea4ac..965c98c3 100644
--- a/lachine_development.py
+++ b/lachine_development.py
@@ -1,25 +1,12 @@
from pathlib import Path
-import subprocess
from building_modelling.ep_run_enrich import energy_plus_workflow
-from energy_system_modelling_package.energy_system_modelling_factories.montreal_energy_system_archetype_modelling_factory import \
- MontrealEnergySystemArchetypesSimulationFactory
-from energy_system_modelling_package.energy_system_modelling_factories.pv_assessment.pv_feasibility import \
- pv_feasibility
from hub.imports.geometry_factory import GeometryFactory
from hub.helpers.dictionaries import Dictionaries
from hub.imports.construction_factory import ConstructionFactory
from hub.imports.usage_factory import UsageFactory
from hub.imports.weather_factory import WeatherFactory
-from hub.imports.results_factory import ResultFactory
-from energy_system_modelling_package.energy_system_retrofit.energy_system_retrofit_report import EnergySystemRetrofitReport
-from building_modelling.geojson_creator import process_geojson
-from energy_system_modelling_package import random_assignation
-from hub.imports.energy_systems_factory import EnergySystemsFactory
-from energy_system_modelling_package.energy_system_modelling_factories.energy_system_sizing_factory import EnergySystemsSizingFactory
-from energy_system_modelling_package.energy_system_retrofit.energy_system_retrofit_results import consumption_data, cost_data
-from costing_package.cost import Cost
-from costing_package.constants import SYSTEM_RETROFIT_AND_PV, CURRENT_STATUS
-from hub.exports.exports_factory import ExportsFactory
+from enrich_demand import enrich
+import pandas as pd
# Directory management
input_files_path = (Path(__file__).parent / 'input_files')
@@ -34,21 +21,131 @@ simulation_results_path.mkdir(parents=True, exist_ok=True)
sra_output_path = output_path / 'sra_outputs'
sra_output_path.mkdir(parents=True, exist_ok=True)
cost_analysis_output_path = output_path / 'cost_analysis'
-cost_analysis_output_path.mkdir(parents=True, exist_ok=True)
+cost_analysis_output_path.mkdir(parents=True, exist_ok=True)])
+lachine_output_path = output_path / 'lachine_outputs'
-# Create City from HUB
-city = GeometryFactory(file_type='geojson',
- path=geojson_file_path,
- height_field='maximum_roof_height',
- year_of_construction_field='year_built',
- function_field='building_type',
- function_to_hub=Dictionaries().montreal_function_to_hub_function).city
-ConstructionFactory('nrcan', city).enrich()
-UsageFactory('nrcan', city).enrich()
-WeatherFactory('epw', city).enrich()
-ExportsFactory('sra', city, sra_output_path).export()
-sra_path = (sra_output_path / f'{city.name}_sra.xml').resolve()
-subprocess.run(['sra', str(sra_path)])
-ResultFactory('sra', city, sra_output_path).enrich()
+# Create City from HUB to run EP_Workflow
+city_ep_workflow = GeometryFactory(
+ file_type='geojson',
+ path=geojson_file_path,
+ height_field='maximum_roof_height',
+ year_of_construction_field='year_built',
+ function_field='building_type',
+ function_to_hub=Dictionaries().montreal_function_to_hub_function
+).city
-energy_plus_workflow(city, energy_plus_output_path)
\ No newline at end of file
+ConstructionFactory('nrcan', city_ep_workflow).enrich()
+UsageFactory('nrcan', city_ep_workflow).enrich()
+WeatherFactory('epw', city_ep_workflow).enrich()
+energy_plus_workflow(city_ep_workflow, energy_plus_output_path)
+
+# Create City from HUB to use Grasshopper results
+city_grasshopper = GeometryFactory(
+ file_type='geojson',
+ path=geojson_file_path,
+ height_field='maximum_roof_height',
+ year_of_construction_field='year_built',
+ function_field='building_type',
+ function_to_hub=Dictionaries().montreal_function_to_hub_function
+).city
+
+ConstructionFactory('nrcan', city_grasshopper).enrich()
+UsageFactory('nrcan', city_grasshopper).enrich()
+WeatherFactory('epw', city_grasshopper).enrich()
+
+enrich(city_grasshopper)
+
+# Collect data from city_ep_workflow
+ep_building_data = []
+
+for building in city_ep_workflow.buildings:
+ building_name = building.name
+
+ # Get total floor area
+ total_floor_area = 0
+ for zone in building.thermal_zones_from_internal_zones:
+ total_floor_area += zone.total_floor_area # Assuming area is in m^2
+
+ # Get yearly heating demand in Joules
+ yearly_heating_demand_J = building.heating_demand['year'][0] # Should be a single value
+ # Convert to kWh
+ yearly_heating_demand_kWh = yearly_heating_demand_J / 3.6e6
+ # Compute heating demand intensity (kWh/m²)
+ heating_demand_intensity = yearly_heating_demand_kWh / total_floor_area if total_floor_area > 0 else 0
+
+ # Get yearly cooling demand in Joules
+ yearly_cooling_demand_J = building.cooling_demand['year'][0] # Should be a single value
+ # Convert to kWh
+ yearly_cooling_demand_kWh = yearly_cooling_demand_J / 3.6e6
+ # Compute cooling demand intensity (kWh/m²)
+ cooling_demand_intensity = yearly_cooling_demand_kWh / total_floor_area if total_floor_area > 0 else 0
+
+ # Append data to list
+ ep_building_data.append({
+ 'Building Name': building_name,
+ 'Yearly Heating Demand EP (kWh)': yearly_heating_demand_kWh,
+ 'Demand Intensity Heating EP (kWh/m²)': heating_demand_intensity,
+ 'Yearly Cooling Demand EP (kWh)': yearly_cooling_demand_kWh,
+ 'Demand Intensity Cooling EP (kWh/m²)': cooling_demand_intensity,
+ 'Total Floor Area (m²)': total_floor_area
+ })
+
+# Collect data from city_grasshopper
+grasshopper_building_data = []
+
+for building in city_grasshopper.buildings:
+ building_name = building.name
+
+ # Get total floor area
+ total_floor_area = 0
+ for zone in building.thermal_zones_from_internal_zones:
+ total_floor_area += zone.total_floor_area # Assuming area is in m^2
+
+ # Get yearly heating demand in Joules
+ yearly_heating_demand_J = building.heating_demand['year'][0] # Should be a single value
+ # Convert to kWh
+ yearly_heating_demand_kWh = yearly_heating_demand_J / 3.6e6
+ # Compute heating demand intensity (kWh/m²)
+ heating_demand_intensity = yearly_heating_demand_kWh / total_floor_area if total_floor_area > 0 else 0
+
+ # Get yearly cooling demand in Joules
+ yearly_cooling_demand_J = building.cooling_demand['year'][0] # Should be a single value
+ # Convert to kWh
+ yearly_cooling_demand_kWh = yearly_cooling_demand_J / 3.6e6
+ # Compute cooling demand intensity (kWh/m²)
+ cooling_demand_intensity = yearly_cooling_demand_kWh / total_floor_area if total_floor_area > 0 else 0
+
+ # Append data to list
+ grasshopper_building_data.append({
+ 'Building Name': building_name,
+ 'Yearly Heating Demand Grasshopper (kWh)': yearly_heating_demand_kWh,
+ 'Demand Intensity Heating Grasshopper (kWh/m²)': heating_demand_intensity,
+ 'Yearly Cooling Demand Grasshopper (kWh)': yearly_cooling_demand_kWh,
+ 'Demand Intensity Cooling Grasshopper (kWh/m²)': cooling_demand_intensity
+ })
+
+# Create DataFrames
+ep_df = pd.DataFrame(ep_building_data)
+grasshopper_df = pd.DataFrame(grasshopper_building_data)
+
+# Merge DataFrames on 'Building Name' and 'Total Floor Area (m²)'
+# Since Total Floor Area should be the same for both, we can use it from ep_df
+merged_df = pd.merge(ep_df, grasshopper_df, on='Building Name')
+
+# Rearrange columns if needed
+merged_df = merged_df[[
+ 'Building Name',
+ 'Yearly Heating Demand EP (kWh)',
+ 'Demand Intensity Heating EP (kWh/m²)',
+ 'Yearly Cooling Demand EP (kWh)',
+ 'Demand Intensity Cooling EP (kWh/m²)',
+ 'Yearly Heating Demand Grasshopper (kWh)',
+ 'Demand Intensity Heating Grasshopper (kWh/m²)',
+ 'Yearly Cooling Demand Grasshopper (kWh)',
+ 'Demand Intensity Cooling Grasshopper (kWh/m²)',
+ 'Total Floor Area (m²)'
+]]
+
+# Write to Excel
+output_excel_path = lachine_output_path / 'building_heating_cooling_demands.xlsx'
+merged_df.to_excel(output_excel_path, index=False)
diff --git a/out_files/energy_plus_outputs/Cote-Saint-Luc_out.audit b/out_files/energy_plus_outputs/Cote-Saint-Luc_out.audit
index ea86e2b6..db830e1b 100644
--- a/out_files/energy_plus_outputs/Cote-Saint-Luc_out.audit
+++ b/out_files/energy_plus_outputs/Cote-Saint-Luc_out.audit
@@ -1,41 +1,41 @@
Processing Schedule Input -- Start
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 33-commercial_67-warehouse.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 33-commercial_67-warehouse.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 33-commercial_67-warehouse.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 16-commercial_84-residential.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 16-commercial_84-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 16-commercial_84-residential.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 25-commercial_75-warehouse.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 25-commercial_75-warehouse.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 25-commercial_75-warehouse.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 22-commercial_78-warehouse.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 22-commercial_78-warehouse.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 22-commercial_78-warehouse.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 100-warehouse.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 100-warehouse.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 100-warehouse.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 15-commercial_46-warehouse_39-office and administration.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 15-commercial_46-warehouse_39-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 15-commercial_46-warehouse_39-office and administration.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 71-warehouse_29-office and administration.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 71-warehouse_29-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 71-warehouse_29-office and administration.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 75-warehouse_25-office and administration.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 75-warehouse_25-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 75-warehouse_25-office and administration.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 100-residential.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 100-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 100-residential.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 100-office and administration.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 100-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 100-office and administration.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 15-commercial_85-residential.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 15-commercial_85-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 15-commercial_85-residential.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 21-commercial_79-residential.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 21-commercial_79-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 21-commercial_79-residential.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 9-commercial_91-residential.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 9-commercial_91-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 9-commercial_91-residential.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 33-commercial_33-warehouse_33-office and administration.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 33-commercial_33-warehouse_33-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 33-commercial_33-warehouse_33-office and administration.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 8-commercial_92-residential.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 8-commercial_92-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 8-commercial_92-residential.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 6-commercial_94-residential.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 6-commercial_94-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 6-commercial_94-residential.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 67-warehouse_33-office and administration.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 67-warehouse_33-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 67-warehouse_33-office and administration.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 50-warehouse_50-office and administration.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 50-warehouse_50-office and administration.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 50-warehouse_50-office and administration.csv
-not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmpwga_02mw\cold_temp schedules 18-commercial_82-residential.csv
+not found (Current Working Directory)=C:\Users\ab_reza\AppData\Local\Temp\tmp7ivpaqop\cold_temp schedules 18-commercial_82-residential.csv
found (IDF Directory)=C:\Users\ab_reza\Majid\Concordia\Repositories\energy_system_modelling_workflow\out_files\energy_plus_outputs\cold_temp schedules 18-commercial_82-residential.csv
Processing Schedule Input -- Complete
MonthlyInputCount= 2
diff --git a/out_files/energy_plus_outputs/Cote-Saint-Luc_out.bnd b/out_files/energy_plus_outputs/Cote-Saint-Luc_out.bnd
index 5151505f..f2d8704e 100644
--- a/out_files/energy_plus_outputs/Cote-Saint-Luc_out.bnd
+++ b/out_files/energy_plus_outputs/Cote-Saint-Luc_out.bnd
@@ -1,4 +1,4 @@
-Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 10:35
+Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17
! This file shows details about the branches, nodes, and other
! elements of the flow connections.
! This file is intended for use in "debugging" potential problems
diff --git a/out_files/energy_plus_outputs/Cote-Saint-Luc_out.eio b/out_files/energy_plus_outputs/Cote-Saint-Luc_out.eio
index de90877e..6a5adb11 100644
--- a/out_files/energy_plus_outputs/Cote-Saint-Luc_out.eio
+++ b/out_files/energy_plus_outputs/Cote-Saint-Luc_out.eio
@@ -1,4 +1,4 @@
-Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 10:35
+Program Version,EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17
! Program Version:EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 10:35 Program Version:EnergyPlus, Version 23.2.0-7636e6b3e9, YMD=2024.09.24 22:17 Tabular Output Report in Format: HTML Building: Buildings in b'Cote-Saint-Luc' Environment: RUN PERIOD 1 ** Montreal Int'l PQ CAN WYEC2-B-94792 WMO#=716270 Simulation Timestamp: 2024-09-24
- 10:35:39
Report: Annual Building Utility Performance Summary
For: Entire Facility
Timestamp: 2024-09-24 - 10:35:39
+ 22:17:09 Values gathered over 8760.00 hoursReport: Input Verification and Results Summary
For: Entire Facility
Timestamp: 2024-09-24 - 10:35:39
+ 22:17:09 General