TL;DR: DefaultScheduleSet will never accept any schedule with a "Temperature" unit type (which is what the default Temperature
ScheduleTypeLimits has).
Explanation: Enforcing of ScheduleTypeLimits in OpenStudio
OpenStudio enforces correspondence of the ScheduleTypeLimits
when you try to set schedules.
- If you try to assign a Schedule that does not have a
ScheduleTypeLimits
, it'll create and assign one for you (it'll always work) - If you try to assign a Schedule that has a
ScheduleTypeLimits
, it will check whether it's compatible, that is check the lower/upper limits and the Unit Type (it doesn't care whether it's continuous or discrete).
You can see the expected schedule type limits for the DefaultScheduleSet
here in ScheduleTypeRegistry.cpp:
// className, scheduleDisplayName, scheduleRelationshipName, isContinuous, unitType, lowerLimitValue, upperLimitValue;
{"DefaultScheduleSet","Hours of Operation","hoursofOperationSchedule",false,"Availability",0.0,1.0},
{"DefaultScheduleSet","Number of People","numberofPeopleSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","People Activity Level","peopleActivityLevelSchedule",true,"ActivityLevel",0.0,OptionalDouble()},
{"DefaultScheduleSet","Lighting","lightingSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Electric Equipment","electricEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Gas Equipment","gasEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Hot Water Equipment","hotWaterEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Infiltration","infiltrationSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Steam Equipment","steamEquipmentSchedule",true,"",0.0,1.0},
{"DefaultScheduleSet","Other Equipment","otherEquipmentSchedule",true,"",OptionalDouble(),OptionalDouble()},
So indeeed, none have a unitType == "Temperature"
Optional reading
Source code
If you're curious:
Demo using Ruby bindings
And if you need more proof, here's a demo using the ruby bindings:
I get a model, and retrieve a Temperature schedule.
[13] model(main)> sch = m.getScheduleRulesetByName("Medium Office Heating Setpoint Schedule").get
=> #<OpenStudio::Model::ScheduleRuleset:0x000055a9f1cf8398 @__swigtype__="_p_openstudio__model__ScheduleRuleset">
[9] model(main)> puts sch
OS:Schedule:Ruleset,
{fb99be89-78c9-4473-a724-c19078c7a311}, !- Handle
Medium Office Heating Setpoint Schedule, !- Name
{4d58c6f5-7a17-476e-8c71-4472d4190115}, !- Schedule Type Limits Name
{4201662b-b6bd-4cbb-98ec-b7e57b8406e0}, !- Default Day Schedule Name
, !- Summer Design Day Schedule Name
{8e5f2044-0cc5-4ff0-aeb6-0cbef560f87b}; !- Winter Design Day Schedule Name
=> nil
[14] model(main)> puts sch.scheduleTypeLimits.get
OS:ScheduleTypeLimits,
{4d58c6f5-7a17-476e-8c71-4472d4190115}, !- Handle
Temperature, !- Name
-60, !- Lower Limit Value
200, !- Upper Limit Value
CONTINUOUS, !- Numeric Type
Temperature; !- Unit Type
Now I create a DefaultScheduleSet and tries to assign this schedule to every slot in it:
[15] model(main)> d = DefaultScheduleSet.new(m)
Note: to get the list of methods d.methods.grep(/^set.*Schedule/i).each {|m| puts "d.#{m.to_s}(sch)"}
[16] model(main)> d.setHoursofOperationSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Hours of Operation=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[17] model(main)> d.setNumberofPeopleSchedule(sch)
[openstudio.model.ModelObject] <0> For Object of type 'OS:DefaultScheduleSet' and named 'Default Schedule Set 1' cannot set Schedule Number of People=Medium Office Heating Setpoint Schedule because it has an incompatible ScheduleTypeLimits
=> false
[18] model(main)> d.setPeopleActivityLevelSchedule(sch)
[openstudio.model.ModelObject ...
(more)
Can you be specific please? It's likely a ScheduleTypeLimits mismatch. Please include enough information to reproduce. For eg, tell us which schedule (include the OSM snippet of the OS:Schedulexxx from the library and its OS:ScheduleTypeLimits if it's not from the default libraries, the name of the schedule otherwise) and where you're trying to drag it to (which position in the ScheduleSet)
Hello Sorry for the lack of information, what im trying to ask is, im trying to add heating/cooling thermostat schedules. I have added them in my thermal zones and in my schedules but im not sure where i have to add them in the schedule sets, when i drag a component from my ruleset schedules (Eg. Medium Office HtgSetp) it won't drag into the schedule sets place, is this because i have missed something out or is it because it is in an incorrect place? Thanks for your help
I have already answered below. Thermostat schedules don't belong in the DefaultScheduleSet, they are directly assigned to the zones. Also note that DefaultScheduleSet is just something helpful to try to assign schedules automatically without you having to hard-assign them to every component. make sure you read this page and understand the concept of inheritance: https://nrel.github.io/OpenStudio-use...