Well, Things are Things.
As a matter of fact, it’s possible to use knx as “one” hardware, which then is the whole bus. But the idea of Things is, to set up one Thing per Device. Same goes to mqtt, where you could think of the broker as “one” Hardware and only create many channels under one Thing. But in real life the broker is only to communicate with the hardware.
Another point: I have some knx devices, and I have multiple devices which are identical (e.g. 2 pieces of HAGER TYA628A, 4 pieces of HAGER TXA663A and so on). Instead of mixing their Channels to per-room-individual “virtual Devices” I use them as they are.
I have to admit that I reorganized my GA some years ago, so that all Devices are very similar configured, i.e. the GA middle part 0 to 7 is sort of “Type of product”, each Switch is a 4 , each Dimmer is a 5, each rollershutter is a 6, each measurement is a 7… the first part of GA is the room, and as I have less than 16 rooms, I even have a number free for outdoor functions. (in fact I could use from 0 to 31…) and the last part is organized like the CO, so I have a 0 for control, a 2 for status and so on. When I have more than one “Thing” of the same type in one room, I simply add 10 to the last part, so up to 24 (or 25) identical functions per room.
This way, same type of device is mostly identical configured. I’m using common names for the channels, i.e. ch1, ch2, ch3 and so on. But I use individual Names in the Channel Label, so I have “speaking Names” in the Things list in VSCode. It’s straight forward to create Items from this Channels and the Items are grouped per room.
I don’t need a per-room-grouping for Hardware, I even don’t see any benefit, that’s not the way knx nor openHAB is organized.
Sure, I have some GA which don’t fit to the model completely, these aren’t “owned” by a specific device but are central functions like Clock, Outdoor Temperature (which is used in the thermostat units) or knx scenes to control shading or light. These are configured to a virtual knx device.