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

Add unmet water heater loads EMS program #1502

Draft
wants to merge 127 commits into
base: master
Choose a base branch
from
Draft

Conversation

jmaguire1
Copy link
Collaborator

@jmaguire1 jmaguire1 commented Oct 4, 2023

Pull Request Description

Add an EMS program for calculating unmet water heating loads. Focus is on unmet showers, but we can also calculate this for each end use if we wanted to. Addresses #1170.

Checklist

PR Author: Check these when they're done. Not all may apply. strikethrough and check any that do not apply.

PR Reviewer: Verify each has been completed.

  • Schematron validator (EPvalidator.xml) has been updated
  • Sample files have been added/updated (via tasks.rb)
  • Tests have been added/updated (e.g., HPXMLtoOpenStudio/tests and/or workflow/tests/hpxml_translator_test.rb)
  • Documentation has been updated
  • Changelog has been updated
  • openstudio tasks.rb update_measures has been run
  • No unexpected changes to simulation results of sample files

@jmaguire1 jmaguire1 changed the title Add unmet loads EMS program Add unmet water heater loads EMS program Oct 13, 2023
@shorowit shorowit mentioned this pull request Oct 17, 2023
13 tasks
@jmaguire1
Copy link
Collaborator Author

Right now, this method calculates:

  • Unmet shower energy (mcpdelta T when T_delivered < 105 F)
  • Unmet shower time
  • Total shower time

Unmet shower energy I feel is the most complete metric, since it accounts for how far off from the desired temperature you are. However, no one really has a sense for if say 2 kWh of unmet showers is too many, so this way you can calculate the % of shower time where loads are unmet.

We could also add metrics related to ALL hot water usage, or all fixtures. We'd want to account for the different desired delivered temperature for appliances, but it wouldn't be hard to add metrics like Unmet Energy for all fixtures.

@jmaguire1 jmaguire1 mentioned this pull request Nov 1, 2023
7 tasks
Copy link
Contributor

@shorowit shorowit left a comment

Choose a reason for hiding this comment

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

Some comments while I think of it. Addressing these comments will make it easier to pull in the master branch.

HPXMLtoOpenStudio/measure.rb Outdated Show resolved Hide resolved
HPXMLtoOpenStudio/resources/hotwater_appliances.rb Outdated Show resolved Hide resolved
@jmaguire1
Copy link
Collaborator Author

@shorowit: I just did a major refactor of this, no more duplicate code. Thanks for the suggestions. It'd be good to know if you think this is a decent way to organize things at a minimum if/when you have a chance to take a look, we're looking to use this with the 120 V HPWH relatively soon.

@shorowit shorowit added the enhancement New feature or request label Jan 13, 2024
@shorowit shorowit modified the milestones: 1.9.0, 1.10.0 Nov 14, 2024
@jmaguire1
Copy link
Collaborator Author

@shorowit: Are there any additional changes that need to be made here? I know this didn't make release, but I think this is largely ready to go? Or are there more changes required before we look at merging this in?

Copy link
Contributor

@shorowit shorowit left a comment

Choose a reason for hiding this comment

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

This is looking good to me. I'm going to address a couple comments I'm leaving below, but it should probably be good to merge after that.

Unmet Hours: Cooling (hr) Number of hours where the cooling setpoint is not maintained.
Unmet Hours: Showers (hr) Number of hours where the shower water temperature is less than 105 deg-F. [#]_
Copy link
Contributor

Choose a reason for hiding this comment

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

I discussed with @jmaguire1; this should really say water heater tank outlet temperature, not shower water temperature. I will change this.

key_name: tank.name
)

program.addLine("If (#{shower_flow_sensor.name} > 0) && (#{wh_temp_sensor.name} < #{mixed_setpoint_sensor.name})")
Copy link
Contributor

Choose a reason for hiding this comment

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

After discussing with @jmaguire1... Since we no longer calculate an unmet load, we now only care whether there is a shower for the given timestep. To prevent confusion about how the shower schedule is used (and prevent the need for error-checking if the shower schedule does not correctly jive with the overall fixtures schedule), I'm going to change the shower schedule to be a 0/1 schedule that simply represents the presence of a shower rather than the shower usage.

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm second-guessing this. If the detailed schedule is hourly, you'd like to use a fraction for how much of the hour there were showers. Also related: #1890

Copy link
Contributor

Choose a reason for hiding this comment

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

I also wonder if the ShowerUnmetTime and ShowerTime variables below should be multiplied by the schedule value, where the schedule value represents how much of the timestep is for showers (stochastic) or the likelihood of showers for a given timestep (non-stochastic).

@shorowit
Copy link
Contributor

Need to compare outputs for:

  • Hourly. stochastic schedule
  • Sub-hourly. stochastic schedule
  • Hourly. non-stochastic schedule
  • Sub-hourly. non-stochastic schedule

The first two are currently giving very different answers (in hours), I think because of #1890.

.. [#] Unmet heating/cooling hours reflect the number of hours during the heating/cooling season when the conditioned space temperature deviates more than 0.2 deg-C (0.36 deg-F) from the heating/cooling setpoint.

.. [#] Unmet showers hours only account for a storage water heater running out of water and occupant discomfort; they do not account for temperature drop due to a distribution system or a tankless water heater's minimum firing rate.
Using simple hourly schedules (rather than detailed/stochastic sub-hourly schedules) may under-represent these values.
Copy link
Contributor

Choose a reason for hiding this comment

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

Need to review this once the results are making sense.

…o unmet_wh_loads

# Conflicts:
#	BuildResidentialScheduleFile/measure.xml
#	HPXMLtoOpenStudio/measure.xml
#	ReportSimulationOutput/measure.xml
@shorowit shorowit changed the base branch from master to schedule_file_interpolation December 13, 2024 22:07
…/OpenStudio-HPXML into unmet_wh_loads

# Conflicts:
#	HPXMLtoOpenStudio/measure.xml
#	workflow/tests/base_results/results_simulations_misc.csv
@shorowit
Copy link
Contributor

Note: I pulled #1896 into here and changed the base branch.

Base automatically changed from schedule_file_interpolation to master December 20, 2024 01:15
rajeee and others added 5 commits December 31, 2024 11:06
…o unmet_wh_loads

# Conflicts:
#	BuildResidentialScheduleFile/measure.xml
#	HPXMLtoOpenStudio/measure.xml
#	tasks.rb
#	workflow/tests/base_results/results_simulations_misc.csv
@shorowit shorowit marked this pull request as draft January 10, 2025 02:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request priority low
Projects
Status: In progress
Development

Successfully merging this pull request may close these issues.

4 participants