Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions data/data_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,8 @@ def save_data_and_jsons(self, fmu_path):
self.days_path = os.path.join(models_dir, 'days.json')
# Find the config.json path
self.config_path = os.path.join(models_dir, 'config.json')
# Find the tags.json path
self.tags_path = os.path.join(models_dir, 'tags.json')

if os.path.exists(resources_dir):
# Find all files within Resources folder
Expand Down Expand Up @@ -252,6 +254,13 @@ def save_data_and_jsons(self, fmu_path):
else:
warnings.warn('No config.json found for this test case')

# Write a copy of tags.json to the fmu resources folder
if os.path.exists(self.tags_path):
self.z_fmu.write(self.tags_path,
os.path.join('resources', 'tags.json'))
else:
warnings.warn('No tags.json found for this test case')

# Close the fmu
self.z_fmu.close()

Expand Down Expand Up @@ -384,6 +393,14 @@ def load_data_and_jsons(self):
# Load config json
json_str = z_fmu.open('resources/config.json').read()
self.case.config_json = json.loads(json_str)
# Load tags json
# This is currently not a required file
try:
json_str = z_fmu.open('resources/tags.json').read()
except:
# If there is no tags file then create an empty dictionary
json_str = '{}'
self.case.tags_json = json.loads(json_str)

# Find the test case data files
files = []
Expand Down
1 change: 1 addition & 0 deletions testcase.py
Original file line number Diff line number Diff line change
Expand Up @@ -645,6 +645,7 @@ def _get_var_metadata(self, fmu, var_list, inputs=False):
maxi = None
var_metadata[var] = {'Unit':unit,
'Description':description,
'tags': self.tags_json.get(var),
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it make sense to capitalize 'tags' like other meta data?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

certainly. good catch.

'Minimum':mini,
'Maximum':maxi}

Expand Down
22 changes: 22 additions & 0 deletions testcases/testcase1/models/tags.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"oveAct_u": {
"writable": "m:",
"unit": "s:W"
},
"PHea_y": {
"point": "m:",
"sensor": "m:",
"unit": "s:W"
},
"TRooAir_y": {
"point": "m:",
"sensor": "m:",
"temp": "m:",
"unit": "s:C"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This unit should be K.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kbenne I think eventually it would be good to at least be able to specify (in a test case) and get (as a user) a full haystack model, which if I understand correctly could be implemented as a json of tags. Does it require a full haystack API implementation to get the haystack model, or does one without the other sound ridiculous? A haystack API could indeed live alongside and be complementary to the current BOPTEST API, but with notable overlaps in functionality being PointWrite-/advance (though advance also advances the simulation) and HisRead-/results.

In the meantime for this PR, can you :

  • Address my inline comments and
  • Update design documentation to include tags.json in the test case directory spec (comment that it is optional right now), and also add a section and spec for tags.json as you've implemented similar to other json specs.
  • Update release notes with this edit

As far as I know, you don't have to implement all of the Haystack API. In fact the API specifies an /ops endpoint that returns a form of documentation for what endpoints the server is supporting. I think read and nav would be sufficient for model discovery.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then the use of /ops, read, and nav, along with implementing an example "full" model, I think could be a good next goal, at least in the direction of haystack support.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For #361 (comment) the unit has been changed in 0868a08.

},
"CO2RooAir_y": {
"point": "m:",
"sensor": "m:",
"unit": "s:ppm"
}
}
59 changes: 58 additions & 1 deletion testing/references/bestest_air/get_inputs.json
Original file line number Diff line number Diff line change
@@ -1 +1,58 @@
{"fcu_oveTSup_u": {"Minimum": 285.15, "Description": "Supply air temperature setpoint", "Unit": "K", "Maximum": 313.15}, "fcu_oveFan_u": {"Minimum": 0.0, "Description": "Fan control signal as air mass flow rate normalized to the design air mass flow rate", "Unit": "1", "Maximum": 1.0}, "fcu_oveFan_activate": {"Minimum": null, "Description": "Activation for Fan control signal as air mass flow rate normalized to the design air mass flow rate", "Unit": null, "Maximum": null}, "fcu_oveTSup_activate": {"Minimum": null, "Description": "Activation for Supply air temperature setpoint", "Unit": null, "Maximum": null}, "con_oveTSetHea_activate": {"Minimum": null, "Description": "Activation for Zone temperature setpoint for heating", "Unit": null, "Maximum": null}, "con_oveTSetCoo_activate": {"Minimum": null, "Description": "Activation for Zone temperature setpoint for cooling", "Unit": null, "Maximum": null}, "con_oveTSetHea_u": {"Minimum": 288.15, "Description": "Zone temperature setpoint for heating", "Unit": "K", "Maximum": 296.15}, "con_oveTSetCoo_u": {"Minimum": 296.15, "Description": "Zone temperature setpoint for cooling", "Unit": "K", "Maximum": 303.15}}
{
"fcu_oveTSup_u": {
"Minimum": 285.15,
"Description": "Supply air temperature setpoint",
"Unit": "K",
"Maximum": 313.15,
"tags": null
},
"fcu_oveFan_u": {
"Minimum": 0,
"Description": "Fan control signal as air mass flow rate normalized to the design air mass flow rate",
"Unit": "1",
"Maximum": 1,
"tags": null
},
"fcu_oveFan_activate": {
"Minimum": null,
"Description": "Activation for Fan control signal as air mass flow rate normalized to the design air mass flow rate",
"Unit": null,
"Maximum": null,
"tags": null
},
"fcu_oveTSup_activate": {
"Minimum": null,
"Description": "Activation for Supply air temperature setpoint",
"Unit": null,
"Maximum": null,
"tags": null
},
"con_oveTSetHea_activate": {
"Minimum": null,
"Description": "Activation for Zone temperature setpoint for heating",
"Unit": null,
"Maximum": null,
"tags": null
},
"con_oveTSetCoo_activate": {
"Minimum": null,
"Description": "Activation for Zone temperature setpoint for cooling",
"Unit": null,
"Maximum": null,
"tags": null
},
"con_oveTSetHea_u": {
"Minimum": 288.15,
"Description": "Zone temperature setpoint for heating",
"Unit": "K",
"Maximum": 296.15,
"tags": null
},
"con_oveTSetCoo_u": {
"Minimum": 296.15,
"Description": "Zone temperature setpoint for cooling",
"Unit": "K",
"Maximum": 303.15,
"tags": null
}
}
248 changes: 247 additions & 1 deletion testing/references/bestest_air/get_measurements.json
Original file line number Diff line number Diff line change
@@ -1 +1,247 @@
{"zon_weaSta_reaWeaSolHouAng_y": {"Minimum": null, "Description": "Solar hour angle measurement", "Unit": "rad", "Maximum": null}, "zon_weaSta_reaWeaSolDec_y": {"Minimum": null, "Description": "Solar declination angle measurement", "Unit": "rad", "Maximum": null}, "zon_weaSta_reaWeaSolZen_y": {"Minimum": null, "Description": "Solar zenith angle measurement", "Unit": "rad", "Maximum": null}, "zon_weaSta_reaWeaLon_y": {"Minimum": null, "Description": "Longitude of the location", "Unit": "rad", "Maximum": null}, "con_reaTSetCoo_y": {"Minimum": null, "Description": "Zone air temperature setpoint for cooling", "Unit": "K", "Maximum": null}, "fcu_reaFanSet_y": {"Minimum": null, "Description": "Fan control signal setpoint as air mass flow rate normalized to the design air mass flow rate", "Unit": "1", "Maximum": null}, "zon_reaPLig_y": {"Minimum": null, "Description": "Lighting power submeter", "Unit": "W", "Maximum": null}, "zon_weaSta_reaWeaCloTim_y": {"Minimum": null, "Description": "Day number with units of seconds", "Unit": "s", "Maximum": null}, "zon_reaPPlu_y": {"Minimum": null, "Description": "Plug load power submeter", "Unit": "W", "Maximum": null}, "zon_weaSta_reaWeaSolTim_y": {"Minimum": null, "Description": "Solar time", "Unit": "s", "Maximum": null}, "zon_weaSta_reaWeaWinSpe_y": {"Minimum": null, "Description": "Wind speed measurement", "Unit": "m/s", "Maximum": null}, "zon_weaSta_reaWeaNOpa_y": {"Minimum": null, "Description": "Opaque sky cover measurement", "Unit": "1", "Maximum": null}, "zon_reaCO2RooAir_y": {"Minimum": null, "Description": "Zone air CO2 concentration", "Unit": "ppm", "Maximum": null}, "fcu_reaPCoo_y": {"Minimum": null, "Description": "Cooling electrical power consumption", "Unit": "W", "Maximum": null}, "fcu_reaPHea_y": {"Minimum": null, "Description": "Heating thermal power consumption", "Unit": "W", "Maximum": null}, "zon_weaSta_reaWeaLat_y": {"Minimum": null, "Description": "Latitude of the location", "Unit": "rad", "Maximum": null}, "zon_weaSta_reaWeaRelHum_y": {"Minimum": null, "Description": "Outside relative humidity measurement", "Unit": "1", "Maximum": null}, "fcu_reaFloSup_y": {"Minimum": null, "Description": "Supply air mass flow rate", "Unit": "kg/s", "Maximum": null}, "zon_weaSta_reaWeaTDryBul_y": {"Minimum": null, "Description": "Outside drybulb temperature measurement", "Unit": "K", "Maximum": null}, "zon_weaSta_reaWeaCeiHei_y": {"Minimum": null, "Description": "Cloud cover ceiling height measurement", "Unit": "m", "Maximum": null}, "zon_weaSta_reaWeaHDifHor_y": {"Minimum": null, "Description": "Horizontal diffuse solar radiation measurement", "Unit": "W/m2", "Maximum": null}, "zon_weaSta_reaWeaHGloHor_y": {"Minimum": null, "Description": "Global horizontal solar irradiation measurement", "Unit": "W/m2", "Maximum": null}, "fcu_reaTSup_y": {"Minimum": null, "Description": "Supply air temperature setpoint", "Unit": "K", "Maximum": null}, "zon_reaTRooAir_y": {"Minimum": null, "Description": "Zone air temperature", "Unit": "K", "Maximum": null}, "zon_weaSta_reaWeaPAtm_y": {"Minimum": null, "Description": "Atmospheric pressure measurement", "Unit": "Pa", "Maximum": null}, "zon_weaSta_reaWeaTBlaSky_y": {"Minimum": null, "Description": "Black-body sky temperature measurement", "Unit": "K", "Maximum": null}, "zon_weaSta_reaWeaNTot_y": {"Minimum": null, "Description": "Sky cover measurement", "Unit": "1", "Maximum": null}, "zon_weaSta_reaWeaSolAlt_y": {"Minimum": null, "Description": "Solar altitude angle measurement", "Unit": "rad", "Maximum": null}, "zon_weaSta_reaWeaWinDir_y": {"Minimum": null, "Description": "Wind direction measurement", "Unit": "rad", "Maximum": null}, "zon_weaSta_reaWeaTWetBul_y": {"Minimum": null, "Description": "Wet bulb temperature measurement", "Unit": "K", "Maximum": null}, "fcu_reaPFan_y": {"Minimum": null, "Description": "Supply fan electrical power consumption", "Unit": "W", "Maximum": null}, "zon_weaSta_reaWeaHHorIR_y": {"Minimum": null, "Description": "Horizontal infrared irradiation measurement", "Unit": "W/m2", "Maximum": null}, "zon_weaSta_reaWeaHDirNor_y": {"Minimum": null, "Description": "Direct normal radiation measurement", "Unit": "W/m2", "Maximum": null}, "zon_weaSta_reaWeaTDewPoi_y": {"Minimum": null, "Description": "Dew point temperature measurement", "Unit": "K", "Maximum": null}, "con_reaTSetHea_y": {"Minimum": null, "Description": "Zone air temperature setpoint for heating", "Unit": "K", "Maximum": null}}
{
"zon_weaSta_reaWeaSolHouAng_y": {
"Minimum": null,
"Description": "Solar hour angle measurement",
"Unit": "rad",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaSolDec_y": {
"Minimum": null,
"Description": "Solar declination angle measurement",
"Unit": "rad",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaSolZen_y": {
"Minimum": null,
"Description": "Solar zenith angle measurement",
"Unit": "rad",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaLon_y": {
"Minimum": null,
"Description": "Longitude of the location",
"Unit": "rad",
"Maximum": null,
"tags": null
},
"con_reaTSetCoo_y": {
"Minimum": null,
"Description": "Zone air temperature setpoint for cooling",
"Unit": "K",
"Maximum": null,
"tags": null
},
"fcu_reaFanSet_y": {
"Minimum": null,
"Description": "Fan control signal setpoint as air mass flow rate normalized to the design air mass flow rate",
"Unit": "1",
"Maximum": null,
"tags": null
},
"zon_reaPLig_y": {
"Minimum": null,
"Description": "Lighting power submeter",
"Unit": "W",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaCloTim_y": {
"Minimum": null,
"Description": "Day number with units of seconds",
"Unit": "s",
"Maximum": null,
"tags": null
},
"zon_reaPPlu_y": {
"Minimum": null,
"Description": "Plug load power submeter",
"Unit": "W",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaSolTim_y": {
"Minimum": null,
"Description": "Solar time",
"Unit": "s",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaWinSpe_y": {
"Minimum": null,
"Description": "Wind speed measurement",
"Unit": "m/s",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaNOpa_y": {
"Minimum": null,
"Description": "Opaque sky cover measurement",
"Unit": "1",
"Maximum": null,
"tags": null
},
"zon_reaCO2RooAir_y": {
"Minimum": null,
"Description": "Zone air CO2 concentration",
"Unit": "ppm",
"Maximum": null,
"tags": null
},
"fcu_reaPCoo_y": {
"Minimum": null,
"Description": "Cooling electrical power consumption",
"Unit": "W",
"Maximum": null,
"tags": null
},
"fcu_reaPHea_y": {
"Minimum": null,
"Description": "Heating thermal power consumption",
"Unit": "W",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaLat_y": {
"Minimum": null,
"Description": "Latitude of the location",
"Unit": "rad",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaRelHum_y": {
"Minimum": null,
"Description": "Outside relative humidity measurement",
"Unit": "1",
"Maximum": null,
"tags": null
},
"fcu_reaFloSup_y": {
"Minimum": null,
"Description": "Supply air mass flow rate",
"Unit": "kg/s",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaTDryBul_y": {
"Minimum": null,
"Description": "Outside drybulb temperature measurement",
"Unit": "K",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaCeiHei_y": {
"Minimum": null,
"Description": "Cloud cover ceiling height measurement",
"Unit": "m",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaHDifHor_y": {
"Minimum": null,
"Description": "Horizontal diffuse solar radiation measurement",
"Unit": "W/m2",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaHGloHor_y": {
"Minimum": null,
"Description": "Global horizontal solar irradiation measurement",
"Unit": "W/m2",
"Maximum": null,
"tags": null
},
"fcu_reaTSup_y": {
"Minimum": null,
"Description": "Supply air temperature setpoint",
"Unit": "K",
"Maximum": null,
"tags": null
},
"zon_reaTRooAir_y": {
"Minimum": null,
"Description": "Zone air temperature",
"Unit": "K",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaPAtm_y": {
"Minimum": null,
"Description": "Atmospheric pressure measurement",
"Unit": "Pa",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaTBlaSky_y": {
"Minimum": null,
"Description": "Black-body sky temperature measurement",
"Unit": "K",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaNTot_y": {
"Minimum": null,
"Description": "Sky cover measurement",
"Unit": "1",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaSolAlt_y": {
"Minimum": null,
"Description": "Solar altitude angle measurement",
"Unit": "rad",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaWinDir_y": {
"Minimum": null,
"Description": "Wind direction measurement",
"Unit": "rad",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaTWetBul_y": {
"Minimum": null,
"Description": "Wet bulb temperature measurement",
"Unit": "K",
"Maximum": null,
"tags": null
},
"fcu_reaPFan_y": {
"Minimum": null,
"Description": "Supply fan electrical power consumption",
"Unit": "W",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaHHorIR_y": {
"Minimum": null,
"Description": "Horizontal infrared irradiation measurement",
"Unit": "W/m2",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaHDirNor_y": {
"Minimum": null,
"Description": "Direct normal radiation measurement",
"Unit": "W/m2",
"Maximum": null,
"tags": null
},
"zon_weaSta_reaWeaTDewPoi_y": {
"Minimum": null,
"Description": "Dew point temperature measurement",
"Unit": "K",
"Maximum": null,
"tags": null
},
"con_reaTSetHea_y": {
"Minimum": null,
"Description": "Zone air temperature setpoint for heating",
"Unit": "K",
"Maximum": null,
"tags": null
}
}
Loading