Element.Room node not working properly

I am attempting to make a graph that takes all rooms located within a project and determines the elements located within. It then gets the parameter values of one category of elements and assigns the values to a parameter located in another category. More simply put, it should find the ceiling elevation and move all air terminals to that elevation. Simple enough right? I think not.

If you look at the attached image, you will see two initial paths. The upper path defines the ceilings located in rooms and the lower path defines the air terminals located in rooms. It then creates a list of each. I then useList.groupbykey to associated each element with it’s room. From there it’s simply getting and setting values.

The big problem is circled. For some reason the upper path does not work. It shows “null” instead of “room” like the lower path. The set-up is exactly the same. For my test, I have my rooms set to 0" bottom elevation and 20’ top elevation. My diffusers and ceilings are all well within that range. Also, why does the lower path create a “list of lists” while the upper path creates just a normal “list” (a normal list is the prefered outcome). Any help would be greatly appriciated.

Hi @micphillips

Another possible way is to use Room.Boundaries custom node from clockwork package. Make sure you enable volume in your room calculations.

What @kulkul said is the best solution. The ceilings will be hard to use the Rhythm method because they are not in the rooms. The Rhythm version mostly works on familyinstances.

@micphillips This is how you get Ceilings in Rooms.


The ceilings are located within the rooms. I made the rooms 20’ tall, and my highest ceiling is only 10’.

Thank you for the graph example Kulkul. When I do the same graph for both ceilings and air terminals, I get an empty list for air terminals. I have 4 various ceiling heights and 4 various air terminal heights.

Yes, what I actually meant is system families (Ceilings) don’t have the method in the APIof “Item.Room”. This is meant for families like your diffusers. Loadable families.

I am actually updating this node to clear up the confusion. (It also will work on links now, coming soon to Rhythm)

@micphillips I thought you where looking for Ceilings. Have you tried archi-lab package node “ElementsInRoom” node? That would return you air terminals in room.

@Kulkul I have tried using the Elements.Room node. I’m not sure what the difference is. Once I get some more free time I’ll give it a try and let you know.

I am trying to find rooms, ceilings, and air terminals. The premise of the program is to find ceilings AND air terminals located within each room. It then pull the Height of the ceiling and sets the elevation of the corresponding diffuser to the same height. In theory, this should move all diffusers in the project up to the ceiling located above them. We often run into the issue of architects modifying ceiling heights and not telling the engineers.

I think we might be getting a bit above my head. lol. I’m very very new to Dynamo and python alike. Avid Revit user, but new to programming. I’m not sure what an API is, even though I see it often. That being said, the final outcome of my program will be ran on a central file with a LINKED architecture file with the rooms located in the architectural file. Does that mean it’s going to be difficult to get the program finalized for that purpose?

Im trying to make the exact script for the same purpose, as an MEP engineer our diffusers and lights are level based and end up being out of synch with archs ceilings. Did you ever get this working? @micphillips

This node is not working for me either…

Did you get a solution for it?

The node “Elements in room” works fine, but I’m looking for a node that allows me to export to my database in excel all the elements of a category and which room it belongs to. I would like to see if I can get FamilyInstances.Room to work as expected.

@pg33891 have a sample file to replicate on? The FamilyInstances.Room node will return null if a room cannot be found in the last phase of the project and they must exist in the same project as the rooms.

This is because of the API method I am using (wanted to reduce inputs):
The method I am using: :point_right: https://apidocs.co/apps/revit/2020/37944e7a-f298-9c25-20bb-9c0c1da46f41.htm

So if your Mechanical Equipment exists on a phase other than what the rooms are, that will be an issue.

1 Like

I have checked the phases before, and they are all set to “existing”, but the node still doesn’t work in this project. I just tried it in another sample project and it worked… so I still don’t know what the problem is :thinking:

Are your Mechanical Equipment elements in the same project as the rooms

Yes, i need them to be in the same project. But it doesn’t work with furniture, plumbing fixtures and specialty equipment as well.

I would definitely need a sample file that it can be reproduced in. What does your phase dialog look like?

If there are any phases after the phase you are working in, the node will fail. That is because it tries to get the room in the last phase of the model.

1 Like

Ah that’s the problem! New construction was after Existing. It works now!
Sorry I didn’t send the sample before… I thought you were telling me to try it with another project.
Thank you so much!!!

1 Like

No worries. Glad you got it worked out. I might go ahead and add another node with a phase input into Rhythm in the future as well. :slight_smile:

1 Like