Energy list in Geometry class is null


So, I exported a Revit model as a .hbjson file using the Revit Pollination plugin. I followed the steps exactly as mentioned in this particular video: Detailed Export of Analytical Model from Pollination Revit Plugin - YouTube. During export, I selected all the rooms and set the construction set to “Global Construction Set” as seen in the image here:

But, after the export, when I checked the geometry part of the .hbjson file, the energy parameters inside the geometry class is null for all the faces (walls, windows, doors).

How should I export the HBJSON file from Revit so that the energy parameters are linked to the geometry of the model?

Hi @ramana,

Thank you for posting your question here. This is because of how the honeybee schema is structured. The Global Construction Set is assigned to the model, not a room. It will be written to HBJSON file only once and at the model level.

The object is called ModelEnergyProperties. You can see the schema here.

If you want to see the construction set for each room, then you have to assign it to the room from the menu that you are showing in the screenshot but that is not necessarily good practice.

The idea is that you assign the global construction set which will be used for all the rooms by default, and then overwrite the ones that are different.

Hope it helps!

Hi @mostapha,

I understand that part. But then, how is specific values assigned to the faces inside the model if the sub-lists/sub-classes of Global Construction Set are not called from the members inside the geometry class? How is the global construction set called inside the “room” class?

For example,
For exterior wall, there is a pre-defined construction definition “Generic Exterior Wall” with materials defined inside it which refers to the material properties in-turn. Now, how does these values get referred by the wall that is created inside the room if it the “Generic Exterior Wall” is not referred inside it?

Good question! I believe @chriswmackey has this documented somewhere in detail but I give it a try.

Honeybee schema has a nested structure for geometries. You can read more about it here but simply put each face is part of a room and each room is part of a model. Faces can have different types.

Now each and every one of these objects has a properties field for energy and radiance. The ones that you are showing above. The logic is that for every child object, you should check this property and if the data is set then use it, if not then check the parent object and go all the way until you get to the model where you can use the Global ConstructionSet.

I hope this clarifies the process. That said, if you use the honeybee and honeybee-energy Python libraries, this logic has been already implemented automatically and you don’t have to deal with the JSON file directly. Can you tell me a bit more about what you are trying to achieve?

1 Like

My teammates and I are working on a project to convert an IFC file to a HBJSON file. We are doing it in Python enviroment using the IFC Open Shell library. Right now, our code can export rectangular geometries. This is how our output HBJSON model looks when we export it from IFC.

Now, we want to assign the energy values from the “Global Construction Set” to this model so that we can perform a mock energy simulation and compare it against the HBJSON model that is generated from Pollination plugin in Revit.

Will the honeybee-energy Python libraries help us here to achieve the same?

1 Like

Nice work!

In that case, all you need is to assign the same Global Construction Set to the HBJSON file that is generated from IFC and the translation from HBJSON → OSM takes care of the rest.

One more thing! Make sure that you check the solve adjacency between the sub-faces before running the comparative study. The Revit plugin doesn’t do a great job of that. You may want to use the Rhino plugin to double-check the adjacencies.

1 Like

A post was split to a new topic: Issues for running the HBJSON generated from an IFC file

@mostapha As you have suggested, I have assigned the Global Construction Set to the HBJSON file that we generate from IFC. I wish to attach the generated HBJSON file here so that you can have a look and tell me if that is what you meant. But the webpage says that new users cannot attached files. Can you please enable the option for me?

That’s by design!

Try again now. I made your profile a basic user.

1 Like

Great! Here is the generated HBJSON file:

Prototype_Simulation_1.hbjson (395.7 KB)

Let me know if this file will work for energy simulation.

@ramana, as I mentioned in the other topic, you should try to use the honeybee model validate command against your model first. If the model is valid and it still fails to run then that’s something for us to check.

I ran the command against your model, and here is the validation error that I get.

AssertionError: Door "Room_1_Face_3_Door_0[Room_1_Face_3_Door_0]" must have Surface boundary condition if the parent Face has a Surface BC.

You can also use the JSON format that gives you a JSON object.

honeybee validate model Prototype_Simulation_1.hbjson --json

    "type": "ValidationReport",
    "honeybee_core": "1.54.19",
    "honeybee_schema": "1.51.7",
    "fatal_error": "Door \"Room_1_Face_3_Door_0[Room_1_Face_3_Door_0]\" must have Surface boundary condition if the parent Face has a Surface BC.",
    "errors": [],
    "valid": false

FYI, @ramana ,

I also recommend reading through the honeybee-schema wiki as it has a bunch of answers to your questions:

For example, here’s the logic for how constructions are assigned to individual Faces:

Also note that global_construction_set is an optional read-only property in honeybee-schema. So whether you include it in the HBJSON or not will have no bearing on the simulation results. However, it’s still good practice to be explicit about what the assumptions are for this global construction set, which is why the core Python libraries and the .NET bindings of Honeybee-schema include this property in the HBJSON by default.

1 Like