Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data model review and suggestions #6

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
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
18 changes: 16 additions & 2 deletions schema/ASHRAE205.schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,25 @@ RepresentationSpecificationTemplate:
description:
Required: False

HeatSourceBase:
HeatSourceTemplate:
Object Type: "Data Group Template"
Required Data Elements:
metadata:
Required: True
performance:
Required: True
description:
Required: False

HeatingLogicBase:
HeatingLogicTemplate:
Object Type: "Data Group Template"
Required Data Elements:
metadata:
Required: True
performance:
Required: True
description:
Required: False

# Common Enumerations

Expand Down
9 changes: 9 additions & 0 deletions schema/HPWHsimInput.schema.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Schema:
Object Type: "Meta"
References:
- "RSINTEGRATEDWATERHEATER"
# - "RSTANK" # TODO: Add for central water heaters
# - "RSAIRTOWATERHEATPUMP" # TODO: Add for central water heaters
Title: "HPWHsim Input"
Description: "Input required to describe a heat pump water heating system in HPWHsim"
Version: "0.1.0"
48 changes: 36 additions & 12 deletions schema/RSCONDENSERWATERHEATSOURCE.schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Schema:

RSCONDENSERWATERHEATSOURCE:
Object Type: "Data Group"
Data Group Template: HeatSourceBase
Data Group Template: HeatSourceTemplate
Data Elements:
metadata:
Description: "Metadata data group"
Expand Down Expand Up @@ -59,47 +59,71 @@ Performance:
Description: "Coil configuration"
Data Type: "{CoilConfiguration}"
Required: True
use_defrost_map:
maximum_refrigerant_temperature: # Was maximum_setpoint in HeatSourceConfiguration
Description: "Maximum temperature of the refrigerant entering the condenser"
Data Type: Numeric
Units: "K"
maximum_temperature: # Was maximum_temperature in HeatSourceConfiguration. # TODO: Remove and use performance map maximum grid temperature
Description: "Maximum external temperature"
Data Type: Numeric
Units: "K"
Required: False
minimum_temperature: # Was minimum_temperature in HeatSourceConfiguration. # TODO: Remove and use performance map minimum grid temperature
Description: "Minimum external temperature"
Data Type: Numeric
Units: "K"
Required: False
compressor_lockout_temperature_hysteresis: # Was hysteresis_temperature_difference in HeatSourceConfiguration
Description: "Hysteresis for compressor lockout"
Data Type: Numeric
Units: "K"
Required: False
Notes:
- "Compressor locks out when the evaporator environment temperature drops this much below the minimum operating temperature, and unlocks when the temperature rises this much above the minimum operating temperature"
- "Compressor locks out when the evaporator environment temperature rises this much above the maximum operating temperature, and unlocks when the temperature drops this much below the maximum operating temperature"
Comment on lines +62 to +83
Copy link
Member Author

Choose a reason for hiding this comment

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

Priority 1.

use_defrost_map: # TODO: Remove and add defrost de-rating into performance map
Copy link
Member Author

Choose a reason for hiding this comment

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

Can be done after discussions with standards committee.

Description: "Use defrost map"
Data Type: Boolean
Required: False

PerformanceMap:
Object Type: "Data Group"
Data Elements:
grid_variables:
Description: "Collection of values affecting performance."
Description: "Data group defining the grid variables for heating performance"
Data Type: "{GridVariables}"
Required: True
lookup_variables:
Description: "Collection of performance metrics."
Description: "Data group defining the lookup variables for heating performance"
Data Type: "{LookupVariables}"
Required: True

GridVariables:
Object Type: "Data Group"
Data Elements:
evaporator_environment_temperature:
Description: "Evaporator environment temperatures (Nevap values)"
evaporator_environment_dry_bulb_temperature:
Description: "Dry bulb temperature of the air entering the evaporator coil"
Data Type: "[Numeric]"
Units: "K"
Required: True
heat_source_temperature:
Description: "Temperature of heat sources (Nsrc values)"
Description: "Average water temperature at the heat source"
Data Type: "[Numeric]"
Units: "K"
Required: True
Notes:
- "Water temperature may be vertically stratified across the heat source"
- "The average water temperature may be weighted according to how heat is distributed to the water from the heat source"

LookupVariables:
Object Type: "Data Group"
Data Elements:
input_power:
Description: "Input power (Nevap x Nsrc values)"
Description: "Power draw from the compressor, evaporator fan, and any auxiliary power used by the units controls"
Data Type: "[Numeric]"
Units: "W"
Required: True
cop:
Description: "Coefficient of performance (Nevap x Nsrc values)"
heating_capacity:
Copy link
Member Author

Choose a reason for hiding this comment

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

Priority one (convert COP to capacity)

Description: "Total heat added by the condenser to the adjacent water"
Data Type: "[Numeric]"
Units: "-"
Required: True
Expand All @@ -113,6 +137,6 @@ CoilConfiguration:
WRAPPED:
Description: "Coil is wrapped around the tank interior"
Display Text: "Wrapped"
EXTERNAL:
EXTERNAL: # TODO: Remove after we have the air-to-water heat pump RS
Copy link
Member Author

Choose a reason for hiding this comment

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

Lower priority (along with air to water heat pump)

Description: "Coil is external to the tank"
Display Text: "External"
141 changes: 55 additions & 86 deletions schema/RSINTEGRATEDWATERHEATER.schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,6 @@ RSINTEGRATEDWATERHEATER:
Description: "Data group containing performance information"
Data Type: "{Performance}"
Required: True
standby_power:
Description: "Power drawn when system is in standby mode"
Data Type: "Numeric"
Constrains: "> 0"

Description:
Object Type: "Data Group"
Expand Down Expand Up @@ -78,6 +74,10 @@ HeatSourceType:
HeatSourceConfiguration:
Object Type: "Data Group"
Data Elements:
id:
Description: "Identifier for reference"
Data Type: "String"
Required: True
heat_source_type:
Description: "Type of heat source"
Data Type: "{HeatSourceType}"
Expand All @@ -88,94 +88,64 @@ HeatSourceConfiguration:
Data Type: "({RSRESISTANCEWATERHEATSOURCE},{RSCONDENSERWATERHEATSOURCE})"
Constraints: "heat_source_type(RESISTANCE, CONDENSER)"
Required: True
label:
Description: "Identifier for reference"
Data Type: "String"
Required: True
heat_distribution:
Description: "Weighted distribution of heat by division, in order"
Data Type: "[Numeric]"
Description: "Weighted distribution of heat from the heat source along the height of the tank"
Data Type: "{WeightedDistribution}"
Copy link
Member Author

Choose a reason for hiding this comment

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

Lower priority. Needs more design/discussion?

Required: True
turn_on_logic:
Description: ""
Description: "An array of logic conditions that define when the heat source turns on if it is currently off"
Data Type: "[{HeatingLogic}]"
Required: True
shut_off_logic:
Description: ""
Description: "An array of logic conditions that define when the heat source shuts off if it is currently on"
Data Type: "[{HeatingLogic}]"
Required: False
standby_logic:
standby_logic: # TODO: Is this needed?
Copy link
Member Author

Choose a reason for hiding this comment

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

Lower priority. Needs to be researched to understand what it is intended to represent.

Copy link
Contributor

Choose a reason for hiding this comment

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

If turn-on condition true, and standbyLogic exists, defers to standbyLogic to engage. If turn-on condition true, and no standbyLogic exists, engages, equivalent to top-node turn-on logic (perviously undefined). However, no IHPWH models have defined standbyLogic; this feature is only used by Sanco models. Other instances may have been coding remnants and are now replaced.

Copy link
Member Author

Choose a reason for hiding this comment

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

Might be worth asking Ben if this is something that we need to keep moving forward, or if there is a simpler way to get the same outcome.

Description: "Checks that bottom is below a temperature to prevent short cycling"
Data Type: "{HeatingLogic}"
Required: False
maximum_setpoint:
Description: "Maximum setpoint temperature"
Data Type: Numeric
Units: "K"
Required: False
maximum_temperature:
Description: "Maximum external temperature"
Data Type: Numeric
Units: "K"
Required: False
minimum_temperature:
Description: "Minimum external temperature"
Data Type: Numeric
Units: "K"
Required: False
hysteresis_temperature_difference:
Description: "Hysteresis temperature difference for activation"
Data Type: Numeric
Units: "K"
Required: False
is_vip:
is_vip: # TODO: We need to come up with a better name. Since there can only be one "VIP", we should maybe just reference it at the Performance data group
Copy link
Member Author

Choose a reason for hiding this comment

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

Priority 1.

Description: "Turns on independently of other heat sources"
Data Type: Boolean
Required: False
depresses_temperature:
depresses_temperature: # TODO: Move to HPWHsimInput schema
Description: "Depresses space temperature when activated"
Data Type: Boolean
Required: False
backup_heat_source_label:
Description: "Identifier of backup heat source"
Data Type: "String"
Required: False
followed_by_heat_source_label:
Description: "Identifier of heat source that follows"
Data Type: "String"
Required: False
companion_heat_source_label:
Description: "Identifier of companion heat source"
Data Type: "String"
Required: False
backup_heat_source:
Description: "Reference to the `HeatSourceConfiguration` that engages if this one cannot meet the setpoint"
Data Type: "String" # TODO: Make an actual reference type (need to use 232 compliant Lattice)
followed_by_heat_source:
Description: "Reference to the `HeatSourceConfiguration` that should always engage after this one"
Data Type: "String" # TODO: Make an actual reference type (need to use 232 compliant Lattice)
companion_heat_source:
Description: "Reference to the `HeatSourceConfiguration` that should always engage concurrently with this one"
Data Type: "String" # TODO: Make an actual reference type (need to use 232 compliant Lattice)

HeatSourceCoilConfiguration:
Object Type: "Enumeration"
Enumerators:
SUBMERGED:
Description: "Heat sources with submerged coil configuration"
Display Text: "Submerged"
Notes: ""
WRAPPED:
Description: "Heat sources with wrapped coil configuration"
Display Text: "Wrapped"
Notes: ""
EXTERNAL:
Description: "Heat sources with external coil configuration"
Display Text: "External"
Notes: ""
WeightedDistribution:
Object Type: "Data Group"
Data Elements:
normalized_height:
Description: "Normalized heights within the tank where the weight is defined between the bottom (0.0), and the top (1.0)"
Data Type: "[Numeric]"
Units: "-"
Constraints:
- ">= 0.0"
- "<= 1.0"
Required: True
weight:
Description: "Fraction of weight at the corresponding normalized height"
Data Type: "[Numeric]"
Units: "-"
Constraints:
- ">= 0.0"
- "<= 1.0"
Required: True
Comment on lines +122 to +140
Copy link
Member Author

Choose a reason for hiding this comment

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

Lower priority.


HeatingLogicType:
Object Type: "Enumeration"
Enumerators:
SOC_BASED:
STATE_OF_CHARGE_BASED:
Description: "State-of-charge based"
Display Text: "SoC based"
Notes: ""
TEMP_BASED:
TEMPERATURE_BASED:
Description: "Temperature based"
Display Text: "Temp based"
Notes: ""

HeatingLogic:
Object Type: "Data Group"
Expand All @@ -187,8 +157,8 @@ HeatingLogic:
Notes: "Determines which heating-logic data group is used for `heating_logic`"
heating_logic:
Description: "Specific heating logic"
Data Type: "({SoCBasedHeatingLogic},{TempBasedHeatingLogic})"
Constraints: "heating_logic_type(SOC_BASED, TEMP_BASED)"
Data Type: "({StateOfChargeBasedHeatingLogic},{TemperatureBasedHeatingLogic})"
Constraints: "heating_logic_type(STATE_OF_CHARGE_BASED, TEMPERATURE_BASED)"
Required: True
comparison_type:
Description: "Result of comparison for activation"
Expand All @@ -205,30 +175,30 @@ ComparisonType:
Description: "Decision value is less than reference value"
Display Text: "Less than"

TempBasedHeatingLogic:
TemperatureBasedHeatingLogic:
Object Type: "Data Group"
Data Group Template: HeatingLogicBase
Data Group Template: HeatingLogicTemplate
Data Elements:
absolute_temperature:
Constraints: ">=0.0"
Data Type: Numeric
Description: "Absolute temperature for activation"
Data Type: Numeric
Units: "K"
Constraints: ">=0.0"
Required: "if !differential_temperature"
differential_temperature:
Description: "Temperature difference for activation"
Constraints: ">=0.0"
Data Type: Numeric
Units: "K"
Constraints: ">=0.0"
Required: "if !absolute_temperature"
logic_distribution:
temperature_weight_distribution:
Description: "Weighted distribution for comparison, by division, in order"
Data Type: "[Numeric]"
Data Type: "{WeightedDistribution}"
Required: True

SoCBasedHeatingLogic:
StateOfChargeBasedHeatingLogic: # This probably needs some re-design to make it meaningful to a manufacturer
Copy link
Member Author

Choose a reason for hiding this comment

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

Re-design is lower priority.

Object Type: "Data Group"
Data Group Template: HeatingLogicBase
Data Group Template: HeatingLogicTemplate
Data Elements:
decision_point:
Description: "Decision point"
Expand All @@ -238,14 +208,13 @@ SoCBasedHeatingLogic:
minimum_useful_temperature:
Description: "Minimum useful temperature"
Data Type: Numeric
Required: False
Notes: "Determines which heating-logic data group is used for `heating_logic`"
hysteresis_fraction:
Description: "Hysteresis fraction"
Data Type: Numeric
Units: "-"
Range: ">= 0, <= 1"
Required: False
Constraints:
- ">= 0.0"
- "<= 1.0"
uses_constant_mains:
Description: "Uses constant mains"
Data Type: Boolean
Expand Down
2 changes: 1 addition & 1 deletion schema/RSRESISTANCEWATERHEATSOURCE.schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Schema:

RSRESISTANCEWATERHEATSOURCE:
Object Type: "Data Group"
Data Group Template: HeatSourceBase
Data Group Template: HeatSourceTemplate
Data Elements:
metadata:
Description: "Metadata data group"
Expand Down
Loading