-
Notifications
You must be signed in to change notification settings - Fork 58
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
Feature/radiant controls zone occupancy #1571
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good; please adjust the test helper method and add tests for this in test_radiant_controls.rb
@@ -250,44 +263,105 @@ def model_add_radiant_proportional_controls(model, zone, radiant_loop, | |||
zone_rad_heat_operation_trend.setName("#{zone_name}_rad_heat_operation_trend") | |||
zone_rad_heat_operation_trend.setNumberOfTimestepsToBeLogged(zone_timestep * 48) | |||
|
|||
# use zone occupancy objects for radiant system control if selected | |||
if use_zone_occupancy_for_control |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I recommend implementing this with EnergyManagementSystemSensor on the Schedule value, like you have for the temperature setpoint schedules.
Use the schedule value to determine the control, rather than IF ((CurrentTime >= #{zone_occ_hr_start_name}) && (CurrentTime <= #{zone_occ_hr_end_name})),
That would mean changing it so if occupancy control isn't defined, and instead you get starting/stopping hours, making a ruleset schedule that has those hours and then following that schedule value for control.
To summarize:
- create an on/off schedule from the zone occupancy schedule
- if not zone control, create the on/off schedule from the provided start/stop times
- track that zone schedule with a schedule_value EMS sensor
- update the logic to check against the sensor value, rather than using
IF ((CurrentTime >= #{zone_occ_hr_start_name}) && (CurrentTime <= #{zone_occ_hr_end_name})),
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Use
thermal_zone_get_occupancy_schedule(zone, sch_name, occupied_percentage_threshold)
to make an on/off schedule - name it
"#{zone.name} Radiant System Control Schedule"
- add
occupied_percentage_threshold
argument to radiant controls method, and pass intothermal_zone_get_occupancy_schedule
- use the schedule value to control the system
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Example to create new ScheduleRuleset
econ_max_100_pct_oa_sch = OpenStudio::Model::ScheduleRuleset.new(model)
econ_max_100_pct_oa_sch.setName('Economizer Max OA Fraction 100 pct')
econ_max_100_pct_oa_sch.defaultDaySchedule.setName('Economizer Max OA Fraction 100 pct Default')
econ_max_100_pct_oa_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 1.0)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
also use ems_friend_name method
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I made a few changes (so pull again) and proposed a different method that is more closely tied to the zone occupancy schedule - and allows much more schedule variation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work! I added a test for the whole building schedule option to the tests.
Adds support for using specific zone occupancy schedules for radiant control. #1539