Customized bldgProgram & zoneProgram lists

Hi folks,

I’m working my way through adding some custom building and zone programs beyond the options provided in Honeybee. I’ve done so with reasonable success, I’m just encountering one last issue I’d like to ask for help with.

I’ve edited the Honeybee_honeybee and Honeybee_ListZonePrograms components as well as the OpenStudio_Standards.json, and OpenStudioMasterTemplate.idf

All seems to be going well until I use theRunEnergySimulation to write the .idf file. I get the following error message:

  1. Solution exception:‘EPZone’ object has no attribute ‘isSchedulesAssigned’

I find isSchedulesAssigned in Honeybee_Honeybee after the schedules are assigned via calling the corresponding variables from the .JSON file (around line 5000). My .JSON file doesn’t seem to have any errors, so I’m curious as to what’s happening. Any ideas on how I could fix this?

Many thanks,

@schoenfeld.mbeth ,

Honeybee Legacy does not support the creation of custom building program objects and the route you are using to add them here is prone to errors like the one you are experiencing. While we might be able to figure out what is wrong with your specific case, it is likely going to be difficult to ensure that it works into the future. The best I can offer for honeybee legacy is to add your custom schedules to the userCustomLibrary.idf file in the ladybug default folder and just assign those schedules and loads to Honeybee zones with the two components that do so. We will have much more robust workflows for creating custom building programs with Honeybee[+] and, if you do the work now of assembling the schedules and loads that you want for different programs into the userCustomLibrary.idf, it will be possible to convert them to a much more maintainable format when we have the building programs objects in Honeybee[+] fully developed.

Hi Chris,

Thanks for the advice, it works decently well. It would be much nicer to be able to customize the program list, but for now I entered the info in panels, and then assign it using the setEPZoneLoads etc. components. If anyone else is thinking about doing this, you can clean up the code by just clustering that part of your program.


I have just created a quick component for creating the custom space types.
Download the component if anyone needed.
CustomSpaceTypes.ghuser (5.3 KB)(20190801 updates)

1 Like

Great! It is an amazing component.

wow…what a great component! game changer! hope this becomes a standard component so everyone can utilize it!

Hi @josh.greenfield, thanks.
In case you are doing the full energy modeling, here is an example for creating all space types for both proposed and baseline. (484.4 KB)

1 Like

so one thing I just noticed…the ‘Honeybee_SetLoadsAndSchedules’ component does not like the custom input from this new component…is this to be expected given the coding of this component only looking at a default zoneProgram Honeybee library or is there a workaround you can think of? as I feed the custom zonePrograms into the getEPLoads and getEPSchedules components later in the script (which works great), that’s all good…so really the only need for using this input is to have the zone correct in the display attributes component and the separate by programs componenet, but it would still be nice to have.

@josh.greenfield I don’t really use this component to CHANGE the space type, instead I ASSIGN new space types when creating zones at the first place.

Full Energy Modeling (671.1 KB)

This has a several benefits: faster, less RAM, and easier to QC and reporting.
Every time we CHANGE properties like loads, schedules at zone level, Grasshopper creates a copy of old zone, which consumes additional RAM, and slow down the entire workflow for a bigger project.
If we ASSIGN the new space type at begin, then we only have one copy of zone, and don’t have to change any load or schedules.

But in case you still want to keep your current workflow, you can just remove all code between line 87 to 109 in “Honeybee_Set Loads And Schedules”. Because this component is checking the different building program library.